[ir][msl] Emit bitcast

Add support for the `bitcast` instruction into the MSL printer.

Bug: tint:1967
Change-Id: Ifec5364d045547dbd4295c751767a985e00d8184
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/162221
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: dan sinclair <dsinclair@chromium.org>
Reviewed-by: Ben Clayton <bclayton@google.com>
diff --git a/src/tint/lang/msl/writer/printer/printer.cc b/src/tint/lang/msl/writer/printer/printer.cc
index 105f090..ea4669c 100644
--- a/src/tint/lang/msl/writer/printer/printer.cc
+++ b/src/tint/lang/msl/writer/printer/printer.cc
@@ -35,6 +35,7 @@
 #include "src/tint/lang/core/constant/splat.h"
 #include "src/tint/lang/core/fluent_types.h"
 #include "src/tint/lang/core/ir/binary.h"
+#include "src/tint/lang/core/ir/bitcast.h"
 #include "src/tint/lang/core/ir/constant.h"
 #include "src/tint/lang/core/ir/construct.h"
 #include "src/tint/lang/core/ir/discard.h"
@@ -253,6 +254,7 @@
                 [&](core::ir::Var* v) { EmitVar(v); },               //
                 [&](core::ir::Discard*) { EmitDiscard(); },          //
 
+                [&](core::ir::Bitcast*) { MaybeEmitInstruction(inst); },    //
                 [&](core::ir::Binary*) { MaybeEmitInstruction(inst); },     //
                 [&](core::ir::Let* l) { EmitLet(l); },                      //
                 [&](core::ir::Load*) { MaybeEmitInstruction(inst); },       //
@@ -293,6 +295,7 @@
                     [&](const core::ir::Load* l) { EmitValue(out, l->From()); },   //
                     [&](const core::ir::Construct* c) { EmitConstruct(out, c); },  //
                     [&](const core::ir::Var* var) { EmitVarName(out, var); },      //
+                    [&](const core::ir::Bitcast* b) { EmitBitcast(out, b); },      //
                     TINT_ICE_ON_NO_MATCH);
             },  //
             TINT_ICE_ON_NO_MATCH);
@@ -479,6 +482,15 @@
     /// Emit a discard instruction
     void EmitDiscard() { Line() << "discard_fragment();"; }
 
+    /// Emit a bitcast instruction
+    void EmitBitcast(StringStream& out, const core::ir::Bitcast* b) {
+        out << "as_type<";
+        EmitType(out, b->Result()->Type());
+        out << ">(";
+        EmitValue(out, b->Val());
+        out << ")";
+    }
+
     /// Emit a constructor
     void EmitConstruct(StringStream& out, const core::ir::Construct* c) {
         Switch(
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4f32.wgsl.expected.ir.msl
index 9065780..320f7c6 100644
--- a/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4f32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   float4 const b = float4(2.003662109375f, -513.03125f, -1024.25f, 0.00169684563297778368f);
 }
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4i32.wgsl.expected.ir.msl
index dac3cc1..890b578 100644
--- a/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4i32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   int4 const b = int4(1073757184, -1006616064, -998242304, 987654321);
 }
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4u32.wgsl.expected.ir.msl
index 8ec8122..6737cdc 100644
--- a/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4u32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   uint4 const b = uint4(1073757184u, 3288351232u, 3296724992u, 987654321u);
 }
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4f32.wgsl.expected.ir.msl
index 9065780..320f7c6 100644
--- a/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4f32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   float4 const b = float4(2.003662109375f, -513.03125f, -1024.25f, 0.00169684563297778368f);
 }
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4i32.wgsl.expected.ir.msl
index dac3cc1..890b578 100644
--- a/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4i32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   int4 const b = int4(1073757184, -1006616064, -998242304, 987654321);
 }
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4u32.wgsl.expected.ir.msl
index 8ec8122..6737cdc 100644
--- a/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4u32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   uint4 const b = uint4(1073757184u, 3288351232u, 3296724992u, 987654321u);
 }
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4f32.wgsl.expected.ir.msl
index 9065780..320f7c6 100644
--- a/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4f32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   float4 const b = float4(2.003662109375f, -513.03125f, -1024.25f, 0.00169684563297778368f);
 }
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4i32.wgsl.expected.ir.msl
index dac3cc1..890b578 100644
--- a/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4i32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   int4 const b = int4(1073757184, -1006616064, -998242304, 987654321);
 }
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4u32.wgsl.expected.ir.msl
index 8ec8122..6737cdc 100644
--- a/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4u32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   uint4 const b = uint4(1073757184u, 3288351232u, 3296724992u, 987654321u);
 }
diff --git a/test/tint/expressions/bitcast/const/16bit/f16-f16.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/16bit/f16-f16.wgsl.expected.ir.msl
index 243c681..ebf33b1 100644
--- a/test/tint/expressions/bitcast/const/16bit/f16-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/16bit/f16-f16.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   half const b = 1.0h;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/f32-f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/f32-f32.wgsl.expected.ir.msl
index 6c651f7..d761e2f 100644
--- a/test/tint/expressions/bitcast/const/32bit/f32-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/32bit/f32-f32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   float const b = 2.003662109375f;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/f32-i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/f32-i32.wgsl.expected.ir.msl
index 39045e6..4a51e61 100644
--- a/test/tint/expressions/bitcast/const/32bit/f32-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/32bit/f32-i32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   int const b = 1073757184;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/f32-u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/f32-u32.wgsl.expected.ir.msl
index b76edda..5c36117 100644
--- a/test/tint/expressions/bitcast/const/32bit/f32-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/32bit/f32-u32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   uint const b = 1073757184u;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/f32-vec2f16.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/f32-vec2f16.wgsl.expected.ir.msl
index f061333..5fac461 100644
--- a/test/tint/expressions/bitcast/const/32bit/f32-vec2f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/32bit/f32-vec2f16.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   half2 const b = half2(1.0h, 2.0h);
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/i32-f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/i32-f32.wgsl.expected.ir.msl
index 6c651f7..d761e2f 100644
--- a/test/tint/expressions/bitcast/const/32bit/i32-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/32bit/i32-f32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   float const b = 2.003662109375f;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/i32-i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/i32-i32.wgsl.expected.ir.msl
index 39045e6..4a51e61 100644
--- a/test/tint/expressions/bitcast/const/32bit/i32-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/32bit/i32-i32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   int const b = 1073757184;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/i32-u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/i32-u32.wgsl.expected.ir.msl
index b76edda..5c36117 100644
--- a/test/tint/expressions/bitcast/const/32bit/i32-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/32bit/i32-u32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   uint const b = 1073757184u;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/i32-vec2f16.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/i32-vec2f16.wgsl.expected.ir.msl
index f061333..5fac461 100644
--- a/test/tint/expressions/bitcast/const/32bit/i32-vec2f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/32bit/i32-vec2f16.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   half2 const b = half2(1.0h, 2.0h);
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/i32min-u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/i32min-u32.wgsl.expected.ir.msl
index 33316aa..8ed8c0e 100644
--- a/test/tint/expressions/bitcast/const/32bit/i32min-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/32bit/i32min-u32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   uint const b = 2147483648u;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/u32-f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/u32-f32.wgsl.expected.ir.msl
index 6c651f7..d761e2f 100644
--- a/test/tint/expressions/bitcast/const/32bit/u32-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/32bit/u32-f32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   float const b = 2.003662109375f;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/u32-i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/u32-i32.wgsl.expected.ir.msl
index 39045e6..4a51e61 100644
--- a/test/tint/expressions/bitcast/const/32bit/u32-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/32bit/u32-i32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   int const b = 1073757184;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/u32-u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/u32-u32.wgsl.expected.ir.msl
index b76edda..5c36117 100644
--- a/test/tint/expressions/bitcast/const/32bit/u32-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/32bit/u32-u32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   uint const b = 1073757184u;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/u32-vec2f16.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/u32-vec2f16.wgsl.expected.ir.msl
index f061333..5fac461 100644
--- a/test/tint/expressions/bitcast/const/32bit/u32-vec2f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/32bit/u32-vec2f16.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   half2 const b = half2(1.0h, 2.0h);
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/vec2f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/vec2f16-f32.wgsl.expected.ir.msl
index 6c651f7..d761e2f 100644
--- a/test/tint/expressions/bitcast/const/32bit/vec2f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/32bit/vec2f16-f32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   float const b = 2.003662109375f;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/vec2f16-i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/vec2f16-i32.wgsl.expected.ir.msl
index 39045e6..4a51e61 100644
--- a/test/tint/expressions/bitcast/const/32bit/vec2f16-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/32bit/vec2f16-i32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   int const b = 1073757184;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/vec2f16-u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/vec2f16-u32.wgsl.expected.ir.msl
index b76edda..5c36117 100644
--- a/test/tint/expressions/bitcast/const/32bit/vec2f16-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/32bit/vec2f16-u32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   uint const b = 1073757184u;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/vec2f16-vec2f16.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/32bit/vec2f16-vec2f16.wgsl.expected.ir.msl
index f061333..5fac461 100644
--- a/test/tint/expressions/bitcast/const/32bit/vec2f16-vec2f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/32bit/vec2f16-vec2f16.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   half2 const b = half2(1.0h, 2.0h);
 }
diff --git a/test/tint/expressions/bitcast/const/48bit/vec3f16-vec3f16.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/48bit/vec3f16-vec3f16.wgsl.expected.ir.msl
index 438f49c..5743e64 100644
--- a/test/tint/expressions/bitcast/const/48bit/vec3f16-vec3f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/48bit/vec3f16-vec3f16.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   half3 const b = half3(1.0h, 2.0h, 3.0h);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2f32.wgsl.expected.ir.msl
index 1c1d109..41cbbe7 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2f32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   float2 const b = float2(2.003662109375f, -513.03125f);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2i32.wgsl.expected.ir.msl
index 6b8e61b..4e3e945 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2i32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   int2 const b = int2(1073757184, -1006616064);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2u32.wgsl.expected.ir.msl
index 8b43e6e..0da5b2b 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2u32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   uint2 const b = uint2(1073757184u, 3288351232u);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2f32-vec4f16.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/64bit/vec2f32-vec4f16.wgsl.expected.ir.msl
index 86b7889..6b186ff 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2f32-vec4f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2f32-vec4f16.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   half4 const b = half4(1.0h, 2.0h, 3.0h, -4.0h);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2f32.wgsl.expected.ir.msl
index 1c1d109..41cbbe7 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2f32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   float2 const b = float2(2.003662109375f, -513.03125f);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2i32.wgsl.expected.ir.msl
index 6b8e61b..4e3e945 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2i32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   int2 const b = int2(1073757184, -1006616064);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2u32.wgsl.expected.ir.msl
index 8b43e6e..0da5b2b 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2u32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   uint2 const b = uint2(1073757184u, 3288351232u);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2i32-vec4f16.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/64bit/vec2i32-vec4f16.wgsl.expected.ir.msl
index 86b7889..6b186ff 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2i32-vec4f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2i32-vec4f16.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   half4 const b = half4(1.0h, 2.0h, 3.0h, -4.0h);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2f32.wgsl.expected.ir.msl
index 1c1d109..41cbbe7 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2f32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   float2 const b = float2(2.003662109375f, -513.03125f);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2i32.wgsl.expected.ir.msl
index 6b8e61b..4e3e945 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2i32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   int2 const b = int2(1073757184, -1006616064);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2u32.wgsl.expected.ir.msl
index 8b43e6e..0da5b2b 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2u32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   uint2 const b = uint2(1073757184u, 3288351232u);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2u32-vec4f16.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/64bit/vec2u32-vec4f16.wgsl.expected.ir.msl
index 86b7889..6b186ff 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2u32-vec4f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2u32-vec4f16.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   half4 const b = half4(1.0h, 2.0h, 3.0h, -4.0h);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2f32.wgsl.expected.ir.msl
index 1c1d109..41cbbe7 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2f32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   float2 const b = float2(2.003662109375f, -513.03125f);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2i32.wgsl.expected.ir.msl
index 6b8e61b..4e3e945 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2i32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   int2 const b = int2(1073757184, -1006616064);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2u32.wgsl.expected.ir.msl
index 8b43e6e..0da5b2b 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2u32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   uint2 const b = uint2(1073757184u, 3288351232u);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec4f16-vec4f16.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/64bit/vec4f16-vec4f16.wgsl.expected.ir.msl
index 86b7889..6b186ff 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec4f16-vec4f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/64bit/vec4f16-vec4f16.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   half4 const b = half4(1.0h, 2.0h, 3.0h, -4.0h);
 }
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3f32.wgsl.expected.ir.msl
index e508f2f..db8fc1c 100644
--- a/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3f32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   float3 const b = float3(2.003662109375f, -513.03125f, -1024.25f);
 }
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3i32.wgsl.expected.ir.msl
index 4d37f26..bb43fa1 100644
--- a/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3i32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   int3 const b = int3(1073757184, -1006616064, -998242304);
 }
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3u32.wgsl.expected.ir.msl
index 9d17503..e4d3e04 100644
--- a/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3u32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   uint3 const b = uint3(1073757184u, 3288351232u, 3296724992u);
 }
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3f32.wgsl.expected.ir.msl
index e508f2f..db8fc1c 100644
--- a/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3f32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   float3 const b = float3(2.003662109375f, -513.03125f, -1024.25f);
 }
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3i32.wgsl.expected.ir.msl
index 4d37f26..bb43fa1 100644
--- a/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3i32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   int3 const b = int3(1073757184, -1006616064, -998242304);
 }
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3u32.wgsl.expected.ir.msl
index 9d17503..e4d3e04 100644
--- a/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3u32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   uint3 const b = uint3(1073757184u, 3288351232u, 3296724992u);
 }
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3f32.wgsl.expected.ir.msl
index e508f2f..db8fc1c 100644
--- a/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3f32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   float3 const b = float3(2.003662109375f, -513.03125f, -1024.25f);
 }
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3i32.wgsl.expected.ir.msl
index 4d37f26..bb43fa1 100644
--- a/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3i32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   int3 const b = int3(1073757184, -1006616064, -998242304);
 }
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3u32.wgsl.expected.ir.msl
index 9d17503..e4d3e04 100644
--- a/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3u32.wgsl.expected.ir.msl
@@ -1,8 +1,6 @@
-SKIP: FAILED
-
 #include <metal_stdlib>
 using namespace metal;
 
-void f() {
+kernel void f() {
   uint3 const b = uint3(1073757184u, 3288351232u, 3296724992u);
 }
diff --git a/test/tint/expressions/bitcast/let/128bit/vec4f32-vec4f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/128bit/vec4f32-vec4f32.wgsl.expected.ir.msl
index 7e344ef..e797a34 100644
--- a/test/tint/expressions/bitcast/let/128bit/vec4f32-vec4f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/128bit/vec4f32-vec4f32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  float4 const a = float4(2.003662109375f, -513.03125f, -1024.25f, 0.00169684563297778368f);
+  float4 const b = as_type<float4>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/128bit/vec4f32-vec4i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/128bit/vec4f32-vec4i32.wgsl.expected.ir.msl
index 7e344ef..0a3157c 100644
--- a/test/tint/expressions/bitcast/let/128bit/vec4f32-vec4i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/128bit/vec4f32-vec4i32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  float4 const a = float4(2.003662109375f, -513.03125f, -1024.25f, 0.00169684563297778368f);
+  int4 const b = as_type<int4>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/128bit/vec4f32-vec4u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/128bit/vec4f32-vec4u32.wgsl.expected.ir.msl
index 7e344ef..187de3e 100644
--- a/test/tint/expressions/bitcast/let/128bit/vec4f32-vec4u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/128bit/vec4f32-vec4u32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  float4 const a = float4(2.003662109375f, -513.03125f, -1024.25f, 0.00169684563297778368f);
+  uint4 const b = as_type<uint4>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/128bit/vec4i32-vec4f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/128bit/vec4i32-vec4f32.wgsl.expected.ir.msl
index 7e344ef..b8c1b43 100644
--- a/test/tint/expressions/bitcast/let/128bit/vec4i32-vec4f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/128bit/vec4i32-vec4f32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  int4 const a = int4(1073757184, -1006616064, -998242304, 987654321);
+  float4 const b = as_type<float4>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/128bit/vec4i32-vec4i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/128bit/vec4i32-vec4i32.wgsl.expected.ir.msl
index 7e344ef..6a590ce 100644
--- a/test/tint/expressions/bitcast/let/128bit/vec4i32-vec4i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/128bit/vec4i32-vec4i32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  int4 const a = int4(1073757184, -1006616064, -998242304, 987654321);
+  int4 const b = as_type<int4>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/128bit/vec4i32-vec4u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/128bit/vec4i32-vec4u32.wgsl.expected.ir.msl
index 7e344ef..30bc91c 100644
--- a/test/tint/expressions/bitcast/let/128bit/vec4i32-vec4u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/128bit/vec4i32-vec4u32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  int4 const a = int4(1073757184, -1006616064, -998242304, 987654321);
+  uint4 const b = as_type<uint4>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/128bit/vec4u32-vec4f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/128bit/vec4u32-vec4f32.wgsl.expected.ir.msl
index 7e344ef..7ebeb84 100644
--- a/test/tint/expressions/bitcast/let/128bit/vec4u32-vec4f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/128bit/vec4u32-vec4f32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  uint4 const a = uint4(1073757184u, 3288351232u, 3296724992u, 987654321u);
+  float4 const b = as_type<float4>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/128bit/vec4u32-vec4i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/128bit/vec4u32-vec4i32.wgsl.expected.ir.msl
index 7e344ef..1d1de93 100644
--- a/test/tint/expressions/bitcast/let/128bit/vec4u32-vec4i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/128bit/vec4u32-vec4i32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  uint4 const a = uint4(1073757184u, 3288351232u, 3296724992u, 987654321u);
+  int4 const b = as_type<int4>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/128bit/vec4u32-vec4u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/128bit/vec4u32-vec4u32.wgsl.expected.ir.msl
index 7e344ef..333b9a3 100644
--- a/test/tint/expressions/bitcast/let/128bit/vec4u32-vec4u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/128bit/vec4u32-vec4u32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  uint4 const a = uint4(1073757184u, 3288351232u, 3296724992u, 987654321u);
+  uint4 const b = as_type<uint4>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/16bit/f16-f16.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/16bit/f16-f16.wgsl.expected.ir.msl
index 7e344ef..66fd8e6 100644
--- a/test/tint/expressions/bitcast/let/16bit/f16-f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/16bit/f16-f16.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  half const a = 1.0h;
+  half const b = as_type<half>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/32bit/f32-f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/32bit/f32-f32.wgsl.expected.ir.msl
index 7e344ef..78ebcda 100644
--- a/test/tint/expressions/bitcast/let/32bit/f32-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/32bit/f32-f32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  float const a = 2.003662109375f;
+  float const b = as_type<float>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/32bit/f32-i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/32bit/f32-i32.wgsl.expected.ir.msl
index 7e344ef..d926348 100644
--- a/test/tint/expressions/bitcast/let/32bit/f32-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/32bit/f32-i32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  float const a = 2.003662109375f;
+  int const b = as_type<int>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/32bit/f32-u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/32bit/f32-u32.wgsl.expected.ir.msl
index 7e344ef..e9a6f9a 100644
--- a/test/tint/expressions/bitcast/let/32bit/f32-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/32bit/f32-u32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  float const a = 2.003662109375f;
+  uint const b = as_type<uint>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/32bit/f32-vec2f16.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/32bit/f32-vec2f16.wgsl.expected.ir.msl
index 7e344ef..26e248f 100644
--- a/test/tint/expressions/bitcast/let/32bit/f32-vec2f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/32bit/f32-vec2f16.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  float const a = 2.003662109375f;
+  half2 const b = as_type<half2>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/32bit/i32-f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/32bit/i32-f32.wgsl.expected.ir.msl
index 7e344ef..f4d62d9 100644
--- a/test/tint/expressions/bitcast/let/32bit/i32-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/32bit/i32-f32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  int const a = 1073757184;
+  float const b = as_type<float>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/32bit/i32-i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/32bit/i32-i32.wgsl.expected.ir.msl
index 7e344ef..7e0a9e7 100644
--- a/test/tint/expressions/bitcast/let/32bit/i32-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/32bit/i32-i32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  int const a = 1073757184;
+  int const b = as_type<int>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/32bit/i32-u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/32bit/i32-u32.wgsl.expected.ir.msl
index 7e344ef..70de6c7 100644
--- a/test/tint/expressions/bitcast/let/32bit/i32-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/32bit/i32-u32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  int const a = 1073757184;
+  uint const b = as_type<uint>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/32bit/i32-vec2f16.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/32bit/i32-vec2f16.wgsl.expected.ir.msl
index 7e344ef..85159a1 100644
--- a/test/tint/expressions/bitcast/let/32bit/i32-vec2f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/32bit/i32-vec2f16.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  int const a = 1073757184;
+  half2 const b = as_type<half2>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/32bit/u32-f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/32bit/u32-f32.wgsl.expected.ir.msl
index 7e344ef..c61a03f 100644
--- a/test/tint/expressions/bitcast/let/32bit/u32-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/32bit/u32-f32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  uint const a = 1073757184u;
+  float const b = as_type<float>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/32bit/u32-i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/32bit/u32-i32.wgsl.expected.ir.msl
index 7e344ef..12791d9 100644
--- a/test/tint/expressions/bitcast/let/32bit/u32-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/32bit/u32-i32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  uint const a = 1073757184u;
+  int const b = as_type<int>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/32bit/u32-u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/32bit/u32-u32.wgsl.expected.ir.msl
index 7e344ef..97bde6d 100644
--- a/test/tint/expressions/bitcast/let/32bit/u32-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/32bit/u32-u32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  uint const a = 1073757184u;
+  uint const b = as_type<uint>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/32bit/u32-vec2f16.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/32bit/u32-vec2f16.wgsl.expected.ir.msl
index 7e344ef..79405e2 100644
--- a/test/tint/expressions/bitcast/let/32bit/u32-vec2f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/32bit/u32-vec2f16.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  uint const a = 1073757184u;
+  half2 const b = as_type<half2>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/32bit/vec2f16-f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/32bit/vec2f16-f32.wgsl.expected.ir.msl
index 7e344ef..44ba38b 100644
--- a/test/tint/expressions/bitcast/let/32bit/vec2f16-f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/32bit/vec2f16-f32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  half2 const a = half2(1.0h, 2.0h);
+  float const b = as_type<float>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/32bit/vec2f16-i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/32bit/vec2f16-i32.wgsl.expected.ir.msl
index 7e344ef..59afed3 100644
--- a/test/tint/expressions/bitcast/let/32bit/vec2f16-i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/32bit/vec2f16-i32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  half2 const a = half2(1.0h, 2.0h);
+  int const b = as_type<int>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/32bit/vec2f16-u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/32bit/vec2f16-u32.wgsl.expected.ir.msl
index 7e344ef..6591584 100644
--- a/test/tint/expressions/bitcast/let/32bit/vec2f16-u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/32bit/vec2f16-u32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  half2 const a = half2(1.0h, 2.0h);
+  uint const b = as_type<uint>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/32bit/vec2f16-vec2f16.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/32bit/vec2f16-vec2f16.wgsl.expected.ir.msl
index 7e344ef..aeeea39 100644
--- a/test/tint/expressions/bitcast/let/32bit/vec2f16-vec2f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/32bit/vec2f16-vec2f16.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  half2 const a = half2(1.0h, 2.0h);
+  half2 const b = as_type<half2>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/48bit/vec3f16-vec3f16.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/48bit/vec3f16-vec3f16.wgsl.expected.ir.msl
index 7e344ef..329a879 100644
--- a/test/tint/expressions/bitcast/let/48bit/vec3f16-vec3f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/48bit/vec3f16-vec3f16.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  half3 const a = half3(1.0h, 2.0h, 3.0h);
+  half3 const b = as_type<half3>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/64bit/vec2f32-vec2f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/64bit/vec2f32-vec2f32.wgsl.expected.ir.msl
index 7e344ef..00aec8a 100644
--- a/test/tint/expressions/bitcast/let/64bit/vec2f32-vec2f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/64bit/vec2f32-vec2f32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  float2 const a = float2(2.003662109375f, -513.03125f);
+  float2 const b = as_type<float2>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/64bit/vec2f32-vec2i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/64bit/vec2f32-vec2i32.wgsl.expected.ir.msl
index 7e344ef..835c4e6 100644
--- a/test/tint/expressions/bitcast/let/64bit/vec2f32-vec2i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/64bit/vec2f32-vec2i32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  float2 const a = float2(2.003662109375f, -513.03125f);
+  int2 const b = as_type<int2>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/64bit/vec2f32-vec2u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/64bit/vec2f32-vec2u32.wgsl.expected.ir.msl
index 7e344ef..dbd92f8 100644
--- a/test/tint/expressions/bitcast/let/64bit/vec2f32-vec2u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/64bit/vec2f32-vec2u32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  float2 const a = float2(2.003662109375f, -513.03125f);
+  uint2 const b = as_type<uint2>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/64bit/vec2f32-vec4f16.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/64bit/vec2f32-vec4f16.wgsl.expected.ir.msl
index 7e344ef..60d01f7 100644
--- a/test/tint/expressions/bitcast/let/64bit/vec2f32-vec4f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/64bit/vec2f32-vec4f16.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  float2 const a = float2(2.003662109375f, -513.03125f);
+  half4 const b = as_type<half4>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/64bit/vec2i32-vec2f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/64bit/vec2i32-vec2f32.wgsl.expected.ir.msl
index 7e344ef..6cc01e1 100644
--- a/test/tint/expressions/bitcast/let/64bit/vec2i32-vec2f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/64bit/vec2i32-vec2f32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  int2 const a = int2(1073757184, -1006616064);
+  float2 const b = as_type<float2>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/64bit/vec2i32-vec2i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/64bit/vec2i32-vec2i32.wgsl.expected.ir.msl
index 7e344ef..4a07557 100644
--- a/test/tint/expressions/bitcast/let/64bit/vec2i32-vec2i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/64bit/vec2i32-vec2i32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  int2 const a = int2(1073757184, -1006616064);
+  int2 const b = as_type<int2>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/64bit/vec2i32-vec2u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/64bit/vec2i32-vec2u32.wgsl.expected.ir.msl
index 7e344ef..01aa32c 100644
--- a/test/tint/expressions/bitcast/let/64bit/vec2i32-vec2u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/64bit/vec2i32-vec2u32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  int2 const a = int2(1073757184, -1006616064);
+  uint2 const b = as_type<uint2>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/64bit/vec2i32-vec4f16.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/64bit/vec2i32-vec4f16.wgsl.expected.ir.msl
index 7e344ef..64e3c24 100644
--- a/test/tint/expressions/bitcast/let/64bit/vec2i32-vec4f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/64bit/vec2i32-vec4f16.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  int2 const a = int2(1073757184, -1006616064);
+  half4 const b = as_type<half4>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/64bit/vec2u32-vec2f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/64bit/vec2u32-vec2f32.wgsl.expected.ir.msl
index 7e344ef..87a30ef 100644
--- a/test/tint/expressions/bitcast/let/64bit/vec2u32-vec2f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/64bit/vec2u32-vec2f32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  uint2 const a = uint2(1073757184u, 3288351232u);
+  float2 const b = as_type<float2>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/64bit/vec2u32-vec2i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/64bit/vec2u32-vec2i32.wgsl.expected.ir.msl
index 7e344ef..03e8c47 100644
--- a/test/tint/expressions/bitcast/let/64bit/vec2u32-vec2i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/64bit/vec2u32-vec2i32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  uint2 const a = uint2(1073757184u, 3288351232u);
+  int2 const b = as_type<int2>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/64bit/vec2u32-vec2u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/64bit/vec2u32-vec2u32.wgsl.expected.ir.msl
index 7e344ef..e449bc0 100644
--- a/test/tint/expressions/bitcast/let/64bit/vec2u32-vec2u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/64bit/vec2u32-vec2u32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  uint2 const a = uint2(1073757184u, 3288351232u);
+  uint2 const b = as_type<uint2>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/64bit/vec2u32-vec4f16.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/64bit/vec2u32-vec4f16.wgsl.expected.ir.msl
index 7e344ef..a43a082 100644
--- a/test/tint/expressions/bitcast/let/64bit/vec2u32-vec4f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/64bit/vec2u32-vec4f16.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  uint2 const a = uint2(1073757184u, 3288351232u);
+  half4 const b = as_type<half4>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/64bit/vec4f16-vec2f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/64bit/vec4f16-vec2f32.wgsl.expected.ir.msl
index 7e344ef..7ec346c 100644
--- a/test/tint/expressions/bitcast/let/64bit/vec4f16-vec2f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/64bit/vec4f16-vec2f32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  half4 const a = half4(1.0h, 2.0h, 3.0h, -4.0h);
+  float2 const b = as_type<float2>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/64bit/vec4f16-vec2i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/64bit/vec4f16-vec2i32.wgsl.expected.ir.msl
index 7e344ef..7d52cb3 100644
--- a/test/tint/expressions/bitcast/let/64bit/vec4f16-vec2i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/64bit/vec4f16-vec2i32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  half4 const a = half4(1.0h, 2.0h, 3.0h, -4.0h);
+  int2 const b = as_type<int2>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/64bit/vec4f16-vec2u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/64bit/vec4f16-vec2u32.wgsl.expected.ir.msl
index 7e344ef..4156cde 100644
--- a/test/tint/expressions/bitcast/let/64bit/vec4f16-vec2u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/64bit/vec4f16-vec2u32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  half4 const a = half4(1.0h, 2.0h, 3.0h, -4.0h);
+  uint2 const b = as_type<uint2>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/64bit/vec4f16-vec4f16.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/64bit/vec4f16-vec4f16.wgsl.expected.ir.msl
index 7e344ef..c644ff0 100644
--- a/test/tint/expressions/bitcast/let/64bit/vec4f16-vec4f16.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/64bit/vec4f16-vec4f16.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  half4 const a = half4(1.0h, 2.0h, 3.0h, -4.0h);
+  half4 const b = as_type<half4>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/96bit/vec3f32-vec3f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/96bit/vec3f32-vec3f32.wgsl.expected.ir.msl
index 7e344ef..3d9f5cf 100644
--- a/test/tint/expressions/bitcast/let/96bit/vec3f32-vec3f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/96bit/vec3f32-vec3f32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  float3 const a = float3(2.003662109375f, -513.03125f, -1024.25f);
+  float3 const b = as_type<float3>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/96bit/vec3f32-vec3i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/96bit/vec3f32-vec3i32.wgsl.expected.ir.msl
index 7e344ef..75c2535 100644
--- a/test/tint/expressions/bitcast/let/96bit/vec3f32-vec3i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/96bit/vec3f32-vec3i32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  float3 const a = float3(2.003662109375f, -513.03125f, -1024.25f);
+  int3 const b = as_type<int3>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/96bit/vec3f32-vec3u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/96bit/vec3f32-vec3u32.wgsl.expected.ir.msl
index 7e344ef..ec52948 100644
--- a/test/tint/expressions/bitcast/let/96bit/vec3f32-vec3u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/96bit/vec3f32-vec3u32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  float3 const a = float3(2.003662109375f, -513.03125f, -1024.25f);
+  uint3 const b = as_type<uint3>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/96bit/vec3i32-vec3f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/96bit/vec3i32-vec3f32.wgsl.expected.ir.msl
index 7e344ef..964d87c 100644
--- a/test/tint/expressions/bitcast/let/96bit/vec3i32-vec3f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/96bit/vec3i32-vec3f32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  int3 const a = int3(1073757184, -1006616064, -998242304);
+  float3 const b = as_type<float3>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/96bit/vec3i32-vec3i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/96bit/vec3i32-vec3i32.wgsl.expected.ir.msl
index 7e344ef..f280a85 100644
--- a/test/tint/expressions/bitcast/let/96bit/vec3i32-vec3i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/96bit/vec3i32-vec3i32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  int3 const a = int3(1073757184, -1006616064, -998242304);
+  int3 const b = as_type<int3>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/96bit/vec3i32-vec3u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/96bit/vec3i32-vec3u32.wgsl.expected.ir.msl
index 7e344ef..a78b128 100644
--- a/test/tint/expressions/bitcast/let/96bit/vec3i32-vec3u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/96bit/vec3i32-vec3u32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  int3 const a = int3(1073757184, -1006616064, -998242304);
+  uint3 const b = as_type<uint3>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/96bit/vec3u32-vec3f32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/96bit/vec3u32-vec3f32.wgsl.expected.ir.msl
index 7e344ef..668f617 100644
--- a/test/tint/expressions/bitcast/let/96bit/vec3u32-vec3f32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/96bit/vec3u32-vec3f32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  uint3 const a = uint3(1073757184u, 3288351232u, 3296724992u);
+  float3 const b = as_type<float3>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/96bit/vec3u32-vec3i32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/96bit/vec3u32-vec3i32.wgsl.expected.ir.msl
index 7e344ef..a5b49f3 100644
--- a/test/tint/expressions/bitcast/let/96bit/vec3u32-vec3i32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/96bit/vec3u32-vec3i32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  uint3 const a = uint3(1073757184u, 3288351232u, 3296724992u);
+  int3 const b = as_type<int3>(a);
+}
diff --git a/test/tint/expressions/bitcast/let/96bit/vec3u32-vec3u32.wgsl.expected.ir.msl b/test/tint/expressions/bitcast/let/96bit/vec3u32-vec3u32.wgsl.expected.ir.msl
index 7e344ef..81f1721 100644
--- a/test/tint/expressions/bitcast/let/96bit/vec3u32-vec3u32.wgsl.expected.ir.msl
+++ b/test/tint/expressions/bitcast/let/96bit/vec3u32-vec3u32.wgsl.expected.ir.msl
@@ -1,9 +1,7 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
 
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Bitcast
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+kernel void f() {
+  uint3 const a = uint3(1073757184u, 3288351232u, 3296724992u);
+  uint3 const b = as_type<uint3>(a);
+}