spirv-reader: Sink pointer-to-vector-component

WGSL does not support pointer-to-vector-component, so the SPIR-V
reader needs to sink these pointers into their use.

Bug: tint:491
Change-Id: Ib5ae87d2f6bbac13280314ba11369d7ced505b56
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/68241
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: David Neto <dneto@google.com>
diff --git a/src/reader/spirv/function.cc b/src/reader/spirv/function.cc
index b02f467..9bea3af 100644
--- a/src/reader/spirv/function.cc
+++ b/src/reader/spirv/function.cc
@@ -2541,6 +2541,12 @@
       Fail() << "internal error: unhandled use of opaque object with ID: "
              << id;
       return {};
+    case SkipReason::kSinkPointerIntoUse: {
+      // Replace the pointer with its source reference expression.
+      auto source_expr = GetDefInfo(id)->sink_pointer_source_expr;
+      TINT_ASSERT(Reader, source_expr.type->Is<Reference>());
+      return source_expr;
+    }
     case SkipReason::kPointSizeBuiltinValue: {
       return {ty_.F32(),
               create<ast::ScalarConstructorExpression>(
@@ -3470,6 +3476,12 @@
   if (!expr) {
     return false;
   }
+
+  // Do not generate pointers that we want to sink.
+  if (GetDefInfo(inst.result_id())->skip == SkipReason::kSinkPointerIntoUse) {
+    return true;
+  }
+
   expr = AddressOfIfNeeded(expr, &inst);
   auto* ast_const = parser_impl_.MakeVariable(
       inst.result_id(), ast::StorageClass::kNone, expr.type, true, expr.expr,
@@ -3735,6 +3747,8 @@
       const auto skip = GetSkipReason(value_id);
       if (skip != SkipReason::kDontSkip) {
         GetDefInfo(inst.result_id())->skip = skip;
+        GetDefInfo(inst.result_id())->sink_pointer_source_expr =
+            GetDefInfo(value_id)->sink_pointer_source_expr;
         return true;
       }
       auto expr = AddressOfIfNeeded(MakeExpression(value_id), &inst);
@@ -4214,6 +4228,8 @@
   if (base_skip != SkipReason::kDontSkip) {
     // This can occur for AccessChain with no indices.
     GetDefInfo(inst.result_id())->skip = base_skip;
+    GetDefInfo(inst.result_id())->sink_pointer_source_expr =
+        GetDefInfo(base_id)->sink_pointer_source_expr;
     return {};
   }
 
@@ -4221,6 +4237,7 @@
   uint32_t first_index = 1;
   const auto num_in_operands = inst.NumInOperands();
 
+  bool sink_pointer = false;
   TypedExpression current_expr;
 
   // If the variable was originally gl_PerVertex, then in the AST we
@@ -4352,6 +4369,8 @@
         }
         // All vector components are the same type.
         pointee_type_id = pointee_type_inst->GetSingleWordInOperand(0);
+        // Sink pointers to vector components.
+        sink_pointer = true;
         break;
       case SpvOpTypeMatrix:
         // Use array syntax.
@@ -4407,6 +4426,13 @@
     TINT_ASSERT(Reader, type && type->Is<Reference>());
     current_expr = TypedExpression{type, next_expr};
   }
+
+  if (sink_pointer) {
+    // Capture the reference so that we can sink it into the point of use.
+    GetDefInfo(inst.result_id())->skip = SkipReason::kSinkPointerIntoUse;
+    GetDefInfo(inst.result_id())->sink_pointer_source_expr = current_expr;
+  }
+
   return current_expr;
 }
 
diff --git a/src/reader/spirv/function.h b/src/reader/spirv/function.h
index 38b76a9..ccba710 100644
--- a/src/reader/spirv/function.h
+++ b/src/reader/spirv/function.h
@@ -205,6 +205,12 @@
   /// function parameter).
   kOpaqueObject,
 
+  /// `kSinkPointerIntoUse`: used to avoid emitting certain pointer expressions,
+  /// by instead generating their reference expression directly at the point of
+  /// use. For example, we apply this to OpAccessChain when indexing into a
+  /// vector, to avoid generating address-of vector component expressions.
+  kSinkPointerIntoUse,
+
   /// `kPointSizeBuiltinPointer`: the value is a pointer to the Position builtin
   /// variable.  Don't generate its address.  Avoid generating stores to this
   /// pointer.
@@ -296,6 +302,11 @@
   /// This is kInvalid for non-pointers.
   ast::StorageClass storage_class = ast::StorageClass::kInvalid;
 
+  /// The expression to use when sinking pointers into their use.
+  /// When encountering a use of this instruction, we will emit this expression
+  /// instead.
+  TypedExpression sink_pointer_source_expr = {};
+
   /// The reason, if any, that this value should be ignored.
   /// Normally no values are ignored.  This field can be updated while
   /// generating code because sometimes we only discover necessary facts
@@ -320,6 +331,9 @@
     case SkipReason::kOpaqueObject:
       o << " skip:opaque";
       break;
+    case SkipReason::kSinkPointerIntoUse:
+      o << " skip:sink_pointer";
+      break;
     case SkipReason::kPointSizeBuiltinPointer:
       o << " skip:pointsize_pointer";
       break;
diff --git a/src/reader/spirv/function_memory_test.cc b/src/reader/spirv/function_memory_test.cc
index c68521e..21687ce 100644
--- a/src/reader/spirv/function_memory_test.cc
+++ b/src/reader/spirv/function_memory_test.cc
@@ -390,6 +390,119 @@
               HasSubstr("myvar[a_dynamic_index] = 42u;"));
 }
 
+TEST_F(SpvParserMemoryTest,
+       EmitStatement_AccessChain_VectorComponent_MultiUse) {
+  // WGSL does not support pointer-to-vector-component, so test that we sink
+  // these pointers into the point of use.
+  const std::string assembly = Preamble() + R"(
+     OpName %1 "myvar"
+     %void = OpTypeVoid
+     %voidfn = OpTypeFunction %void
+     %uint = OpTypeInt 32 0
+     %store_ty = OpTypeVector %uint 4
+     %uint_2 = OpConstant %uint 2
+     %uint_42 = OpConstant %uint 42
+     %elem_ty = OpTypePointer Private %uint
+     %var_ty = OpTypePointer Private %store_ty
+     %1 = OpVariable %var_ty Private
+     %100 = OpFunction %void None %voidfn
+     %entry = OpLabel
+     %ptr = OpAccessChain %elem_ty %1 %uint_2
+     %load = OpLoad %uint %ptr
+     %result = OpIAdd %uint %load %uint_2
+     OpStore %ptr %result
+     OpReturn
+     OpFunctionEnd
+  )";
+  auto p = parser(test::Assemble(assembly));
+  ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions())
+      << assembly << p->error();
+  auto fe = p->function_emitter(100);
+  EXPECT_TRUE(fe.EmitBody()) << p->error();
+  auto ast_body = fe.ast_body();
+  auto wgsl = test::ToString(p->program(), ast_body);
+  EXPECT_THAT(wgsl, Not(HasSubstr("&")));
+  EXPECT_THAT(wgsl, HasSubstr(" = myvar.z;"));
+  EXPECT_THAT(wgsl, HasSubstr("myvar.z = "));
+}
+
+TEST_F(SpvParserMemoryTest,
+       EmitStatement_AccessChain_VectorComponent_MultiUse_NonConstIndex) {
+  // WGSL does not support pointer-to-vector-component, so test that we sink
+  // these pointers into the point of use.
+  const std::string assembly = Preamble() + R"(
+     OpName %1 "myvar"
+     %void = OpTypeVoid
+     %voidfn = OpTypeFunction %void
+     %uint = OpTypeInt 32 0
+     %store_ty = OpTypeVector %uint 4
+     %uint_2 = OpConstant %uint 2
+     %uint_42 = OpConstant %uint 42
+     %elem_ty = OpTypePointer Private %uint
+     %var_ty = OpTypePointer Private %store_ty
+     %1 = OpVariable %var_ty Private
+     %2 = OpVariable %elem_ty Private
+     %100 = OpFunction %void None %voidfn
+     %entry = OpLabel
+     %idx = OpLoad %uint %2
+     %ptr = OpAccessChain %elem_ty %1 %idx
+     %load = OpLoad %uint %ptr
+     %result = OpIAdd %uint %load %uint_2
+     OpStore %ptr %result
+     OpReturn
+     OpFunctionEnd
+  )";
+  auto p = parser(test::Assemble(assembly));
+  ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions())
+      << assembly << p->error();
+  auto fe = p->function_emitter(100);
+  EXPECT_TRUE(fe.EmitBody()) << p->error();
+  auto ast_body = fe.ast_body();
+  auto wgsl = test::ToString(p->program(), ast_body);
+  EXPECT_THAT(wgsl, Not(HasSubstr("&")));
+  EXPECT_THAT(wgsl, HasSubstr(" = myvar[x_12];"));
+  EXPECT_THAT(wgsl, HasSubstr("myvar[x_12] = "));
+}
+
+TEST_F(SpvParserMemoryTest,
+       EmitStatement_AccessChain_VectorComponent_SinkThroughChain) {
+  // Test that we can sink a pointer-to-vector-component through a chain of
+  // instructions that propagate it.
+  const std::string assembly = Preamble() + R"(
+     OpName %1 "myvar"
+     %void = OpTypeVoid
+     %voidfn = OpTypeFunction %void
+     %uint = OpTypeInt 32 0
+     %store_ty = OpTypeVector %uint 4
+     %uint_2 = OpConstant %uint 2
+     %uint_42 = OpConstant %uint 42
+     %elem_ty = OpTypePointer Private %uint
+     %var_ty = OpTypePointer Private %store_ty
+     %1 = OpVariable %var_ty Private
+     %100 = OpFunction %void None %voidfn
+     %entry = OpLabel
+     %ptr = OpAccessChain %elem_ty %1 %uint_2
+     %ptr2 = OpCopyObject %elem_ty %ptr
+     %ptr3 = OpInBoundsAccessChain %elem_ty %ptr2
+     %ptr4 = OpAccessChain %elem_ty %ptr3
+     %load = OpLoad %uint %ptr3
+     %result = OpIAdd %uint %load %uint_2
+     OpStore %ptr4 %result
+     OpReturn
+     OpFunctionEnd
+  )";
+  auto p = parser(test::Assemble(assembly));
+  ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions())
+      << assembly << p->error();
+  auto fe = p->function_emitter(100);
+  EXPECT_TRUE(fe.EmitBody()) << p->error();
+  auto ast_body = fe.ast_body();
+  auto wgsl = test::ToString(p->program(), ast_body);
+  EXPECT_THAT(wgsl, Not(HasSubstr("&")));
+  EXPECT_THAT(wgsl, HasSubstr(" = myvar.z;"));
+  EXPECT_THAT(wgsl, HasSubstr("myvar.z = "));
+}
+
 TEST_F(SpvParserMemoryTest, EmitStatement_AccessChain_Matrix) {
   const std::string assembly = Preamble() + R"(
      OpName %1 "myvar"
diff --git a/test/bug/tint/413.spvasm.expected.wgsl b/test/bug/tint/413.spvasm.expected.wgsl
index db6ebd4..6ca1a05 100644
--- a/test/bug/tint/413.spvasm.expected.wgsl
+++ b/test/bug/tint/413.spvasm.expected.wgsl
@@ -6,9 +6,8 @@
   var srcValue : vec4<u32>;
   let x_18 : vec4<u32> = textureLoad(Src, vec2<i32>(0, 0), 0);
   srcValue = x_18;
-  let x_21 : ptr<function, u32> = &(srcValue.x);
-  let x_22 : u32 = *(x_21);
-  *(x_21) = (x_22 + bitcast<u32>(1));
+  let x_22 : u32 = srcValue.x;
+  srcValue.x = (x_22 + bitcast<u32>(1));
   let x_27 : vec4<u32> = srcValue;
   textureStore(Dst, vec2<i32>(0, 0), x_27);
   return;
diff --git a/test/bug/tint/749.spvasm.expected.wgsl b/test/bug/tint/749.spvasm.expected.wgsl
index 0334e15..0f1392a 100644
--- a/test/bug/tint/749.spvasm.expected.wgsl
+++ b/test/bug/tint/749.spvasm.expected.wgsl
@@ -861,14 +861,13 @@
   let x_771 : QuicksortObject = obj;
   obj = QuicksortObject(array<i32, 10u>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
   obj = x_771;
-  let x_205 : ptr<function, f32> = &(color.x);
   let x_772 : i32 = *(x_200);
   *(x_200) = 0;
   *(x_200) = x_772;
-  let x_206 : f32 = *(x_205);
-  let x_773 : f32 = *(x_205);
-  *(x_205) = 0.0;
-  *(x_205) = x_773;
+  let x_206 : f32 = color.x;
+  let x_773 : f32 = color.x;
+  color.x = 0.0;
+  color.x = x_773;
   let x_452 : vec2<f32> = vec2<f32>(vec3<f32>(1.0, 2.0, 3.0).z, vec3<f32>(1.0, 2.0, 3.0).y);
   let x_774 : i32 = i_2;
   i_2 = 0;
@@ -876,22 +875,20 @@
   let x_775 : QuicksortObject = obj;
   obj = QuicksortObject(array<i32, 10u>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
   obj = x_775;
-  let x_208 : ptr<function, f32> = &(color.x);
   let x_453 : vec3<f32> = vec3<f32>(x_451.x, x_450.x, x_450.y);
-  *(x_208) = (x_206 + f32(x_201));
+  color.x = (x_206 + f32(x_201));
   let x_776 : vec2<f32> = uv;
   uv = vec2<f32>(0.0, 0.0);
   uv = x_776;
-  let x_209 : ptr<function, f32> = &(uv.x);
   let x_777 : vec2<f32> = uv;
   uv = vec2<f32>(0.0, 0.0);
   uv = x_777;
   let x_454 : vec2<f32> = vec2<f32>(x_184.y, x_184.y);
-  let x_210 : f32 = *(x_209);
+  let x_210 : f32 = uv.x;
   let x_455 : vec2<f32> = vec2<f32>(x_192.y, x_192.x);
-  let x_778 : f32 = *(x_209);
-  *(x_209) = 0.0;
-  *(x_209) = x_778;
+  let x_778 : f32 = uv.x;
+  uv.x = 0.0;
+  uv.x = x_778;
   let x_779 : QuicksortObject = obj;
   obj = QuicksortObject(array<i32, 10u>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
   obj = x_779;
@@ -903,9 +900,9 @@
     *(x_200) = 0;
     *(x_200) = x_781;
     let x_456 : vec3<f32> = vec3<f32>(vec2<f32>(0.0, 0.0).y, x_448.y, x_448.y);
-    let x_782 : f32 = *(x_209);
-    *(x_209) = 0.0;
-    *(x_209) = x_782;
+    let x_782 : f32 = uv.x;
+    uv.x = 0.0;
+    uv.x = x_782;
     let x_216 : i32 = obj.numbers[1];
     let x_783 : QuicksortObject = obj;
     obj = QuicksortObject(array<i32, 10u>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
@@ -914,7 +911,6 @@
     let x_784 : vec2<f32> = uv;
     uv = vec2<f32>(0.0, 0.0);
     uv = x_784;
-    let x_218 : ptr<function, f32> = &(color[0]);
     let x_785 : QuicksortObject = obj;
     obj = QuicksortObject(array<i32, 10u>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
     obj = x_785;
@@ -922,10 +918,10 @@
     let x_786 : i32 = i_2;
     i_2 = 0;
     i_2 = x_786;
-    let x_219 : f32 = *(x_218);
-    let x_787 : f32 = *(x_218);
-    *(x_218) = 0.0;
-    *(x_218) = x_787;
+    let x_219 : f32 = color[0];
+    let x_787 : f32 = color[0];
+    color[0] = 0.0;
+    color[0] = x_787;
     let x_788 : vec3<f32> = color;
     color = vec3<f32>(0.0, 0.0, 0.0);
     color = x_788;
@@ -933,75 +929,73 @@
     color = vec3<f32>(0.0, 0.0, 0.0);
     color = x_789;
     let x_459 : vec3<f32> = vec3<f32>(x_454.y, x_454.y, x_447.y);
-    let x_790 : f32 = *(x_218);
-    *(x_218) = 0.0;
-    *(x_218) = x_790;
+    let x_790 : f32 = color[0];
+    color[0] = 0.0;
+    color[0] = x_790;
     color.x = (f32(x_216) + x_219);
     let x_791 : i32 = *(x_200);
     *(x_200) = 0;
     *(x_200) = x_791;
   }
-  let x_792 : f32 = *(x_209);
-  *(x_209) = 0.0;
-  *(x_209) = x_792;
-  let x_222 : ptr<function, f32> = &(uv.x);
-  let x_793 : f32 = *(x_209);
-  *(x_209) = 0.0;
-  *(x_209) = x_793;
-  let x_223 : f32 = *(x_222);
-  let x_794 : f32 = *(x_222);
-  *(x_222) = 0.0;
-  *(x_222) = x_794;
+  let x_792 : f32 = uv.x;
+  uv.x = 0.0;
+  uv.x = x_792;
+  let x_793 : f32 = uv.x;
+  uv.x = 0.0;
+  uv.x = x_793;
+  let x_223 : f32 = uv.x;
+  let x_794 : f32 = uv.x;
+  uv.x = 0.0;
+  uv.x = x_794;
   let x_460 : vec3<f32> = vec3<f32>(x_453.z, x_453.y, x_453.y);
   let x_795 : vec2<f32> = uv;
   uv = vec2<f32>(0.0, 0.0);
   uv = x_795;
-  let x_796 : f32 = *(x_222);
-  *(x_222) = 0.0;
-  *(x_222) = x_796;
+  let x_796 : f32 = uv.x;
+  uv.x = 0.0;
+  uv.x = x_796;
   let x_461 : vec2<f32> = vec2<f32>(vec2<f32>(0.0, 0.0).y, vec2<f32>(0.0, 0.0).y);
-  let x_797 : f32 = *(x_222);
-  *(x_222) = 0.0;
-  *(x_222) = x_797;
+  let x_797 : f32 = uv.x;
+  uv.x = 0.0;
+  uv.x = x_797;
   if ((x_223 > 0.5)) {
-    let x_798 : f32 = *(x_222);
-    *(x_222) = 0.0;
-    *(x_222) = x_798;
+    let x_798 : f32 = uv.x;
+    uv.x = 0.0;
+    uv.x = x_798;
     let x_462 : vec2<f32> = vec2<f32>(x_446.x, x_446.x);
-    let x_799 : f32 = *(x_205);
-    *(x_205) = 0.0;
-    *(x_205) = x_799;
+    let x_799 : f32 = color.x;
+    color.x = 0.0;
+    color.x = x_799;
     let x_229 : ptr<private, i32> = &(obj.numbers[2u]);
-    let x_800 : f32 = *(x_205);
-    *(x_205) = 0.0;
-    *(x_205) = x_800;
+    let x_800 : f32 = color.x;
+    color.x = 0.0;
+    color.x = x_800;
     let x_463 : vec3<f32> = vec3<f32>(x_453.x, x_453.z, x_461.y);
-    let x_801 : f32 = *(x_208);
-    *(x_208) = 0.0;
-    *(x_208) = x_801;
+    let x_801 : f32 = color.x;
+    color.x = 0.0;
+    color.x = x_801;
     let x_230 : i32 = *(x_229);
-    let x_802 : f32 = *(x_209);
-    *(x_209) = 0.0;
-    *(x_209) = x_802;
-    let x_803 : f32 = *(x_205);
-    *(x_205) = 0.0;
-    *(x_205) = x_803;
-    let x_233 : ptr<function, f32> = &(color.y);
+    let x_802 : f32 = uv.x;
+    uv.x = 0.0;
+    uv.x = x_802;
+    let x_803 : f32 = color.x;
+    color.x = 0.0;
+    color.x = x_803;
     let x_804 : i32 = *(x_229);
     *(x_229) = 0;
     *(x_229) = x_804;
     let x_464 : vec2<f32> = vec2<f32>(x_450.y, x_191.x);
-    let x_805 : f32 = *(x_233);
-    *(x_233) = 0.0;
-    *(x_233) = x_805;
-    let x_234 : f32 = *(x_233);
+    let x_805 : f32 = color.y;
+    color.y = 0.0;
+    color.y = x_805;
+    let x_234 : f32 = color.y;
     let x_806 : i32 = *(x_229);
     *(x_229) = 0;
     *(x_229) = x_806;
     let x_465 : vec2<f32> = vec2<f32>(x_463.x, x_185.x);
-    let x_807 : f32 = *(x_208);
-    *(x_208) = 0.0;
-    *(x_208) = x_807;
+    let x_807 : f32 = color.x;
+    color.x = 0.0;
+    color.x = x_807;
     let x_808 : i32 = i_2;
     i_2 = 0;
     i_2 = x_808;
@@ -1010,74 +1004,72 @@
     i_2 = 0;
     i_2 = x_809;
     color.y = (f32(x_230) + x_234);
-    let x_810 : f32 = *(x_209);
-    *(x_209) = 0.0;
-    *(x_209) = x_810;
+    let x_810 : f32 = uv.x;
+    uv.x = 0.0;
+    uv.x = x_810;
   }
-  let x_237 : ptr<function, f32> = &(uv[0]);
   let x_811 : i32 = i_2;
   i_2 = 0;
   i_2 = x_811;
   let x_467 : vec2<f32> = vec2<f32>(x_191.x, x_191.x);
-  let x_812 : f32 = *(x_222);
-  *(x_222) = 0.0;
-  *(x_222) = x_812;
-  let x_238 : f32 = *(x_237);
+  let x_812 : f32 = uv.x;
+  uv.x = 0.0;
+  uv.x = x_812;
+  let x_238 : f32 = uv[0];
   let x_813 : vec3<f32> = color;
   color = vec3<f32>(0.0, 0.0, 0.0);
   color = x_813;
-  let x_814 : f32 = *(x_208);
-  *(x_208) = 0.0;
-  *(x_208) = x_814;
+  let x_814 : f32 = color.x;
+  color.x = 0.0;
+  color.x = x_814;
   if ((x_238 > 0.75)) {
-    let x_815 : f32 = *(x_205);
-    *(x_205) = 0.0;
-    *(x_205) = x_815;
+    let x_815 : f32 = color.x;
+    color.x = 0.0;
+    color.x = x_815;
     let x_245 : i32 = obj.numbers[3];
-    let x_816 : f32 = *(x_208);
-    *(x_208) = 0.0;
-    *(x_208) = x_816;
+    let x_816 : f32 = color.x;
+    color.x = 0.0;
+    color.x = x_816;
     let x_817 : QuicksortObject = obj;
     obj = QuicksortObject(array<i32, 10u>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
     obj = x_817;
     let x_468 : vec3<f32> = vec3<f32>(x_467.x, x_467.x, x_467.x);
-    let x_818 : f32 = *(x_237);
-    *(x_237) = 0.0;
-    *(x_237) = x_818;
-    let x_248 : ptr<function, f32> = &(color.z);
-    let x_819 : f32 = *(x_222);
-    *(x_222) = 0.0;
-    *(x_222) = x_819;
-    let x_249 : f32 = *(x_248);
+    let x_818 : f32 = uv[0];
+    uv[0] = 0.0;
+    uv[0] = x_818;
+    let x_819 : f32 = uv.x;
+    uv.x = 0.0;
+    uv.x = x_819;
+    let x_249 : f32 = color.z;
     let x_820 : vec3<f32> = color;
     color = vec3<f32>(0.0, 0.0, 0.0);
     color = x_820;
     let x_469 : vec3<f32> = vec3<f32>(x_467.x, x_191.y, x_467.y);
-    let x_821 : f32 = *(x_248);
-    *(x_248) = 0.0;
-    *(x_248) = x_821;
+    let x_821 : f32 = color.z;
+    color.z = 0.0;
+    color.z = x_821;
     let x_822 : i32 = *(x_200);
     *(x_200) = 0;
     *(x_200) = x_822;
     let x_470 : vec2<f32> = vec2<f32>(vec2<f32>(0.0, 0.0).x, vec2<f32>(0.0, 0.0).y);
-    let x_823 : f32 = *(x_248);
-    *(x_248) = 0.0;
-    *(x_248) = x_823;
+    let x_823 : f32 = color.z;
+    color.z = 0.0;
+    color.z = x_823;
     color.z = (x_249 + f32(x_245));
     let x_824 : vec2<f32> = uv;
     uv = vec2<f32>(0.0, 0.0);
     uv = x_824;
     let x_471 : vec2<f32> = vec2<f32>(x_470.y, x_470.y);
   }
-  let x_825 : f32 = *(x_237);
-  *(x_237) = 0.0;
-  *(x_237) = x_825;
+  let x_825 : f32 = uv[0];
+  uv[0] = 0.0;
+  uv[0] = x_825;
   let x_472 : vec3<f32> = vec3<f32>(x_454.x, x_454.y, x_454.y);
   let x_253 : ptr<private, i32> = &(obj.numbers[4]);
   let x_254 : i32 = *(x_253);
-  let x_826 : f32 = *(x_237);
-  *(x_237) = 0.0;
-  *(x_237) = x_826;
+  let x_826 : f32 = uv[0];
+  uv[0] = 0.0;
+  uv[0] = x_826;
   let x_827 : vec3<f32> = color;
   color = vec3<f32>(0.0, 0.0, 0.0);
   color = x_827;
@@ -1085,38 +1077,35 @@
   let x_828 : i32 = *(x_253);
   *(x_253) = 0;
   *(x_253) = x_828;
-  let x_256 : ptr<function, f32> = &(color.y);
   let x_474 : vec2<f32> = vec2<f32>(x_191.x, x_184.z);
-  let x_829 : f32 = *(x_209);
-  *(x_209) = 0.0;
-  *(x_209) = x_829;
-  let x_257 : f32 = *(x_256);
-  let x_830 : f32 = *(x_256);
-  *(x_256) = 0.0;
-  *(x_256) = x_830;
+  let x_829 : f32 = uv.x;
+  uv.x = 0.0;
+  uv.x = x_829;
+  let x_257 : f32 = color.y;
+  let x_830 : f32 = color.y;
+  color.y = 0.0;
+  color.y = x_830;
   let x_475 : vec2<f32> = vec2<f32>(x_467.x, x_450.x);
-  let x_831 : f32 = *(x_222);
-  *(x_222) = 0.0;
-  *(x_222) = x_831;
-  let x_259 : ptr<function, f32> = &(color.y);
-  let x_832 : f32 = *(x_205);
-  *(x_205) = 0.0;
-  *(x_205) = x_832;
+  let x_831 : f32 = uv.x;
+  uv.x = 0.0;
+  uv.x = x_831;
+  let x_832 : f32 = color.x;
+  color.x = 0.0;
+  color.x = x_832;
   let x_476 : vec2<f32> = vec2<f32>(x_451.z, x_460.y);
-  *(x_259) = (x_257 + f32(x_254));
+  color.y = (x_257 + f32(x_254));
   let x_477 : vec3<f32> = vec3<f32>(vec2<f32>(0.0, 0.0).x, x_472.x, vec2<f32>(0.0, 0.0).y);
-  let x_833 : f32 = *(x_209);
-  *(x_209) = 0.0;
-  *(x_209) = x_833;
-  let x_260 : ptr<function, f32> = &(uv.y);
-  let x_834 : f32 = *(x_205);
-  *(x_205) = 0.0;
-  *(x_205) = x_834;
+  let x_833 : f32 = uv.x;
+  uv.x = 0.0;
+  uv.x = x_833;
+  let x_834 : f32 = color.x;
+  color.x = 0.0;
+  color.x = x_834;
   let x_478 : vec2<f32> = vec2<f32>(x_472.x, x_472.y);
-  let x_835 : f32 = *(x_260);
-  *(x_260) = 0.0;
-  *(x_260) = x_835;
-  let x_261 : f32 = *(x_260);
+  let x_835 : f32 = uv.y;
+  uv.y = 0.0;
+  uv.y = x_835;
+  let x_261 : f32 = uv.y;
   let x_836 : i32 = i_2;
   i_2 = 0;
   i_2 = x_836;
@@ -1124,22 +1113,22 @@
   let x_837 : i32 = *(x_200);
   *(x_200) = 0;
   *(x_200) = x_837;
-  let x_838 : f32 = *(x_259);
-  *(x_259) = 0.0;
-  *(x_259) = x_838;
+  let x_838 : f32 = color.y;
+  color.y = 0.0;
+  color.y = x_838;
   let x_480 : vec3<f32> = vec3<f32>(x_446.x, x_446.x, vec2<f32>(0.0, 0.0).y);
-  let x_839 : f32 = *(x_209);
-  *(x_209) = 0.0;
-  *(x_209) = x_839;
+  let x_839 : f32 = uv.x;
+  uv.x = 0.0;
+  uv.x = x_839;
   if ((x_261 > 0.25)) {
     let x_481 : vec2<f32> = vec2<f32>(x_447.x, x_480.z);
     let x_840 : vec3<f32> = color;
     color = vec3<f32>(0.0, 0.0, 0.0);
     color = x_840;
     let x_267 : i32 = obj.numbers[5u];
-    let x_841 : f32 = *(x_205);
-    *(x_205) = 0.0;
-    *(x_205) = x_841;
+    let x_841 : f32 = color.x;
+    color.x = 0.0;
+    color.x = x_841;
     let x_842 : i32 = i_2;
     i_2 = 0;
     i_2 = x_842;
@@ -1147,61 +1136,60 @@
     i_2 = 0;
     i_2 = x_843;
     let x_270 : f32 = color.x;
-    let x_844 : f32 = *(x_237);
-    *(x_237) = 0.0;
-    *(x_237) = x_844;
+    let x_844 : f32 = uv[0];
+    uv[0] = 0.0;
+    uv[0] = x_844;
     let x_482 : vec3<f32> = vec3<f32>(x_455.x, x_475.y, x_455.y);
     let x_845 : QuicksortObject = obj;
     obj = QuicksortObject(array<i32, 10u>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
     obj = x_845;
-    let x_846 : f32 = *(x_260);
-    *(x_260) = 0.0;
-    *(x_260) = x_846;
+    let x_846 : f32 = uv.y;
+    uv.y = 0.0;
+    uv.y = x_846;
     let x_847 : i32 = i_2;
     i_2 = 0;
     i_2 = x_847;
     let x_483 : vec3<f32> = vec3<f32>(x_184.w, x_184.w, x_192.x);
-    let x_848 : f32 = *(x_209);
-    *(x_209) = 0.0;
-    *(x_209) = x_848;
+    let x_848 : f32 = uv.x;
+    uv.x = 0.0;
+    uv.x = x_848;
     color.x = (f32(x_267) + x_270);
     let x_484 : vec3<f32> = vec3<f32>(x_454.y, x_450.x, x_454.y);
-    let x_849 : f32 = *(x_209);
-    *(x_209) = 0.0;
-    *(x_209) = x_849;
+    let x_849 : f32 = uv.x;
+    uv.x = 0.0;
+    uv.x = x_849;
   }
-  let x_850 : f32 = *(x_205);
-  *(x_205) = 0.0;
-  *(x_205) = x_850;
+  let x_850 : f32 = color.x;
+  color.x = 0.0;
+  color.x = x_850;
   let x_485 : vec3<f32> = vec3<f32>(x_467.x, x_450.y, x_450.x);
-  let x_851 : f32 = *(x_260);
-  *(x_260) = 0.0;
-  *(x_260) = x_851;
-  let x_273 : ptr<function, f32> = &(uv.y);
+  let x_851 : f32 = uv.y;
+  uv.y = 0.0;
+  uv.y = x_851;
   let x_852 : i32 = *(x_253);
   *(x_253) = 0;
   *(x_253) = x_852;
-  let x_274 : f32 = *(x_273);
+  let x_274 : f32 = uv.y;
   let x_853 : i32 = *(x_200);
   *(x_200) = 0;
   *(x_200) = x_853;
   if ((x_274 > 0.5)) {
-    let x_854 : f32 = *(x_222);
-    *(x_222) = 0.0;
-    *(x_222) = x_854;
+    let x_854 : f32 = uv.x;
+    uv.x = 0.0;
+    uv.x = x_854;
     let x_486 : vec2<f32> = vec2<f32>(x_480.y, x_455.y);
     let x_279 : ptr<private, i32> = &(obj.numbers[6u]);
-    let x_855 : f32 = *(x_256);
-    *(x_256) = 0.0;
-    *(x_256) = x_855;
+    let x_855 : f32 = color.y;
+    color.y = 0.0;
+    color.y = x_855;
     let x_487 : vec2<f32> = vec2<f32>(x_449.z, x_449.y);
-    let x_856 : f32 = *(x_273);
-    *(x_273) = 0.0;
-    *(x_273) = x_856;
+    let x_856 : f32 = uv.y;
+    uv.y = 0.0;
+    uv.y = x_856;
     let x_280 : i32 = *(x_279);
-    let x_857 : f32 = *(x_260);
-    *(x_260) = 0.0;
-    *(x_260) = x_857;
+    let x_857 : f32 = uv.y;
+    uv.y = 0.0;
+    uv.y = x_857;
     let x_858 : i32 = i_2;
     i_2 = 0;
     i_2 = x_858;
@@ -1213,9 +1201,9 @@
     let x_860 : vec2<f32> = uv;
     uv = vec2<f32>(0.0, 0.0);
     uv = x_860;
-    let x_861 : f32 = *(x_208);
-    *(x_208) = 0.0;
-    *(x_208) = x_861;
+    let x_861 : f32 = color.x;
+    color.x = 0.0;
+    color.x = x_861;
     let x_489 : vec2<f32> = vec2<f32>(x_475.y, x_475.x);
     let x_862 : i32 = *(x_279);
     *(x_279) = 0;
@@ -1228,30 +1216,29 @@
     obj = QuicksortObject(array<i32, 10u>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
     obj = x_864;
     color.y = (f32(x_280) + x_283);
-    let x_865 : f32 = *(x_208);
-    *(x_208) = 0.0;
-    *(x_208) = x_865;
+    let x_865 : f32 = color.x;
+    color.x = 0.0;
+    color.x = x_865;
     let x_491 : vec2<f32> = vec2<f32>(vec3<f32>(1.0, 2.0, 3.0).y, x_454.x);
-    let x_866 : f32 = *(x_259);
-    *(x_259) = 0.0;
-    *(x_259) = x_866;
+    let x_866 : f32 = color.y;
+    color.y = 0.0;
+    color.y = x_866;
   }
   let x_492 : vec2<f32> = vec2<f32>(x_455.y, x_455.y);
-  let x_867 : f32 = *(x_205);
-  *(x_205) = 0.0;
-  *(x_205) = x_867;
-  let x_286 : ptr<function, f32> = &(uv.y);
-  let x_287 : f32 = *(x_286);
+  let x_867 : f32 = color.x;
+  color.x = 0.0;
+  color.x = x_867;
+  let x_287 : f32 = uv.y;
   let x_868 : QuicksortObject = obj;
   obj = QuicksortObject(array<i32, 10u>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
   obj = x_868;
   let x_493 : vec2<f32> = vec2<f32>(x_475.x, x_475.y);
-  let x_869 : f32 = *(x_237);
-  *(x_237) = 0.0;
-  *(x_237) = x_869;
-  let x_870 : f32 = *(x_259);
-  *(x_259) = 0.0;
-  *(x_259) = x_870;
+  let x_869 : f32 = uv[0];
+  uv[0] = 0.0;
+  uv[0] = x_869;
+  let x_870 : f32 = color.y;
+  color.y = 0.0;
+  color.y = x_870;
   let x_494 : vec3<f32> = vec3<f32>(x_191.x, x_191.y, x_191.y);
   let x_871 : i32 = *(x_253);
   *(x_253) = 0;
@@ -1260,59 +1247,58 @@
     let x_872 : vec3<f32> = color;
     color = vec3<f32>(0.0, 0.0, 0.0);
     color = x_872;
-    let x_873 : f32 = *(x_208);
-    *(x_208) = 0.0;
-    *(x_208) = x_873;
+    let x_873 : f32 = color.x;
+    color.x = 0.0;
+    color.x = x_873;
     let x_495 : vec3<f32> = vec3<f32>(x_192.y, x_192.x, x_192.y);
     let x_874 : vec3<f32> = color;
     color = vec3<f32>(0.0, 0.0, 0.0);
     color = x_874;
     let x_293 : i32 = obj.numbers[7];
-    let x_875 : f32 = *(x_222);
-    *(x_222) = 0.0;
-    *(x_222) = x_875;
+    let x_875 : f32 = uv.x;
+    uv.x = 0.0;
+    uv.x = x_875;
     let x_496 : vec3<f32> = vec3<f32>(x_475.x, x_467.y, x_467.x);
-    let x_876 : f32 = *(x_259);
-    *(x_259) = 0.0;
-    *(x_259) = x_876;
+    let x_876 : f32 = color.y;
+    color.y = 0.0;
+    color.y = x_876;
     let x_497 : vec2<f32> = vec2<f32>(x_477.x, x_461.y);
     let x_877 : i32 = *(x_200);
     *(x_200) = 0;
     *(x_200) = x_877;
-    let x_878 : f32 = *(x_259);
-    *(x_259) = 0.0;
-    *(x_259) = x_878;
+    let x_878 : f32 = color.y;
+    color.y = 0.0;
+    color.y = x_878;
     let x_498 : vec3<f32> = vec3<f32>(x_478.x, x_478.y, x_478.x);
-    let x_879 : f32 = *(x_205);
-    *(x_205) = 0.0;
-    *(x_205) = x_879;
+    let x_879 : f32 = color.x;
+    color.x = 0.0;
+    color.x = x_879;
     let x_296 : f32 = color.z;
-    let x_880 : f32 = *(x_273);
-    *(x_273) = 0.0;
-    *(x_273) = x_880;
+    let x_880 : f32 = uv.y;
+    uv.y = 0.0;
+    uv.y = x_880;
     let x_499 : vec2<f32> = vec2<f32>(x_184.x, x_184.y);
-    let x_881 : f32 = *(x_209);
-    *(x_209) = 0.0;
-    *(x_209) = x_881;
-    let x_882 : f32 = *(x_286);
-    *(x_286) = 0.0;
-    *(x_286) = x_882;
-    let x_298 : ptr<function, f32> = &(color.z);
-    let x_883 : f32 = *(x_273);
-    *(x_273) = 0.0;
-    *(x_273) = x_883;
+    let x_881 : f32 = uv.x;
+    uv.x = 0.0;
+    uv.x = x_881;
+    let x_882 : f32 = uv.y;
+    uv.y = 0.0;
+    uv.y = x_882;
+    let x_883 : f32 = uv.y;
+    uv.y = 0.0;
+    uv.y = x_883;
     let x_500 : vec3<f32> = vec3<f32>(x_499.y, x_499.y, x_494.z);
-    let x_884 : f32 = *(x_298);
-    *(x_298) = 0.0;
-    *(x_298) = x_884;
-    *(x_298) = (f32(x_293) + x_296);
-    let x_885 : f32 = *(x_256);
-    *(x_256) = 0.0;
-    *(x_256) = x_885;
+    let x_884 : f32 = color.z;
+    color.z = 0.0;
+    color.z = x_884;
+    color.z = (f32(x_293) + x_296);
+    let x_885 : f32 = color.y;
+    color.y = 0.0;
+    color.y = x_885;
     let x_501 : vec2<f32> = vec2<f32>(x_453.x, x_453.z);
-    let x_886 : f32 = *(x_205);
-    *(x_205) = 0.0;
-    *(x_205) = x_886;
+    let x_886 : f32 = color.x;
+    color.x = 0.0;
+    color.x = x_886;
   }
   let x_887 : i32 = i_2;
   i_2 = 0;
@@ -1330,65 +1316,62 @@
   let x_890 : i32 = *(x_300);
   *(x_300) = 0;
   *(x_300) = x_890;
-  let x_891 : f32 = *(x_256);
-  *(x_256) = 0.0;
-  *(x_256) = x_891;
+  let x_891 : f32 = color.y;
+  color.y = 0.0;
+  color.y = x_891;
   let x_504 : vec2<f32> = vec2<f32>(x_453.y, vec2<f32>(0.0, 0.0).x);
-  let x_892 : f32 = *(x_205);
-  *(x_205) = 0.0;
-  *(x_205) = x_892;
-  let x_303 : ptr<function, f32> = &(color.z);
+  let x_892 : f32 = color.x;
+  color.x = 0.0;
+  color.x = x_892;
   let x_505 : vec3<f32> = vec3<f32>(x_504.x, x_504.y, x_504.x);
-  let x_893 : f32 = *(x_303);
-  *(x_303) = 0.0;
-  *(x_303) = x_893;
-  let x_304 : f32 = *(x_303);
-  let x_894 : f32 = *(x_208);
-  *(x_208) = 0.0;
-  *(x_208) = x_894;
+  let x_893 : f32 = color.z;
+  color.z = 0.0;
+  color.z = x_893;
+  let x_304 : f32 = color.z;
+  let x_894 : f32 = color.x;
+  color.x = 0.0;
+  color.x = x_894;
   let x_506 : vec2<f32> = vec2<f32>(x_493.x, x_492.x);
   let x_895 : i32 = *(x_253);
   *(x_253) = 0;
   *(x_253) = x_895;
-  let x_896 : f32 = *(x_286);
-  *(x_286) = 0.0;
-  *(x_286) = x_896;
+  let x_896 : f32 = uv.y;
+  uv.y = 0.0;
+  uv.y = x_896;
   let x_507 : vec2<f32> = vec2<f32>(x_461.x, x_447.x);
-  let x_897 : f32 = *(x_259);
-  *(x_259) = 0.0;
-  *(x_259) = x_897;
-  let x_306 : ptr<function, f32> = &(color.z);
-  *(x_306) = (x_304 + f32(x_301));
+  let x_897 : f32 = color.y;
+  color.y = 0.0;
+  color.y = x_897;
+  color.z = (x_304 + f32(x_301));
   let x_898 : vec2<f32> = uv;
   uv = vec2<f32>(0.0, 0.0);
   uv = x_898;
-  let x_899 : f32 = *(x_222);
-  *(x_222) = 0.0;
-  *(x_222) = x_899;
+  let x_899 : f32 = uv.x;
+  uv.x = 0.0;
+  uv.x = x_899;
   let x_508 : vec3<f32> = vec3<f32>(x_461.y, x_461.x, x_506.y);
-  let x_900 : f32 = *(x_222);
-  *(x_222) = 0.0;
-  *(x_222) = x_900;
+  let x_900 : f32 = uv.x;
+  uv.x = 0.0;
+  uv.x = x_900;
   let x_308 : f32 = uv.x;
-  let x_901 : f32 = *(x_259);
-  *(x_259) = 0.0;
-  *(x_259) = x_901;
-  let x_309 : ptr<function, f32> = &(uv.y);
+  let x_901 : f32 = color.y;
+  color.y = 0.0;
+  color.y = x_901;
   let x_509 : vec3<f32> = vec3<f32>(x_503.y, x_503.x, x_448.z);
-  let x_902 : f32 = *(x_260);
-  *(x_260) = 0.0;
-  *(x_260) = x_902;
-  let x_310 : f32 = *(x_309);
-  let x_903 : f32 = *(x_260);
-  *(x_260) = 0.0;
-  *(x_260) = x_903;
-  let x_904 : f32 = *(x_306);
-  *(x_306) = 0.0;
-  *(x_306) = x_904;
+  let x_902 : f32 = uv.y;
+  uv.y = 0.0;
+  uv.y = x_902;
+  let x_310 : f32 = uv.y;
+  let x_903 : f32 = uv.y;
+  uv.y = 0.0;
+  uv.y = x_903;
+  let x_904 : f32 = color.z;
+  color.z = 0.0;
+  color.z = x_904;
   let x_510 : vec3<f32> = vec3<f32>(vec3<f32>(1.0, 2.0, 3.0).y, x_485.y, x_485.z);
-  let x_905 : f32 = *(x_306);
-  *(x_306) = 0.0;
-  *(x_306) = x_905;
+  let x_905 : f32 = color.z;
+  color.z = 0.0;
+  color.z = x_905;
   let x_906 : i32 = i_2;
   i_2 = 0;
   i_2 = x_906;
@@ -1396,17 +1379,17 @@
   let x_907 : vec3<f32> = color;
   color = vec3<f32>(0.0, 0.0, 0.0);
   color = x_907;
-  let x_908 : f32 = *(x_260);
-  *(x_260) = 0.0;
-  *(x_260) = x_908;
+  let x_908 : f32 = uv.y;
+  uv.y = 0.0;
+  uv.y = x_908;
   let x_512 : vec3<f32> = vec3<f32>(x_455.y, x_455.y, x_455.y);
   let x_909 : i32 = *(x_253);
   *(x_253) = 0;
   *(x_253) = x_909;
   if ((abs((x_308 - x_310)) < 0.25)) {
-    let x_910 : f32 = *(x_209);
-    *(x_209) = 0.0;
-    *(x_209) = x_910;
+    let x_910 : f32 = uv.x;
+    uv.x = 0.0;
+    uv.x = x_910;
     let x_911 : QuicksortObject = obj;
     obj = QuicksortObject(array<i32, 10u>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
     obj = x_911;
@@ -1416,17 +1399,17 @@
     *(x_300) = x_912;
     let x_317 : i32 = obj.numbers[9u];
     let x_514 : vec3<f32> = vec3<f32>(x_474.y, x_474.y, x_474.y);
-    let x_913 : f32 = *(x_260);
-    *(x_260) = 0.0;
-    *(x_260) = x_913;
+    let x_913 : f32 = uv.y;
+    uv.y = 0.0;
+    uv.y = x_913;
     let x_320 : f32 = color.x;
-    let x_914 : f32 = *(x_286);
-    *(x_286) = 0.0;
-    *(x_286) = x_914;
+    let x_914 : f32 = uv.y;
+    uv.y = 0.0;
+    uv.y = x_914;
     let x_515 : vec2<f32> = vec2<f32>(x_502.x, x_502.y);
-    let x_915 : f32 = *(x_205);
-    *(x_205) = 0.0;
-    *(x_205) = x_915;
+    let x_915 : f32 = color.x;
+    color.x = 0.0;
+    color.x = x_915;
     let x_916 : vec3<f32> = color;
     color = vec3<f32>(0.0, 0.0, 0.0);
     color = x_916;
@@ -1434,61 +1417,60 @@
     let x_917 : vec2<f32> = uv;
     uv = vec2<f32>(0.0, 0.0);
     uv = x_917;
-    let x_322 : ptr<function, f32> = &(color.x);
-    let x_918 : f32 = *(x_209);
-    *(x_209) = 0.0;
-    *(x_209) = x_918;
+    let x_918 : f32 = uv.x;
+    uv.x = 0.0;
+    uv.x = x_918;
     let x_517 : vec3<f32> = vec3<f32>(vec2<f32>(0.0, 0.0).x, vec2<f32>(0.0, 0.0).x, vec2<f32>(0.0, 0.0).y);
-    *(x_322) = (f32(x_317) + x_320);
-    let x_919 : f32 = *(x_322);
-    *(x_322) = 0.0;
-    *(x_322) = x_919;
+    color.x = (f32(x_317) + x_320);
+    let x_919 : f32 = color.x;
+    color.x = 0.0;
+    color.x = x_919;
     let x_518 : vec3<f32> = vec3<f32>(x_480.y, x_508.x, x_480.x);
-    let x_920 : f32 = *(x_205);
-    *(x_205) = 0.0;
-    *(x_205) = x_920;
+    let x_920 : f32 = color.x;
+    color.x = 0.0;
+    color.x = x_920;
   }
-  let x_921 : f32 = *(x_309);
-  *(x_309) = 0.0;
-  *(x_309) = x_921;
+  let x_921 : f32 = uv.y;
+  uv.y = 0.0;
+  uv.y = x_921;
   let x_325 : vec3<f32> = color;
-  let x_922 : f32 = *(x_237);
-  *(x_237) = 0.0;
-  *(x_237) = x_922;
+  let x_922 : f32 = uv[0];
+  uv[0] = 0.0;
+  uv[0] = x_922;
   let x_519 : vec3<f32> = vec3<f32>(x_447.x, x_446.x, x_446.y);
   let x_326 : vec3<f32> = normalize(x_325);
-  let x_923 : f32 = *(x_209);
-  *(x_209) = 0.0;
-  *(x_209) = x_923;
+  let x_923 : f32 = uv.x;
+  uv.x = 0.0;
+  uv.x = x_923;
   let x_924 : QuicksortObject = obj;
   obj = QuicksortObject(array<i32, 10u>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
   obj = x_924;
   let x_925 : QuicksortObject = obj;
   obj = QuicksortObject(array<i32, 10u>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
   obj = x_925;
-  let x_926 : f32 = *(x_259);
-  *(x_259) = 0.0;
-  *(x_259) = x_926;
+  let x_926 : f32 = color.y;
+  color.y = 0.0;
+  color.y = x_926;
   let x_520 : vec2<f32> = vec2<f32>(x_506.y, x_519.y);
-  let x_927 : f32 = *(x_259);
-  *(x_259) = 0.0;
-  *(x_259) = x_927;
+  let x_927 : f32 = color.y;
+  color.y = 0.0;
+  color.y = x_927;
   let x_330 : vec4<f32> = vec4<f32>(x_326.x, x_326.y, x_326.z, 1.0);
-  let x_928 : f32 = *(x_309);
-  *(x_309) = 0.0;
-  *(x_309) = x_928;
+  let x_928 : f32 = uv.y;
+  uv.y = 0.0;
+  uv.y = x_928;
   let x_521 : vec3<f32> = vec3<f32>(vec3<f32>(1.0, 2.0, 3.0).y, vec3<f32>(1.0, 2.0, 3.0).y, x_520.y);
-  let x_929 : f32 = *(x_222);
-  *(x_222) = 0.0;
-  *(x_222) = x_929;
+  let x_929 : f32 = uv.x;
+  uv.x = 0.0;
+  uv.x = x_929;
   x_GLF_color = x_330;
   let x_930 : QuicksortObject = obj;
   obj = QuicksortObject(array<i32, 10u>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
   obj = x_930;
   let x_522 : vec3<f32> = vec3<f32>(x_330.w, x_330.y, x_493.x);
-  let x_931 : f32 = *(x_208);
-  *(x_208) = 0.0;
-  *(x_208) = x_931;
+  let x_931 : f32 = color.x;
+  color.x = 0.0;
+  color.x = x_931;
   return;
 }
 
diff --git a/test/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.wgsl
index 4df9f94..132e8f0 100644
--- a/test/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.wgsl
@@ -25,13 +25,9 @@
   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;
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.wgsl b/test/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.wgsl
index 8f6639e..b35920e 100644
--- a/test/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.wgsl
@@ -37,9 +37,8 @@
 
       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);
+        let x_74 : f32 = m44[x_10][x_11];
+        m44[x_10][x_11] = (x_74 + x_72);
         x_8 = (x_11 + 1);
         x_11_phi = x_8;
       }
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.wgsl
index 41e57f4..1fea790 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.wgsl
@@ -55,7 +55,7 @@
           x_56_phi = x_68;
         } else {
           x_76_phi = x_55;
-          if (((f32(x_58) % round(x_49)) <= 0.01)) {
+          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;
           }
@@ -95,8 +95,7 @@
   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;
+  c.x = x_85;
   x_88 = gl_FragCoord.y;
   switch(0u) {
     default: {
@@ -123,7 +122,7 @@
           x_93_phi = x_105;
         } else {
           x_113_phi = x_92;
-          if (((f32(x_95) % round(x_49)) <= 0.01)) {
+          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;
           }
@@ -155,10 +154,9 @@
     }
   }
   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.y = x_122;
+  let x_124 : f32 = c.x;
+  let x_125 : f32 = c.y;
   c.z = (x_124 + x_125);
   x_129_phi = 0;
   loop {
@@ -168,12 +166,11 @@
     } else {
       break;
     }
-    let x_135 : ptr<function, f32> = &(c[x_129]);
-    let x_136 : f32 = *(x_135);
+    let x_136 : f32 = c[x_129];
     if ((x_136 >= 1.0)) {
-      let x_140 : f32 = *(x_135);
-      let x_141 : f32 = *(x_135);
-      *(x_135) = (x_140 * x_141);
+      let x_140 : f32 = c[x_129];
+      let x_141 : f32 = c[x_129];
+      c[x_129] = (x_140 * x_141);
     }
 
     continuing {
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.wgsl
index c2ad2e8..8b6ba81 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.wgsl
@@ -57,7 +57,7 @@
           x_58_phi = x_70;
         } else {
           x_78_phi = x_57;
-          if (((f32(x_60) % round(x_50)) <= 0.01)) {
+          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;
           }
@@ -97,9 +97,8 @@
   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;
+  c.x = x_87;
   x_92 = gl_FragCoord.y;
   switch(0u) {
     default: {
@@ -128,7 +127,7 @@
           x_99_phi = x_111;
         } else {
           x_119_phi = x_98;
-          if (((f32(x_101) % round(x_50)) <= 0.01)) {
+          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;
           }
@@ -160,10 +159,9 @@
     }
   }
   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.y = x_128;
+  let x_130 : f32 = c.x;
+  let x_131 : f32 = c.y;
   c.z = (x_130 + x_131);
   x_135_phi = 0;
   loop {
@@ -173,12 +171,11 @@
     } else {
       break;
     }
-    let x_141 : ptr<function, f32> = &(c[x_135]);
-    let x_142 : f32 = *(x_141);
+    let x_142 : f32 = c[x_135];
     if ((x_142 >= 1.0)) {
-      let x_146 : f32 = *(x_141);
-      let x_147 : f32 = *(x_141);
-      *(x_141) = (x_146 * x_147);
+      let x_146 : f32 = c[x_135];
+      let x_147 : f32 = c[x_135];
+      c[x_135] = (x_146 * x_147);
     }
 
     continuing {
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.wgsl
index 20e6da9..dbdad85 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.wgsl
@@ -55,7 +55,7 @@
           x_56_phi = x_68;
         } else {
           x_76_phi = x_55;
-          if (((f32(x_58) % round(x_49)) <= 0.01)) {
+          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;
           }
@@ -95,8 +95,7 @@
   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;
+  c.x = x_85;
   x_88 = gl_FragCoord.y;
   switch(0u) {
     default: {
@@ -123,7 +122,7 @@
           x_93_phi = x_113;
         } else {
           x_112_phi = x_92;
-          if (((f32(x_95) % round(x_49)) <= 0.01)) {
+          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;
           }
@@ -155,10 +154,9 @@
     }
   }
   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.y = x_122;
+  let x_124 : f32 = c.x;
+  let x_125 : f32 = c.y;
   c.z = (x_124 + x_125);
   x_129_phi = 0;
   loop {
@@ -168,12 +166,11 @@
     } else {
       break;
     }
-    let x_135 : ptr<function, f32> = &(c[x_129]);
-    let x_136 : f32 = *(x_135);
+    let x_136 : f32 = c[x_129];
     if ((x_136 >= 1.0)) {
-      let x_140 : f32 = *(x_135);
-      let x_141 : f32 = *(x_135);
-      *(x_135) = (x_140 * x_141);
+      let x_140 : f32 = c[x_129];
+      let x_141 : f32 = c[x_129];
+      c[x_129] = (x_140 * x_141);
     }
 
     continuing {
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.wgsl
index 5e10336..5502287 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.wgsl
@@ -10,10 +10,10 @@
 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 indexable : array<i32, 256u>;
+  var indexable_1 : array<i32, 256u>;
   var p : f32;
-  var indexable_2 : array<i32, 256>;
+  var indexable_2 : array<i32, 256u>;
   loop {
     var x_247 : bool;
     var x_248_phi : bool;
@@ -24,14 +24,14 @@
     }
     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);
+    indexable = array<i32, 256u>(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);
+      indexable_1 = array<i32, 256u>(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;
@@ -40,7 +40,7 @@
     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);
+      indexable_2 = array<i32, 256u>(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;
@@ -48,9 +48,8 @@
       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);
+    let x_267 : i32 = (*(pos)).y;
+    (*(pos)).y = (x_267 + 1);
   }
   return vec4<f32>(0.0, 0.0, 0.0, 1.0);
 }
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.wgsl
index 3970047..34fe03d 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.wgsl
@@ -10,35 +10,34 @@
 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 indexable : array<i32, 256u>;
+  var indexable_1 : array<i32, 256u>;
   var p : f32;
-  var indexable_2 : array<i32, 256>;
+  var indexable_2 : array<i32, 256u>;
   loop {
     var x_251 : bool;
     var x_252_phi : bool;
-    let x_228 : ptr<function, i32> = &((*(pos)).y);
-    let x_229 : i32 = *(x_228);
+    let x_229 : i32 = (*(pos)).y;
     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);
+    indexable = array<i32, 256u>(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;
+    let x_238 : array<i32, 256u> = indexable;
+    indexable = array<i32, 256u>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 = (*(pos)).y;
+    (*(pos)).y = 0;
+    (*(pos)).y = 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);
+      indexable_1 = array<i32, 256u>(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;
@@ -47,7 +46,7 @@
     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);
+      indexable_2 = array<i32, 256u>(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;
@@ -55,9 +54,8 @@
       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);
+    let x_271 : i32 = (*(pos)).y;
+    (*(pos)).y = (x_271 + 1);
   }
   return vec4<f32>(0.0, 0.0, 0.0, 1.0);
 }
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.wgsl
index 5688188..2e1bc0e 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.wgsl
@@ -62,7 +62,7 @@
           x_59_phi = x_71;
         } else {
           x_79_phi = x_58;
-          if (((f32(x_61) % round(x_52)) <= 0.01)) {
+          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;
           }
@@ -107,8 +107,7 @@
   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;
+  c.x = x_95;
   x_98 = gl_FragCoord.y;
   switch(0u) {
     default: {
@@ -135,7 +134,7 @@
           x_103_phi = x_115;
         } else {
           x_123_phi = x_102;
-          if (((f32(x_105) % round(x_52)) <= 0.01)) {
+          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;
           }
@@ -172,10 +171,9 @@
     }
   }
   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.y = x_139;
+  let x_141 : f32 = c.x;
+  let x_142 : f32 = c.y;
   c.z = (x_141 + x_142);
   x_146_phi = 0;
   loop {
@@ -185,12 +183,11 @@
     } else {
       break;
     }
-    let x_152 : ptr<function, f32> = &(c[x_146]);
-    let x_153 : f32 = *(x_152);
+    let x_153 : f32 = c[x_146];
     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_157 : f32 = c[x_146];
+      let x_158 : f32 = c[x_146];
+      c[x_146] = (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)) {
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.wgsl
index ba37d91..eceedd3 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.wgsl
@@ -34,7 +34,7 @@
     } else {
       let x_106 : f32 = *(thirty_two);
       x_113_phi = x_91;
-      if (((f32(x_94) % round(x_106)) <= 0.01)) {
+      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;
       }
@@ -71,16 +71,14 @@
   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;
+  c.x = 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.y = x_61;
+  let x_63 : f32 = c.x;
+  let x_64 : f32 = c.y;
   c.z = (x_63 + x_64);
   x_68_phi = 0;
   loop {
@@ -90,12 +88,11 @@
     } else {
       break;
     }
-    let x_74 : ptr<function, f32> = &(c[x_68]);
-    let x_75 : f32 = *(x_74);
+    let x_75 : f32 = c[x_68];
     if ((x_75 >= 1.0)) {
-      let x_79 : f32 = *(x_74);
-      let x_80 : f32 = *(x_74);
-      *(x_74) = (x_79 * x_80);
+      let x_79 : f32 = c[x_68];
+      let x_80 : f32 = c[x_68];
+      c[x_68] = (x_79 * x_80);
     }
 
     continuing {
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.wgsl
index 57edb9b..503ae49 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.wgsl
@@ -41,7 +41,7 @@
     } else {
       let x_118 : f32 = *(thirty_two);
       x_125_phi = x_104;
-      if (((f32(x_107) % round(x_118)) <= 0.01)) {
+      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;
       }
@@ -79,14 +79,13 @@
   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;
+  c.x = 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_67 : f32 = c.x;
   let x_68 : vec3<f32> = c;
   x_54 = x_68;
   let x_70 : f32 = x_54.y;
@@ -99,17 +98,16 @@
     } else {
       break;
     }
-    let x_80 : ptr<function, f32> = &(c[x_74]);
-    let x_81 : f32 = *(x_80);
+    let x_81 : f32 = c[x_74];
     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);
+      let x_92 : f32 = c[x_74];
+      let x_93 : f32 = c[x_74];
+      c[x_74] = (x_92 * x_93);
     }
 
     continuing {
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.wgsl
index d2eec41..a1ef230 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.wgsl
@@ -36,42 +36,34 @@
   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);
+      let x_95 : f32 = (*(p)).x;
+      let x_97 : f32 = (*(a_1)).x;
+      let x_100 : f32 = (*(p)).y;
+      let x_102 : f32 = (*(a_1)).y;
+      let x_106 : f32 = (*(b_1)).x;
+      let x_107 : f32 = (*(a_1)).x;
+      let x_110 : f32 = (*(b_1)).y;
+      let x_111 : f32 = (*(a_1)).y;
       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);
+      let x_115 : f32 = (*(p)).x;
+      let x_116 : f32 = (*(b_1)).x;
+      let x_118 : f32 = (*(p)).y;
+      let x_119 : f32 = (*(b_1)).y;
+      let x_123 : f32 = (*(c)).x;
+      let x_124 : f32 = (*(b_1)).x;
+      let x_127 : f32 = (*(c)).y;
+      let x_128 : f32 = (*(b_1)).y;
       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));
+      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_140 = ((x_114 >= 0.0) & (x_131 >= 0.0));
         x_141_phi = x_140;
       }
       let x_141 : bool = x_141_phi;
@@ -81,22 +73,22 @@
         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);
+      let x_145 : f32 = (*(p)).x;
+      let x_146 : f32 = (*(c)).x;
+      let x_148 : f32 = (*(p)).y;
+      let x_149 : f32 = (*(c)).y;
+      let x_152 : f32 = (*(a_1)).x;
+      let x_153 : f32 = (*(c)).x;
+      let x_155 : f32 = (*(a_1)).y;
+      let x_156 : f32 = (*(c)).y;
       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));
+      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_168 = ((x_114 >= 0.0) & (x_159 >= 0.0));
         x_169_phi = x_168;
       }
       let x_169 : bool = x_169_phi;
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.wgsl
index 11cfd54..7c75dff 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.wgsl
@@ -31,72 +31,64 @@
   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);
+  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_100 : f32 = (*(a_1)).x;
+  let x_103 : f32 = (*(b_1)).y;
+  let x_104 : f32 = (*(a_1)).y;
   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);
+  let x_108 : f32 = (*(p)).x;
+  let x_109 : f32 = (*(b_1)).x;
+  let x_111 : f32 = (*(p)).y;
+  let x_112 : f32 = (*(b_1)).y;
+  let x_116 : f32 = (*(c)).x;
+  let x_117 : f32 = (*(b_1)).x;
+  let x_120 : f32 = (*(c)).y;
+  let x_121 : f32 = (*(b_1)).y;
   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));
+  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_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);
+  let x_142 : f32 = (*(p)).x;
+  let x_143 : f32 = (*(c)).x;
+  let x_145 : f32 = (*(p)).y;
+  let x_146 : f32 = (*(c)).y;
+  let x_149 : f32 = (*(a_1)).x;
+  let x_150 : f32 = (*(c)).x;
+  let x_152 : f32 = (*(a_1)).y;
+  let x_153 : f32 = (*(c)).y;
   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));
+  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_169 = ((x_165 >= 0.0) & (x_167 >= 0.0));
     x_170_phi = x_169;
   }
   let x_170 : bool = x_170_phi;
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.wgsl
index d58c35b..d4883c7 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.wgsl
@@ -38,17 +38,16 @@
   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_107 : f32 = (*(c)).y;
     let x_108 : vec2<f32> = vec2<f32>(0.0, x_107);
     if (true) {
-      let x_112 : f32 = *(x_106);
+      let x_112 : f32 = (*(c)).y;
       x_97 = x_112;
     } else {
       x_97 = 1.0;
     }
     let x_113 : f32 = x_97;
-    let x_114 : f32 = *(x_106);
+    let x_114 : f32 = (*(c)).y;
     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;
@@ -57,76 +56,68 @@
   }
   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_120 : f32 = (*(c)).y;
+  let x_121 : f32 = (*(c)).y;
   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);
+  let x_125 : f32 = (*(p)).x;
+  let x_127 : f32 = (*(a_1)).x;
+  let x_130 : f32 = (*(p)).y;
+  let x_132 : f32 = (*(a_1)).y;
+  let x_136 : f32 = (*(b_1)).x;
+  let x_137 : f32 = (*(a_1)).x;
+  let x_140 : f32 = (*(b_1)).y;
+  let x_141 : f32 = (*(a_1)).y;
   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_145 : f32 = (*(p)).x;
+  let x_146 : f32 = (*(b_1)).x;
+  let x_148 : f32 = (*(p)).y;
+  let x_149 : f32 = (*(b_1)).y;
+  let x_153 : f32 = (*(c)).x;
+  let x_154 : f32 = (*(b_1)).x;
   let x_156 : f32 = clamp_y;
-  let x_157 : f32 = *(x_139);
+  let x_157 : f32 = (*(b_1)).y;
   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));
+  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_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);
+  let x_178 : f32 = (*(p)).x;
+  let x_179 : f32 = (*(c)).x;
+  let x_181 : f32 = (*(p)).y;
+  let x_182 : f32 = (*(c)).y;
+  let x_185 : f32 = (*(a_1)).x;
+  let x_186 : f32 = (*(c)).x;
+  let x_188 : f32 = (*(a_1)).y;
+  let x_189 : f32 = (*(c)).y;
   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));
+  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_205 = ((x_201 >= 0.0) & (x_203 >= 0.0));
     x_206_phi = x_205;
   }
   let x_206 : bool = x_206_phi;
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.wgsl
index 414b559..4f8753d 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.wgsl
@@ -23,20 +23,14 @@
   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);
+  let x_70 : f32 = (*(p)).x;
+  let x_72 : f32 = (*(a)).x;
+  let x_75 : f32 = (*(p)).y;
+  let x_77 : f32 = (*(a)).y;
+  let x_81 : f32 = (*(b)).x;
+  let x_82 : f32 = (*(a)).x;
+  let x_85 : f32 = (*(b)).y;
+  let x_86 : f32 = (*(a)).y;
   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;
@@ -45,16 +39,14 @@
   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);
+  let x_100 : f32 = (*(p)).x;
+  let x_101 : f32 = (*(b)).x;
+  let x_103 : f32 = (*(p)).y;
+  let x_104 : f32 = (*(b)).y;
+  let x_108 : f32 = (*(c)).x;
+  let x_109 : f32 = (*(b)).x;
+  let x_112 : f32 = (*(c)).y;
+  let x_113 : f32 = (*(b)).y;
   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;
@@ -64,24 +56,24 @@
   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));
+  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_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);
+  let x_140 : f32 = (*(p)).x;
+  let x_141 : f32 = (*(c)).x;
+  let x_143 : f32 = (*(p)).y;
+  let x_144 : f32 = (*(c)).y;
+  let x_147 : f32 = (*(a)).x;
+  let x_148 : f32 = (*(c)).x;
+  let x_150 : f32 = (*(a)).y;
+  let x_151 : f32 = (*(c)).y;
   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;
@@ -90,10 +82,10 @@
   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));
+  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_172 = ((x_99 >= 0.0) & (x_164 >= 0.0));
     x_173_phi = x_172;
   }
   let x_173 : bool = x_173_phi;
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.wgsl
index c9e248c..2044a9e 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.wgsl
@@ -30,20 +30,14 @@
   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);
+  let x_82 : f32 = (*(p)).x;
+  let x_84 : f32 = (*(a)).x;
+  let x_87 : f32 = (*(p)).y;
+  let x_89 : f32 = (*(a)).y;
+  let x_93 : f32 = (*(b)).x;
+  let x_94 : f32 = (*(a)).x;
+  let x_97 : f32 = (*(b)).y;
+  let x_98 : f32 = (*(a)).y;
   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;
@@ -52,16 +46,14 @@
   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);
+  let x_112 : f32 = (*(p)).x;
+  let x_113 : f32 = (*(b)).x;
+  let x_115 : f32 = (*(p)).y;
+  let x_116 : f32 = (*(b)).y;
+  let x_120 : f32 = (*(c)).x;
+  let x_121 : f32 = (*(b)).x;
+  let x_124 : f32 = (*(c)).y;
+  let x_125 : f32 = (*(b)).y;
   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;
@@ -71,10 +63,10 @@
   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));
+  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_147 = ((x_111 >= 0.0) & (x_138 >= 0.0));
     x_148_phi = x_147;
   }
   var x_153_phi : i32;
@@ -115,14 +107,14 @@
     }
     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);
+  let x_171 : f32 = (*(p)).x;
+  let x_172 : f32 = (*(c)).x;
+  let x_174 : f32 = (*(p)).y;
+  let x_175 : f32 = (*(c)).y;
+  let x_178 : f32 = (*(a)).x;
+  let x_179 : f32 = (*(c)).x;
+  let x_181 : f32 = (*(a)).y;
+  let x_182 : f32 = (*(c)).y;
   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;
@@ -131,10 +123,10 @@
   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));
+  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_203 = ((x_111 >= 0.0) & (x_195 >= 0.0));
     x_204_phi = x_203;
   }
   let x_204 : bool = x_204_phi;