[ir][msl] Emit ir::Access
Add support for the ir access instruction in the MSL printer.
Bug: tint:1967
Change-Id: I3e51ba92eb9cb57ae13e325ea633d391dfa0b6a0
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/162240
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 ea4669c..f7c4c0c 100644
--- a/src/tint/lang/msl/writer/printer/printer.cc
+++ b/src/tint/lang/msl/writer/printer/printer.cc
@@ -34,6 +34,7 @@
#include "src/tint/lang/core/constant/composite.h"
#include "src/tint/lang/core/constant/splat.h"
#include "src/tint/lang/core/fluent_types.h"
+#include "src/tint/lang/core/ir/access.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"
@@ -259,6 +260,7 @@
[&](core::ir::Let* l) { EmitLet(l); }, //
[&](core::ir::Load*) { MaybeEmitInstruction(inst); }, //
[&](core::ir::Construct*) { MaybeEmitInstruction(inst); }, //
+ [&](core::ir::Access*) { MaybeEmitInstruction(inst); }, //
TINT_ICE_ON_NO_MATCH);
}
}
@@ -296,6 +298,7 @@
[&](const core::ir::Construct* c) { EmitConstruct(out, c); }, //
[&](const core::ir::Var* var) { EmitVarName(out, var); }, //
[&](const core::ir::Bitcast* b) { EmitBitcast(out, b); }, //
+ [&](const core::ir::Access* a) { EmitAccess(out, a); }, //
TINT_ICE_ON_NO_MATCH);
}, //
TINT_ICE_ON_NO_MATCH);
@@ -491,6 +494,28 @@
out << ")";
}
+ /// Emit an accessor
+ void EmitAccess(StringStream& out, const core::ir::Access* a) {
+ EmitValue(out, a->Object());
+
+ auto* current_type = a->Result()->Type();
+ for (auto* index : a->Indices()) {
+ Switch(
+ current_type, //
+ [&](const core::type::Struct* s) {
+ auto* c = index->As<core::ir::Constant>();
+ auto* member = s->Members()[c->Value()->ValueAs<uint32_t>()];
+ out << "." << member->Name().Name();
+ current_type = member->Type();
+ },
+ [&](Default) {
+ out << "[";
+ EmitValue(out, index);
+ out << "]";
+ });
+ }
+ }
+
/// Emit a constructor
void EmitConstruct(StringStream& out, const core::ir::Construct* c) {
Switch(
diff --git a/test/tint/expressions/index/let/let/literal/array.wgsl.expected.ir.msl b/test/tint/expressions/index/let/let/literal/array.wgsl.expected.ir.msl
index 28251dc..73955d7 100644
--- a/test/tint/expressions/index/let/let/literal/array.wgsl.expected.ir.msl
+++ b/test/tint/expressions/index/let/let/literal/array.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+ const constant T& operator[](size_t i) const constant { return elements[i]; }
+ device T& operator[](size_t i) device { return elements[i]; }
+ const device T& operator[](size_t i) const device { return elements[i]; }
+ thread T& operator[](size_t i) thread { return elements[i]; }
+ const thread T& operator[](size_t i) const thread { return elements[i]; }
+ threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+ const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+ T elements[N];
+};
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-* 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. *
-********************************************************************
+
+int f() {
+ tint_array<int, 8> const a = tint_array<int, 8>{1, 2, 3, 4, 5, 6, 7, 8};
+ int const i = 1;
+ return a[i];
+}
diff --git a/test/tint/expressions/index/let/let/literal/matrix.wgsl.expected.ir.msl b/test/tint/expressions/index/let/let/literal/matrix.wgsl.expected.ir.msl
index 28251dc..4c8cb95 100644
--- a/test/tint/expressions/index/let/let/literal/matrix.wgsl.expected.ir.msl
+++ b/test/tint/expressions/index/let/let/literal/matrix.wgsl.expected.ir.msl
@@ -1,9 +1,8 @@
-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::Access
-********************************************************************
-* 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. *
-********************************************************************
+float3 f() {
+ float3x3 const m = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));
+ int const i = 1;
+ return m[i];
+}
diff --git a/test/tint/expressions/index/let/let/literal/vector.wgsl.expected.ir.msl b/test/tint/expressions/index/let/let/literal/vector.wgsl.expected.ir.msl
index 28251dc..faececb 100644
--- a/test/tint/expressions/index/let/let/literal/vector.wgsl.expected.ir.msl
+++ b/test/tint/expressions/index/let/let/literal/vector.wgsl.expected.ir.msl
@@ -1,9 +1,8 @@
-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::Access
-********************************************************************
-* 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. *
-********************************************************************
+float f() {
+ float3 const v = float3(1.0f, 2.0f, 3.0f);
+ int const i = 1;
+ return v[i];
+}
diff --git a/test/tint/expressions/index/let/let/param/array.wgsl.expected.ir.msl b/test/tint/expressions/index/let/let/param/array.wgsl.expected.ir.msl
index 567c382..c72e77b 100644
--- a/test/tint/expressions/index/let/let/param/array.wgsl.expected.ir.msl
+++ b/test/tint/expressions/index/let/let/param/array.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
SKIP: FAILED
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
+<dawn>/src/tint/lang/msl/writer/printer/printer.cc:305 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
********************************************************************
* The tint shader compiler has encountered an unexpected error. *
* *
diff --git a/test/tint/expressions/index/let/let/param/matrix.wgsl.expected.ir.msl b/test/tint/expressions/index/let/let/param/matrix.wgsl.expected.ir.msl
index 567c382..c72e77b 100644
--- a/test/tint/expressions/index/let/let/param/matrix.wgsl.expected.ir.msl
+++ b/test/tint/expressions/index/let/let/param/matrix.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
SKIP: FAILED
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
+<dawn>/src/tint/lang/msl/writer/printer/printer.cc:305 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
********************************************************************
* The tint shader compiler has encountered an unexpected error. *
* *
diff --git a/test/tint/expressions/index/let/let/param/vector.wgsl.expected.ir.msl b/test/tint/expressions/index/let/let/param/vector.wgsl.expected.ir.msl
index 567c382..c72e77b 100644
--- a/test/tint/expressions/index/let/let/param/vector.wgsl.expected.ir.msl
+++ b/test/tint/expressions/index/let/let/param/vector.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
SKIP: FAILED
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
+<dawn>/src/tint/lang/msl/writer/printer/printer.cc:305 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
********************************************************************
* The tint shader compiler has encountered an unexpected error. *
* *
diff --git a/test/tint/expressions/index/let/literal/array.wgsl.expected.ir.msl b/test/tint/expressions/index/let/literal/array.wgsl.expected.ir.msl
index 28251dc..33dd8ee 100644
--- a/test/tint/expressions/index/let/literal/array.wgsl.expected.ir.msl
+++ b/test/tint/expressions/index/let/literal/array.wgsl.expected.ir.msl
@@ -1,9 +1,19 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+ const constant T& operator[](size_t i) const constant { return elements[i]; }
+ device T& operator[](size_t i) device { return elements[i]; }
+ const device T& operator[](size_t i) const device { return elements[i]; }
+ thread T& operator[](size_t i) thread { return elements[i]; }
+ const thread T& operator[](size_t i) const thread { return elements[i]; }
+ threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+ const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+ T elements[N];
+};
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-* 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. *
-********************************************************************
+
+int f() {
+ tint_array<int, 8> const a = tint_array<int, 8>{1, 2, 3, 4, 5, 6, 7, 8};
+ return a[1];
+}
diff --git a/test/tint/expressions/index/let/literal/matrix.wgsl.expected.ir.msl b/test/tint/expressions/index/let/literal/matrix.wgsl.expected.ir.msl
index 28251dc..5ebac5f 100644
--- a/test/tint/expressions/index/let/literal/matrix.wgsl.expected.ir.msl
+++ b/test/tint/expressions/index/let/literal/matrix.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::Access
-********************************************************************
-* 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. *
-********************************************************************
+float3 f() {
+ float3x3 const m = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));
+ return m[1];
+}
diff --git a/test/tint/expressions/index/let/literal/vector.wgsl.expected.ir.msl b/test/tint/expressions/index/let/literal/vector.wgsl.expected.ir.msl
index 28251dc..c1607bd 100644
--- a/test/tint/expressions/index/let/literal/vector.wgsl.expected.ir.msl
+++ b/test/tint/expressions/index/let/literal/vector.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::Access
-********************************************************************
-* 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. *
-********************************************************************
+float f() {
+ float3 const v = float3(1.0f, 2.0f, 3.0f);
+ return v[1];
+}
diff --git a/test/tint/expressions/index/let/param/array.wgsl.expected.ir.msl b/test/tint/expressions/index/let/param/array.wgsl.expected.ir.msl
index 28251dc..c72e77b 100644
--- a/test/tint/expressions/index/let/param/array.wgsl.expected.ir.msl
+++ b/test/tint/expressions/index/let/param/array.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
SKIP: FAILED
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+<dawn>/src/tint/lang/msl/writer/printer/printer.cc:305 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
********************************************************************
* The tint shader compiler has encountered an unexpected error. *
* *
diff --git a/test/tint/expressions/index/let/param/matrix.wgsl.expected.ir.msl b/test/tint/expressions/index/let/param/matrix.wgsl.expected.ir.msl
index 28251dc..c72e77b 100644
--- a/test/tint/expressions/index/let/param/matrix.wgsl.expected.ir.msl
+++ b/test/tint/expressions/index/let/param/matrix.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
SKIP: FAILED
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+<dawn>/src/tint/lang/msl/writer/printer/printer.cc:305 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
********************************************************************
* The tint shader compiler has encountered an unexpected error. *
* *
diff --git a/test/tint/expressions/index/let/param/vector.wgsl.expected.ir.msl b/test/tint/expressions/index/let/param/vector.wgsl.expected.ir.msl
index 28251dc..c72e77b 100644
--- a/test/tint/expressions/index/let/param/vector.wgsl.expected.ir.msl
+++ b/test/tint/expressions/index/let/param/vector.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
SKIP: FAILED
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+<dawn>/src/tint/lang/msl/writer/printer/printer.cc:305 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
********************************************************************
* The tint shader compiler has encountered an unexpected error. *
* *
diff --git a/test/tint/expressions/index/let/var/literal/array.wgsl.expected.ir.msl b/test/tint/expressions/index/let/var/literal/array.wgsl.expected.ir.msl
index 28251dc..3942da9 100644
--- a/test/tint/expressions/index/let/var/literal/array.wgsl.expected.ir.msl
+++ b/test/tint/expressions/index/let/var/literal/array.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+ const constant T& operator[](size_t i) const constant { return elements[i]; }
+ device T& operator[](size_t i) device { return elements[i]; }
+ const device T& operator[](size_t i) const device { return elements[i]; }
+ thread T& operator[](size_t i) thread { return elements[i]; }
+ const thread T& operator[](size_t i) const thread { return elements[i]; }
+ threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+ const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+ T elements[N];
+};
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-* 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. *
-********************************************************************
+
+int f() {
+ tint_array<int, 8> a = tint_array<int, 8>{1, 2, 3, 4, 5, 6, 7, 8};
+ int const i = 1;
+ return a[i];
+}
diff --git a/test/tint/expressions/index/let/var/literal/matrix.wgsl.expected.ir.msl b/test/tint/expressions/index/let/var/literal/matrix.wgsl.expected.ir.msl
index 28251dc..11f6252 100644
--- a/test/tint/expressions/index/let/var/literal/matrix.wgsl.expected.ir.msl
+++ b/test/tint/expressions/index/let/var/literal/matrix.wgsl.expected.ir.msl
@@ -1,9 +1,8 @@
-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::Access
-********************************************************************
-* 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. *
-********************************************************************
+float3 f() {
+ float3x3 m = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));
+ int const i = 1;
+ return m[i];
+}
diff --git a/test/tint/expressions/index/let/var/literal/vector.wgsl.expected.ir.msl b/test/tint/expressions/index/let/var/literal/vector.wgsl.expected.ir.msl
index 2e88a5f..78e3fb3 100644
--- a/test/tint/expressions/index/let/var/literal/vector.wgsl.expected.ir.msl
+++ b/test/tint/expressions/index/let/var/literal/vector.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
SKIP: FAILED
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
+<dawn>/src/tint/lang/msl/writer/printer/printer.cc:265 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
********************************************************************
* The tint shader compiler has encountered an unexpected error. *
* *
diff --git a/test/tint/expressions/index/var/let/literal/array.wgsl.expected.ir.msl b/test/tint/expressions/index/var/let/literal/array.wgsl.expected.ir.msl
index 28251dc..3942da9 100644
--- a/test/tint/expressions/index/var/let/literal/array.wgsl.expected.ir.msl
+++ b/test/tint/expressions/index/var/let/literal/array.wgsl.expected.ir.msl
@@ -1,9 +1,20 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+ const constant T& operator[](size_t i) const constant { return elements[i]; }
+ device T& operator[](size_t i) device { return elements[i]; }
+ const device T& operator[](size_t i) const device { return elements[i]; }
+ thread T& operator[](size_t i) thread { return elements[i]; }
+ const thread T& operator[](size_t i) const thread { return elements[i]; }
+ threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+ const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+ T elements[N];
+};
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-* 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. *
-********************************************************************
+
+int f() {
+ tint_array<int, 8> a = tint_array<int, 8>{1, 2, 3, 4, 5, 6, 7, 8};
+ int const i = 1;
+ return a[i];
+}
diff --git a/test/tint/expressions/index/var/let/literal/matrix.wgsl.expected.ir.msl b/test/tint/expressions/index/var/let/literal/matrix.wgsl.expected.ir.msl
index 28251dc..11f6252 100644
--- a/test/tint/expressions/index/var/let/literal/matrix.wgsl.expected.ir.msl
+++ b/test/tint/expressions/index/var/let/literal/matrix.wgsl.expected.ir.msl
@@ -1,9 +1,8 @@
-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::Access
-********************************************************************
-* 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. *
-********************************************************************
+float3 f() {
+ float3x3 m = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));
+ int const i = 1;
+ return m[i];
+}
diff --git a/test/tint/expressions/index/var/let/literal/vector.wgsl.expected.ir.msl b/test/tint/expressions/index/var/let/literal/vector.wgsl.expected.ir.msl
index 2e88a5f..78e3fb3 100644
--- a/test/tint/expressions/index/var/let/literal/vector.wgsl.expected.ir.msl
+++ b/test/tint/expressions/index/var/let/literal/vector.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
SKIP: FAILED
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
+<dawn>/src/tint/lang/msl/writer/printer/printer.cc:265 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
********************************************************************
* The tint shader compiler has encountered an unexpected error. *
* *
diff --git a/test/tint/expressions/index/var/let/param/array.wgsl.expected.ir.msl b/test/tint/expressions/index/var/let/param/array.wgsl.expected.ir.msl
index 567c382..c72e77b 100644
--- a/test/tint/expressions/index/var/let/param/array.wgsl.expected.ir.msl
+++ b/test/tint/expressions/index/var/let/param/array.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
SKIP: FAILED
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
+<dawn>/src/tint/lang/msl/writer/printer/printer.cc:305 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
********************************************************************
* The tint shader compiler has encountered an unexpected error. *
* *
diff --git a/test/tint/expressions/index/var/let/param/matrix.wgsl.expected.ir.msl b/test/tint/expressions/index/var/let/param/matrix.wgsl.expected.ir.msl
index 567c382..c72e77b 100644
--- a/test/tint/expressions/index/var/let/param/matrix.wgsl.expected.ir.msl
+++ b/test/tint/expressions/index/var/let/param/matrix.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
SKIP: FAILED
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
+<dawn>/src/tint/lang/msl/writer/printer/printer.cc:305 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
********************************************************************
* The tint shader compiler has encountered an unexpected error. *
* *
diff --git a/test/tint/expressions/index/var/let/param/vector.wgsl.expected.ir.msl b/test/tint/expressions/index/var/let/param/vector.wgsl.expected.ir.msl
index 567c382..c72e77b 100644
--- a/test/tint/expressions/index/var/let/param/vector.wgsl.expected.ir.msl
+++ b/test/tint/expressions/index/var/let/param/vector.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
SKIP: FAILED
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:270 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
+<dawn>/src/tint/lang/msl/writer/printer/printer.cc:305 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
********************************************************************
* The tint shader compiler has encountered an unexpected error. *
* *
diff --git a/test/tint/expressions/index/var/literal/array.wgsl.expected.ir.msl b/test/tint/expressions/index/var/literal/array.wgsl.expected.ir.msl
index 28251dc..4e160d55 100644
--- a/test/tint/expressions/index/var/literal/array.wgsl.expected.ir.msl
+++ b/test/tint/expressions/index/var/literal/array.wgsl.expected.ir.msl
@@ -1,9 +1,19 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+ const constant T& operator[](size_t i) const constant { return elements[i]; }
+ device T& operator[](size_t i) device { return elements[i]; }
+ const device T& operator[](size_t i) const device { return elements[i]; }
+ thread T& operator[](size_t i) thread { return elements[i]; }
+ const thread T& operator[](size_t i) const thread { return elements[i]; }
+ threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+ const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+ T elements[N];
+};
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
-********************************************************************
-* 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. *
-********************************************************************
+
+int f() {
+ tint_array<int, 8> a = tint_array<int, 8>{1, 2, 3, 4, 5, 6, 7, 8};
+ return a[1];
+}
diff --git a/test/tint/expressions/index/var/literal/matrix.wgsl.expected.ir.msl b/test/tint/expressions/index/var/literal/matrix.wgsl.expected.ir.msl
index 28251dc..9983768 100644
--- a/test/tint/expressions/index/var/literal/matrix.wgsl.expected.ir.msl
+++ b/test/tint/expressions/index/var/literal/matrix.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::Access
-********************************************************************
-* 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. *
-********************************************************************
+float3 f() {
+ float3x3 m = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));
+ return m[1];
+}
diff --git a/test/tint/expressions/index/var/literal/vector.wgsl.expected.ir.msl b/test/tint/expressions/index/var/literal/vector.wgsl.expected.ir.msl
index 2e88a5f..78e3fb3 100644
--- a/test/tint/expressions/index/var/literal/vector.wgsl.expected.ir.msl
+++ b/test/tint/expressions/index/var/literal/vector.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
SKIP: FAILED
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
+<dawn>/src/tint/lang/msl/writer/printer/printer.cc:265 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
********************************************************************
* The tint shader compiler has encountered an unexpected error. *
* *
diff --git a/test/tint/expressions/index/var/param/array.wgsl.expected.ir.msl b/test/tint/expressions/index/var/param/array.wgsl.expected.ir.msl
index 28251dc..c72e77b 100644
--- a/test/tint/expressions/index/var/param/array.wgsl.expected.ir.msl
+++ b/test/tint/expressions/index/var/param/array.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
SKIP: FAILED
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+<dawn>/src/tint/lang/msl/writer/printer/printer.cc:305 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
********************************************************************
* The tint shader compiler has encountered an unexpected error. *
* *
diff --git a/test/tint/expressions/index/var/param/matrix.wgsl.expected.ir.msl b/test/tint/expressions/index/var/param/matrix.wgsl.expected.ir.msl
index 28251dc..c72e77b 100644
--- a/test/tint/expressions/index/var/param/matrix.wgsl.expected.ir.msl
+++ b/test/tint/expressions/index/var/param/matrix.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
SKIP: FAILED
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Access
+<dawn>/src/tint/lang/msl/writer/printer/printer.cc:305 internal compiler error: Switch() matched no cases. Type: tint::core::ir::FunctionParam
********************************************************************
* The tint shader compiler has encountered an unexpected error. *
* *
diff --git a/test/tint/expressions/index/var/param/vector.wgsl.expected.ir.msl b/test/tint/expressions/index/var/param/vector.wgsl.expected.ir.msl
index 2e88a5f..78e3fb3 100644
--- a/test/tint/expressions/index/var/param/vector.wgsl.expected.ir.msl
+++ b/test/tint/expressions/index/var/param/vector.wgsl.expected.ir.msl
@@ -1,6 +1,6 @@
SKIP: FAILED
-<dawn>/src/tint/lang/msl/writer/printer/printer.cc:247 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
+<dawn>/src/tint/lang/msl/writer/printer/printer.cc:265 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
********************************************************************
* The tint shader compiler has encountered an unexpected error. *
* *