diff --git a/test/tint/bug/dawn/947.wgsl.expected.ir.msl b/test/tint/bug/dawn/947.wgsl.expected.ir.msl
index ff29fd4..e2287b6 100644
--- a/test/tint/bug/dawn/947.wgsl.expected.ir.msl
+++ b/test/tint/bug/dawn/947.wgsl.expected.ir.msl
@@ -1,3 +1,5 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 struct VertexOutputs {
@@ -70,3 +72,22 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.continue_execution=(&continue_execution)};
   return fs_main_outputs{.tint_symbol=fs_main_inner(inputs.texcoord, tint_module_vars)};
 }
+program_source:64:94: error: call to deleted constructor of 'texture2d<float, access::sample>'
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.uniforms=uniforms};
+                                                                                             ^
+/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/lib/clang/32023.194/include/metal/metal_texture:6083:3: note: 'texture2d' has been explicitly marked deleted here
+  texture2d() thread = delete;
+  ^
+program_source:14:36: note: in implicit initialization of field 'myTexture' with omitted initializer
+  texture2d<float, access::sample> myTexture;
+                                   ^
+program_source:70:117: error: call to deleted constructor of 'texture2d<float, access::sample>'
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.continue_execution=(&continue_execution)};
+                                                                                                                    ^
+/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/lib/clang/32023.194/include/metal/metal_texture:6083:3: note: 'texture2d' has been explicitly marked deleted here
+  texture2d() thread = delete;
+  ^
+program_source:14:36: note: in implicit initialization of field 'myTexture' with omitted initializer
+  texture2d<float, access::sample> myTexture;
+                                   ^
+
diff --git a/test/tint/bug/fxc/gradient_in_varying_loop/1112.wgsl.expected.ir.msl b/test/tint/bug/fxc/gradient_in_varying_loop/1112.wgsl.expected.ir.msl
index e16596d..8d2fb0e 100644
--- a/test/tint/bug/fxc/gradient_in_varying_loop/1112.wgsl.expected.ir.msl
+++ b/test/tint/bug/fxc/gradient_in_varying_loop/1112.wgsl.expected.ir.msl
@@ -1,3 +1,5 @@
+SKIP: FAILED
+
 #include <metal_stdlib>
 using namespace metal;
 struct tint_module_vars_struct {
@@ -59,3 +61,16 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.Sampler=Sampler, .randomTexture=randomTexture};
   return tint_symbol_outputs{.tint_symbol_1=tint_symbol_inner(inputs.vUV, tint_module_vars)};
 }
+program_source:49:19: warning: unused variable 'sampleDepth' [-Wunused-variable]
+      float const sampleDepth = 0.0f;
+                  ^
+program_source:59:122: error: call to deleted constructor of 'texture2d<float, access::sample>'
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.Sampler=Sampler, .randomTexture=randomTexture};
+                                                                                                                         ^
+/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/lib/clang/32023.194/include/metal/metal_texture:6083:3: note: 'texture2d' has been explicitly marked deleted here
+  texture2d() thread = delete;
+  ^
+program_source:6:36: note: in implicit initialization of field 'depthTexture' with omitted initializer
+  texture2d<float, access::sample> depthTexture;
+                                   ^
+
diff --git a/test/tint/bug/tint/1739.wgsl.expected.ir.msl b/test/tint/bug/tint/1739.wgsl.expected.ir.msl
index 9825bda..e32aa8e 100644
--- a/test/tint/bug/tint/1739.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1739.wgsl.expected.ir.msl
@@ -38,7 +38,7 @@
   float3 const v_2 = float3(params.D);
   float3 const v_3 = abs(v);
   float3 const v_4 = sign(v);
-  return select((v_4 * (pow(((params.A * v_3) + params.B), v_1) + params.E)), (v_4 * ((params.C * v_3) + params.F)), (v_3 < v_2));
+  return select((v_4 * (powr(((params.A * v_3) + params.B), v_1) + params.E)), (v_4 * ((params.C * v_3) + params.F)), (v_3 < v_2));
 }
 float4 tint_TextureLoadExternal(texture2d<float, access::sample> plane_0, texture2d<float, access::sample> plane_1, tint_ExternalTextureParams params, uint2 coords) {
   float2 const v_5 = rint((params.loadTransform * float3(float2(min(coords, params.visibleSize)), 1.0f)));
diff --git a/test/tint/bug/tint/977.spvasm.expected.ir.msl b/test/tint/bug/tint/977.spvasm.expected.ir.msl
index a0f1646..2b6f049 100644
--- a/test/tint/bug/tint/977.spvasm.expected.ir.msl
+++ b/test/tint/bug/tint/977.spvasm.expected.ir.msl
@@ -42,11 +42,11 @@
   float const x_21 = (*b);
   if (!((rint((x_21 - (2.0f * floor((x_21 / 2.0f))))) == 1.0f))) {
     float const v = abs((*a));
-    x_26 = pow(v, (*b));
+    x_26 = powr(v, (*b));
   } else {
     float const v_1 = sign((*a));
     float const v_2 = abs((*a));
-    x_26 = (v_1 * pow(v_2, (*b)));
+    x_26 = (v_1 * powr(v_2, (*b)));
   }
   float const x_41 = x_26;
   return x_41;
diff --git a/test/tint/builtins/gen/literal/all/353d6a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/all/353d6a.wgsl.expected.ir.msl
index 32c27e2..1689551 100644
--- a/test/tint/builtins/gen/literal/all/353d6a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/all/353d6a.wgsl.expected.ir.msl
@@ -14,7 +14,7 @@
 
 int all_353d6a() {
   bool res = true;
-  return select(0, 1, all(!(res)));
+  return select(0, 1, all((res == false)));
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/literal/all/986c7b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/all/986c7b.wgsl.expected.ir.msl
index 84a3ac3..db5fb64 100644
--- a/test/tint/builtins/gen/literal/all/986c7b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/all/986c7b.wgsl.expected.ir.msl
@@ -14,7 +14,7 @@
 
 int all_986c7b() {
   bool res = true;
-  return select(0, 1, all(!(res)));
+  return select(0, 1, all((res == false)));
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/literal/all/bd2dba.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/all/bd2dba.wgsl.expected.ir.msl
index 671d1ba..06421aa 100644
--- a/test/tint/builtins/gen/literal/all/bd2dba.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/all/bd2dba.wgsl.expected.ir.msl
@@ -14,7 +14,7 @@
 
 int all_bd2dba() {
   bool res = true;
-  return select(0, 1, all(!(res)));
+  return select(0, 1, all((res == false)));
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/literal/all/f46790.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/all/f46790.wgsl.expected.ir.msl
index db07e7c..908398b 100644
--- a/test/tint/builtins/gen/literal/all/f46790.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/all/f46790.wgsl.expected.ir.msl
@@ -14,7 +14,7 @@
 
 int all_f46790() {
   bool res = true;
-  return select(0, 1, all(!(res)));
+  return select(0, 1, all((res == false)));
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/literal/any/083428.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/any/083428.wgsl.expected.ir.msl
index ae4d33c..1e0371e 100644
--- a/test/tint/builtins/gen/literal/any/083428.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/any/083428.wgsl.expected.ir.msl
@@ -14,7 +14,7 @@
 
 int any_083428() {
   bool res = true;
-  return select(0, 1, all(!(res)));
+  return select(0, 1, all((res == false)));
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/literal/any/0e3e58.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/any/0e3e58.wgsl.expected.ir.msl
index 51e856a..a5efbad 100644
--- a/test/tint/builtins/gen/literal/any/0e3e58.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/any/0e3e58.wgsl.expected.ir.msl
@@ -14,7 +14,7 @@
 
 int any_0e3e58() {
   bool res = true;
-  return select(0, 1, all(!(res)));
+  return select(0, 1, all((res == false)));
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/literal/any/2ab91a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/any/2ab91a.wgsl.expected.ir.msl
index 9392b2f..b9e6401 100644
--- a/test/tint/builtins/gen/literal/any/2ab91a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/any/2ab91a.wgsl.expected.ir.msl
@@ -14,7 +14,7 @@
 
 int any_2ab91a() {
   bool res = true;
-  return select(0, 1, all(!(res)));
+  return select(0, 1, all((res == false)));
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/literal/any/e755c1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/any/e755c1.wgsl.expected.ir.msl
index 0a1b24a..bbe9f28 100644
--- a/test/tint/builtins/gen/literal/any/e755c1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/any/e755c1.wgsl.expected.ir.msl
@@ -14,7 +14,7 @@
 
 int any_e755c1() {
   bool res = true;
-  return select(0, 1, all(!(res)));
+  return select(0, 1, all((res == false)));
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/literal/select/c31f9e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/c31f9e.wgsl.expected.ir.msl
index 012dc95..93359ac 100644
--- a/test/tint/builtins/gen/literal/select/c31f9e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/c31f9e.wgsl.expected.ir.msl
@@ -14,7 +14,7 @@
 
 int select_c31f9e() {
   bool res = true;
-  return select(0, 1, all(!(res)));
+  return select(0, 1, all((res == false)));
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.ir.msl
index 7e2b374..9d46e41 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.ir.msl
@@ -46,7 +46,7 @@
   float3 const v_2 = float3(params.D);
   float3 const v_3 = abs(v);
   float3 const v_4 = sign(v);
-  return select((v_4 * (pow(((params.A * v_3) + params.B), v_1) + params.E)), (v_4 * ((params.C * v_3) + params.F)), (v_3 < v_2));
+  return select((v_4 * (powr(((params.A * v_3) + params.B), v_1) + params.E)), (v_4 * ((params.C * v_3) + params.F)), (v_3 < v_2));
 }
 float4 tint_TextureLoadExternal(texture2d<float, access::sample> plane_0, texture2d<float, access::sample> plane_1, tint_ExternalTextureParams params, uint2 coords) {
   float2 const v_5 = rint((params.loadTransform * float3(float2(min(coords, params.visibleSize)), 1.0f)));
diff --git a/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.ir.msl
index 57d8e1d..3283a2a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.ir.msl
@@ -46,7 +46,7 @@
   float3 const v_2 = float3(params.D);
   float3 const v_3 = abs(v);
   float3 const v_4 = sign(v);
-  return select((v_4 * (pow(((params.A * v_3) + params.B), v_1) + params.E)), (v_4 * ((params.C * v_3) + params.F)), (v_3 < v_2));
+  return select((v_4 * (powr(((params.A * v_3) + params.B), v_1) + params.E)), (v_4 * ((params.C * v_3) + params.F)), (v_3 < v_2));
 }
 float4 tint_TextureLoadExternal(texture2d<float, access::sample> plane_0, texture2d<float, access::sample> plane_1, tint_ExternalTextureParams params, uint2 coords) {
   float2 const v_5 = rint((params.loadTransform * float3(float2(min(coords, params.visibleSize)), 1.0f)));
diff --git a/test/tint/builtins/gen/literal/textureSampleBaseClampToEdge/7c04e6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleBaseClampToEdge/7c04e6.wgsl.expected.ir.msl
index 7b85b9f..45c496a 100644
--- a/test/tint/builtins/gen/literal/textureSampleBaseClampToEdge/7c04e6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleBaseClampToEdge/7c04e6.wgsl.expected.ir.msl
@@ -47,7 +47,7 @@
   float3 const v_2 = float3(params.D);
   float3 const v_3 = abs(v);
   float3 const v_4 = sign(v);
-  return select((v_4 * (pow(((params.A * v_3) + params.B), v_1) + params.E)), (v_4 * ((params.C * v_3) + params.F)), (v_3 < v_2));
+  return select((v_4 * (powr(((params.A * v_3) + params.B), v_1) + params.E)), (v_4 * ((params.C * v_3) + params.F)), (v_3 < v_2));
 }
 float4 tint_TextureSampleExternal(texture2d<float, access::sample> plane_0, texture2d<float, access::sample> plane_1, tint_ExternalTextureParams params, sampler sampler, float2 coords) {
   float2 const v_5 = (params.sampleTransform * float3(coords, 1.0f));
diff --git a/test/tint/builtins/gen/var/all/353d6a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/all/353d6a.wgsl.expected.ir.msl
index 6aacaa7..971227e 100644
--- a/test/tint/builtins/gen/var/all/353d6a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/all/353d6a.wgsl.expected.ir.msl
@@ -15,7 +15,7 @@
 int all_353d6a() {
   bool arg_0 = true;
   bool res = all(arg_0);
-  return select(0, 1, all(!(res)));
+  return select(0, 1, all((res == false)));
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/var/all/986c7b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/all/986c7b.wgsl.expected.ir.msl
index 64e1082..be0ee68 100644
--- a/test/tint/builtins/gen/var/all/986c7b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/all/986c7b.wgsl.expected.ir.msl
@@ -15,7 +15,7 @@
 int all_986c7b() {
   bool4 arg_0 = bool4(true);
   bool res = all(arg_0);
-  return select(0, 1, all(!(res)));
+  return select(0, 1, all((res == false)));
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/var/all/bd2dba.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/all/bd2dba.wgsl.expected.ir.msl
index 0e4efcd..4586f0a 100644
--- a/test/tint/builtins/gen/var/all/bd2dba.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/all/bd2dba.wgsl.expected.ir.msl
@@ -15,7 +15,7 @@
 int all_bd2dba() {
   bool3 arg_0 = bool3(true);
   bool res = all(arg_0);
-  return select(0, 1, all(!(res)));
+  return select(0, 1, all((res == false)));
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/var/all/f46790.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/all/f46790.wgsl.expected.ir.msl
index 53bfefb..defdc70 100644
--- a/test/tint/builtins/gen/var/all/f46790.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/all/f46790.wgsl.expected.ir.msl
@@ -15,7 +15,7 @@
 int all_f46790() {
   bool2 arg_0 = bool2(true);
   bool res = all(arg_0);
-  return select(0, 1, all(!(res)));
+  return select(0, 1, all((res == false)));
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/var/any/083428.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/any/083428.wgsl.expected.ir.msl
index 2b6eb1b..c7e195b 100644
--- a/test/tint/builtins/gen/var/any/083428.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/any/083428.wgsl.expected.ir.msl
@@ -15,7 +15,7 @@
 int any_083428() {
   bool4 arg_0 = bool4(true);
   bool res = any(arg_0);
-  return select(0, 1, all(!(res)));
+  return select(0, 1, all((res == false)));
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/var/any/0e3e58.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/any/0e3e58.wgsl.expected.ir.msl
index 850056a..3a57f51 100644
--- a/test/tint/builtins/gen/var/any/0e3e58.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/any/0e3e58.wgsl.expected.ir.msl
@@ -15,7 +15,7 @@
 int any_0e3e58() {
   bool2 arg_0 = bool2(true);
   bool res = any(arg_0);
-  return select(0, 1, all(!(res)));
+  return select(0, 1, all((res == false)));
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/var/any/2ab91a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/any/2ab91a.wgsl.expected.ir.msl
index 40b3c8a..6a02fd8 100644
--- a/test/tint/builtins/gen/var/any/2ab91a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/any/2ab91a.wgsl.expected.ir.msl
@@ -15,7 +15,7 @@
 int any_2ab91a() {
   bool arg_0 = true;
   bool res = any(arg_0);
-  return select(0, 1, all(!(res)));
+  return select(0, 1, all((res == false)));
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/var/any/e755c1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/any/e755c1.wgsl.expected.ir.msl
index a0c799e..f2a00cd 100644
--- a/test/tint/builtins/gen/var/any/e755c1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/any/e755c1.wgsl.expected.ir.msl
@@ -15,7 +15,7 @@
 int any_e755c1() {
   bool3 arg_0 = bool3(true);
   bool res = any(arg_0);
-  return select(0, 1, all(!(res)));
+  return select(0, 1, all((res == false)));
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/var/pow/04a908.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/pow/04a908.wgsl.expected.ir.msl
index 56c9a9b..f8752b0 100644
--- a/test/tint/builtins/gen/var/pow/04a908.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/pow/04a908.wgsl.expected.ir.msl
@@ -15,7 +15,7 @@
 float4 pow_04a908() {
   float4 arg_0 = float4(1.0f);
   float4 arg_1 = float4(1.0f);
-  float4 res = pow(arg_0, arg_1);
+  float4 res = powr(arg_0, arg_1);
   return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
diff --git a/test/tint/builtins/gen/var/pow/46e029.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/pow/46e029.wgsl.expected.ir.msl
index 2777ad8..c03b9bb 100644
--- a/test/tint/builtins/gen/var/pow/46e029.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/pow/46e029.wgsl.expected.ir.msl
@@ -15,7 +15,7 @@
 float pow_46e029() {
   float arg_0 = 1.0f;
   float arg_1 = 1.0f;
-  float res = pow(arg_0, arg_1);
+  float res = powr(arg_0, arg_1);
   return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
diff --git a/test/tint/builtins/gen/var/pow/4a46c9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/pow/4a46c9.wgsl.expected.ir.msl
index 2327301..450cf8e 100644
--- a/test/tint/builtins/gen/var/pow/4a46c9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/pow/4a46c9.wgsl.expected.ir.msl
@@ -15,7 +15,7 @@
 float3 pow_4a46c9() {
   float3 arg_0 = float3(1.0f);
   float3 arg_1 = float3(1.0f);
-  float3 res = pow(arg_0, arg_1);
+  float3 res = powr(arg_0, arg_1);
   return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
diff --git a/test/tint/builtins/gen/var/pow/4f33b2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/pow/4f33b2.wgsl.expected.ir.msl
index 7da365f..c25d83b 100644
--- a/test/tint/builtins/gen/var/pow/4f33b2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/pow/4f33b2.wgsl.expected.ir.msl
@@ -15,7 +15,7 @@
 half4 pow_4f33b2() {
   half4 arg_0 = half4(1.0h);
   half4 arg_1 = half4(1.0h);
-  half4 res = pow(arg_0, arg_1);
+  half4 res = powr(arg_0, arg_1);
   return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
diff --git a/test/tint/builtins/gen/var/pow/ce9ef5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/pow/ce9ef5.wgsl.expected.ir.msl
index f7eb167..3b251bc 100644
--- a/test/tint/builtins/gen/var/pow/ce9ef5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/pow/ce9ef5.wgsl.expected.ir.msl
@@ -15,7 +15,7 @@
 half pow_ce9ef5() {
   half arg_0 = 1.0h;
   half arg_1 = 1.0h;
-  half res = pow(arg_0, arg_1);
+  half res = powr(arg_0, arg_1);
   return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
diff --git a/test/tint/builtins/gen/var/pow/e60ea5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/pow/e60ea5.wgsl.expected.ir.msl
index 3a41748..5144f8e 100644
--- a/test/tint/builtins/gen/var/pow/e60ea5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/pow/e60ea5.wgsl.expected.ir.msl
@@ -15,7 +15,7 @@
 float2 pow_e60ea5() {
   float2 arg_0 = float2(1.0f);
   float2 arg_1 = float2(1.0f);
-  float2 res = pow(arg_0, arg_1);
+  float2 res = powr(arg_0, arg_1);
   return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
diff --git a/test/tint/builtins/gen/var/pow/f37b25.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/pow/f37b25.wgsl.expected.ir.msl
index e4b8050..8b7b74e 100644
--- a/test/tint/builtins/gen/var/pow/f37b25.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/pow/f37b25.wgsl.expected.ir.msl
@@ -15,7 +15,7 @@
 half2 pow_f37b25() {
   half2 arg_0 = half2(1.0h);
   half2 arg_1 = half2(1.0h);
-  half2 res = pow(arg_0, arg_1);
+  half2 res = powr(arg_0, arg_1);
   return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
diff --git a/test/tint/builtins/gen/var/pow/fa5429.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/pow/fa5429.wgsl.expected.ir.msl
index fcfffb8..234b6df 100644
--- a/test/tint/builtins/gen/var/pow/fa5429.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/pow/fa5429.wgsl.expected.ir.msl
@@ -15,7 +15,7 @@
 half3 pow_fa5429() {
   half3 arg_0 = half3(1.0h);
   half3 arg_1 = half3(1.0h);
-  half3 res = pow(arg_0, arg_1);
+  half3 res = powr(arg_0, arg_1);
   return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
diff --git a/test/tint/builtins/gen/var/select/c31f9e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/select/c31f9e.wgsl.expected.ir.msl
index d91d7ae..da494f3 100644
--- a/test/tint/builtins/gen/var/select/c31f9e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/select/c31f9e.wgsl.expected.ir.msl
@@ -17,7 +17,7 @@
   bool arg_1 = true;
   bool arg_2 = true;
   bool res = select(arg_0, arg_1, arg_2);
-  return select(0, 1, all(!(res)));
+  return select(0, 1, all((res == false)));
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/var/textureLoad/1bfdfb.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/1bfdfb.wgsl.expected.ir.msl
index 7c8c403..2843e4d 100644
--- a/test/tint/builtins/gen/var/textureLoad/1bfdfb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/1bfdfb.wgsl.expected.ir.msl
@@ -46,7 +46,7 @@
   float3 const v_2 = float3(params.D);
   float3 const v_3 = abs(v);
   float3 const v_4 = sign(v);
-  return select((v_4 * (pow(((params.A * v_3) + params.B), v_1) + params.E)), (v_4 * ((params.C * v_3) + params.F)), (v_3 < v_2));
+  return select((v_4 * (powr(((params.A * v_3) + params.B), v_1) + params.E)), (v_4 * ((params.C * v_3) + params.F)), (v_3 < v_2));
 }
 float4 tint_TextureLoadExternal(texture2d<float, access::sample> plane_0, texture2d<float, access::sample> plane_1, tint_ExternalTextureParams params, uint2 coords) {
   float2 const v_5 = rint((params.loadTransform * float3(float2(min(coords, params.visibleSize)), 1.0f)));
diff --git a/test/tint/builtins/gen/var/textureLoad/8acf41.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureLoad/8acf41.wgsl.expected.ir.msl
index 28af854..5d95a36 100644
--- a/test/tint/builtins/gen/var/textureLoad/8acf41.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureLoad/8acf41.wgsl.expected.ir.msl
@@ -46,7 +46,7 @@
   float3 const v_2 = float3(params.D);
   float3 const v_3 = abs(v);
   float3 const v_4 = sign(v);
-  return select((v_4 * (pow(((params.A * v_3) + params.B), v_1) + params.E)), (v_4 * ((params.C * v_3) + params.F)), (v_3 < v_2));
+  return select((v_4 * (powr(((params.A * v_3) + params.B), v_1) + params.E)), (v_4 * ((params.C * v_3) + params.F)), (v_3 < v_2));
 }
 float4 tint_TextureLoadExternal(texture2d<float, access::sample> plane_0, texture2d<float, access::sample> plane_1, tint_ExternalTextureParams params, uint2 coords) {
   float2 const v_5 = rint((params.loadTransform * float3(float2(min(coords, params.visibleSize)), 1.0f)));
diff --git a/test/tint/builtins/gen/var/textureSampleBaseClampToEdge/7c04e6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleBaseClampToEdge/7c04e6.wgsl.expected.ir.msl
index 456b90c..0754649 100644
--- a/test/tint/builtins/gen/var/textureSampleBaseClampToEdge/7c04e6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleBaseClampToEdge/7c04e6.wgsl.expected.ir.msl
@@ -47,7 +47,7 @@
   float3 const v_2 = float3(params.D);
   float3 const v_3 = abs(v);
   float3 const v_4 = sign(v);
-  return select((v_4 * (pow(((params.A * v_3) + params.B), v_1) + params.E)), (v_4 * ((params.C * v_3) + params.F)), (v_3 < v_2));
+  return select((v_4 * (powr(((params.A * v_3) + params.B), v_1) + params.E)), (v_4 * ((params.C * v_3) + params.F)), (v_3 < v_2));
 }
 float4 tint_TextureSampleExternal(texture2d<float, access::sample> plane_0, texture2d<float, access::sample> plane_1, tint_ExternalTextureParams params, sampler sampler, float2 coords) {
   float2 const v_5 = (params.sampleTransform * float3(coords, 1.0f));
diff --git a/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.ir.msl b/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.ir.msl
index f949666..7bef595 100644
--- a/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.ir.msl
+++ b/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.ir.msl
@@ -40,7 +40,7 @@
   float3 const v_2 = float3(params.D);
   float3 const v_3 = abs(v);
   float3 const v_4 = sign(v);
-  return select((v_4 * (pow(((params.A * v_3) + params.B), v_1) + params.E)), (v_4 * ((params.C * v_3) + params.F)), (v_3 < v_2));
+  return select((v_4 * (powr(((params.A * v_3) + params.B), v_1) + params.E)), (v_4 * ((params.C * v_3) + params.F)), (v_3 < v_2));
 }
 float4 tint_TextureLoadExternal(texture2d<float, access::sample> plane_0, texture2d<float, access::sample> plane_1, tint_ExternalTextureParams params, uint2 coords) {
   float2 const v_5 = rint((params.loadTransform * float3(float2(min(coords, params.visibleSize)), 1.0f)));
