diff --git a/test/tint/bug/tint/951.spvasm b/test/tint/bug/tint/951.spvasm
deleted file mode 100644
index e5119f1..0000000
--- a/test/tint/bug/tint/951.spvasm
+++ /dev/null
@@ -1,158 +0,0 @@
-; SPIR-V
-; Version: 1.0
-; Generator: Khronos Glslang Reference Front End; 10
-; Bound: 86
-; Schema: 0
-                         OpCapability Shader
-                    %1 = OpExtInstImport "GLSL.std.450"
-                         OpMemoryModel Logical GLSL450
-                         OpEntryPoint GLCompute %main "main" %gl_GlobalInvocationID
-                         OpExecutionMode %main LocalSize 128 1 1
-                         OpSource GLSL 450
-                         OpName %main "main"
-                         OpName %setOutput_i1_f1_ "setOutput(i1;f1;"
-                         OpName %flatIndex "flatIndex"
-                         OpName %value "value"
-                         OpName %getAAtOutCoords_ "getAAtOutCoords("
-                         OpName %unaryOperation_f1_ "unaryOperation(f1;"
-                         OpName %a "a"
-                         OpName %ssbOut "ssbOut"
-                         OpMemberName %ssbOut 0 "result"
-                         OpName %_ ""
-                         OpName %ssbA "ssbA"
-                         OpMemberName %ssbA 0 "A"
-                         OpName %__0 ""
-                         OpName %gl_GlobalInvocationID "gl_GlobalInvocationID"
-                         OpName %index "index"
-                         OpName %Uniforms "Uniforms"
-                         OpMemberName %Uniforms 0 "NAN"
-                         OpMemberName %Uniforms 1 "aShape"
-                         OpMemberName %Uniforms 2 "outShape"
-                         OpMemberName %Uniforms 3 "outShapeStrides"
-                         OpMemberName %Uniforms 4 "size"
-                         OpName %__1 ""
-                         OpName %a_0 "a"
-                         OpName %param "param"
-                         OpName %param_0 "param"
-                         OpName %param_1 "param"
-                         OpDecorate %_runtimearr_float ArrayStride 4
-                         OpMemberDecorate %ssbOut 0 NonReadable
-                         OpMemberDecorate %ssbOut 0 Offset 0
-                         OpDecorate %ssbOut BufferBlock
-                         OpDecorate %_ DescriptorSet 0
-                         OpDecorate %_ Binding 0
-                         OpDecorate %_runtimearr_float_0 ArrayStride 4
-                         OpMemberDecorate %ssbA 0 NonWritable
-                         OpMemberDecorate %ssbA 0 Offset 0
-                         OpDecorate %ssbA BufferBlock
-                         OpDecorate %__0 DescriptorSet 0
-                         OpDecorate %__0 Binding 1
-                         OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId
-                         OpMemberDecorate %Uniforms 0 Offset 0
-                         OpMemberDecorate %Uniforms 1 Offset 4
-                         OpMemberDecorate %Uniforms 2 Offset 8
-                         OpMemberDecorate %Uniforms 3 Offset 12
-                         OpMemberDecorate %Uniforms 4 Offset 16
-                         OpDecorate %Uniforms Block
-                         OpDecorate %__1 DescriptorSet 0
-                         OpDecorate %__1 Binding 2
-                         OpDecorate %gl_WorkGroupSize BuiltIn WorkgroupSize
-                 %void = OpTypeVoid
-                    %3 = OpTypeFunction %void
-                  %int = OpTypeInt 32 1
-    %_ptr_Function_int = OpTypePointer Function %int
-                %float = OpTypeFloat 32
-  %_ptr_Function_float = OpTypePointer Function %float
-                   %10 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_float
-                   %15 = OpTypeFunction %float
-                   %18 = OpTypeFunction %float %_ptr_Function_float
-    %_runtimearr_float = OpTypeRuntimeArray %float
-               %ssbOut = OpTypeStruct %_runtimearr_float
-  %_ptr_Uniform_ssbOut = OpTypePointer Uniform %ssbOut
-                    %_ = OpVariable %_ptr_Uniform_ssbOut Uniform
-                %int_0 = OpConstant %int 0
-   %_ptr_Uniform_float = OpTypePointer Uniform %float
-  %_runtimearr_float_0 = OpTypeRuntimeArray %float
-                 %ssbA = OpTypeStruct %_runtimearr_float_0
-    %_ptr_Uniform_ssbA = OpTypePointer Uniform %ssbA
-                  %__0 = OpVariable %_ptr_Uniform_ssbA Uniform
-                 %uint = OpTypeInt 32 0
-               %v3uint = OpTypeVector %uint 3
-    %_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%gl_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input
-               %uint_0 = OpConstant %uint 0
-      %_ptr_Input_uint = OpTypePointer Input %uint
-              %float_0 = OpConstant %float 0
-                 %bool = OpTypeBool
-       %float_0x1p_128 = OpConstant %float 0x1p+128
-             %Uniforms = OpTypeStruct %float %int %int %int %int
-%_ptr_Uniform_Uniforms = OpTypePointer Uniform %Uniforms
-                  %__1 = OpVariable %_ptr_Uniform_Uniforms Uniform
-                %int_4 = OpConstant %int 4
-     %_ptr_Uniform_int = OpTypePointer Uniform %int
-             %uint_128 = OpConstant %uint 128
-               %uint_1 = OpConstant %uint 1
-     %gl_WorkGroupSize = OpConstantComposite %v3uint %uint_128 %uint_1 %uint_1
-                 %main = OpFunction %void None %3
-                    %5 = OpLabel
-                %index = OpVariable %_ptr_Function_int Function
-                  %a_0 = OpVariable %_ptr_Function_float Function
-                %param = OpVariable %_ptr_Function_float Function
-              %param_0 = OpVariable %_ptr_Function_int Function
-              %param_1 = OpVariable %_ptr_Function_float Function
-                   %60 = OpAccessChain %_ptr_Input_uint %gl_GlobalInvocationID %uint_0
-                   %61 = OpLoad %uint %60
-                   %62 = OpBitcast %int %61
-                         OpStore %index %62
-                   %63 = OpLoad %int %index
-                   %69 = OpAccessChain %_ptr_Uniform_int %__1 %int_4
-                   %70 = OpLoad %int %69
-                   %71 = OpSLessThan %bool %63 %70
-                         OpSelectionMerge %73 None
-                         OpBranchConditional %71 %72 %73
-                   %72 = OpLabel
-                   %75 = OpFunctionCall %float %getAAtOutCoords_
-                         OpStore %a_0 %75
-                   %77 = OpLoad %float %a_0
-                         OpStore %param %77
-                   %78 = OpFunctionCall %float %unaryOperation_f1_ %param
-                   %80 = OpLoad %int %index
-                         OpStore %param_0 %80
-                         OpStore %param_1 %78
-                   %82 = OpFunctionCall %void %setOutput_i1_f1_ %param_0 %param_1
-                         OpBranch %73
-                   %73 = OpLabel
-                         OpReturn
-                         OpFunctionEnd
-     %setOutput_i1_f1_ = OpFunction %void None %10
-            %flatIndex = OpFunctionParameter %_ptr_Function_int
-                %value = OpFunctionParameter %_ptr_Function_float
-                   %14 = OpLabel
-                   %27 = OpLoad %int %flatIndex
-                   %28 = OpLoad %float %value
-                   %30 = OpAccessChain %_ptr_Uniform_float %_ %int_0 %27
-                         OpStore %30 %28
-                         OpReturn
-                         OpFunctionEnd
-     %getAAtOutCoords_ = OpFunction %float None %15
-                   %17 = OpLabel
-                   %41 = OpAccessChain %_ptr_Input_uint %gl_GlobalInvocationID %uint_0
-                   %42 = OpLoad %uint %41
-                   %43 = OpAccessChain %_ptr_Uniform_float %__0 %int_0 %42
-                   %44 = OpLoad %float %43
-                         OpReturnValue %44
-                         OpFunctionEnd
-   %unaryOperation_f1_ = OpFunction %float None %18
-                    %a = OpFunctionParameter %_ptr_Function_float
-                   %21 = OpLabel
-                   %47 = OpLoad %float %a
-                   %50 = OpFOrdLessThan %bool %47 %float_0
-                         OpSelectionMerge %52 None
-                         OpBranchConditional %50 %51 %52
-                   %51 = OpLabel
-                         OpReturnValue %float_0x1p_128
-                   %52 = OpLabel
-                   %55 = OpLoad %float %a
-                   %56 = OpExtInst %float %1 Log %55
-                         OpReturnValue %56
-                         OpFunctionEnd
diff --git a/test/tint/bug/tint/951.spvasm.expected.dxc.hlsl b/test/tint/bug/tint/951.spvasm.expected.dxc.hlsl
deleted file mode 100644
index bd7f975..0000000
--- a/test/tint/bug/tint/951.spvasm.expected.dxc.hlsl
+++ /dev/null
@@ -1,67 +0,0 @@
-RWByteAddressBuffer x_16 : register(u0, space0);
-ByteAddressBuffer x_20 : register(t1, space0);
-static uint3 gl_GlobalInvocationID = uint3(0u, 0u, 0u);
-cbuffer cbuffer_x_24 : register(b2, space0) {
-  uint4 x_24[2];
-};
-
-float getAAtOutCoords_() {
-  const uint x_42 = gl_GlobalInvocationID.x;
-  const float x_44 = asfloat(x_20.Load((4u * x_42)));
-  return x_44;
-}
-
-float unaryOperation_f1_(inout float a) {
-  const float x_47 = a;
-  if ((x_47 < 0.0f)) {
-    return 0.0f /* inf */;
-  }
-  const float x_55 = a;
-  return log(x_55);
-}
-
-void setOutput_i1_f1_(inout int flatIndex, inout float value) {
-  const int x_27 = flatIndex;
-  const float x_28 = value;
-  x_16.Store((4u * uint(x_27)), asuint(x_28));
-  return;
-}
-
-void main_1() {
-  int index = 0;
-  float a_1 = 0.0f;
-  float param = 0.0f;
-  int param_1 = 0;
-  float param_2 = 0.0f;
-  const uint x_61 = gl_GlobalInvocationID.x;
-  index = asint(x_61);
-  const int x_63 = index;
-  const int x_70 = asint(x_24[1].x);
-  if ((x_63 < x_70)) {
-    const float x_75 = getAAtOutCoords_();
-    a_1 = x_75;
-    const float x_77 = a_1;
-    param = x_77;
-    const float x_78 = unaryOperation_f1_(param);
-    const int x_80 = index;
-    param_1 = x_80;
-    param_2 = x_78;
-    setOutput_i1_f1_(param_1, param_2);
-  }
-  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(128, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.gl_GlobalInvocationID_param);
-  return;
-}
diff --git a/test/tint/bug/tint/951.spvasm.expected.fxc.hlsl b/test/tint/bug/tint/951.spvasm.expected.fxc.hlsl
deleted file mode 100644
index bd7f975..0000000
--- a/test/tint/bug/tint/951.spvasm.expected.fxc.hlsl
+++ /dev/null
@@ -1,67 +0,0 @@
-RWByteAddressBuffer x_16 : register(u0, space0);
-ByteAddressBuffer x_20 : register(t1, space0);
-static uint3 gl_GlobalInvocationID = uint3(0u, 0u, 0u);
-cbuffer cbuffer_x_24 : register(b2, space0) {
-  uint4 x_24[2];
-};
-
-float getAAtOutCoords_() {
-  const uint x_42 = gl_GlobalInvocationID.x;
-  const float x_44 = asfloat(x_20.Load((4u * x_42)));
-  return x_44;
-}
-
-float unaryOperation_f1_(inout float a) {
-  const float x_47 = a;
-  if ((x_47 < 0.0f)) {
-    return 0.0f /* inf */;
-  }
-  const float x_55 = a;
-  return log(x_55);
-}
-
-void setOutput_i1_f1_(inout int flatIndex, inout float value) {
-  const int x_27 = flatIndex;
-  const float x_28 = value;
-  x_16.Store((4u * uint(x_27)), asuint(x_28));
-  return;
-}
-
-void main_1() {
-  int index = 0;
-  float a_1 = 0.0f;
-  float param = 0.0f;
-  int param_1 = 0;
-  float param_2 = 0.0f;
-  const uint x_61 = gl_GlobalInvocationID.x;
-  index = asint(x_61);
-  const int x_63 = index;
-  const int x_70 = asint(x_24[1].x);
-  if ((x_63 < x_70)) {
-    const float x_75 = getAAtOutCoords_();
-    a_1 = x_75;
-    const float x_77 = a_1;
-    param = x_77;
-    const float x_78 = unaryOperation_f1_(param);
-    const int x_80 = index;
-    param_1 = x_80;
-    param_2 = x_78;
-    setOutput_i1_f1_(param_1, param_2);
-  }
-  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(128, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.gl_GlobalInvocationID_param);
-  return;
-}
diff --git a/test/tint/bug/tint/951.spvasm.expected.glsl b/test/tint/bug/tint/951.spvasm.expected.glsl
deleted file mode 100644
index af71d80..0000000
--- a/test/tint/bug/tint/951.spvasm.expected.glsl
+++ /dev/null
@@ -1,82 +0,0 @@
-#version 310 es
-
-struct Uniforms {
-  float NAN;
-  int aShape;
-  int outShape;
-  int outShapeStrides;
-  int size;
-  uint pad;
-  uint pad_1;
-  uint pad_2;
-};
-
-layout(binding = 0, std430) buffer ssbOut_ssbo {
-  float result[];
-} x_16;
-
-layout(binding = 1, std430) buffer ssbA_ssbo {
-  float A[];
-} x_20;
-
-uvec3 tint_symbol = uvec3(0u, 0u, 0u);
-layout(binding = 2, std140) uniform x_24_block_ubo {
-  Uniforms inner;
-} x_24;
-
-float getAAtOutCoords_() {
-  uint x_42 = tint_symbol.x;
-  float x_44 = x_20.A[x_42];
-  return x_44;
-}
-
-float unaryOperation_f1_(inout float a) {
-  float x_47 = a;
-  if ((x_47 < 0.0f)) {
-    return 0.0f /* inf */;
-  }
-  float x_55 = a;
-  return log(x_55);
-}
-
-void setOutput_i1_f1_(inout int flatIndex, inout float value) {
-  int x_27 = flatIndex;
-  float x_28 = value;
-  x_16.result[x_27] = x_28;
-  return;
-}
-
-void main_1() {
-  int index = 0;
-  float a_1 = 0.0f;
-  float param = 0.0f;
-  int param_1 = 0;
-  float param_2 = 0.0f;
-  uint x_61 = tint_symbol.x;
-  index = int(x_61);
-  int x_63 = index;
-  int x_70 = x_24.inner.size;
-  if ((x_63 < x_70)) {
-    float x_75 = getAAtOutCoords_();
-    a_1 = x_75;
-    float x_77 = a_1;
-    param = x_77;
-    float x_78 = unaryOperation_f1_(param);
-    int x_80 = index;
-    param_1 = x_80;
-    param_2 = x_78;
-    setOutput_i1_f1_(param_1, param_2);
-  }
-  return;
-}
-
-void tint_symbol_1(uvec3 tint_symbol_2) {
-  tint_symbol = tint_symbol_2;
-  main_1();
-}
-
-layout(local_size_x = 128, local_size_y = 1, local_size_z = 1) in;
-void main() {
-  tint_symbol_1(gl_GlobalInvocationID);
-  return;
-}
diff --git a/test/tint/bug/tint/951.spvasm.expected.msl b/test/tint/bug/tint/951.spvasm.expected.msl
deleted file mode 100644
index 0e5fdff..0000000
--- a/test/tint/bug/tint/951.spvasm.expected.msl
+++ /dev/null
@@ -1,89 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-template<typename T, size_t N>
-struct tint_array {
-    const constant T& operator[](size_t i) const constant { return elements[i]; }
-    device T& operator[](size_t i) device { return elements[i]; }
-    const device T& operator[](size_t i) const device { return elements[i]; }
-    thread T& operator[](size_t i) thread { return elements[i]; }
-    const thread T& operator[](size_t i) const thread { return elements[i]; }
-    threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
-    const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
-    T elements[N];
-};
-
-struct ssbOut {
-  /* 0x0000 */ tint_array<float, 1> result;
-};
-
-struct ssbA {
-  /* 0x0000 */ tint_array<float, 1> A;
-};
-
-struct Uniforms {
-  /* 0x0000 */ float tint_symbol;
-  /* 0x0004 */ int aShape;
-  /* 0x0008 */ int outShape;
-  /* 0x000c */ int outShapeStrides;
-  /* 0x0010 */ int size;
-};
-
-float getAAtOutCoords_(thread uint3* const tint_symbol_2, const device ssbA* const tint_symbol_3) {
-  uint const x_42 = (*(tint_symbol_2))[0];
-  float const x_44 = (*(tint_symbol_3)).A[x_42];
-  return x_44;
-}
-
-float unaryOperation_f1_(thread float* const a) {
-  float const x_47 = *(a);
-  if ((x_47 < 0.0f)) {
-    return INFINITY;
-  }
-  float const x_55 = *(a);
-  return log(x_55);
-}
-
-void setOutput_i1_f1_(thread int* const flatIndex, thread float* const value, device ssbOut* const tint_symbol_4) {
-  int const x_27 = *(flatIndex);
-  float const x_28 = *(value);
-  (*(tint_symbol_4)).result[x_27] = x_28;
-  return;
-}
-
-void main_1(thread uint3* const tint_symbol_5, const constant Uniforms* const tint_symbol_6, const device ssbA* const tint_symbol_7, device ssbOut* const tint_symbol_8) {
-  int index = 0;
-  float a_1 = 0.0f;
-  float param = 0.0f;
-  int param_1 = 0;
-  float param_2 = 0.0f;
-  uint const x_61 = (*(tint_symbol_5))[0];
-  index = as_type<int>(x_61);
-  int const x_63 = index;
-  int const x_70 = (*(tint_symbol_6)).size;
-  if ((x_63 < x_70)) {
-    float const x_75 = getAAtOutCoords_(tint_symbol_5, tint_symbol_7);
-    a_1 = x_75;
-    float const x_77 = a_1;
-    param = x_77;
-    float const x_78 = unaryOperation_f1_(&(param));
-    int const x_80 = index;
-    param_1 = x_80;
-    param_2 = x_78;
-    setOutput_i1_f1_(&(param_1), &(param_2), tint_symbol_8);
-  }
-  return;
-}
-
-void tint_symbol_1_inner(uint3 gl_GlobalInvocationID_param, thread uint3* const tint_symbol_9, const constant Uniforms* const tint_symbol_10, const device ssbA* const tint_symbol_11, device ssbOut* const tint_symbol_12) {
-  *(tint_symbol_9) = gl_GlobalInvocationID_param;
-  main_1(tint_symbol_9, tint_symbol_10, tint_symbol_11, tint_symbol_12);
-}
-
-kernel void tint_symbol_1(const constant Uniforms* tint_symbol_14 [[buffer(0)]], const device ssbA* tint_symbol_15 [[buffer(2)]], device ssbOut* tint_symbol_16 [[buffer(1)]], uint3 gl_GlobalInvocationID_param [[thread_position_in_grid]]) {
-  thread uint3 tint_symbol_13 = 0u;
-  tint_symbol_1_inner(gl_GlobalInvocationID_param, &(tint_symbol_13), tint_symbol_14, tint_symbol_15, tint_symbol_16);
-  return;
-}
-
diff --git a/test/tint/bug/tint/951.spvasm.expected.spvasm b/test/tint/bug/tint/951.spvasm.expected.spvasm
deleted file mode 100644
index bff1dda..0000000
--- a/test/tint/bug/tint/951.spvasm.expected.spvasm
+++ /dev/null
@@ -1,195 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 107
-; Schema: 0
-               OpCapability Shader
-         %56 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %gl_GlobalInvocationID_param_1
-               OpExecutionMode %main LocalSize 128 1 1
-               OpName %gl_GlobalInvocationID_param_1 "gl_GlobalInvocationID_param_1"
-               OpName %ssbOut "ssbOut"
-               OpMemberName %ssbOut 0 "result"
-               OpName %x_16 "x_16"
-               OpName %ssbA "ssbA"
-               OpMemberName %ssbA 0 "A"
-               OpName %x_20 "x_20"
-               OpName %gl_GlobalInvocationID "gl_GlobalInvocationID"
-               OpName %x_24_block "x_24_block"
-               OpMemberName %x_24_block 0 "inner"
-               OpName %Uniforms "Uniforms"
-               OpMemberName %Uniforms 0 "NAN"
-               OpMemberName %Uniforms 1 "aShape"
-               OpMemberName %Uniforms 2 "outShape"
-               OpMemberName %Uniforms 3 "outShapeStrides"
-               OpMemberName %Uniforms 4 "size"
-               OpName %x_24 "x_24"
-               OpName %getAAtOutCoords_ "getAAtOutCoords_"
-               OpName %unaryOperation_f1_ "unaryOperation_f1_"
-               OpName %a "a"
-               OpName %tint_return_flag "tint_return_flag"
-               OpName %tint_return_value "tint_return_value"
-               OpName %setOutput_i1_f1_ "setOutput_i1_f1_"
-               OpName %flatIndex "flatIndex"
-               OpName %value "value"
-               OpName %main_1 "main_1"
-               OpName %index "index"
-               OpName %a_1 "a_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %main_inner "main_inner"
-               OpName %gl_GlobalInvocationID_param "gl_GlobalInvocationID_param"
-               OpName %main "main"
-               OpDecorate %gl_GlobalInvocationID_param_1 BuiltIn GlobalInvocationId
-               OpDecorate %ssbOut Block
-               OpMemberDecorate %ssbOut 0 Offset 0
-               OpDecorate %_runtimearr_float ArrayStride 4
-               OpDecorate %x_16 DescriptorSet 0
-               OpDecorate %x_16 Binding 0
-               OpDecorate %ssbA Block
-               OpMemberDecorate %ssbA 0 Offset 0
-               OpDecorate %x_20 NonWritable
-               OpDecorate %x_20 DescriptorSet 0
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_24_block Block
-               OpMemberDecorate %x_24_block 0 Offset 0
-               OpMemberDecorate %Uniforms 0 Offset 0
-               OpMemberDecorate %Uniforms 1 Offset 4
-               OpMemberDecorate %Uniforms 2 Offset 8
-               OpMemberDecorate %Uniforms 3 Offset 12
-               OpMemberDecorate %Uniforms 4 Offset 16
-               OpDecorate %x_24 NonWritable
-               OpDecorate %x_24 DescriptorSet 0
-               OpDecorate %x_24 Binding 2
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%gl_GlobalInvocationID_param_1 = OpVariable %_ptr_Input_v3uint Input
-      %float = OpTypeFloat 32
-%_runtimearr_float = OpTypeRuntimeArray %float
-     %ssbOut = OpTypeStruct %_runtimearr_float
-%_ptr_StorageBuffer_ssbOut = OpTypePointer StorageBuffer %ssbOut
-       %x_16 = OpVariable %_ptr_StorageBuffer_ssbOut StorageBuffer
-       %ssbA = OpTypeStruct %_runtimearr_float
-%_ptr_StorageBuffer_ssbA = OpTypePointer StorageBuffer %ssbA
-       %x_20 = OpVariable %_ptr_StorageBuffer_ssbA StorageBuffer
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-         %15 = OpConstantNull %v3uint
-%gl_GlobalInvocationID = OpVariable %_ptr_Private_v3uint Private %15
-        %int = OpTypeInt 32 1
-   %Uniforms = OpTypeStruct %float %int %int %int %int
- %x_24_block = OpTypeStruct %Uniforms
-%_ptr_Uniform_x_24_block = OpTypePointer Uniform %x_24_block
-       %x_24 = OpVariable %_ptr_Uniform_x_24_block Uniform
-         %21 = OpTypeFunction %float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
-%_ptr_Function_float = OpTypePointer Function %float
-         %31 = OpTypeFunction %float %_ptr_Function_float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %39 = OpConstantNull %bool
-         %41 = OpConstantNull %float
-       %true = OpConstantTrue %bool
-%float_0x1p_128 = OpConstant %float 0x1p+128
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %58 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_float
-         %70 = OpTypeFunction %void
-         %74 = OpConstantNull %int
-     %uint_4 = OpConstant %uint 4
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-         %98 = OpTypeFunction %void %v3uint
-%getAAtOutCoords_ = OpFunction %float None %21
-         %23 = OpLabel
-         %26 = OpAccessChain %_ptr_Private_uint %gl_GlobalInvocationID %uint_0
-         %27 = OpLoad %uint %26
-         %29 = OpAccessChain %_ptr_StorageBuffer_float %x_20 %uint_0 %27
-         %30 = OpLoad %float %29
-               OpReturnValue %30
-               OpFunctionEnd
-%unaryOperation_f1_ = OpFunction %float None %31
-          %a = OpFunctionParameter %_ptr_Function_float
-         %35 = OpLabel
-%tint_return_flag = OpVariable %_ptr_Function_bool Function %39
-%tint_return_value = OpVariable %_ptr_Function_float Function %41
-         %43 = OpLoad %float %a
-         %44 = OpFOrdLessThan %bool %43 %41
-               OpSelectionMerge %45 None
-               OpBranchConditional %44 %46 %45
-         %46 = OpLabel
-               OpStore %tint_return_flag %true
-               OpStore %tint_return_value %float_0x1p_128
-               OpBranch %45
-         %45 = OpLabel
-         %50 = OpLoad %bool %tint_return_flag
-         %49 = OpLogicalNot %bool %50
-               OpSelectionMerge %51 None
-               OpBranchConditional %49 %52 %51
-         %52 = OpLabel
-         %54 = OpLoad %float %a
-               OpStore %tint_return_flag %true
-         %55 = OpExtInst %float %56 Log %54
-               OpStore %tint_return_value %55
-               OpBranch %51
-         %51 = OpLabel
-         %57 = OpLoad %float %tint_return_value
-               OpReturnValue %57
-               OpFunctionEnd
-%setOutput_i1_f1_ = OpFunction %void None %58
-  %flatIndex = OpFunctionParameter %_ptr_Function_int
-      %value = OpFunctionParameter %_ptr_Function_float
-         %64 = OpLabel
-         %66 = OpLoad %int %flatIndex
-         %68 = OpLoad %float %value
-         %69 = OpAccessChain %_ptr_StorageBuffer_float %x_16 %uint_0 %66
-               OpStore %69 %68
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %70
-         %72 = OpLabel
-      %index = OpVariable %_ptr_Function_int Function %74
-        %a_1 = OpVariable %_ptr_Function_float Function %41
-      %param = OpVariable %_ptr_Function_float Function %41
-    %param_1 = OpVariable %_ptr_Function_int Function %74
-    %param_2 = OpVariable %_ptr_Function_float Function %41
-         %79 = OpAccessChain %_ptr_Private_uint %gl_GlobalInvocationID %uint_0
-         %80 = OpLoad %uint %79
-         %81 = OpBitcast %int %80
-               OpStore %index %81
-         %82 = OpLoad %int %index
-         %85 = OpAccessChain %_ptr_Uniform_int %x_24 %uint_0 %uint_4
-         %86 = OpLoad %int %85
-         %87 = OpSLessThan %bool %82 %86
-               OpSelectionMerge %88 None
-               OpBranchConditional %87 %89 %88
-         %89 = OpLabel
-         %90 = OpFunctionCall %float %getAAtOutCoords_
-               OpStore %a_1 %90
-         %91 = OpLoad %float %a_1
-               OpStore %param %91
-         %92 = OpFunctionCall %float %unaryOperation_f1_ %param
-         %94 = OpLoad %int %index
-               OpStore %param_1 %94
-               OpStore %param_2 %92
-         %95 = OpFunctionCall %void %setOutput_i1_f1_ %param_1 %param_2
-               OpBranch %88
-         %88 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %98
-%gl_GlobalInvocationID_param = OpFunctionParameter %v3uint
-        %101 = OpLabel
-               OpStore %gl_GlobalInvocationID %gl_GlobalInvocationID_param
-        %102 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %70
-        %104 = OpLabel
-        %106 = OpLoad %v3uint %gl_GlobalInvocationID_param_1
-        %105 = OpFunctionCall %void %main_inner %106
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/bug/tint/951.spvasm.expected.wgsl b/test/tint/bug/tint/951.spvasm.expected.wgsl
deleted file mode 100644
index c59626a..0000000
--- a/test/tint/bug/tint/951.spvasm.expected.wgsl
+++ /dev/null
@@ -1,79 +0,0 @@
-type RTArr = array<f32>;
-
-type RTArr_1 = array<f32>;
-
-struct ssbOut {
-  result : RTArr_1,
-}
-
-struct ssbA {
-  A : RTArr_1,
-}
-
-struct Uniforms {
-  NAN : f32,
-  aShape : i32,
-  outShape : i32,
-  outShapeStrides : i32,
-  size : i32,
-}
-
-@group(0) @binding(0) var<storage, read_write> x_16 : ssbOut;
-
-@group(0) @binding(1) var<storage, read> x_20 : ssbA;
-
-var<private> gl_GlobalInvocationID : vec3<u32>;
-
-@group(0) @binding(2) var<uniform> x_24 : Uniforms;
-
-fn getAAtOutCoords_() -> f32 {
-  let x_42 : u32 = gl_GlobalInvocationID.x;
-  let x_44 : f32 = x_20.A[x_42];
-  return x_44;
-}
-
-fn unaryOperation_f1_(a : ptr<function, f32>) -> f32 {
-  let x_47 : f32 = *(a);
-  if ((x_47 < 0.0f)) {
-    return 0x1p+128f;
-  }
-  let x_55 : f32 = *(a);
-  return log(x_55);
-}
-
-fn setOutput_i1_f1_(flatIndex : ptr<function, i32>, value : ptr<function, f32>) {
-  let x_27 : i32 = *(flatIndex);
-  let x_28 : f32 = *(value);
-  x_16.result[x_27] = x_28;
-  return;
-}
-
-fn main_1() {
-  var index : i32;
-  var a_1 : f32;
-  var param : f32;
-  var param_1 : i32;
-  var param_2 : f32;
-  let x_61 : u32 = gl_GlobalInvocationID.x;
-  index = bitcast<i32>(x_61);
-  let x_63 : i32 = index;
-  let x_70 : i32 = x_24.size;
-  if ((x_63 < x_70)) {
-    let x_75 : f32 = getAAtOutCoords_();
-    a_1 = x_75;
-    let x_77 : f32 = a_1;
-    param = x_77;
-    let x_78 : f32 = unaryOperation_f1_(&(param));
-    let x_80 : i32 = index;
-    param_1 = x_80;
-    param_2 = x_78;
-    setOutput_i1_f1_(&(param_1), &(param_2));
-  }
-  return;
-}
-
-@compute @workgroup_size(128i, 1i, 1i)
-fn main(@builtin(global_invocation_id) gl_GlobalInvocationID_param : vec3<u32>) {
-  gl_GlobalInvocationID = gl_GlobalInvocationID_param;
-  main_1();
-}
diff --git a/test/tint/expressions/literals/-inf.spvasm b/test/tint/expressions/literals/-inf.spvasm
deleted file mode 100644
index 2cb1527..0000000
--- a/test/tint/expressions/literals/-inf.spvasm
+++ /dev/null
@@ -1,21 +0,0 @@
-                       OpCapability Shader
-                       OpMemoryModel Logical GLSL450
-                       OpEntryPoint Fragment %main "main" %out_var_SV_TARGET
-                       OpExecutionMode %main OriginUpperLeft
-                       OpSource HLSL 600
-                       OpName %out_var_SV_TARGET "out.var.SV_TARGET"
-                       OpName %main "main"
-                       OpDecorate %out_var_SV_TARGET Location 0
-              %float = OpTypeFloat 32
-     %float_0x1p_128 = OpConstant %float -0x1p+128
-            %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-               %void = OpTypeVoid
-                  %9 = OpTypeFunction %void
-  %out_var_SV_TARGET = OpVariable %_ptr_Output_v4float Output
-               %main = OpFunction %void None %9
-                 %10 = OpLabel
-                 %12 = OpCompositeConstruct %v4float %float_0x1p_128 %float_0x1p_128 %float_0x1p_128 %float_0x1p_128
-                       OpStore %out_var_SV_TARGET %12
-                       OpReturn
-                       OpFunctionEnd
diff --git a/test/tint/expressions/literals/-inf.spvasm.expected.dxc.hlsl b/test/tint/expressions/literals/-inf.spvasm.expected.dxc.hlsl
deleted file mode 100644
index 42f8b29..0000000
--- a/test/tint/expressions/literals/-inf.spvasm.expected.dxc.hlsl
+++ /dev/null
@@ -1,26 +0,0 @@
-static float4 out_var_SV_TARGET = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  out_var_SV_TARGET = (0.0f /* -inf */).xxxx;
-  return;
-}
-
-struct main_out {
-  float4 out_var_SV_TARGET_1;
-};
-struct tint_symbol {
-  float4 out_var_SV_TARGET_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {out_var_SV_TARGET};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.out_var_SV_TARGET_1 = inner_result.out_var_SV_TARGET_1;
-  return wrapper_result;
-}
diff --git a/test/tint/expressions/literals/-inf.spvasm.expected.fxc.hlsl b/test/tint/expressions/literals/-inf.spvasm.expected.fxc.hlsl
deleted file mode 100644
index 42f8b29..0000000
--- a/test/tint/expressions/literals/-inf.spvasm.expected.fxc.hlsl
+++ /dev/null
@@ -1,26 +0,0 @@
-static float4 out_var_SV_TARGET = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  out_var_SV_TARGET = (0.0f /* -inf */).xxxx;
-  return;
-}
-
-struct main_out {
-  float4 out_var_SV_TARGET_1;
-};
-struct tint_symbol {
-  float4 out_var_SV_TARGET_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {out_var_SV_TARGET};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.out_var_SV_TARGET_1 = inner_result.out_var_SV_TARGET_1;
-  return wrapper_result;
-}
diff --git a/test/tint/expressions/literals/-inf.spvasm.expected.glsl b/test/tint/expressions/literals/-inf.spvasm.expected.glsl
deleted file mode 100644
index 7673a43..0000000
--- a/test/tint/expressions/literals/-inf.spvasm.expected.glsl
+++ /dev/null
@@ -1,25 +0,0 @@
-#version 310 es
-precision mediump float;
-
-layout(location = 0) out vec4 out_var_SV_TARGET_1_1;
-vec4 out_var_SV_TARGET = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-void main_1() {
-  out_var_SV_TARGET = vec4(0.0f /* -inf */);
-  return;
-}
-
-struct main_out {
-  vec4 out_var_SV_TARGET_1;
-};
-
-main_out tint_symbol() {
-  main_1();
-  main_out tint_symbol_1 = main_out(out_var_SV_TARGET);
-  return tint_symbol_1;
-}
-
-void main() {
-  main_out inner_result = tint_symbol();
-  out_var_SV_TARGET_1_1 = inner_result.out_var_SV_TARGET_1;
-  return;
-}
diff --git a/test/tint/expressions/literals/-inf.spvasm.expected.msl b/test/tint/expressions/literals/-inf.spvasm.expected.msl
deleted file mode 100644
index 561c9a2..0000000
--- a/test/tint/expressions/literals/-inf.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread float4* const tint_symbol_3) {
-  *(tint_symbol_3) = float4(-INFINITY);
-  return;
-}
-
-struct main_out {
-  float4 out_var_SV_TARGET_1;
-};
-
-struct tint_symbol_1 {
-  float4 out_var_SV_TARGET_1 [[color(0)]];
-};
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.out_var_SV_TARGET_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.out_var_SV_TARGET_1 = inner_result.out_var_SV_TARGET_1;
-  return wrapper_result;
-}
-
diff --git a/test/tint/expressions/literals/-inf.spvasm.expected.spvasm b/test/tint/expressions/literals/-inf.spvasm.expected.spvasm
deleted file mode 100644
index 105db0e..0000000
--- a/test/tint/expressions/literals/-inf.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" %out_var_SV_TARGET_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %out_var_SV_TARGET_1_1 "out_var_SV_TARGET_1_1"
-               OpName %out_var_SV_TARGET "out_var_SV_TARGET"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "out_var_SV_TARGET_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %out_var_SV_TARGET_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
-%out_var_SV_TARGET_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%out_var_SV_TARGET = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-%float_n0x1p_128 = OpConstant %float -0x1p+128
-         %13 = OpConstantComposite %v4float %float_n0x1p_128 %float_n0x1p_128 %float_n0x1p_128 %float_n0x1p_128
-   %main_out = OpTypeStruct %v4float
-         %14 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-               OpStore %out_var_SV_TARGET %13
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %14
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-         %19 = OpLoad %v4float %out_var_SV_TARGET
-         %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 %out_var_SV_TARGET_1_1 %24
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/literals/-inf.spvasm.expected.wgsl b/test/tint/expressions/literals/-inf.spvasm.expected.wgsl
deleted file mode 100644
index 2e063ce..0000000
--- a/test/tint/expressions/literals/-inf.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-var<private> out_var_SV_TARGET : vec4<f32>;
-
-fn main_1() {
-  out_var_SV_TARGET = vec4<f32>(-0x1p+128f, -0x1p+128f, -0x1p+128f, -0x1p+128f);
-  return;
-}
-
-struct main_out {
-  @location(0)
-  out_var_SV_TARGET_1 : vec4<f32>,
-}
-
-@fragment
-fn main() -> main_out {
-  main_1();
-  return main_out(out_var_SV_TARGET);
-}
diff --git a/test/tint/expressions/literals/inf.spvasm b/test/tint/expressions/literals/inf.spvasm
deleted file mode 100644
index d958091..0000000
--- a/test/tint/expressions/literals/inf.spvasm
+++ /dev/null
@@ -1,21 +0,0 @@
-                       OpCapability Shader
-                       OpMemoryModel Logical GLSL450
-                       OpEntryPoint Fragment %main "main" %out_var_SV_TARGET
-                       OpExecutionMode %main OriginUpperLeft
-                       OpSource HLSL 600
-                       OpName %out_var_SV_TARGET "out.var.SV_TARGET"
-                       OpName %main "main"
-                       OpDecorate %out_var_SV_TARGET Location 0
-              %float = OpTypeFloat 32
-     %float_0x1p_128 = OpConstant %float 0x1p+128
-            %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-               %void = OpTypeVoid
-                  %9 = OpTypeFunction %void
-  %out_var_SV_TARGET = OpVariable %_ptr_Output_v4float Output
-               %main = OpFunction %void None %9
-                 %10 = OpLabel
-                 %12 = OpCompositeConstruct %v4float %float_0x1p_128 %float_0x1p_128 %float_0x1p_128 %float_0x1p_128
-                       OpStore %out_var_SV_TARGET %12
-                       OpReturn
-                       OpFunctionEnd
diff --git a/test/tint/expressions/literals/inf.spvasm.expected.dxc.hlsl b/test/tint/expressions/literals/inf.spvasm.expected.dxc.hlsl
deleted file mode 100644
index e435870..0000000
--- a/test/tint/expressions/literals/inf.spvasm.expected.dxc.hlsl
+++ /dev/null
@@ -1,26 +0,0 @@
-static float4 out_var_SV_TARGET = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  out_var_SV_TARGET = (0.0f /* inf */).xxxx;
-  return;
-}
-
-struct main_out {
-  float4 out_var_SV_TARGET_1;
-};
-struct tint_symbol {
-  float4 out_var_SV_TARGET_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {out_var_SV_TARGET};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.out_var_SV_TARGET_1 = inner_result.out_var_SV_TARGET_1;
-  return wrapper_result;
-}
diff --git a/test/tint/expressions/literals/inf.spvasm.expected.fxc.hlsl b/test/tint/expressions/literals/inf.spvasm.expected.fxc.hlsl
deleted file mode 100644
index e435870..0000000
--- a/test/tint/expressions/literals/inf.spvasm.expected.fxc.hlsl
+++ /dev/null
@@ -1,26 +0,0 @@
-static float4 out_var_SV_TARGET = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  out_var_SV_TARGET = (0.0f /* inf */).xxxx;
-  return;
-}
-
-struct main_out {
-  float4 out_var_SV_TARGET_1;
-};
-struct tint_symbol {
-  float4 out_var_SV_TARGET_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {out_var_SV_TARGET};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.out_var_SV_TARGET_1 = inner_result.out_var_SV_TARGET_1;
-  return wrapper_result;
-}
diff --git a/test/tint/expressions/literals/inf.spvasm.expected.glsl b/test/tint/expressions/literals/inf.spvasm.expected.glsl
deleted file mode 100644
index 55ce7dc..0000000
--- a/test/tint/expressions/literals/inf.spvasm.expected.glsl
+++ /dev/null
@@ -1,25 +0,0 @@
-#version 310 es
-precision mediump float;
-
-layout(location = 0) out vec4 out_var_SV_TARGET_1_1;
-vec4 out_var_SV_TARGET = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-void main_1() {
-  out_var_SV_TARGET = vec4(0.0f /* inf */);
-  return;
-}
-
-struct main_out {
-  vec4 out_var_SV_TARGET_1;
-};
-
-main_out tint_symbol() {
-  main_1();
-  main_out tint_symbol_1 = main_out(out_var_SV_TARGET);
-  return tint_symbol_1;
-}
-
-void main() {
-  main_out inner_result = tint_symbol();
-  out_var_SV_TARGET_1_1 = inner_result.out_var_SV_TARGET_1;
-  return;
-}
diff --git a/test/tint/expressions/literals/inf.spvasm.expected.msl b/test/tint/expressions/literals/inf.spvasm.expected.msl
deleted file mode 100644
index 95e5c78..0000000
--- a/test/tint/expressions/literals/inf.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread float4* const tint_symbol_3) {
-  *(tint_symbol_3) = float4(INFINITY);
-  return;
-}
-
-struct main_out {
-  float4 out_var_SV_TARGET_1;
-};
-
-struct tint_symbol_1 {
-  float4 out_var_SV_TARGET_1 [[color(0)]];
-};
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.out_var_SV_TARGET_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.out_var_SV_TARGET_1 = inner_result.out_var_SV_TARGET_1;
-  return wrapper_result;
-}
-
diff --git a/test/tint/expressions/literals/inf.spvasm.expected.spvasm b/test/tint/expressions/literals/inf.spvasm.expected.spvasm
deleted file mode 100644
index 27caae2..0000000
--- a/test/tint/expressions/literals/inf.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" %out_var_SV_TARGET_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %out_var_SV_TARGET_1_1 "out_var_SV_TARGET_1_1"
-               OpName %out_var_SV_TARGET "out_var_SV_TARGET"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "out_var_SV_TARGET_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %out_var_SV_TARGET_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
-%out_var_SV_TARGET_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%out_var_SV_TARGET = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-%float_0x1p_128 = OpConstant %float 0x1p+128
-         %13 = OpConstantComposite %v4float %float_0x1p_128 %float_0x1p_128 %float_0x1p_128 %float_0x1p_128
-   %main_out = OpTypeStruct %v4float
-         %14 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-               OpStore %out_var_SV_TARGET %13
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %14
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-         %19 = OpLoad %v4float %out_var_SV_TARGET
-         %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 %out_var_SV_TARGET_1_1 %24
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/literals/inf.spvasm.expected.wgsl b/test/tint/expressions/literals/inf.spvasm.expected.wgsl
deleted file mode 100644
index dea7b3b..0000000
--- a/test/tint/expressions/literals/inf.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-var<private> out_var_SV_TARGET : vec4<f32>;
-
-fn main_1() {
-  out_var_SV_TARGET = vec4<f32>(0x1p+128f, 0x1p+128f, 0x1p+128f, 0x1p+128f);
-  return;
-}
-
-struct main_out {
-  @location(0)
-  out_var_SV_TARGET_1 : vec4<f32>,
-}
-
-@fragment
-fn main() -> main_out {
-  main_1();
-  return main_out(out_var_SV_TARGET);
-}
diff --git a/test/tint/expressions/literals/nan.spvasm b/test/tint/expressions/literals/nan.spvasm
deleted file mode 100644
index 95df6dc..0000000
--- a/test/tint/expressions/literals/nan.spvasm
+++ /dev/null
@@ -1,21 +0,0 @@
-                       OpCapability Shader
-                       OpMemoryModel Logical GLSL450
-                       OpEntryPoint Fragment %main "main" %out_var_SV_TARGET
-                       OpExecutionMode %main OriginUpperLeft
-                       OpSource HLSL 600
-                       OpName %out_var_SV_TARGET "out.var.SV_TARGET"
-                       OpName %main "main"
-                       OpDecorate %out_var_SV_TARGET Location 0
-              %float = OpTypeFloat 32
-     %float_0x1p_128 = OpConstant %float 0x1.1p+128
-            %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-               %void = OpTypeVoid
-                  %9 = OpTypeFunction %void
-  %out_var_SV_TARGET = OpVariable %_ptr_Output_v4float Output
-               %main = OpFunction %void None %9
-                 %10 = OpLabel
-                 %12 = OpCompositeConstruct %v4float %float_0x1p_128 %float_0x1p_128 %float_0x1p_128 %float_0x1p_128
-                       OpStore %out_var_SV_TARGET %12
-                       OpReturn
-                       OpFunctionEnd
diff --git a/test/tint/expressions/literals/nan.spvasm.expected.dxc.hlsl b/test/tint/expressions/literals/nan.spvasm.expected.dxc.hlsl
deleted file mode 100644
index a51d765..0000000
--- a/test/tint/expressions/literals/nan.spvasm.expected.dxc.hlsl
+++ /dev/null
@@ -1,26 +0,0 @@
-static float4 out_var_SV_TARGET = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  out_var_SV_TARGET = float4(0.0f /* nan */, 0.0f /* nan */, 0.0f /* nan */, 0.0f /* nan */);
-  return;
-}
-
-struct main_out {
-  float4 out_var_SV_TARGET_1;
-};
-struct tint_symbol {
-  float4 out_var_SV_TARGET_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {out_var_SV_TARGET};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.out_var_SV_TARGET_1 = inner_result.out_var_SV_TARGET_1;
-  return wrapper_result;
-}
diff --git a/test/tint/expressions/literals/nan.spvasm.expected.fxc.hlsl b/test/tint/expressions/literals/nan.spvasm.expected.fxc.hlsl
deleted file mode 100644
index a51d765..0000000
--- a/test/tint/expressions/literals/nan.spvasm.expected.fxc.hlsl
+++ /dev/null
@@ -1,26 +0,0 @@
-static float4 out_var_SV_TARGET = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  out_var_SV_TARGET = float4(0.0f /* nan */, 0.0f /* nan */, 0.0f /* nan */, 0.0f /* nan */);
-  return;
-}
-
-struct main_out {
-  float4 out_var_SV_TARGET_1;
-};
-struct tint_symbol {
-  float4 out_var_SV_TARGET_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {out_var_SV_TARGET};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.out_var_SV_TARGET_1 = inner_result.out_var_SV_TARGET_1;
-  return wrapper_result;
-}
diff --git a/test/tint/expressions/literals/nan.spvasm.expected.glsl b/test/tint/expressions/literals/nan.spvasm.expected.glsl
deleted file mode 100644
index 0a04b39..0000000
--- a/test/tint/expressions/literals/nan.spvasm.expected.glsl
+++ /dev/null
@@ -1,25 +0,0 @@
-#version 310 es
-precision mediump float;
-
-layout(location = 0) out vec4 out_var_SV_TARGET_1_1;
-vec4 out_var_SV_TARGET = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-void main_1() {
-  out_var_SV_TARGET = vec4(0.0f /* nan */, 0.0f /* nan */, 0.0f /* nan */, 0.0f /* nan */);
-  return;
-}
-
-struct main_out {
-  vec4 out_var_SV_TARGET_1;
-};
-
-main_out tint_symbol() {
-  main_1();
-  main_out tint_symbol_1 = main_out(out_var_SV_TARGET);
-  return tint_symbol_1;
-}
-
-void main() {
-  main_out inner_result = tint_symbol();
-  out_var_SV_TARGET_1_1 = inner_result.out_var_SV_TARGET_1;
-  return;
-}
diff --git a/test/tint/expressions/literals/nan.spvasm.expected.msl b/test/tint/expressions/literals/nan.spvasm.expected.msl
deleted file mode 100644
index 90317e4..0000000
--- a/test/tint/expressions/literals/nan.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread float4* const tint_symbol_3) {
-  *(tint_symbol_3) = float4(NAN, NAN, NAN, NAN);
-  return;
-}
-
-struct main_out {
-  float4 out_var_SV_TARGET_1;
-};
-
-struct tint_symbol_1 {
-  float4 out_var_SV_TARGET_1 [[color(0)]];
-};
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.out_var_SV_TARGET_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.out_var_SV_TARGET_1 = inner_result.out_var_SV_TARGET_1;
-  return wrapper_result;
-}
-
diff --git a/test/tint/expressions/literals/nan.spvasm.expected.spvasm b/test/tint/expressions/literals/nan.spvasm.expected.spvasm
deleted file mode 100644
index 4f6a124..0000000
--- a/test/tint/expressions/literals/nan.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" %out_var_SV_TARGET_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %out_var_SV_TARGET_1_1 "out_var_SV_TARGET_1_1"
-               OpName %out_var_SV_TARGET "out_var_SV_TARGET"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "out_var_SV_TARGET_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %out_var_SV_TARGET_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
-%out_var_SV_TARGET_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%out_var_SV_TARGET = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-%float_0x1_9p_128 = OpConstant %float 0x1.9p+128
-         %13 = OpConstantComposite %v4float %float_0x1_9p_128 %float_0x1_9p_128 %float_0x1_9p_128 %float_0x1_9p_128
-   %main_out = OpTypeStruct %v4float
-         %14 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-               OpStore %out_var_SV_TARGET %13
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %14
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-         %19 = OpLoad %v4float %out_var_SV_TARGET
-         %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 %out_var_SV_TARGET_1_1 %24
-               OpReturn
-               OpFunctionEnd
diff --git a/test/tint/expressions/literals/nan.spvasm.expected.wgsl b/test/tint/expressions/literals/nan.spvasm.expected.wgsl
deleted file mode 100644
index 922572a..0000000
--- a/test/tint/expressions/literals/nan.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-var<private> out_var_SV_TARGET : vec4<f32>;
-
-fn main_1() {
-  out_var_SV_TARGET = vec4<f32>(0x1.9p+128f, 0x1.9p+128f, 0x1.9p+128f, 0x1.9p+128f);
-  return;
-}
-
-struct main_out {
-  @location(0)
-  out_var_SV_TARGET_1 : vec4<f32>,
-}
-
-@fragment
-fn main() -> main_out {
-  main_1();
-  return main_out(out_var_SV_TARGET);
-}
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.spvasm b/test/tint/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.spvasm
deleted file mode 100644
index 92880f1..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.spvasm
+++ /dev/null
@@ -1,223 +0,0 @@
-               OpCapability Shader
-          %1 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord %_GLF_color
-               OpExecutionMode %main OriginUpperLeft
-               OpSource ESSL 310
-               OpName %main "main"
-               OpName %func_i1_ "func(i1;"
-               OpName %b "b"
-               OpName %ndx "ndx"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %i "i"
-               OpName %_GLF_color "_GLF_color"
-               OpName %f "f"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zero"
-               OpName %_ ""
-               OpName %param "param"
-               OpName %x "x"
-               OpName %param_0 "param"
-               OpDecorate %gl_FragCoord BuiltIn FragCoord
-               OpDecorate %_GLF_color Location 0
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %buf0 Block
-               OpDecorate %_ DescriptorSet 0
-               OpDecorate %_ Binding 0
-       %void = OpTypeVoid
-         %16 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-      %float = OpTypeFloat 32
-         %20 = OpTypeFunction %float %_ptr_Function_int
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord = OpVariable %_ptr_Input_v4float Input
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Input_float = OpTypePointer Input %float
-    %float_0 = OpConstant %float 0
-    %v2float = OpTypeVector %float 2
-    %float_1 = OpConstant %float 1
-  %float_800 = OpConstant %float 800
-         %33 = OpConstantComposite %v2float %float_1 %float_800
-      %int_1 = OpConstant %int 1
-    %float_3 = OpConstant %float 3
-%_ptr_Output_v4float = OpTypePointer Output %v4float
- %_GLF_color = OpVariable %_ptr_Output_v4float Output
-         %37 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-    %float_5 = OpConstant %float 5
-         %39 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-%_ptr_Output_float = OpTypePointer Output %float
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-          %_ = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %int_65 = OpConstant %int 65
-     %int_10 = OpConstant %int 10
-         %47 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-       %main = OpFunction %void None %16
-         %48 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function
-      %param = OpVariable %_ptr_Function_int Function
-          %x = OpVariable %_ptr_Function_int Function
-    %param_0 = OpVariable %_ptr_Function_int Function
-               OpStore %_GLF_color %39
-               OpStore %f %float_0
-               OpBranch %49
-         %49 = OpLabel
-               OpLoopMerge %50 %51 None
-               OpBranch %52
-         %52 = OpLabel
-         %53 = OpAccessChain %_ptr_Output_float %_GLF_color %uint_1
-         %54 = OpLoad %float %53
-         %55 = OpConvertFToS %int %54
-         %56 = OpSLessThan %bool %55 %int_0
-               OpSelectionMerge %57 None
-               OpBranchConditional %56 %58 %59
-         %58 = OpLabel
-               OpKill
-         %59 = OpLabel
-         %60 = OpAccessChain %_ptr_Uniform_float %_ %int_0
-         %61 = OpLoad %float %60
-         %62 = OpConvertFToS %int %61
-               OpStore %param %62
-         %63 = OpFunctionCall %float %func_i1_ %param
-               OpStore %f %63
-               OpBranch %57
-         %57 = OpLabel
-         %64 = OpAccessChain %_ptr_Output_float %_GLF_color %uint_1
-         %65 = OpLoad %float %64
-         %66 = OpConvertFToS %int %65
-         %67 = OpSGreaterThan %bool %66 %int_65
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %68
-         %69 = OpLabel
-               OpKill
-         %68 = OpLabel
-               OpStore %x %int_0
-               OpBranch %70
-         %70 = OpLabel
-               OpLoopMerge %71 %72 None
-               OpBranch %73
-         %73 = OpLabel
-         %74 = OpLoad %int %x
-         %75 = OpAccessChain %_ptr_Uniform_float %_ %int_0
-         %76 = OpLoad %float %75
-         %77 = OpConvertFToS %int %76
-         %78 = OpIAdd %int %77 %int_1
-         %79 = OpSLessThan %bool %74 %78
-               OpBranchConditional %79 %80 %71
-         %80 = OpLabel
-         %81 = OpLoad %int %x
-         %82 = OpIAdd %int %81 %int_10
-               OpStore %param_0 %82
-         %83 = OpFunctionCall %float %func_i1_ %param_0
-               OpStore %f %83
-               OpBranch %72
-         %72 = OpLabel
-         %84 = OpLoad %int %x
-         %85 = OpIAdd %int %84 %int_1
-               OpStore %x %85
-               OpBranch %70
-         %71 = OpLabel
-               OpBranch %51
-         %51 = OpLabel
-         %86 = OpAccessChain %_ptr_Uniform_float %_ %int_0
-         %87 = OpLoad %float %86
-         %88 = OpConvertFToS %int %87
-         %89 = OpSGreaterThan %bool %88 %int_1
-               OpBranchConditional %89 %49 %50
-         %50 = OpLabel
-         %90 = OpLoad %float %f
-         %91 = OpFOrdEqual %bool %90 %float_3
-               OpSelectionMerge %92 None
-               OpBranchConditional %91 %93 %94
-         %93 = OpLabel
-               OpStore %_GLF_color %47
-               OpBranch %92
-         %94 = OpLabel
-               OpStore %_GLF_color %37
-               OpBranch %92
-         %92 = OpLabel
-               OpReturn
-               OpFunctionEnd
-   %func_i1_ = OpFunction %float None %20
-          %b = OpFunctionParameter %_ptr_Function_int
-         %95 = OpLabel
-        %ndx = OpVariable %_ptr_Function_int Function
-          %i = OpVariable %_ptr_Function_int Function
-               OpStore %ndx %int_0
-               OpBranch %96
-         %96 = OpLabel
-               OpLoopMerge %97 %98 None
-               OpBranch %99
-         %99 = OpLabel
-        %100 = OpLoad %int %ndx
-        %101 = OpSLessThan %bool %100 %int_2
-               OpBranchConditional %101 %102 %97
-        %102 = OpLabel
-        %103 = OpAccessChain %_ptr_Input_float %gl_FragCoord %uint_0
-        %104 = OpLoad %float %103
-        %105 = OpFOrdLessThan %bool %104 %float_0
-               OpSelectionMerge %106 None
-               OpBranchConditional %105 %107 %106
-        %107 = OpLabel
-               OpStore %i %int_0
-               OpBranch %108
-        %108 = OpLabel
-               OpLoopMerge %109 %110 None
-               OpBranch %111
-        %111 = OpLabel
-        %112 = OpLoad %int %i
-        %113 = OpSLessThan %bool %112 %int_2
-               OpBranchConditional %113 %114 %109
-        %114 = OpLabel
-        %115 = OpExtInst %v2float %1 Cosh %33
-        %116 = OpCompositeExtract %float %115 0
-        %117 = OpConvertFToS %int %116
-        %118 = OpSLessThanEqual %bool %117 %int_1
-               OpSelectionMerge %119 None
-               OpBranchConditional %118 %120 %119
-        %120 = OpLabel
-               OpKill
-        %119 = OpLabel
-               OpBranch %110
-        %110 = OpLabel
-        %121 = OpLoad %int %i
-        %122 = OpIAdd %int %121 %int_1
-               OpStore %i %122
-               OpBranch %108
-        %109 = OpLabel
-               OpBranch %106
-        %106 = OpLabel
-               OpBranch %98
-         %98 = OpLabel
-        %123 = OpLoad %int %ndx
-        %124 = OpIAdd %int %123 %int_1
-               OpStore %ndx %124
-               OpBranch %96
-         %97 = OpLabel
-        %125 = OpLoad %int %b
-        %126 = OpSGreaterThan %bool %125 %int_1
-               OpSelectionMerge %127 None
-               OpBranchConditional %126 %128 %127
-        %128 = OpLabel
-               OpReturnValue %float_3
-        %127 = OpLabel
-        %129 = OpAccessChain %_ptr_Input_float %gl_FragCoord %uint_0
-        %130 = OpLoad %float %129
-        %131 = OpFOrdLessThan %bool %130 %float_0
-               OpSelectionMerge %132 None
-               OpBranchConditional %131 %133 %132
-        %133 = OpLabel
-               OpStore %_GLF_color %37
-               OpBranch %132
-        %132 = OpLabel
-               OpReturnValue %float_5
-               OpFunctionEnd
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.wgsl
deleted file mode 100644
index bf68647..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.wgsl
+++ /dev/null
@@ -1,124 +0,0 @@
-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>,
-}
-
-@fragment
-fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
