transform/msl: Run InlinePointerLets and Simplify

This will be relied on by the upcoming arrayLength transform.

Update test expectations.

Change-Id: Ib74b647abcd6f4393f9899ce40bbf06f6e53e7f4
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/55180
Commit-Queue: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
diff --git a/src/transform/msl.cc b/src/transform/msl.cc
index 8b73c42..10e3ea2 100644
--- a/src/transform/msl.cc
+++ b/src/transform/msl.cc
@@ -26,9 +26,11 @@
 #include "src/sem/variable.h"
 #include "src/transform/canonicalize_entry_point_io.h"
 #include "src/transform/external_texture_transform.h"
+#include "src/transform/inline_pointer_lets.h"
 #include "src/transform/manager.h"
 #include "src/transform/pad_array_elements.h"
 #include "src/transform/promote_initializers_to_const_var.h"
+#include "src/transform/simplify.h"
 #include "src/transform/wrap_arrays_in_structs.h"
 
 namespace tint {
@@ -45,6 +47,8 @@
   manager.Add<PromoteInitializersToConstVar>();
   manager.Add<WrapArraysInStructs>();
   manager.Add<PadArrayElements>();
+  manager.Add<InlinePointerLets>();
+  manager.Add<Simplify>();
   data.Add<CanonicalizeEntryPointIO::Config>(
       CanonicalizeEntryPointIO::BuiltinStyle::kParameter);
   auto out = manager.Run(in, data);
diff --git a/src/transform/msl_test.cc b/src/transform/msl_test.cc
index 21553f2..6e19c44 100644
--- a/src/transform/msl_test.cc
+++ b/src/transform/msl_test.cc
@@ -144,10 +144,8 @@
 fn main() {
   [[internal(disable_validation__function_var_storage_class)]] var<private> tint_symbol : f32;
   [[internal(disable_validation__function_var_storage_class)]] var<workgroup> tint_symbol_1 : f32;
-  let p_ptr : ptr<private, f32> = &(tint_symbol);
-  let w_ptr : ptr<workgroup, f32> = &(tint_symbol_1);
-  let x : f32 = (*(p_ptr) + *(w_ptr));
-  *(p_ptr) = x;
+  let x : f32 = (tint_symbol + tint_symbol_1);
+  tint_symbol = x;
 }
 )";
 
diff --git a/test/array/assign_to_subexpr.wgsl.expected.msl b/test/array/assign_to_subexpr.wgsl.expected.msl
index 2b62433..9b47792 100644
--- a/test/array/assign_to_subexpr.wgsl.expected.msl
+++ b/test/array/assign_to_subexpr.wgsl.expected.msl
@@ -16,13 +16,10 @@
   tint_array_wrapper dst = {};
   S dst_struct = {};
   tint_array_wrapper_1 dst_array = {};
-  thread tint_array_wrapper* const dst_ptr = &(dst);
-  thread S* const dst_struct_ptr = &(dst_struct);
-  thread tint_array_wrapper_1* const dst_array_ptr = &(dst_array);
   dst_struct.arr = src;
   dst_array.arr[1] = src;
-  *(dst_ptr) = src;
-  (*(dst_struct_ptr)).arr = src;
-  (*(dst_array_ptr)).arr[0] = src;
+  dst = src;
+  dst_struct.arr = src;
+  dst_array.arr[0] = src;
 }
 
diff --git a/test/bug/tint/413.spvasm.expected.msl b/test/bug/tint/413.spvasm.expected.msl
index ad93adb..ac3858a 100644
--- a/test/bug/tint/413.spvasm.expected.msl
+++ b/test/bug/tint/413.spvasm.expected.msl
@@ -1,17 +1,19 @@
-SKIP: FAILED
+#include <metal_stdlib>
 
+using namespace metal;
+void main_1(texture2d<uint, access::read> tint_symbol_1, texture2d<uint, access::write> tint_symbol_2) {
+  uint4 srcValue = 0u;
+  uint4 const x_18 = tint_symbol_1.read(uint2(int2(0, 0)));
+  srcValue = x_18;
+  uint const x_22 = srcValue.x;
+  srcValue.x = (x_22 + as_type<uint>(1));
+  uint4 const x_27 = srcValue;
+  tint_symbol_2.write(x_27, uint2(int2(0, 0)));
+  return;
+}
 
+kernel void tint_symbol(texture2d<uint, access::read> tint_symbol_3 [[texture(0)]], texture2d<uint, access::write> tint_symbol_4 [[texture(1)]]) {
+  main_1(tint_symbol_3, tint_symbol_4);
+  return;
+}
 
-Validation Failure:
-
-Compilation failed: 
-
-program_source:6:22: error: use of undeclared identifier 'Src'
-  uint4 const x_18 = Src.read(int2(0, 0));
-                     ^
-program_source:8:29: error: address of vector element requested
-  thread uint* const x_21 = &(srcValue.x);
-                            ^ ~~~~~~~~~~
-program_source:12:3: error: use of undeclared identifier 'Dst'
-  Dst.write(x_27, int2(0, 0));
-  ^
diff --git a/test/bug/tint/453.wgsl.expected.msl b/test/bug/tint/453.wgsl.expected.msl
index fc9acbe..e5de3d4 100644
--- a/test/bug/tint/453.wgsl.expected.msl
+++ b/test/bug/tint/453.wgsl.expected.msl
@@ -1,25 +1,14 @@
-SKIP: FAILED
+#include <metal_stdlib>
 
-bug/tint/453.wgsl:1:79 warning: use of deprecated language feature: access control is expected as last parameter of storage textures
-[[group(0), binding(0)]] var Src : [[access(read)]] texture_storage_2d<r32uint>;
-                                                                              ^
+using namespace metal;
+kernel void tint_symbol(texture2d<uint, access::read> tint_symbol_1 [[texture(0)]], texture2d<uint, access::write> tint_symbol_2 [[texture(1)]]) {
+  uint4 srcValue = 0u;
+  uint4 const x_22 = tint_symbol_1.read(uint2(int2(0, 0)));
+  srcValue = x_22;
+  uint const x_24 = srcValue.x;
+  uint const x_25 = (x_24 + 1u);
+  uint4 const x_27 = srcValue;
+  tint_symbol_2.write(x_27.xxxx, uint2(int2(0, 0)));
+  return;
+}
 
-bug/tint/453.wgsl:2:80 warning: use of deprecated language feature: access control is expected as last parameter of storage textures
-[[group(0), binding(1)]] var Dst : [[access(write)]] texture_storage_2d<r32uint>;
-                                                                               ^
-
-
-
-Validation Failure:
-
-Compilation failed: 
-
-program_source:6:22: error: use of undeclared identifier 'Src'
-  uint4 const x_22 = Src.read(int2(0, 0));
-                     ^
-program_source:8:29: error: address of vector element requested
-  thread uint* const x_23 = &(srcValue.x);
-                            ^ ~~~~~~~~~~
-program_source:12:3: error: use of undeclared identifier 'Dst'
-  Dst.write(x_27.xxxx, int2(0, 0));
-  ^
diff --git a/test/bug/tint/492.wgsl.expected.msl b/test/bug/tint/492.wgsl.expected.msl
index ddf883f..b7caff1 100644
--- a/test/bug/tint/492.wgsl.expected.msl
+++ b/test/bug/tint/492.wgsl.expected.msl
@@ -6,8 +6,7 @@
 };
 
 kernel void tint_symbol(device S& buf [[buffer(0)]]) {
-  device int* const p = &(buf.a);
-  *(p) = 12;
+  buf.a = 12;
   return;
 }
 
diff --git a/test/ptr_ref/access/matrix.wgsl.expected.msl b/test/ptr_ref/access/matrix.wgsl.expected.msl
index 1a95911..75c13af 100644
--- a/test/ptr_ref/access/matrix.wgsl.expected.msl
+++ b/test/ptr_ref/access/matrix.wgsl.expected.msl
@@ -3,8 +3,7 @@
 using namespace metal;
 kernel void tint_symbol() {
   float3x3 m = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));
-  thread float3* const v = &(m[1]);
-  *(v) = float3(5.0f, 5.0f, 5.0f);
+  m[1] = float3(5.0f, 5.0f, 5.0f);
   return;
 }
 
diff --git a/test/ptr_ref/access/vector.wgsl.expected.msl b/test/ptr_ref/access/vector.wgsl.expected.msl
index 87122cf..6625cdb 100644
--- a/test/ptr_ref/access/vector.wgsl.expected.msl
+++ b/test/ptr_ref/access/vector.wgsl.expected.msl
@@ -1,12 +1,9 @@
-SKIP: crbug.com/tint/816
-
 #include <metal_stdlib>
 
 using namespace metal;
 kernel void tint_symbol() {
   float3 v = float3(1.0f, 2.0f, 3.0f);
-  thread float* const f = &(v.y);
-  *(f) = 5.0f;
+  v.y = 5.0f;
   return;
 }
 
diff --git a/test/ptr_ref/copy/ptr_copy.spvasm.expected.msl b/test/ptr_ref/copy/ptr_copy.spvasm.expected.msl
index 5495c63..ff7940b 100644
--- a/test/ptr_ref/copy/ptr_copy.spvasm.expected.msl
+++ b/test/ptr_ref/copy/ptr_copy.spvasm.expected.msl
@@ -3,8 +3,6 @@
 using namespace metal;
 void main_1() {
   uint x_10 = 0u;
-  thread uint* const x_1 = &(x_10);
-  thread uint* const x_2 = x_1;
   return;
 }
 
diff --git a/test/ptr_ref/load/local/ptr_function.wgsl.expected.msl b/test/ptr_ref/load/local/ptr_function.wgsl.expected.msl
index ce60e0c..e7b87bb 100644
--- a/test/ptr_ref/load/local/ptr_function.wgsl.expected.msl
+++ b/test/ptr_ref/load/local/ptr_function.wgsl.expected.msl
@@ -3,8 +3,7 @@
 using namespace metal;
 kernel void tint_symbol() {
   int i = 123;
-  thread int* const p = &(i);
-  int const use = (*(p) + 1);
+  int const use = (i + 1);
   return;
 }
 
diff --git a/test/ptr_ref/load/local/ptr_private.wgsl.expected.msl b/test/ptr_ref/load/local/ptr_private.wgsl.expected.msl
index c600e5b..5ceee0a 100644
--- a/test/ptr_ref/load/local/ptr_private.wgsl.expected.msl
+++ b/test/ptr_ref/load/local/ptr_private.wgsl.expected.msl
@@ -3,8 +3,7 @@
 using namespace metal;
 kernel void tint_symbol() {
   thread int tint_symbol_1 = 123;
-  thread int* const p = &(tint_symbol_1);
-  int const use = (*(p) + 1);
+  int const use = (tint_symbol_1 + 1);
   return;
 }
 
diff --git a/test/ptr_ref/load/local/ptr_storage.wgsl.expected.msl b/test/ptr_ref/load/local/ptr_storage.wgsl.expected.msl
index 17d0c1b..c00663c 100644
--- a/test/ptr_ref/load/local/ptr_storage.wgsl.expected.msl
+++ b/test/ptr_ref/load/local/ptr_storage.wgsl.expected.msl
@@ -6,8 +6,7 @@
 };
 
 kernel void tint_symbol(device S& v [[buffer(0)]]) {
-  device int* const p = &(v.a);
-  int const use = (*(p) + 1);
+  int const use = (v.a + 1);
   return;
 }
 
diff --git a/test/ptr_ref/load/local/ptr_uniform.wgsl.expected.msl b/test/ptr_ref/load/local/ptr_uniform.wgsl.expected.msl
index 9008b2f..5aeb081 100644
--- a/test/ptr_ref/load/local/ptr_uniform.wgsl.expected.msl
+++ b/test/ptr_ref/load/local/ptr_uniform.wgsl.expected.msl
@@ -6,8 +6,7 @@
 };
 
 kernel void tint_symbol(constant S& v [[buffer(0)]]) {
-  constant int* const p = &(v.a);
-  int const use = (*(p) + 1);
+  int const use = (v.a + 1);
   return;
 }
 
diff --git a/test/ptr_ref/load/local/ptr_workgroup.wgsl.expected.msl b/test/ptr_ref/load/local/ptr_workgroup.wgsl.expected.msl
index 1f4dfe8..4c51f84 100644
--- a/test/ptr_ref/load/local/ptr_workgroup.wgsl.expected.msl
+++ b/test/ptr_ref/load/local/ptr_workgroup.wgsl.expected.msl
@@ -4,8 +4,7 @@
 kernel void tint_symbol() {
   threadgroup int tint_symbol_1 = 0;
   tint_symbol_1 = 123;
-  threadgroup int* const p = &(tint_symbol_1);
-  int const use = (*(p) + 1);
+  int const use = (tint_symbol_1 + 1);
   return;
 }
 
diff --git a/test/ptr_ref/store/local/i32.wgsl.expected.msl b/test/ptr_ref/store/local/i32.wgsl.expected.msl
index 3c243ed..bde2867 100644
--- a/test/ptr_ref/store/local/i32.wgsl.expected.msl
+++ b/test/ptr_ref/store/local/i32.wgsl.expected.msl
@@ -3,9 +3,8 @@
 using namespace metal;
 kernel void tint_symbol() {
   int i = 123;
-  thread int* const p = &(i);
-  *(p) = 123;
-  *(p) = ((100 + 20) + 3);
+  i = 123;
+  i = ((100 + 20) + 3);
   return;
 }
 
diff --git a/test/types/function_scope_declarations.wgsl.expected.msl b/test/types/function_scope_declarations.wgsl.expected.msl
index 3587c45..0c50b02 100644
--- a/test/types/function_scope_declarations.wgsl.expected.msl
+++ b/test/types/function_scope_declarations.wgsl.expected.msl
@@ -28,9 +28,6 @@
   tint_array_wrapper const arr_let = {.arr={}};
   S struct_var = {};
   S const struct_let = {};
-  thread float* const ptr_f32 = &(f32_var);
-  thread float4* const ptr_vec = &(v4f32_var);
-  thread tint_array_wrapper* const ptr_arr = &(arr_var);
   return;
 }