[msl] Print functions in dependency order

This fixes many E2E tests that were printing functions in the wrong
order.

Bug: 42251016
Change-Id: Ib3fc387140517d998edb5ce1b9de904d510759fb
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/187746
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Commit-Queue: James Price <jrprice@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
diff --git a/src/tint/lang/msl/writer/printer/binary_test.cc b/src/tint/lang/msl/writer/printer/binary_test.cc
index 495b156..fe0a464 100644
--- a/src/tint/lang/msl/writer/printer/binary_test.cc
+++ b/src/tint/lang/msl/writer/printer/binary_test.cc
@@ -91,14 +91,14 @@
 
     ASSERT_TRUE(Generate()) << err_ << output_;
     EXPECT_EQ(output_, MetalHeader() + R"(
+uint tint_div_u32(uint lhs, uint rhs) {
+  return (lhs / select(rhs, 1u, (rhs == 0u)));
+}
 void foo() {
   uint const left = 1u;
   uint const right = 2u;
   uint const val = tint_div_u32(left, right);
 }
-uint tint_div_u32(uint lhs, uint rhs) {
-  return (lhs / select(rhs, 1u, (rhs == 0u)));
-}
 )");
 }
 
@@ -114,15 +114,15 @@
 
     ASSERT_TRUE(Generate()) << err_ << output_;
     EXPECT_EQ(output_, MetalHeader() + R"(
+uint tint_mod_u32(uint lhs, uint rhs) {
+  uint const v = select(rhs, 1u, (rhs == 0u));
+  return (lhs - ((lhs / v) * v));
+}
 void foo() {
   uint const left = 1u;
   uint const right = 2u;
   uint const val = tint_mod_u32(left, right);
 }
-uint tint_mod_u32(uint lhs, uint rhs) {
-  uint const v = select(rhs, 1u, (rhs == 0u));
-  return (lhs - ((lhs / v) * v));
-}
 )");
 }
 
diff --git a/src/tint/lang/msl/writer/printer/printer.cc b/src/tint/lang/msl/writer/printer/printer.cc
index c39b030..40ffcdf 100644
--- a/src/tint/lang/msl/writer/printer/printer.cc
+++ b/src/tint/lang/msl/writer/printer/printer.cc
@@ -122,7 +122,7 @@
         EmitBlockInstructions(ir_.root_block);
 
         // Emit functions.
-        for (auto& func : ir_.functions) {
+        for (auto* func : ir_.DependencyOrderedFunctions()) {
             EmitFunction(func);
         }
 
diff --git a/test/tint/bug/chromium/1386647.wgsl.expected.ir.msl b/test/tint/bug/chromium/1386647.wgsl.expected.ir.msl
index 288ce4b..69ab288 100644
--- a/test/tint/bug/chromium/1386647.wgsl.expected.ir.msl
+++ b/test/tint/bug/chromium/1386647.wgsl.expected.ir.msl
@@ -1,16 +1,10 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-kernel void f(uint3 v [[thread_position_in_grid]]) {
-  uint const l = (v[0u] << (tint_mod_u32(v[1u], 1u) & 31u));
-}
 uint tint_mod_u32(uint lhs, uint rhs) {
   uint const v_1 = select(rhs, 1u, (rhs == 0u));
   return (lhs - ((lhs / v_1) * v_1));
 }
-program_source:5:29: error: use of undeclared identifier 'tint_mod_u32'
+kernel void f(uint3 v [[thread_position_in_grid]]) {
   uint const l = (v[0u] << (tint_mod_u32(v[1u], 1u) & 31u));
-                            ^
-
+}
diff --git a/test/tint/bug/tint/1083.wgsl.expected.ir.msl b/test/tint/bug/tint/1083.wgsl.expected.ir.msl
index 75a514b..90d70be 100644
--- a/test/tint/bug/tint/1083.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1083.wgsl.expected.ir.msl
@@ -1,17 +1,11 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int tint_div_i32(int lhs, int rhs) {
+  return (lhs / select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1)))));
+}
 kernel void f() {
   int const a = 1;
   int const b = 0;
   int const c = tint_div_i32(a, b);
 }
-int tint_div_i32(int lhs, int rhs) {
-  return (lhs / select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1)))));
-}
-program_source:7:17: error: use of undeclared identifier 'tint_div_i32'
-  int const c = tint_div_i32(a, b);
-                ^
-
diff --git a/test/tint/expressions/binary/div/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div/scalar-scalar/i32.wgsl.expected.ir.msl
index cd92c60..d4968f9 100644
--- a/test/tint/expressions/binary/div/scalar-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -1,17 +1,11 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int tint_div_i32(int lhs, int rhs) {
+  return (lhs / select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1)))));
+}
 kernel void f() {
   int const a = 1;
   int const b = 2;
   int const r = tint_div_i32(a, b);
 }
-int tint_div_i32(int lhs, int rhs) {
-  return (lhs / select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1)))));
-}
-program_source:7:17: error: use of undeclared identifier 'tint_div_i32'
-  int const r = tint_div_i32(a, b);
-                ^
-
diff --git a/test/tint/expressions/binary/div/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div/scalar-scalar/u32.wgsl.expected.ir.msl
index 048f61e..2d1b8b5 100644
--- a/test/tint/expressions/binary/div/scalar-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -1,17 +1,11 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+uint tint_div_u32(uint lhs, uint rhs) {
+  return (lhs / select(rhs, 1u, (rhs == 0u)));
+}
 kernel void f() {
   uint const a = 1u;
   uint const b = 2u;
   uint const r = tint_div_u32(a, b);
 }
-uint tint_div_u32(uint lhs, uint rhs) {
-  return (lhs / select(rhs, 1u, (rhs == 0u)));
-}
-program_source:7:18: error: use of undeclared identifier 'tint_div_u32'
-  uint const r = tint_div_u32(a, b);
-                 ^
-
diff --git a/test/tint/expressions/binary/div/scalar-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div/scalar-vec3/i32.wgsl.expected.ir.msl
index 2fa961a..7065a45 100644
--- a/test/tint/expressions/binary/div/scalar-vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div/scalar-vec3/i32.wgsl.expected.ir.msl
@@ -1,17 +1,11 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int3 tint_div_v3i32(int3 lhs, int3 rhs) {
+  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
+}
 kernel void f() {
   int const a = 4;
   int3 const b = int3(1, 2, 3);
   int3 const r = tint_div_v3i32(int3(a), b);
 }
-int3 tint_div_v3i32(int3 lhs, int3 rhs) {
-  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
-}
-program_source:7:18: error: use of undeclared identifier 'tint_div_v3i32'
-  int3 const r = tint_div_v3i32(int3(a), b);
-                 ^
-
diff --git a/test/tint/expressions/binary/div/scalar-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div/scalar-vec3/u32.wgsl.expected.ir.msl
index e836cce..f4fe943 100644
--- a/test/tint/expressions/binary/div/scalar-vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div/scalar-vec3/u32.wgsl.expected.ir.msl
@@ -1,17 +1,11 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
+  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
+}
 kernel void f() {
   uint const a = 4u;
   uint3 const b = uint3(1u, 2u, 3u);
   uint3 const r = tint_div_v3u32(uint3(a), b);
 }
-uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
-  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
-}
-program_source:7:19: error: use of undeclared identifier 'tint_div_v3u32'
-  uint3 const r = tint_div_v3u32(uint3(a), b);
-                  ^
-
diff --git a/test/tint/expressions/binary/div/vec3-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div/vec3-scalar/i32.wgsl.expected.ir.msl
index 574b1c1..92081a4 100644
--- a/test/tint/expressions/binary/div/vec3-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div/vec3-scalar/i32.wgsl.expected.ir.msl
@@ -1,17 +1,11 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int3 tint_div_v3i32(int3 lhs, int3 rhs) {
+  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
+}
 kernel void f() {
   int3 const a = int3(1, 2, 3);
   int const b = 4;
   int3 const r = tint_div_v3i32(a, int3(b));
 }
-int3 tint_div_v3i32(int3 lhs, int3 rhs) {
-  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
-}
-program_source:7:18: error: use of undeclared identifier 'tint_div_v3i32'
-  int3 const r = tint_div_v3i32(a, int3(b));
-                 ^
-
diff --git a/test/tint/expressions/binary/div/vec3-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div/vec3-scalar/u32.wgsl.expected.ir.msl
index db9d145..1c9c0a2 100644
--- a/test/tint/expressions/binary/div/vec3-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div/vec3-scalar/u32.wgsl.expected.ir.msl
@@ -1,17 +1,11 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
+  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
+}
 kernel void f() {
   uint3 const a = uint3(1u, 2u, 3u);
   uint const b = 4u;
   uint3 const r = tint_div_v3u32(a, uint3(b));
 }
-uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
-  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
-}
-program_source:7:19: error: use of undeclared identifier 'tint_div_v3u32'
-  uint3 const r = tint_div_v3u32(a, uint3(b));
-                  ^
-
diff --git a/test/tint/expressions/binary/div/vec3-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div/vec3-vec3/i32.wgsl.expected.ir.msl
index 2755ecd..5b3e9c3 100644
--- a/test/tint/expressions/binary/div/vec3-vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div/vec3-vec3/i32.wgsl.expected.ir.msl
@@ -1,17 +1,11 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int3 tint_div_v3i32(int3 lhs, int3 rhs) {
+  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
+}
 kernel void f() {
   int3 const a = int3(1, 2, 3);
   int3 const b = int3(4, 5, 6);
   int3 const r = tint_div_v3i32(a, b);
 }
-int3 tint_div_v3i32(int3 lhs, int3 rhs) {
-  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
-}
-program_source:7:18: error: use of undeclared identifier 'tint_div_v3i32'
-  int3 const r = tint_div_v3i32(a, b);
-                 ^
-
diff --git a/test/tint/expressions/binary/div/vec3-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div/vec3-vec3/u32.wgsl.expected.ir.msl
index 1baed17..ece9968 100644
--- a/test/tint/expressions/binary/div/vec3-vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div/vec3-vec3/u32.wgsl.expected.ir.msl
@@ -1,17 +1,11 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
+  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
+}
 kernel void f() {
   uint3 const a = uint3(1u, 2u, 3u);
   uint3 const b = uint3(4u, 5u, 6u);
   uint3 const r = tint_div_v3u32(a, b);
 }
-uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
-  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
-}
-program_source:7:19: error: use of undeclared identifier 'tint_div_v3u32'
-  uint3 const r = tint_div_v3u32(a, b);
-                  ^
-
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.ir.msl
index 2266c21..ed490a4 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -1,17 +1,11 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int tint_div_i32(int lhs, int rhs) {
+  return (lhs / select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1)))));
+}
 kernel void f() {
   int const a = 1;
   int const b = 0;
   int const r = tint_div_i32(a, b);
 }
-int tint_div_i32(int lhs, int rhs) {
-  return (lhs / select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1)))));
-}
-program_source:7:17: error: use of undeclared identifier 'tint_div_i32'
-  int const r = tint_div_i32(a, b);
-                ^
-
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.ir.msl
index 738eeab..51a5e13 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -1,17 +1,11 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+uint tint_div_u32(uint lhs, uint rhs) {
+  return (lhs / select(rhs, 1u, (rhs == 0u)));
+}
 kernel void f() {
   uint const a = 1u;
   uint const b = 0u;
   uint const r = tint_div_u32(a, b);
 }
-uint tint_div_u32(uint lhs, uint rhs) {
-  return (lhs / select(rhs, 1u, (rhs == 0u)));
-}
-program_source:7:18: error: use of undeclared identifier 'tint_div_u32'
-  uint const r = tint_div_u32(a, b);
-                 ^
-
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.ir.msl
index 162982e..4bd3cbe 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.ir.msl
@@ -1,17 +1,11 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int3 tint_div_v3i32(int3 lhs, int3 rhs) {
+  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
+}
 kernel void f() {
   int const a = 4;
   int3 const b = int3(0, 2, 0);
   int3 const r = tint_div_v3i32(int3(a), b);
 }
-int3 tint_div_v3i32(int3 lhs, int3 rhs) {
-  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
-}
-program_source:7:18: error: use of undeclared identifier 'tint_div_v3i32'
-  int3 const r = tint_div_v3i32(int3(a), b);
-                 ^
-
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.ir.msl
index 0231a4e..b09d7b0 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.ir.msl
@@ -1,17 +1,11 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
+  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
+}
 kernel void f() {
   uint const a = 4u;
   uint3 const b = uint3(0u, 2u, 0u);
   uint3 const r = tint_div_v3u32(uint3(a), b);
 }
-uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
-  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
-}
-program_source:7:19: error: use of undeclared identifier 'tint_div_v3u32'
-  uint3 const r = tint_div_v3u32(uint3(a), b);
-                  ^
-
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.ir.msl
index b96f324..d8abc3a 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.ir.msl
@@ -1,17 +1,11 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int3 tint_div_v3i32(int3 lhs, int3 rhs) {
+  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
+}
 kernel void f() {
   int3 const a = int3(1, 2, 3);
   int const b = 0;
   int3 const r = tint_div_v3i32(a, int3(b));
 }
-int3 tint_div_v3i32(int3 lhs, int3 rhs) {
-  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
-}
-program_source:7:18: error: use of undeclared identifier 'tint_div_v3i32'
-  int3 const r = tint_div_v3i32(a, int3(b));
-                 ^
-
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.ir.msl
index 8904fcc..98e6493 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.ir.msl
@@ -1,17 +1,11 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
+  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
+}
 kernel void f() {
   uint3 const a = uint3(1u, 2u, 3u);
   uint const b = 0u;
   uint3 const r = tint_div_v3u32(a, uint3(b));
 }
-uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
-  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
-}
-program_source:7:19: error: use of undeclared identifier 'tint_div_v3u32'
-  uint3 const r = tint_div_v3u32(a, uint3(b));
-                  ^
-
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.ir.msl
index 3a14a9d..890eced 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.ir.msl
@@ -1,17 +1,11 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int3 tint_div_v3i32(int3 lhs, int3 rhs) {
+  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
+}
 kernel void f() {
   int3 const a = int3(1, 2, 3);
   int3 const b = int3(0, 5, 0);
   int3 const r = tint_div_v3i32(a, b);
 }
-int3 tint_div_v3i32(int3 lhs, int3 rhs) {
-  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
-}
-program_source:7:18: error: use of undeclared identifier 'tint_div_v3i32'
-  int3 const r = tint_div_v3i32(a, b);
-                 ^
-
diff --git a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.ir.msl
index 3c7663c..5b17c76 100644
--- a/test/tint/expressions/binary/div_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.ir.msl
@@ -1,17 +1,11 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
+  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
+}
 kernel void f() {
   uint3 const a = uint3(1u, 2u, 3u);
   uint3 const b = uint3(0u, 5u, 0u);
   uint3 const r = tint_div_v3u32(a, b);
 }
-uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
-  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
-}
-program_source:7:19: error: use of undeclared identifier 'tint_div_v3u32'
-  uint3 const r = tint_div_v3u32(a, b);
-                  ^
-
diff --git a/test/tint/expressions/binary/div_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.ir.msl
index 0c3ce11..1f2f7b2 100644
--- a/test/tint/expressions/binary/div_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -1,17 +1,11 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int tint_div_i32(int lhs, int rhs) {
+  return (lhs / select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1)))));
+}
 kernel void f() {
   int a = 1;
   int b = 0;
   int const r = tint_div_i32(a, (b + b));
 }
-int tint_div_i32(int lhs, int rhs) {
-  return (lhs / select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1)))));
-}
-program_source:7:17: error: use of undeclared identifier 'tint_div_i32'
-  int const r = tint_div_i32(a, (b + b));
-                ^
-
diff --git a/test/tint/expressions/binary/div_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.ir.msl
index d0fe939..41dac77 100644
--- a/test/tint/expressions/binary/div_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -1,17 +1,11 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+uint tint_div_u32(uint lhs, uint rhs) {
+  return (lhs / select(rhs, 1u, (rhs == 0u)));
+}
 kernel void f() {
   uint a = 1u;
   uint b = 0u;
   uint const r = tint_div_u32(a, (b + b));
 }
-uint tint_div_u32(uint lhs, uint rhs) {
-  return (lhs / select(rhs, 1u, (rhs == 0u)));
-}
-program_source:7:18: error: use of undeclared identifier 'tint_div_u32'
-  uint const r = tint_div_u32(a, (b + b));
-                 ^
-
diff --git a/test/tint/expressions/binary/div_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.ir.msl
index 885624b..8884b3d 100644
--- a/test/tint/expressions/binary/div_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.ir.msl
@@ -1,18 +1,12 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int3 tint_div_v3i32(int3 lhs, int3 rhs) {
+  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
+}
 kernel void f() {
   int a = 4;
   int3 b = int3(0, 2, 0);
   int3 const v = (b + b);
   int3 const r = tint_div_v3i32(int3(a), v);
 }
-int3 tint_div_v3i32(int3 lhs, int3 rhs) {
-  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
-}
-program_source:8:18: error: use of undeclared identifier 'tint_div_v3i32'
-  int3 const r = tint_div_v3i32(int3(a), v);
-                 ^
-
diff --git a/test/tint/expressions/binary/div_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.ir.msl
index 8608a64..f29db42 100644
--- a/test/tint/expressions/binary/div_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.ir.msl
@@ -1,18 +1,12 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
+  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
+}
 kernel void f() {
   uint a = 4u;
   uint3 b = uint3(0u, 2u, 0u);
   uint3 const v = (b + b);
   uint3 const r = tint_div_v3u32(uint3(a), v);
 }
-uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
-  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
-}
-program_source:8:19: error: use of undeclared identifier 'tint_div_v3u32'
-  uint3 const r = tint_div_v3u32(uint3(a), v);
-                  ^
-
diff --git a/test/tint/expressions/binary/div_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.ir.msl
index 45a199e..54107b1 100644
--- a/test/tint/expressions/binary/div_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.ir.msl
@@ -1,18 +1,12 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int3 tint_div_v3i32(int3 lhs, int3 rhs) {
+  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
+}
 kernel void f() {
   int3 a = int3(1, 2, 3);
   int b = 0;
   int3 const v = a;
   int3 const r = tint_div_v3i32(v, int3((b + b)));
 }
-int3 tint_div_v3i32(int3 lhs, int3 rhs) {
-  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
-}
-program_source:8:18: error: use of undeclared identifier 'tint_div_v3i32'
-  int3 const r = tint_div_v3i32(v, int3((b + b)));
-                 ^
-
diff --git a/test/tint/expressions/binary/div_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.ir.msl
index 230534b..42a2e8c 100644
--- a/test/tint/expressions/binary/div_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.ir.msl
@@ -1,18 +1,12 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
+  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
+}
 kernel void f() {
   uint3 a = uint3(1u, 2u, 3u);
   uint b = 0u;
   uint3 const v = a;
   uint3 const r = tint_div_v3u32(v, uint3((b + b)));
 }
-uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
-  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
-}
-program_source:8:19: error: use of undeclared identifier 'tint_div_v3u32'
-  uint3 const r = tint_div_v3u32(v, uint3((b + b)));
-                  ^
-
diff --git a/test/tint/expressions/binary/div_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.ir.msl
index 84fd79e..5de7811 100644
--- a/test/tint/expressions/binary/div_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.ir.msl
@@ -1,17 +1,11 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int3 tint_div_v3i32(int3 lhs, int3 rhs) {
+  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
+}
 kernel void f() {
   int3 a = int3(1, 2, 3);
   int3 b = int3(0, 5, 0);
   int3 const r = tint_div_v3i32(a, (b + b));
 }
-int3 tint_div_v3i32(int3 lhs, int3 rhs) {
-  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
-}
-program_source:7:18: error: use of undeclared identifier 'tint_div_v3i32'
-  int3 const r = tint_div_v3i32(a, (b + b));
-                 ^
-
diff --git a/test/tint/expressions/binary/div_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.ir.msl
index f7d3fe3..17afe14 100644
--- a/test/tint/expressions/binary/div_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.ir.msl
@@ -1,17 +1,11 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
+  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
+}
 kernel void f() {
   uint3 a = uint3(1u, 2u, 3u);
   uint3 b = uint3(0u, 5u, 0u);
   uint3 const r = tint_div_v3u32(a, (b + b));
 }
-uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
-  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
-}
-program_source:7:19: error: use of undeclared identifier 'tint_div_v3u32'
-  uint3 const r = tint_div_v3u32(a, (b + b));
-                  ^
-
diff --git a/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.ir.msl
index b984663..bb9b678 100644
--- a/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -1,17 +1,11 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int tint_div_i32(int lhs, int rhs) {
+  return (lhs / select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1)))));
+}
 kernel void f() {
   int a = 1;
   int b = 0;
   int const r = tint_div_i32(a, b);
 }
-int tint_div_i32(int lhs, int rhs) {
-  return (lhs / select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1)))));
-}
-program_source:7:17: error: use of undeclared identifier 'tint_div_i32'
-  int const r = tint_div_i32(a, b);
-                ^
-
diff --git a/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.ir.msl
index 9ca11a6..f9ddb08 100644
--- a/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -1,17 +1,11 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+uint tint_div_u32(uint lhs, uint rhs) {
+  return (lhs / select(rhs, 1u, (rhs == 0u)));
+}
 kernel void f() {
   uint a = 1u;
   uint b = 0u;
   uint const r = tint_div_u32(a, b);
 }
-uint tint_div_u32(uint lhs, uint rhs) {
-  return (lhs / select(rhs, 1u, (rhs == 0u)));
-}
-program_source:7:18: error: use of undeclared identifier 'tint_div_u32'
-  uint const r = tint_div_u32(a, b);
-                 ^
-
diff --git a/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.ir.msl
index e2bbf6c..c50922d 100644
--- a/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.ir.msl
@@ -1,18 +1,12 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int3 tint_div_v3i32(int3 lhs, int3 rhs) {
+  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
+}
 kernel void f() {
   int a = 4;
   int3 b = int3(0, 2, 0);
   int3 const v = b;
   int3 const r = tint_div_v3i32(int3(a), v);
 }
-int3 tint_div_v3i32(int3 lhs, int3 rhs) {
-  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
-}
-program_source:8:18: error: use of undeclared identifier 'tint_div_v3i32'
-  int3 const r = tint_div_v3i32(int3(a), v);
-                 ^
-
diff --git a/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.ir.msl
index a3bfb50..e264dbb 100644
--- a/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.ir.msl
@@ -1,18 +1,12 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
+  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
+}
 kernel void f() {
   uint a = 4u;
   uint3 b = uint3(0u, 2u, 0u);
   uint3 const v = b;
   uint3 const r = tint_div_v3u32(uint3(a), v);
 }
-uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
-  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
-}
-program_source:8:19: error: use of undeclared identifier 'tint_div_v3u32'
-  uint3 const r = tint_div_v3u32(uint3(a), v);
-                  ^
-
diff --git a/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.ir.msl
index 4e52ba9..369fa0d 100644
--- a/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.ir.msl
@@ -1,18 +1,12 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int3 tint_div_v3i32(int3 lhs, int3 rhs) {
+  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
+}
 kernel void f() {
   int3 a = int3(1, 2, 3);
   int b = 0;
   int3 const v = a;
   int3 const r = tint_div_v3i32(v, int3(b));
 }
-int3 tint_div_v3i32(int3 lhs, int3 rhs) {
-  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
-}
-program_source:8:18: error: use of undeclared identifier 'tint_div_v3i32'
-  int3 const r = tint_div_v3i32(v, int3(b));
-                 ^
-
diff --git a/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.ir.msl
index ea03857..717fc92 100644
--- a/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.ir.msl
@@ -1,18 +1,12 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
+  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
+}
 kernel void f() {
   uint3 a = uint3(1u, 2u, 3u);
   uint b = 0u;
   uint3 const v = a;
   uint3 const r = tint_div_v3u32(v, uint3(b));
 }
-uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
-  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
-}
-program_source:8:19: error: use of undeclared identifier 'tint_div_v3u32'
-  uint3 const r = tint_div_v3u32(v, uint3(b));
-                  ^
-
diff --git a/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.ir.msl
index f604b15..54474a8 100644
--- a/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.ir.msl
@@ -1,17 +1,11 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int3 tint_div_v3i32(int3 lhs, int3 rhs) {
+  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
+}
 kernel void f() {
   int3 a = int3(1, 2, 3);
   int3 b = int3(0, 5, 0);
   int3 const r = tint_div_v3i32(a, b);
 }
-int3 tint_div_v3i32(int3 lhs, int3 rhs) {
-  return (lhs / select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1))))));
-}
-program_source:7:18: error: use of undeclared identifier 'tint_div_v3i32'
-  int3 const r = tint_div_v3i32(a, b);
-                 ^
-
diff --git a/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.ir.msl
index 5b8af54..0d4d5f0 100644
--- a/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/div_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.ir.msl
@@ -1,17 +1,11 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
+  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
+}
 kernel void f() {
   uint3 a = uint3(1u, 2u, 3u);
   uint3 b = uint3(0u, 5u, 0u);
   uint3 const r = tint_div_v3u32(a, b);
 }
-uint3 tint_div_v3u32(uint3 lhs, uint3 rhs) {
-  return (lhs / select(rhs, uint3(1u), (rhs == uint3(0u))));
-}
-program_source:7:19: error: use of undeclared identifier 'tint_div_v3u32'
-  uint3 const r = tint_div_v3u32(a, b);
-                  ^
-
diff --git a/test/tint/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.ir.msl
index 09b1ef2..e706a8b 100644
--- a/test/tint/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -1,18 +1,12 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int tint_mod_i32(int lhs, int rhs) {
+  int const v = select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1))));
+  return (lhs - ((lhs / v) * v));
+}
 kernel void f() {
   int const a = 1;
   int const b = 2;
   int const r = tint_mod_i32(a, b);
 }
-int tint_mod_i32(int lhs, int rhs) {
-  int const v = select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1))));
-  return (lhs - ((lhs / v) * v));
-}
-program_source:7:17: error: use of undeclared identifier 'tint_mod_i32'
-  int const r = tint_mod_i32(a, b);
-                ^
-
diff --git a/test/tint/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.ir.msl
index b1b4a6f..4523947 100644
--- a/test/tint/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -1,18 +1,12 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+uint tint_mod_u32(uint lhs, uint rhs) {
+  uint const v = select(rhs, 1u, (rhs == 0u));
+  return (lhs - ((lhs / v) * v));
+}
 kernel void f() {
   uint const a = 1u;
   uint const b = 2u;
   uint const r = tint_mod_u32(a, b);
 }
-uint tint_mod_u32(uint lhs, uint rhs) {
-  uint const v = select(rhs, 1u, (rhs == 0u));
-  return (lhs - ((lhs / v) * v));
-}
-program_source:7:18: error: use of undeclared identifier 'tint_mod_u32'
-  uint const r = tint_mod_u32(a, b);
-                 ^
-
diff --git a/test/tint/expressions/binary/mod/scalar-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod/scalar-vec3/i32.wgsl.expected.ir.msl
index d0ad189..9ce7e38 100644
--- a/test/tint/expressions/binary/mod/scalar-vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod/scalar-vec3/i32.wgsl.expected.ir.msl
@@ -1,18 +1,12 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
+  int3 const v = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
+  return (lhs - ((lhs / v) * v));
+}
 kernel void f() {
   int const a = 4;
   int3 const b = int3(1, 2, 3);
   int3 const r = tint_mod_v3i32(int3(a), b);
 }
-int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
-  int3 const v = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
-  return (lhs - ((lhs / v) * v));
-}
-program_source:7:18: error: use of undeclared identifier 'tint_mod_v3i32'
-  int3 const r = tint_mod_v3i32(int3(a), b);
-                 ^
-
diff --git a/test/tint/expressions/binary/mod/scalar-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod/scalar-vec3/u32.wgsl.expected.ir.msl
index c0e4d0b..47bbf31 100644
--- a/test/tint/expressions/binary/mod/scalar-vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod/scalar-vec3/u32.wgsl.expected.ir.msl
@@ -1,18 +1,12 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
+  uint3 const v = select(rhs, uint3(1u), (rhs == uint3(0u)));
+  return (lhs - ((lhs / v) * v));
+}
 kernel void f() {
   uint const a = 4u;
   uint3 const b = uint3(1u, 2u, 3u);
   uint3 const r = tint_mod_v3u32(uint3(a), b);
 }
-uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
-  uint3 const v = select(rhs, uint3(1u), (rhs == uint3(0u)));
-  return (lhs - ((lhs / v) * v));
-}
-program_source:7:19: error: use of undeclared identifier 'tint_mod_v3u32'
-  uint3 const r = tint_mod_v3u32(uint3(a), b);
-                  ^
-
diff --git a/test/tint/expressions/binary/mod/vec3-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod/vec3-scalar/i32.wgsl.expected.ir.msl
index 8ac3f73..86ab832 100644
--- a/test/tint/expressions/binary/mod/vec3-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod/vec3-scalar/i32.wgsl.expected.ir.msl
@@ -1,18 +1,12 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
+  int3 const v = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
+  return (lhs - ((lhs / v) * v));
+}
 kernel void f() {
   int3 const a = int3(1, 2, 3);
   int const b = 4;
   int3 const r = tint_mod_v3i32(a, int3(b));
 }
-int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
-  int3 const v = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
-  return (lhs - ((lhs / v) * v));
-}
-program_source:7:18: error: use of undeclared identifier 'tint_mod_v3i32'
-  int3 const r = tint_mod_v3i32(a, int3(b));
-                 ^
-
diff --git a/test/tint/expressions/binary/mod/vec3-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod/vec3-scalar/u32.wgsl.expected.ir.msl
index f815457..7132fef 100644
--- a/test/tint/expressions/binary/mod/vec3-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod/vec3-scalar/u32.wgsl.expected.ir.msl
@@ -1,18 +1,12 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
+  uint3 const v = select(rhs, uint3(1u), (rhs == uint3(0u)));
+  return (lhs - ((lhs / v) * v));
+}
 kernel void f() {
   uint3 const a = uint3(1u, 2u, 3u);
   uint const b = 4u;
   uint3 const r = tint_mod_v3u32(a, uint3(b));
 }
-uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
-  uint3 const v = select(rhs, uint3(1u), (rhs == uint3(0u)));
-  return (lhs - ((lhs / v) * v));
-}
-program_source:7:19: error: use of undeclared identifier 'tint_mod_v3u32'
-  uint3 const r = tint_mod_v3u32(a, uint3(b));
-                  ^
-
diff --git a/test/tint/expressions/binary/mod/vec3-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod/vec3-vec3/i32.wgsl.expected.ir.msl
index 51bb608..1bd8a4d 100644
--- a/test/tint/expressions/binary/mod/vec3-vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod/vec3-vec3/i32.wgsl.expected.ir.msl
@@ -1,18 +1,12 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
+  int3 const v = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
+  return (lhs - ((lhs / v) * v));
+}
 kernel void f() {
   int3 const a = int3(1, 2, 3);
   int3 const b = int3(4, 5, 6);
   int3 const r = tint_mod_v3i32(a, b);
 }
-int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
-  int3 const v = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
-  return (lhs - ((lhs / v) * v));
-}
-program_source:7:18: error: use of undeclared identifier 'tint_mod_v3i32'
-  int3 const r = tint_mod_v3i32(a, b);
-                 ^
-
diff --git a/test/tint/expressions/binary/mod/vec3-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod/vec3-vec3/u32.wgsl.expected.ir.msl
index 59cfca7..0e9071e 100644
--- a/test/tint/expressions/binary/mod/vec3-vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod/vec3-vec3/u32.wgsl.expected.ir.msl
@@ -1,18 +1,12 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
+  uint3 const v = select(rhs, uint3(1u), (rhs == uint3(0u)));
+  return (lhs - ((lhs / v) * v));
+}
 kernel void f() {
   uint3 const a = uint3(1u, 2u, 3u);
   uint3 const b = uint3(4u, 5u, 6u);
   uint3 const r = tint_mod_v3u32(a, b);
 }
-uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
-  uint3 const v = select(rhs, uint3(1u), (rhs == uint3(0u)));
-  return (lhs - ((lhs / v) * v));
-}
-program_source:7:19: error: use of undeclared identifier 'tint_mod_v3u32'
-  uint3 const r = tint_mod_v3u32(a, b);
-                  ^
-
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.ir.msl
index 39862e7..33cc550 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -1,18 +1,12 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int tint_mod_i32(int lhs, int rhs) {
+  int const v = select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1))));
+  return (lhs - ((lhs / v) * v));
+}
 kernel void f() {
   int const a = 1;
   int const b = 0;
   int const r = tint_mod_i32(a, b);
 }
-int tint_mod_i32(int lhs, int rhs) {
-  int const v = select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1))));
-  return (lhs - ((lhs / v) * v));
-}
-program_source:7:17: error: use of undeclared identifier 'tint_mod_i32'
-  int const r = tint_mod_i32(a, b);
-                ^
-
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.ir.msl
index d3132b1..d7c8be1 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -1,18 +1,12 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+uint tint_mod_u32(uint lhs, uint rhs) {
+  uint const v = select(rhs, 1u, (rhs == 0u));
+  return (lhs - ((lhs / v) * v));
+}
 kernel void f() {
   uint const a = 1u;
   uint const b = 0u;
   uint const r = tint_mod_u32(a, b);
 }
-uint tint_mod_u32(uint lhs, uint rhs) {
-  uint const v = select(rhs, 1u, (rhs == 0u));
-  return (lhs - ((lhs / v) * v));
-}
-program_source:7:18: error: use of undeclared identifier 'tint_mod_u32'
-  uint const r = tint_mod_u32(a, b);
-                 ^
-
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.ir.msl
index 42118c6..b547642 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.ir.msl
@@ -1,18 +1,12 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
+  int3 const v = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
+  return (lhs - ((lhs / v) * v));
+}
 kernel void f() {
   int const a = 4;
   int3 const b = int3(0, 2, 0);
   int3 const r = tint_mod_v3i32(int3(a), b);
 }
-int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
-  int3 const v = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
-  return (lhs - ((lhs / v) * v));
-}
-program_source:7:18: error: use of undeclared identifier 'tint_mod_v3i32'
-  int3 const r = tint_mod_v3i32(int3(a), b);
-                 ^
-
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.ir.msl
index 175880b..5407b2c 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.ir.msl
@@ -1,18 +1,12 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
+  uint3 const v = select(rhs, uint3(1u), (rhs == uint3(0u)));
+  return (lhs - ((lhs / v) * v));
+}
 kernel void f() {
   uint const a = 4u;
   uint3 const b = uint3(0u, 2u, 0u);
   uint3 const r = tint_mod_v3u32(uint3(a), b);
 }
-uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
-  uint3 const v = select(rhs, uint3(1u), (rhs == uint3(0u)));
-  return (lhs - ((lhs / v) * v));
-}
-program_source:7:19: error: use of undeclared identifier 'tint_mod_v3u32'
-  uint3 const r = tint_mod_v3u32(uint3(a), b);
-                  ^
-
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.ir.msl
index 34063d1..a9e877b 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.ir.msl
@@ -1,18 +1,12 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
+  int3 const v = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
+  return (lhs - ((lhs / v) * v));
+}
 kernel void f() {
   int3 const a = int3(1, 2, 3);
   int const b = 0;
   int3 const r = tint_mod_v3i32(a, int3(b));
 }
-int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
-  int3 const v = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
-  return (lhs - ((lhs / v) * v));
-}
-program_source:7:18: error: use of undeclared identifier 'tint_mod_v3i32'
-  int3 const r = tint_mod_v3i32(a, int3(b));
-                 ^
-
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.ir.msl
index ae9e090..8e7c960 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.ir.msl
@@ -1,18 +1,12 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
+  uint3 const v = select(rhs, uint3(1u), (rhs == uint3(0u)));
+  return (lhs - ((lhs / v) * v));
+}
 kernel void f() {
   uint3 const a = uint3(1u, 2u, 3u);
   uint const b = 0u;
   uint3 const r = tint_mod_v3u32(a, uint3(b));
 }
-uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
-  uint3 const v = select(rhs, uint3(1u), (rhs == uint3(0u)));
-  return (lhs - ((lhs / v) * v));
-}
-program_source:7:19: error: use of undeclared identifier 'tint_mod_v3u32'
-  uint3 const r = tint_mod_v3u32(a, uint3(b));
-                  ^
-
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.ir.msl
index f7be78a..520e56f 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.ir.msl
@@ -1,18 +1,12 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
+  int3 const v = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
+  return (lhs - ((lhs / v) * v));
+}
 kernel void f() {
   int3 const a = int3(1, 2, 3);
   int3 const b = int3(0, 5, 0);
   int3 const r = tint_mod_v3i32(a, b);
 }
-int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
-  int3 const v = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
-  return (lhs - ((lhs / v) * v));
-}
-program_source:7:18: error: use of undeclared identifier 'tint_mod_v3i32'
-  int3 const r = tint_mod_v3i32(a, b);
-                 ^
-
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.ir.msl
index 8e25d40..a60f38d 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.ir.msl
@@ -1,18 +1,12 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
+  uint3 const v = select(rhs, uint3(1u), (rhs == uint3(0u)));
+  return (lhs - ((lhs / v) * v));
+}
 kernel void f() {
   uint3 const a = uint3(1u, 2u, 3u);
   uint3 const b = uint3(0u, 5u, 0u);
   uint3 const r = tint_mod_v3u32(a, b);
 }
-uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
-  uint3 const v = select(rhs, uint3(1u), (rhs == uint3(0u)));
-  return (lhs - ((lhs / v) * v));
-}
-program_source:7:19: error: use of undeclared identifier 'tint_mod_v3u32'
-  uint3 const r = tint_mod_v3u32(a, b);
-                  ^
-
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.ir.msl
index 42df4ee..843f145 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -1,18 +1,12 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int tint_mod_i32(int lhs, int rhs) {
+  int const v = select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1))));
+  return (lhs - ((lhs / v) * v));
+}
 kernel void f() {
   int a = 1;
   int b = 0;
   int const r = tint_mod_i32(a, (b + b));
 }
-int tint_mod_i32(int lhs, int rhs) {
-  int const v = select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1))));
-  return (lhs - ((lhs / v) * v));
-}
-program_source:7:17: error: use of undeclared identifier 'tint_mod_i32'
-  int const r = tint_mod_i32(a, (b + b));
-                ^
-
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.ir.msl
index 5f6496a..a4a1ad9 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -1,18 +1,12 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+uint tint_mod_u32(uint lhs, uint rhs) {
+  uint const v = select(rhs, 1u, (rhs == 0u));
+  return (lhs - ((lhs / v) * v));
+}
 kernel void f() {
   uint a = 1u;
   uint b = 0u;
   uint const r = tint_mod_u32(a, (b + b));
 }
-uint tint_mod_u32(uint lhs, uint rhs) {
-  uint const v = select(rhs, 1u, (rhs == 0u));
-  return (lhs - ((lhs / v) * v));
-}
-program_source:7:18: error: use of undeclared identifier 'tint_mod_u32'
-  uint const r = tint_mod_u32(a, (b + b));
-                 ^
-
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.ir.msl
index 4395b07..67af20b 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.ir.msl
@@ -1,19 +1,13 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
+  int3 const v = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
+  return (lhs - ((lhs / v) * v));
+}
 kernel void f() {
   int a = 4;
   int3 b = int3(0, 2, 0);
-  int3 const v = (b + b);
-  int3 const r = tint_mod_v3i32(int3(a), v);
+  int3 const v_1 = (b + b);
+  int3 const r = tint_mod_v3i32(int3(a), v_1);
 }
-int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
-  int3 const v_1 = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
-  return (lhs - ((lhs / v_1) * v_1));
-}
-program_source:8:18: error: use of undeclared identifier 'tint_mod_v3i32'
-  int3 const r = tint_mod_v3i32(int3(a), v);
-                 ^
-
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.ir.msl
index 23fa120..4dfb69b 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.ir.msl
@@ -1,19 +1,13 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
+  uint3 const v = select(rhs, uint3(1u), (rhs == uint3(0u)));
+  return (lhs - ((lhs / v) * v));
+}
 kernel void f() {
   uint a = 4u;
   uint3 b = uint3(0u, 2u, 0u);
-  uint3 const v = (b + b);
-  uint3 const r = tint_mod_v3u32(uint3(a), v);
+  uint3 const v_1 = (b + b);
+  uint3 const r = tint_mod_v3u32(uint3(a), v_1);
 }
-uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
-  uint3 const v_1 = select(rhs, uint3(1u), (rhs == uint3(0u)));
-  return (lhs - ((lhs / v_1) * v_1));
-}
-program_source:8:19: error: use of undeclared identifier 'tint_mod_v3u32'
-  uint3 const r = tint_mod_v3u32(uint3(a), v);
-                  ^
-
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.ir.msl
index b8ab3e9..fdd4a00 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.ir.msl
@@ -1,19 +1,13 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
+  int3 const v = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
+  return (lhs - ((lhs / v) * v));
+}
 kernel void f() {
   int3 a = int3(1, 2, 3);
   int b = 0;
-  int3 const v = a;
-  int3 const r = tint_mod_v3i32(v, int3((b + b)));
+  int3 const v_1 = a;
+  int3 const r = tint_mod_v3i32(v_1, int3((b + b)));
 }
-int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
-  int3 const v_1 = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
-  return (lhs - ((lhs / v_1) * v_1));
-}
-program_source:8:18: error: use of undeclared identifier 'tint_mod_v3i32'
-  int3 const r = tint_mod_v3i32(v, int3((b + b)));
-                 ^
-
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.ir.msl
index c63c2cb..ad990c1 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.ir.msl
@@ -1,19 +1,13 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
+  uint3 const v = select(rhs, uint3(1u), (rhs == uint3(0u)));
+  return (lhs - ((lhs / v) * v));
+}
 kernel void f() {
   uint3 a = uint3(1u, 2u, 3u);
   uint b = 0u;
-  uint3 const v = a;
-  uint3 const r = tint_mod_v3u32(v, uint3((b + b)));
+  uint3 const v_1 = a;
+  uint3 const r = tint_mod_v3u32(v_1, uint3((b + b)));
 }
-uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
-  uint3 const v_1 = select(rhs, uint3(1u), (rhs == uint3(0u)));
-  return (lhs - ((lhs / v_1) * v_1));
-}
-program_source:8:19: error: use of undeclared identifier 'tint_mod_v3u32'
-  uint3 const r = tint_mod_v3u32(v, uint3((b + b)));
-                  ^
-
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.ir.msl
index a9eca17..980b4a1 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.ir.msl
@@ -1,18 +1,12 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
+  int3 const v = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
+  return (lhs - ((lhs / v) * v));
+}
 kernel void f() {
   int3 a = int3(1, 2, 3);
   int3 b = int3(0, 5, 0);
   int3 const r = tint_mod_v3i32(a, (b + b));
 }
-int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
-  int3 const v = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
-  return (lhs - ((lhs / v) * v));
-}
-program_source:7:18: error: use of undeclared identifier 'tint_mod_v3i32'
-  int3 const r = tint_mod_v3i32(a, (b + b));
-                 ^
-
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.ir.msl
index 8b388fa..3d18b4a 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.ir.msl
@@ -1,18 +1,12 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
+  uint3 const v = select(rhs, uint3(1u), (rhs == uint3(0u)));
+  return (lhs - ((lhs / v) * v));
+}
 kernel void f() {
   uint3 a = uint3(1u, 2u, 3u);
   uint3 b = uint3(0u, 5u, 0u);
   uint3 const r = tint_mod_v3u32(a, (b + b));
 }
-uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
-  uint3 const v = select(rhs, uint3(1u), (rhs == uint3(0u)));
-  return (lhs - ((lhs / v) * v));
-}
-program_source:7:19: error: use of undeclared identifier 'tint_mod_v3u32'
-  uint3 const r = tint_mod_v3u32(a, (b + b));
-                  ^
-
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.ir.msl
index e6fd9e8..56b4181 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.ir.msl
@@ -1,18 +1,12 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int tint_mod_i32(int lhs, int rhs) {
+  int const v = select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1))));
+  return (lhs - ((lhs / v) * v));
+}
 kernel void f() {
   int a = 1;
   int b = 0;
   int const r = tint_mod_i32(a, b);
 }
-int tint_mod_i32(int lhs, int rhs) {
-  int const v = select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1))));
-  return (lhs - ((lhs / v) * v));
-}
-program_source:7:17: error: use of undeclared identifier 'tint_mod_i32'
-  int const r = tint_mod_i32(a, b);
-                ^
-
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.ir.msl
index bbd1107..2acb8b6 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.ir.msl
@@ -1,18 +1,12 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+uint tint_mod_u32(uint lhs, uint rhs) {
+  uint const v = select(rhs, 1u, (rhs == 0u));
+  return (lhs - ((lhs / v) * v));
+}
 kernel void f() {
   uint a = 1u;
   uint b = 0u;
   uint const r = tint_mod_u32(a, b);
 }
-uint tint_mod_u32(uint lhs, uint rhs) {
-  uint const v = select(rhs, 1u, (rhs == 0u));
-  return (lhs - ((lhs / v) * v));
-}
-program_source:7:18: error: use of undeclared identifier 'tint_mod_u32'
-  uint const r = tint_mod_u32(a, b);
-                 ^
-
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.ir.msl
index 2231a73..50eb686 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.ir.msl
@@ -1,19 +1,13 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
+  int3 const v = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
+  return (lhs - ((lhs / v) * v));
+}
 kernel void f() {
   int a = 4;
   int3 b = int3(0, 2, 0);
-  int3 const v = b;
-  int3 const r = tint_mod_v3i32(int3(a), v);
+  int3 const v_1 = b;
+  int3 const r = tint_mod_v3i32(int3(a), v_1);
 }
-int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
-  int3 const v_1 = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
-  return (lhs - ((lhs / v_1) * v_1));
-}
-program_source:8:18: error: use of undeclared identifier 'tint_mod_v3i32'
-  int3 const r = tint_mod_v3i32(int3(a), v);
-                 ^
-
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.ir.msl
index 5b1ca58..f2fd2dc 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.ir.msl
@@ -1,19 +1,13 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
+  uint3 const v = select(rhs, uint3(1u), (rhs == uint3(0u)));
+  return (lhs - ((lhs / v) * v));
+}
 kernel void f() {
   uint a = 4u;
   uint3 b = uint3(0u, 2u, 0u);
-  uint3 const v = b;
-  uint3 const r = tint_mod_v3u32(uint3(a), v);
+  uint3 const v_1 = b;
+  uint3 const r = tint_mod_v3u32(uint3(a), v_1);
 }
-uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
-  uint3 const v_1 = select(rhs, uint3(1u), (rhs == uint3(0u)));
-  return (lhs - ((lhs / v_1) * v_1));
-}
-program_source:8:19: error: use of undeclared identifier 'tint_mod_v3u32'
-  uint3 const r = tint_mod_v3u32(uint3(a), v);
-                  ^
-
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.ir.msl
index a6017c7..20cef62 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.ir.msl
@@ -1,19 +1,13 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
+  int3 const v = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
+  return (lhs - ((lhs / v) * v));
+}
 kernel void f() {
   int3 a = int3(1, 2, 3);
   int b = 0;
-  int3 const v = a;
-  int3 const r = tint_mod_v3i32(v, int3(b));
+  int3 const v_1 = a;
+  int3 const r = tint_mod_v3i32(v_1, int3(b));
 }
-int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
-  int3 const v_1 = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
-  return (lhs - ((lhs / v_1) * v_1));
-}
-program_source:8:18: error: use of undeclared identifier 'tint_mod_v3i32'
-  int3 const r = tint_mod_v3i32(v, int3(b));
-                 ^
-
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.ir.msl
index 96355d9..d7533fa 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.ir.msl
@@ -1,19 +1,13 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
+  uint3 const v = select(rhs, uint3(1u), (rhs == uint3(0u)));
+  return (lhs - ((lhs / v) * v));
+}
 kernel void f() {
   uint3 a = uint3(1u, 2u, 3u);
   uint b = 0u;
-  uint3 const v = a;
-  uint3 const r = tint_mod_v3u32(v, uint3(b));
+  uint3 const v_1 = a;
+  uint3 const r = tint_mod_v3u32(v_1, uint3(b));
 }
-uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
-  uint3 const v_1 = select(rhs, uint3(1u), (rhs == uint3(0u)));
-  return (lhs - ((lhs / v_1) * v_1));
-}
-program_source:8:19: error: use of undeclared identifier 'tint_mod_v3u32'
-  uint3 const r = tint_mod_v3u32(v, uint3(b));
-                  ^
-
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.ir.msl
index a7c66f5..c204531 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.ir.msl
@@ -1,18 +1,12 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
+  int3 const v = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
+  return (lhs - ((lhs / v) * v));
+}
 kernel void f() {
   int3 a = int3(1, 2, 3);
   int3 b = int3(0, 5, 0);
   int3 const r = tint_mod_v3i32(a, b);
 }
-int3 tint_mod_v3i32(int3 lhs, int3 rhs) {
-  int3 const v = select(rhs, int3(1), ((rhs == int3(0)) | ((lhs == int3((-2147483647 - 1))) & (rhs == int3(-1)))));
-  return (lhs - ((lhs / v) * v));
-}
-program_source:7:18: error: use of undeclared identifier 'tint_mod_v3i32'
-  int3 const r = tint_mod_v3i32(a, b);
-                 ^
-
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.ir.msl b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.ir.msl
index 60ddeeb..e040c27 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.ir.msl
@@ -1,18 +1,12 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
+  uint3 const v = select(rhs, uint3(1u), (rhs == uint3(0u)));
+  return (lhs - ((lhs / v) * v));
+}
 kernel void f() {
   uint3 a = uint3(1u, 2u, 3u);
   uint3 b = uint3(0u, 5u, 0u);
   uint3 const r = tint_mod_v3u32(a, b);
 }
-uint3 tint_mod_v3u32(uint3 lhs, uint3 rhs) {
-  uint3 const v = select(rhs, uint3(1u), (rhs == uint3(0u)));
-  return (lhs - ((lhs / v) * v));
-}
-program_source:7:19: error: use of undeclared identifier 'tint_mod_v3u32'
-  uint3 const r = tint_mod_v3u32(a, b);
-                  ^
-
diff --git a/test/tint/statements/compound_assign/function.wgsl.expected.ir.msl b/test/tint/statements/compound_assign/function.wgsl.expected.ir.msl
index e7169f7..400e900 100644
--- a/test/tint/statements/compound_assign/function.wgsl.expected.ir.msl
+++ b/test/tint/statements/compound_assign/function.wgsl.expected.ir.msl
@@ -1,8 +1,9 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
+int tint_div_i32(int lhs, int rhs) {
+  return (lhs / select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1)))));
+}
 void foo() {
   int a = 0;
   float4 b = 0.0f;
@@ -11,10 +12,3 @@
   b = (b * float4x4(float4(0.0f), float4(0.0f), float4(0.0f), float4(0.0f)));
   c = (c * 2.0f);
 }
-int tint_div_i32(int lhs, int rhs) {
-  return (lhs / select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1)))));
-}
-program_source:8:7: error: use of undeclared identifier 'tint_div_i32'
-  a = tint_div_i32(a, 2);
-      ^
-