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 0d695f6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,59 +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[3].x);
-  a = x_27;
-  i = 0;
-  {
-    [loop] 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 == 0 ? 1 : 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;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  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.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 0d695f6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,59 +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[3].x);
-  a = x_27;
-  i = 0;
-  {
-    [loop] 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 == 0 ? 1 : 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;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  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.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 8455574..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,68 +0,0 @@
-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 == 0u ? 1u : 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;
-};
-
-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-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 8455574..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,68 +0,0 @@
-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 == 0u ? 1u : 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;
-};
-
-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;
-}
