[glsl][ir] Add vector accessors.

This Cl adds `LoadVectorElement`, `StoreVectorElement` and `Swizzle`
support to the GLSL IR backend.

Bug: 42251044
Change-Id: I0aac2b2f30f67621ab9407f50a9306cc950f233e
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/204854
Commit-Queue: dan sinclair <dsinclair@chromium.org>
Reviewed-by: James Price <jrprice@google.com>
diff --git a/src/tint/lang/glsl/writer/access_test.cc b/src/tint/lang/glsl/writer/access_test.cc
index 6f0d8db..2521bfb 100644
--- a/src/tint/lang/glsl/writer/access_test.cc
+++ b/src/tint/lang/glsl/writer/access_test.cc
@@ -88,8 +88,7 @@
 )");
 }
 
-// TODO(dsinclair): Support LoadVectorElement
-TEST_F(GlslWriterTest, DISABLED_AccessVector) {
+TEST_F(GlslWriterTest, AccessVector) {
     auto* func = b.Function("a", ty.void_(), core::ir::Function::PipelineStage::kCompute);
     func->SetWorkgroupSize(1, 1, 1);
 
@@ -101,12 +100,15 @@
 
     ASSERT_TRUE(Generate()) << err_ << output_.glsl;
     EXPECT_EQ(output_.glsl, GlslHeader() + R"(
-
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  vec3 v = vec3(0.0f);
+  float x = v.y;
+}
 )");
 }
 
-// TODO(dsinclair): Support LoadVectorElement
-TEST_F(GlslWriterTest, DISABLED_AccessMatrix) {
+TEST_F(GlslWriterTest, AccessMatrix) {
     auto* func = b.Function("a", ty.void_(), core::ir::Function::PipelineStage::kCompute);
     func->SetWorkgroupSize(1, 1, 1);
 
@@ -119,12 +121,15 @@
 
     ASSERT_TRUE(Generate()) << err_ << output_.glsl;
     EXPECT_EQ(output_.glsl, GlslHeader() + R"(
-
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat4 v = mat4(vec4(0.0f), vec4(0.0f), vec4(0.0f), vec4(0.0f));
+  float x = v[1u].z;
+}
 )");
 }
 
-// TODO(dsinclair): Support StoreVectorElement
-TEST_F(GlslWriterTest, DISABLED_AccessStoreVectorElementConstantIndex) {
+TEST_F(GlslWriterTest, AccessStoreVectorElementConstantIndex) {
     auto* func = b.Function("foo", ty.void_());
     b.Append(func->Block(), [&] {
         auto* vec_var = b.Var("vec", ty.ptr<function, vec4<i32>>());
@@ -134,11 +139,17 @@
 
     ASSERT_TRUE(Generate()) << err_ << output_.glsl;
     EXPECT_EQ(output_.glsl, GlslHeader() + R"(
-
+void foo() {
+  ivec4 vec = ivec4(0);
+  vec[1u] = 42;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
 )");
 }
 
-// TODO(dsinclair): Support StoreVectorElement
+// TODO(dsinclair): Needs ir::Convert
 TEST_F(GlslWriterTest, DISABLED_AccessStoreVectorElementDynamicIndex) {
     auto* idx = b.FunctionParam("idx", ty.i32());
     auto* func = b.Function("foo", ty.void_());
@@ -204,8 +215,7 @@
 )");
 }
 
-// TODO(dsinclair): Support swizzle
-TEST_F(GlslWriterTest, DISABLED_AccessSwizzle) {
+TEST_F(GlslWriterTest, AccessSwizzle) {
     auto* f = b.Function("a", ty.void_(), core::ir::Function::PipelineStage::kCompute);
     f->SetWorkgroupSize(1, 1, 1);
 
@@ -217,12 +227,15 @@
 
     ASSERT_TRUE(Generate()) << err_ << output_.glsl;
     EXPECT_EQ(output_.glsl, GlslHeader() + R"(
-
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  vec3 v = vec3(0.0f);
+  float b = v.y;
+}
 )");
 }
 
-// TODO(dsinclair): Support swizzle
-TEST_F(GlslWriterTest, DISABLED_AccessSwizzleMulti) {
+TEST_F(GlslWriterTest, AccessSwizzleMulti) {
     auto* f = b.Function("a", ty.void_(), core::ir::Function::PipelineStage::kCompute);
     f->SetWorkgroupSize(1, 1, 1);
 
@@ -234,12 +247,15 @@
 
     ASSERT_TRUE(Generate()) << err_ << output_.glsl;
     EXPECT_EQ(output_.glsl, GlslHeader() + R"(
-
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  vec4 v = vec4(0.0f);
+  vec4 b = v.wzyx;
+}
 )");
 }
 
-// TODO(dsinclair): Support LoadVectorElement
-TEST_F(GlslWriterTest, DISABLED_AccessStorageVector) {
+TEST_F(GlslWriterTest, AccessStorageVector) {
     auto* var = b.Var<storage, vec4<f32>, core::Access::kRead>("v");
     var->SetBindingPoint(0, 0);
 
@@ -255,13 +271,22 @@
     });
 
     ASSERT_TRUE(Generate()) << err_ << output_.glsl;
-    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(precision highp float;
+precision highp int;
 
+
+vec4 v;
+void main() {
+  vec4 a = v;
+  float b = v.x;
+  float c = v.y;
+  float d = v.z;
+  float e = v.w;
+}
 )");
 }
 
-// TODO(dsinclair): Support LoadVectorElement
-TEST_F(GlslWriterTest, DISABLED_AccessStorageVectorF16) {
+TEST_F(GlslWriterTest, AccessStorageVectorF16) {
     auto* var = b.Var<storage, vec4<f16>, core::Access::kRead>("v");
     var->SetBindingPoint(0, 0);
 
@@ -277,13 +302,23 @@
     });
 
     ASSERT_TRUE(Generate()) << err_ << output_.glsl;
-    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(#extension GL_AMD_gpu_shader_half_float: require
+precision highp float;
+precision highp int;
 
+
+f16vec4 v;
+void main() {
+  f16vec4 a = v;
+  float16_t b = v.x;
+  float16_t c = v.y;
+  float16_t d = v.z;
+  float16_t e = v.w;
+}
 )");
 }
 
-// TODO(dsinclair): Support LoadVectorElement
-TEST_F(GlslWriterTest, DISABLED_AccessStorageMatrix) {
+TEST_F(GlslWriterTest, AccessStorageMatrix) {
     auto* var = b.Var<storage, mat4x4<f32>, core::Access::kRead>("v");
     var->SetBindingPoint(0, 0);
 
@@ -298,8 +333,16 @@
     });
 
     ASSERT_TRUE(Generate()) << err_ << output_.glsl;
-    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(precision highp float;
+precision highp int;
 
+
+mat4 v;
+void main() {
+  mat4 a = v;
+  vec4 b = v[3u];
+  float c = v[1u].z;
+}
 )");
 }
 
@@ -366,8 +409,7 @@
 )");
 }
 
-// TODO(dsinclair): Support LoadVectorElement
-TEST_F(GlslWriterTest, DISABLED_AccessStorageNested) {
+TEST_F(GlslWriterTest, AccessStorageNested) {
     auto* Inner =
         ty.Struct(mod.symbols.New("Inner"), {
                                                 {mod.symbols.New("s"), ty.mat3x3<f32>()},
@@ -398,12 +440,33 @@
 
     ASSERT_TRUE(Generate()) << err_ << output_.glsl;
     EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+struct Inner {
+  mat3 s;
+  vec3 t[5];
+};
 
+struct Outer {
+  float x;
+  Inner y;
+};
+
+struct SB {
+  int a;
+  Outer b;
+};
+precision highp float;
+precision highp int;
+
+
+SB v;
+void main() {
+  SB a = v;
+  float b = v.b.y.t[3u].z;
+}
 )");
 }
 
-// TODO(dsinclair): Support StoreVectorElement
-TEST_F(GlslWriterTest, DISABLED_AccessStorageStoreVector) {
+TEST_F(GlslWriterTest, AccessStorageStoreVector) {
     auto* var = b.Var<storage, vec4<f32>, core::Access::kReadWrite>("v");
     var->SetBindingPoint(0, 0);
 
@@ -418,13 +481,21 @@
     });
 
     ASSERT_TRUE(Generate()) << err_ << output_.glsl;
-    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(precision highp float;
+precision highp int;
 
+
+vec4 v;
+void main() {
+  v[0u] = 2.0f;
+  v[1u] = 4.0f;
+  v[2u] = 8.0f;
+  v[3u] = 16.0f;
+}
 )");
 }
 
-// TODO(dsinclair): Support LoadVectorElement
-TEST_F(GlslWriterTest, DISABLED_AccessDirectVariable) {
+TEST_F(GlslWriterTest, AccessDirectVariable) {
     auto* var1 = b.Var<storage, vec4<f32>, core::Access::kRead>("v1");
     var1->SetBindingPoint(0, 0);
     b.ir.root_block->Append(var1);
@@ -449,8 +520,22 @@
     });
 
     ASSERT_TRUE(Generate()) << err_ << output_.glsl;
-    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(precision highp float;
+precision highp int;
 
+
+vec4 v1;
+vec4 v2;
+void bar() {
+  float a = v1.y;
+}
+void bar_1() {
+  float a = v2.y;
+}
+void main() {
+  bar();
+  bar_1();
+}
 )");
 }
 
@@ -735,8 +820,7 @@
 )");
 }
 
-// TODO(dsinclair): Handle LoadVectorElement
-TEST_F(GlslWriterTest, DISABLED_AccessUniformVector) {
+TEST_F(GlslWriterTest, AccessUniformVector) {
     auto* var = b.Var<uniform, vec4<f32>, core::Access::kRead>("v");
     var->SetBindingPoint(0, 0);
 
@@ -752,13 +836,22 @@
     });
 
     ASSERT_TRUE(Generate()) << err_ << output_.glsl;
-    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(precision highp float;
+precision highp int;
 
+
+uniform vec4 v;
+void main() {
+  vec4 a = v;
+  float b = v.x;
+  float c = v.y;
+  float d = v.z;
+  float e = v.w;
+}
 )");
 }
 
-// TODO(dsinclair): Support LoadVectorElement
-TEST_F(GlslWriterTest, DISABLED_AccessUniformVectorF16) {
+TEST_F(GlslWriterTest, AccessUniformVectorF16) {
     auto* var = b.Var<uniform, vec4<f16>, core::Access::kRead>("v");
     var->SetBindingPoint(0, 0);
 
@@ -775,13 +868,24 @@
     });
 
     ASSERT_TRUE(Generate()) << err_ << output_.glsl;
-    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(#extension GL_AMD_gpu_shader_half_float: require
+precision highp float;
+precision highp int;
 
+
+uniform f16vec4 v;
+void main() {
+  uint x = 1u;
+  f16vec4 a = v;
+  float16_t b = v.x;
+  float16_t c = v[min(x, 3u)];
+  float16_t d = v.z;
+  float16_t e = v.w;
+}
 )");
 }
 
-// TODO(dsinclair): support LoadVectorElement
-TEST_F(GlslWriterTest, DISABLED_AccessUniformMatrix) {
+TEST_F(GlslWriterTest, AccessUniformMatrix) {
     auto* var = b.Var<uniform, mat4x4<f32>, core::Access::kRead>("v");
     var->SetBindingPoint(0, 0);
 
@@ -796,13 +900,20 @@
     });
 
     ASSERT_TRUE(Generate()) << err_ << output_.glsl;
-    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(precision highp float;
+precision highp int;
 
+
+uniform mat4 v;
+void main() {
+  mat4 a = v;
+  vec4 b = v[3u];
+  float c = v[1u].z;
+}
 )");
 }
 
-// TODO(dsinclair): Support LoadVectorElement
-TEST_F(GlslWriterTest, DISABLED_AccessUniformMatrix2x3) {
+TEST_F(GlslWriterTest, AccessUniformMatrix2x3) {
     auto* var = b.Var<uniform, mat2x3<f32>, core::Access::kRead>("v");
     var->SetBindingPoint(0, 0);
 
@@ -817,13 +928,20 @@
     });
 
     ASSERT_TRUE(Generate()) << err_ << output_.glsl;
-    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(precision highp float;
+precision highp int;
 
+
+uniform mat2x3 v;
+void main() {
+  mat2x3 a = v;
+  vec3 b = v[1u];
+  float c = v[1u].z;
+}
 )");
 }
 
-// TODO(dsinclair): Support LoadVectorElement
-TEST_F(GlslWriterTest, DISABLED_AccessUniformMat2x3F16) {
+TEST_F(GlslWriterTest, AccessUniformMat2x3F16) {
     auto* var = b.Var<uniform, mat2x3<f16>, core::Access::kRead>("v");
     var->SetBindingPoint(0, 0);
     b.ir.root_block->Append(var);
@@ -837,13 +955,21 @@
     });
 
     ASSERT_TRUE(Generate()) << err_ << output_.glsl;
-    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(#extension GL_AMD_gpu_shader_half_float: require
+precision highp float;
+precision highp int;
 
+
+uniform f16mat2x3 v;
+void main() {
+  f16mat2x3 a = v;
+  f16vec3 b = v[1u];
+  float16_t c = v[1u].z;
+}
 )");
 }
 
-// TODO(dsinclair): Support LoadVectorElement
-TEST_F(GlslWriterTest, DISABLED_AccessUniformMatrix3x2) {
+TEST_F(GlslWriterTest, AccessUniformMatrix3x2) {
     auto* var = b.Var<uniform, mat3x2<f32>, core::Access::kRead>("v");
     var->SetBindingPoint(0, 0);
 
@@ -858,13 +984,20 @@
     });
 
     ASSERT_TRUE(Generate()) << err_ << output_.glsl;
-    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(precision highp float;
+precision highp int;
 
+
+uniform mat3x2 v;
+void main() {
+  mat3x2 a = v;
+  vec2 b = v[1u];
+  float c = v[1u].y;
+}
 )");
 }
 
-// TODO(dsinclair): Support LoadVectorElement
-TEST_F(GlslWriterTest, DISABLED_AccessUniformMatrix2x2) {
+TEST_F(GlslWriterTest, AccessUniformMatrix2x2) {
     auto* var = b.Var<uniform, mat2x2<f32>, core::Access::kRead>("v");
     var->SetBindingPoint(0, 0);
 
@@ -879,13 +1012,20 @@
     });
 
     ASSERT_TRUE(Generate()) << err_ << output_.glsl;
-    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(precision highp float;
+precision highp int;
 
+
+uniform mat2 v;
+void main() {
+  mat2 a = v;
+  vec2 b = v[1u];
+  float c = v[1u].y;
+}
 )");
 }
 
-// TODO(dsinclair): Support LoadVectorElement
-TEST_F(GlslWriterTest, DISABLED_AccessUniformMatrix2x2F16) {
+TEST_F(GlslWriterTest, AccessUniformMatrix2x2F16) {
     auto* var = b.Var<uniform, mat2x2<f16>, core::Access::kRead>("v");
     var->SetBindingPoint(0, 0);
 
@@ -900,8 +1040,17 @@
     });
 
     ASSERT_TRUE(Generate()) << err_ << output_.glsl;
-    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(#extension GL_AMD_gpu_shader_half_float: require
+precision highp float;
+precision highp int;
 
+
+uniform f16mat2 v;
+void main() {
+  f16mat2 a = v;
+  f16vec2 b = v[1u];
+  float16_t c = v[1u].y;
+}
 )");
 }
 
@@ -1043,8 +1192,7 @@
 )");
 }
 
-// TODO(dsinclair): Support LoadVectorElement
-TEST_F(GlslWriterTest, DISABLED_AccessUniformStructNested) {
+TEST_F(GlslWriterTest, AccessUniformStructNested) {
     auto* Inner =
         ty.Struct(mod.symbols.New("Inner"), {
                                                 {mod.symbols.New("s"), ty.mat3x3<f32>()},
@@ -1075,7 +1223,29 @@
 
     ASSERT_TRUE(Generate()) << err_ << output_.glsl;
     EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+struct Inner {
+  mat3 s;
+  vec3 t[5];
+};
 
+struct Outer {
+  float x;
+  Inner y;
+};
+
+struct SB {
+  int a;
+  Outer b;
+};
+precision highp float;
+precision highp int;
+
+
+uniform SB v;
+void main() {
+  SB a = v;
+  float b = v.b.y.t[3u].z;
+}
 )");
 }
 
@@ -1126,8 +1296,7 @@
 )");
 }
 
-// TODO(dsinclair): Support StoreVectorElement
-TEST_F(GlslWriterTest, DISABLED_AccessStoreVectorElement) {
+TEST_F(GlslWriterTest, AccessStoreVectorElement) {
     auto* var = b.Var<storage, vec3<f32>, core::Access::kReadWrite>("v");
     var->SetBindingPoint(0, 0);
 
@@ -1140,13 +1309,18 @@
     });
 
     ASSERT_TRUE(Generate()) << err_ << output_.glsl;
-    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(precision highp float;
+precision highp int;
 
+
+vec3 v;
+void main() {
+  v[1u] = 2.0f;
+}
 )");
 }
 
-// TODO(dsinclair): Support StoreVectorElement
-TEST_F(GlslWriterTest, DISABLED_AccessStoreVectorElementF16) {
+TEST_F(GlslWriterTest, AccessStoreVectorElementF16) {
     auto* var = b.Var<storage, vec3<f16>, core::Access::kReadWrite>("v");
     var->SetBindingPoint(0, 0);
 
@@ -1159,8 +1333,15 @@
     });
 
     ASSERT_TRUE(Generate()) << err_ << output_.glsl;
-    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(#extension GL_AMD_gpu_shader_half_float: require
+precision highp float;
+precision highp int;
 
+
+f16vec3 v;
+void main() {
+  v[1u] = 2.0hf;
+}
 )");
 }
 
@@ -1213,8 +1394,7 @@
 )");
 }
 
-// TODO(dsinclair): Support StoreVectorElement
-TEST_F(GlslWriterTest, DISABLED_AccessStoreMatrixElement) {
+TEST_F(GlslWriterTest, AccessStoreMatrixElement) {
     auto* var = b.Var<storage, mat4x4<f32>, core::Access::kReadWrite>("v");
     var->SetBindingPoint(0, 0);
 
@@ -1227,13 +1407,18 @@
     });
 
     ASSERT_TRUE(Generate()) << err_ << output_.glsl;
-    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(precision highp float;
+precision highp int;
 
+
+mat4 v;
+void main() {
+  v[1u][2u] = 5.0f;
+}
 )");
 }
 
-// TODO(dsinclair): Support StoreVectorElement
-TEST_F(GlslWriterTest, DISABLED_AccessStoreMatrixElementF16) {
+TEST_F(GlslWriterTest, AccessStoreMatrixElementF16) {
     auto* var = b.Var<storage, mat3x2<f16>, core::Access::kReadWrite>("v");
     var->SetBindingPoint(0, 0);
 
@@ -1246,8 +1431,15 @@
     });
 
     ASSERT_TRUE(Generate()) << err_ << output_.glsl;
-    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(#extension GL_AMD_gpu_shader_half_float: require
+precision highp float;
+precision highp int;
 
+
+f16mat3x2 v;
+void main() {
+  v[2u][1u] = 5.0hf;
+}
 )");
 }
 
@@ -1394,8 +1586,7 @@
 )");
 }
 
-// TODO(dsinclair): Support Loop
-TEST_F(GlslWriterTest, DISABLED_AccessStoreArray) {
+TEST_F(GlslWriterTest, AccessStoreArray) {
     auto* var = b.Var<storage, array<vec3<f32>, 5>, core::Access::kReadWrite>("v");
     var->SetBindingPoint(0, 0);
 
@@ -1408,8 +1599,32 @@
     });
 
     ASSERT_TRUE(Generate()) << err_ << output_.glsl;
-    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(precision highp float;
+precision highp int;
 
+
+vec3 v[5];
+void tint_store_and_preserve_padding(inout vec3 target[5], vec3 value_param[5]) {
+  {
+    uint v_1 = 0u;
+    v_1 = 0u;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 5u)) {
+        break;
+      }
+      target[v_2] = value_param[v_2];
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+}
+void main() {
+  vec3 ary[5] = vec3[5](vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f));
+  tint_store_and_preserve_padding(v, ary);
+}
 )");
 }
 
@@ -1599,8 +1814,7 @@
 )");
 }
 
-// TODO(dsinclair): Support Loop
-TEST_F(GlslWriterTest, DISABLED_AccessStoreStructComplex) {
+TEST_F(GlslWriterTest, AccessStoreStructComplex) {
     auto* Inner =
         ty.Struct(mod.symbols.New("Inner"), {
                                                 {mod.symbols.New("s"), ty.mat3x3<f32>()},
@@ -1629,12 +1843,67 @@
 
     ASSERT_TRUE(Generate()) << err_ << output_.glsl;
     EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+struct Inner {
+  mat3 s;
+  vec3 t[5];
+};
 
+struct Outer {
+  float x;
+  Inner y;
+};
+
+struct SB {
+  int a;
+  Outer b;
+};
+precision highp float;
+precision highp int;
+
+
+SB v;
+void tint_store_and_preserve_padding_4(inout vec3 target[5], vec3 value_param[5]) {
+  {
+    uint v_1 = 0u;
+    v_1 = 0u;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 5u)) {
+        break;
+      }
+      target[v_2] = value_param[v_2];
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+}
+void tint_store_and_preserve_padding_3(inout mat3 target, mat3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+}
+void tint_store_and_preserve_padding_2(inout Inner target, Inner value_param) {
+  tint_store_and_preserve_padding_3(target.s, value_param.s);
+  tint_store_and_preserve_padding_4(target.t, value_param.t);
+}
+void tint_store_and_preserve_padding_1(inout Outer target, Outer value_param) {
+  target.x = value_param.x;
+  tint_store_and_preserve_padding_2(target.y, value_param.y);
+}
+void tint_store_and_preserve_padding(inout SB target, SB value_param) {
+  target.a = value_param.a;
+  tint_store_and_preserve_padding_1(target.b, value_param.b);
+}
+void main() {
+  SB s = SB(0, Outer(0.0f, Inner(mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f)), vec3[5](vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f)))));
+  tint_store_and_preserve_padding(v, s);
+}
 )");
 }
 
-// TODO(dsinclair): Support LoadVectorElement
-TEST_F(GlslWriterTest, DISABLED_AccessChainReused) {
+TEST_F(GlslWriterTest, AccessChainReused) {
     auto* sb = ty.Struct(mod.symbols.New("SB"), {
                                                     {mod.symbols.New("a"), ty.i32()},
                                                     {mod.symbols.New("b"), ty.vec3<f32>()},
@@ -1654,12 +1923,23 @@
 
     ASSERT_TRUE(Generate()) << err_ << output_.glsl;
     EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+struct SB {
+  int a;
+  vec3 b;
+};
+precision highp float;
+precision highp int;
 
+
+SB v;
+void main() {
+  float b = v.b.y;
+  float c = v.b.z;
+}
 )");
 }
 
-// TODO(dsinclair): Support LoadVectorElement
-TEST_F(GlslWriterTest, DISABLED_UniformAccessChainReused) {
+TEST_F(GlslWriterTest, AccessUniformChainReused) {
     auto* sb = ty.Struct(mod.symbols.New("SB"), {
                                                     {mod.symbols.New("c"), ty.f32()},
                                                     {mod.symbols.New("d"), ty.vec3<f32>()},
@@ -1679,7 +1959,19 @@
 
     ASSERT_TRUE(Generate()) << err_ << output_.glsl;
     EXPECT_EQ(output_.glsl, GlslHeader() + R"(
+struct SB {
+  float c;
+  vec3 d;
+};
+precision highp float;
+precision highp int;
 
+
+uniform SB v;
+void main() {
+  float b = v.d.y;
+  float c = v.d.z;
+}
 )");
 }
 
diff --git a/src/tint/lang/glsl/writer/printer/printer.cc b/src/tint/lang/glsl/writer/printer/printer.cc
index 29723cb..e0cbd40 100644
--- a/src/tint/lang/glsl/writer/printer/printer.cc
+++ b/src/tint/lang/glsl/writer/printer/printer.cc
@@ -55,6 +55,7 @@
 #include "src/tint/lang/core/ir/next_iteration.h"
 #include "src/tint/lang/core/ir/return.h"
 #include "src/tint/lang/core/ir/store.h"
+#include "src/tint/lang/core/ir/store_vector_element.h"
 #include "src/tint/lang/core/ir/switch.h"
 #include "src/tint/lang/core/ir/swizzle.h"
 #include "src/tint/lang/core/ir/terminate_invocation.h"
@@ -264,20 +265,21 @@
                 // TerminateInvocation must come before Call.
                 [&](const core::ir::TerminateInvocation*) { EmitDiscard(); },  //
 
-                [&](const core::ir::BreakIf* i) { EmitBreakIf(i); },                     //
-                [&](const core::ir::Call* i) { EmitCallStmt(i); },                       //
-                [&](const core::ir::Continue*) { EmitContinue(); },                      //
-                [&](const core::ir::ExitIf*) { /* do nothing handled by transform */ },  //
-                [&](const core::ir::ExitLoop*) { EmitExitLoop(); },                      //
-                [&](const core::ir::ExitSwitch*) { EmitExitSwitch(); },                  //
-                [&](const core::ir::If* i) { EmitIf(i); },                               //
-                [&](const core::ir::Let* i) { EmitLet(i); },                             //
-                [&](const core::ir::Loop* l) { EmitLoop(l); },                           //
-                [&](const core::ir::Return* r) { EmitReturn(r); },                       //
-                [&](const core::ir::Store* s) { EmitStore(s); },                         //
-                [&](const core::ir::Switch* i) { EmitSwitch(i); },                       //
-                [&](const core::ir::Unreachable*) { EmitUnreachable(); },                //
-                [&](const core::ir::Var* v) { EmitVar(Line(), v); },                     //
+                [&](const core::ir::BreakIf* i) { EmitBreakIf(i); },                        //
+                [&](const core::ir::Call* i) { EmitCallStmt(i); },                          //
+                [&](const core::ir::Continue*) { EmitContinue(); },                         //
+                [&](const core::ir::ExitIf*) { /* do nothing handled by transform */ },     //
+                [&](const core::ir::ExitLoop*) { EmitExitLoop(); },                         //
+                [&](const core::ir::ExitSwitch*) { EmitExitSwitch(); },                     //
+                [&](const core::ir::If* i) { EmitIf(i); },                                  //
+                [&](const core::ir::Let* i) { EmitLet(i); },                                //
+                [&](const core::ir::Loop* l) { EmitLoop(l); },                              //
+                [&](const core::ir::Return* r) { EmitReturn(r); },                          //
+                [&](const core::ir::Store* s) { EmitStore(s); },                            //
+                [&](const core::ir::StoreVectorElement* s) { EmitStoreVectorElement(s); },  //
+                [&](const core::ir::Switch* i) { EmitSwitch(i); },                          //
+                [&](const core::ir::Unreachable*) { EmitUnreachable(); },                   //
+                [&](const core::ir::Var* v) { EmitVar(Line(), v); },                        //
 
                 [&](const core::ir::NextIteration*) { /* do nothing */ },                //
                 [&](const core::ir::ExitIf*) { /* do nothing handled by transform */ },  //
@@ -294,6 +296,57 @@
         }
     }
 
+    void EmitStoreVectorElement(const core::ir::StoreVectorElement* l) {
+        auto out = Line();
+
+        EmitValue(out, l->To());
+        out << "[";
+        EmitValue(out, l->Index());
+        out << "] = ";
+        EmitValue(out, l->Value());
+        out << ";";
+    }
+
+    void IdxToComponent(StringStream& out, uint32_t idx) {
+        switch (idx) {
+            case 0:
+                out << "x";
+                break;
+            case 1:
+                out << "y";
+                break;
+            case 2:
+                out << "z";
+                break;
+            case 3:
+                out << "w";
+                break;
+            default:
+                TINT_UNREACHABLE();
+        }
+    }
+
+    void EmitLoadVectorElement(StringStream& out, const core::ir::LoadVectorElement* l) {
+        EmitValue(out, l->From());
+
+        if (auto* cnst = l->Index()->As<core::ir::Constant>()) {
+            out << ".";
+            IdxToComponent(out, cnst->Value()->ValueAs<uint32_t>());
+        } else {
+            out << "[";
+            EmitValue(out, l->Index());
+            out << "]";
+        }
+    }
+
+    void EmitSwizzle(StringStream& out, const core::ir::Swizzle* swizzle) {
+        EmitValue(out, swizzle->Object());
+        out << ".";
+        for (const auto i : swizzle->Indices()) {
+            IdxToComponent(out, i);
+        }
+    }
+
     void EmitDiscard() { Line() << "discard;"; }
 
     void EmitContinue() {
@@ -753,7 +806,9 @@
                     [&](const core::ir::CoreUnary* u) { EmitUnary(out, u); },
                     [&](const core::ir::Let* l) { out << NameOf(l->Result(0)); },
                     [&](const core::ir::Load* l) { EmitLoad(out, l); },
+                    [&](const core::ir::LoadVectorElement* l) { EmitLoadVectorElement(out, l); },
                     [&](const core::ir::Store* s) { EmitStore(s); },
+                    [&](const core::ir::Swizzle* s) { EmitSwizzle(out, s); },  //
                     [&](const core::ir::UserCall* c) { EmitUserCall(out, c); },
                     [&](const core::ir::Var* var) { out << NameOf(var->Result(0)); },
 
diff --git a/test/tint/access/var/matrix.spvasm.expected.ir.glsl b/test/tint/access/var/matrix.spvasm.expected.ir.glsl
index 4a20bc7..b90b6a7 100644
--- a/test/tint/access/var/matrix.spvasm.expected.ir.glsl
+++ b/test/tint/access/var/matrix.spvasm.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+void main_1() {
+  mat3 m = mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f));
+  float x_16 = m[1].y;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  main_1();
+}
diff --git a/test/tint/access/var/vector.spvasm.expected.ir.glsl b/test/tint/access/var/vector.spvasm.expected.ir.glsl
index 4a20bc7..fcc6ea8 100644
--- a/test/tint/access/var/vector.spvasm.expected.ir.glsl
+++ b/test/tint/access/var/vector.spvasm.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+void main_1() {
+  vec3 v = vec3(0.0f);
+  float x_14 = v.y;
+  vec2 x_17 = v.xz;
+  vec3 x_19 = v.xzy;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  main_1();
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_fn.wgsl.expected.ir.glsl
index 1e74e77..0c1acc3 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,23 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat2 u[4];
+float s;
+float a(mat2 a_1[4]) {
+  return a_1[0][0][0u];
+}
+float b(mat2 m) {
+  return m[0][0u];
+}
+float c(vec2 v) {
+  return v[0u];
+}
+float d(float f) {
+  return f;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  float v_1 = a(u);
+  float v_2 = (v_1 + b(u[1]));
+  float v_3 = (v_2 + c(u[1][0].yx));
+  s = (v_3 + d(u[1][0].yx[0u]));
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_private.wgsl.expected.ir.glsl
index d4bb1c9..01955e5 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat2 u[4];
+float s;
+mat2 p[4] = mat2[4](mat2(vec2(0.0f), vec2(0.0f)), mat2(vec2(0.0f), vec2(0.0f)), mat2(vec2(0.0f), vec2(0.0f)), mat2(vec2(0.0f), vec2(0.0f)));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[2];
+  p[1][0] = u[0][1].yx;
+  p[1][0][0u] = u[0][1].x;
+  s = p[1][0].x;
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_storage.wgsl.expected.ir.glsl
index d4bb1c9..f118684 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,11 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat2 u[4];
+mat2 s[4];
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  s = u;
+  s[1] = u[2];
+  s[1][0] = u[0][1].yx;
+  s[1][0][0u] = u[0][1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_fn.wgsl.expected.ir.glsl
index 1e74e77..97e2bb0 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,24 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat2x3 u[4];
+float16_t s;
+float16_t a(f16mat2x3 a_1[4]) {
+  return a_1[0][0][0u];
+}
+float16_t b(f16mat2x3 m) {
+  return m[0][0u];
+}
+float16_t c(f16vec3 v) {
+  return v[0u];
+}
+float16_t d(float16_t f) {
+  return f;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  float16_t v_1 = a(u);
+  float16_t v_2 = (v_1 + b(u[1]));
+  float16_t v_3 = (v_2 + c(u[1][0].zxy));
+  s = (v_3 + d(u[1][0].zxy[0u]));
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_private.wgsl.expected.ir.glsl
index d4bb1c9..927fc00 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat2x3 u[4];
+float16_t s;
+f16mat2x3 p[4] = f16mat2x3[4](f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf)), f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf)), f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf)), f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf)));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[2];
+  p[1][0] = u[0][1].zxy;
+  p[1][0][0u] = u[0][1].x;
+  s = p[1][0].x;
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_storage.wgsl.expected.ir.glsl
index 72ca17c..b5f531a 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,33 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat2x3 u[4];
+f16mat2x3 s[4];
+void tint_store_and_preserve_padding_1(inout f16mat2x3 target, f16mat2x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+}
+void tint_store_and_preserve_padding(inout f16mat2x3 target[4], f16mat2x3 value_param[4]) {
+  {
+    uint v = 0u;
+    v = 0u;
+    while(true) {
+      uint v_1 = v;
+      if ((v_1 >= 4u)) {
+        break;
+      }
+      tint_store_and_preserve_padding_1(target[v_1], value_param[v_1]);
+      {
+        v = (v_1 + 1u);
+      }
+      continue;
+    }
+  }
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(s, u);
+  tint_store_and_preserve_padding_1(s[1], u[2]);
+  s[1][0] = u[0][1].zxy;
+  s[1][0][0u] = u[0][1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_fn.wgsl.expected.ir.glsl
index 1e74e77..2fc8aee 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,23 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat2x3 u[4];
+float s;
+float a(mat2x3 a_1[4]) {
+  return a_1[0][0][0u];
+}
+float b(mat2x3 m) {
+  return m[0][0u];
+}
+float c(vec3 v) {
+  return v[0u];
+}
+float d(float f) {
+  return f;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  float v_1 = a(u);
+  float v_2 = (v_1 + b(u[1]));
+  float v_3 = (v_2 + c(u[1][0].zxy));
+  s = (v_3 + d(u[1][0].zxy[0u]));
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_private.wgsl.expected.ir.glsl
index d4bb1c9..ec95663 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat2x3 u[4];
+float s;
+mat2x3 p[4] = mat2x3[4](mat2x3(vec3(0.0f), vec3(0.0f)), mat2x3(vec3(0.0f), vec3(0.0f)), mat2x3(vec3(0.0f), vec3(0.0f)), mat2x3(vec3(0.0f), vec3(0.0f)));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[2];
+  p[1][0] = u[0][1].zxy;
+  p[1][0][0u] = u[0][1].x;
+  s = p[1][0].x;
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_storage.wgsl.expected.ir.glsl
index 72ca17c..456d7bc 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,32 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat2x3 u[4];
+mat2x3 s[4];
+void tint_store_and_preserve_padding_1(inout mat2x3 target, mat2x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+}
+void tint_store_and_preserve_padding(inout mat2x3 target[4], mat2x3 value_param[4]) {
+  {
+    uint v = 0u;
+    v = 0u;
+    while(true) {
+      uint v_1 = v;
+      if ((v_1 >= 4u)) {
+        break;
+      }
+      tint_store_and_preserve_padding_1(target[v_1], value_param[v_1]);
+      {
+        v = (v_1 + 1u);
+      }
+      continue;
+    }
+  }
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(s, u);
+  tint_store_and_preserve_padding_1(s[1], u[2]);
+  s[1][0] = u[0][1].zxy;
+  s[1][0][0u] = u[0][1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_fn.wgsl.expected.ir.glsl
index 1e74e77..e485610 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,24 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat2x4 u[4];
+float16_t s;
+float16_t a(f16mat2x4 a_1[4]) {
+  return a_1[0][0][0u];
+}
+float16_t b(f16mat2x4 m) {
+  return m[0][0u];
+}
+float16_t c(f16vec4 v) {
+  return v[0u];
+}
+float16_t d(float16_t f) {
+  return f;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  float16_t v_1 = a(u);
+  float16_t v_2 = (v_1 + b(u[1]));
+  float16_t v_3 = (v_2 + c(u[1][0].ywxz));
+  s = (v_3 + d(u[1][0].ywxz[0u]));
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_private.wgsl.expected.ir.glsl
index d4bb1c9..b23998f 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat2x4 u[4];
+float16_t s;
+f16mat2x4 p[4] = f16mat2x4[4](f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf)), f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf)), f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf)), f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf)));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[2];
+  p[1][0] = u[0][1].ywxz;
+  p[1][0][0u] = u[0][1].x;
+  s = p[1][0].x;
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_storage.wgsl.expected.ir.glsl
index d4bb1c9..8cecd01 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat2x4 u[4];
+f16mat2x4 s[4];
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  s = u;
+  s[1] = u[2];
+  s[1][0] = u[0][1].ywxz;
+  s[1][0][0u] = u[0][1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_fn.wgsl.expected.ir.glsl
index 1e74e77..cd8b05d 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,23 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat2x4 u[4];
+float s;
+float a(mat2x4 a_1[4]) {
+  return a_1[0][0][0u];
+}
+float b(mat2x4 m) {
+  return m[0][0u];
+}
+float c(vec4 v) {
+  return v[0u];
+}
+float d(float f) {
+  return f;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  float v_1 = a(u);
+  float v_2 = (v_1 + b(u[1]));
+  float v_3 = (v_2 + c(u[1][0].ywxz));
+  s = (v_3 + d(u[1][0].ywxz[0u]));
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_private.wgsl.expected.ir.glsl
index d4bb1c9..c9ea1d9 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat2x4 u[4];
+float s;
+mat2x4 p[4] = mat2x4[4](mat2x4(vec4(0.0f), vec4(0.0f)), mat2x4(vec4(0.0f), vec4(0.0f)), mat2x4(vec4(0.0f), vec4(0.0f)), mat2x4(vec4(0.0f), vec4(0.0f)));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[2];
+  p[1][0] = u[0][1].ywxz;
+  p[1][0][0u] = u[0][1].x;
+  s = p[1][0].x;
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_storage.wgsl.expected.ir.glsl
index d4bb1c9..82d22eb 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,11 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat2x4 u[4];
+mat2x4 s[4];
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  s = u;
+  s[1] = u[2];
+  s[1][0] = u[0][1].ywxz;
+  s[1][0][0u] = u[0][1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_fn.wgsl.expected.ir.glsl
index 1e74e77..1583f13 100644
--- a/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,23 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat3 u[4];
+float s;
+float a(mat3 a_1[4]) {
+  return a_1[0][0][0u];
+}
+float b(mat3 m) {
+  return m[0][0u];
+}
+float c(vec3 v) {
+  return v[0u];
+}
+float d(float f) {
+  return f;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  float v_1 = a(u);
+  float v_2 = (v_1 + b(u[1]));
+  float v_3 = (v_2 + c(u[1][0].zxy));
+  s = (v_3 + d(u[1][0].zxy[0u]));
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_private.wgsl.expected.ir.glsl
index d4bb1c9..3df2911 100644
--- a/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat3 u[4];
+float s;
+mat3 p[4] = mat3[4](mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f)), mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f)), mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f)), mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f)));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[2];
+  p[1][0] = u[0][1].zxy;
+  p[1][0][0u] = u[0][1].x;
+  s = p[1][0].x;
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_storage.wgsl.expected.ir.glsl
index 72ca17c..ff71e5d 100644
--- a/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,33 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat3 u[4];
+mat3 s[4];
+void tint_store_and_preserve_padding_1(inout mat3 target, mat3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+}
+void tint_store_and_preserve_padding(inout mat3 target[4], mat3 value_param[4]) {
+  {
+    uint v = 0u;
+    v = 0u;
+    while(true) {
+      uint v_1 = v;
+      if ((v_1 >= 4u)) {
+        break;
+      }
+      tint_store_and_preserve_padding_1(target[v_1], value_param[v_1]);
+      {
+        v = (v_1 + 1u);
+      }
+      continue;
+    }
+  }
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(s, u);
+  tint_store_and_preserve_padding_1(s[1], u[2]);
+  s[1][0] = u[0][1].zxy;
+  s[1][0][0u] = u[0][1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_fn.wgsl.expected.ir.glsl
index 1e74e77..8fafacb 100644
--- a/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,23 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat3x4 u[4];
+float s;
+float a(mat3x4 a_1[4]) {
+  return a_1[0][0][0u];
+}
+float b(mat3x4 m) {
+  return m[0][0u];
+}
+float c(vec4 v) {
+  return v[0u];
+}
+float d(float f) {
+  return f;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  float v_1 = a(u);
+  float v_2 = (v_1 + b(u[1]));
+  float v_3 = (v_2 + c(u[1][0].ywxz));
+  s = (v_3 + d(u[1][0].ywxz[0u]));
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_private.wgsl.expected.ir.glsl
index d4bb1c9..db619a5 100644
--- a/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat3x4 u[4];
+float s;
+mat3x4 p[4] = mat3x4[4](mat3x4(vec4(0.0f), vec4(0.0f), vec4(0.0f)), mat3x4(vec4(0.0f), vec4(0.0f), vec4(0.0f)), mat3x4(vec4(0.0f), vec4(0.0f), vec4(0.0f)), mat3x4(vec4(0.0f), vec4(0.0f), vec4(0.0f)));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[2];
+  p[1][0] = u[0][1].ywxz;
+  p[1][0][0u] = u[0][1].x;
+  s = p[1][0].x;
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_storage.wgsl.expected.ir.glsl
index d4bb1c9..d5c36b9 100644
--- a/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,11 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat3x4 u[4];
+mat3x4 s[4];
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  s = u;
+  s[1] = u[2];
+  s[1][0] = u[0][1].ywxz;
+  s[1][0][0u] = u[0][1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_fn.wgsl.expected.ir.glsl
index 1e74e77..27f64ae 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,24 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat4x2 u[4];
+float16_t s;
+float16_t a(f16mat4x2 a_1[4]) {
+  return a_1[0][0][0u];
+}
+float16_t b(f16mat4x2 m) {
+  return m[0][0u];
+}
+float16_t c(f16vec2 v) {
+  return v[0u];
+}
+float16_t d(float16_t f) {
+  return f;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  float16_t v_1 = a(u);
+  float16_t v_2 = (v_1 + b(u[1]));
+  float16_t v_3 = (v_2 + c(u[1][0].yx));
+  s = (v_3 + d(u[1][0].yx[0u]));
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_private.wgsl.expected.ir.glsl
index d4bb1c9..8eee845 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat4x2 u[4];
+float16_t s;
+f16mat4x2 p[4] = f16mat4x2[4](f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf)), f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf)), f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf)), f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf)));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[2];
+  p[1][0] = u[0][1].yx;
+  p[1][0][0u] = u[0][1].x;
+  s = p[1][0].x;
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_storage.wgsl.expected.ir.glsl
index d4bb1c9..75b5141 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat4x2 u[4];
+f16mat4x2 s[4];
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  s = u;
+  s[1] = u[2];
+  s[1][0] = u[0][1].yx;
+  s[1][0][0u] = u[0][1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_fn.wgsl.expected.ir.glsl
index 1e74e77..4281537 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,23 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat4x2 u[4];
+float s;
+float a(mat4x2 a_1[4]) {
+  return a_1[0][0][0u];
+}
+float b(mat4x2 m) {
+  return m[0][0u];
+}
+float c(vec2 v) {
+  return v[0u];
+}
+float d(float f) {
+  return f;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  float v_1 = a(u);
+  float v_2 = (v_1 + b(u[1]));
+  float v_3 = (v_2 + c(u[1][0].yx));
+  s = (v_3 + d(u[1][0].yx[0u]));
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_private.wgsl.expected.ir.glsl
index d4bb1c9..96798f7 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat4x2 u[4];
+float s;
+mat4x2 p[4] = mat4x2[4](mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f)), mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f)), mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f)), mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f)));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[2];
+  p[1][0] = u[0][1].yx;
+  p[1][0][0u] = u[0][1].x;
+  s = p[1][0].x;
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_storage.wgsl.expected.ir.glsl
index d4bb1c9..8188a77 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,11 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat4x2 u[4];
+mat4x2 s[4];
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  s = u;
+  s[1] = u[2];
+  s[1][0] = u[0][1].yx;
+  s[1][0][0u] = u[0][1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_fn.wgsl.expected.ir.glsl
index 1e74e77..5df0efc 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,24 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat4x3 u[4];
+float16_t s;
+float16_t a(f16mat4x3 a_1[4]) {
+  return a_1[0][0][0u];
+}
+float16_t b(f16mat4x3 m) {
+  return m[0][0u];
+}
+float16_t c(f16vec3 v) {
+  return v[0u];
+}
+float16_t d(float16_t f) {
+  return f;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  float16_t v_1 = a(u);
+  float16_t v_2 = (v_1 + b(u[1]));
+  float16_t v_3 = (v_2 + c(u[1][0].zxy));
+  s = (v_3 + d(u[1][0].zxy[0u]));
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_private.wgsl.expected.ir.glsl
index d4bb1c9..229c910 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat4x3 u[4];
+float16_t s;
+f16mat4x3 p[4] = f16mat4x3[4](f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf)), f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf)), f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf)), f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf)));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[2];
+  p[1][0] = u[0][1].zxy;
+  p[1][0][0u] = u[0][1].x;
+  s = p[1][0].x;
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_storage.wgsl.expected.ir.glsl
index 72ca17c..d9a0ddf 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,35 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat4x3 u[4];
+f16mat4x3 s[4];
+void tint_store_and_preserve_padding_1(inout f16mat4x3 target, f16mat4x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+  target[3u] = value_param[3u];
+}
+void tint_store_and_preserve_padding(inout f16mat4x3 target[4], f16mat4x3 value_param[4]) {
+  {
+    uint v = 0u;
+    v = 0u;
+    while(true) {
+      uint v_1 = v;
+      if ((v_1 >= 4u)) {
+        break;
+      }
+      tint_store_and_preserve_padding_1(target[v_1], value_param[v_1]);
+      {
+        v = (v_1 + 1u);
+      }
+      continue;
+    }
+  }
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(s, u);
+  tint_store_and_preserve_padding_1(s[1], u[2]);
+  s[1][0] = u[0][1].zxy;
+  s[1][0][0u] = u[0][1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_fn.wgsl.expected.ir.glsl
index 1e74e77..89d0af7 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,23 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat4x3 u[4];
+float s;
+float a(mat4x3 a_1[4]) {
+  return a_1[0][0][0u];
+}
+float b(mat4x3 m) {
+  return m[0][0u];
+}
+float c(vec3 v) {
+  return v[0u];
+}
+float d(float f) {
+  return f;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  float v_1 = a(u);
+  float v_2 = (v_1 + b(u[1]));
+  float v_3 = (v_2 + c(u[1][0].zxy));
+  s = (v_3 + d(u[1][0].zxy[0u]));
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_private.wgsl.expected.ir.glsl
index d4bb1c9..308277c 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat4x3 u[4];
+float s;
+mat4x3 p[4] = mat4x3[4](mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f)), mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f)), mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f)), mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f)));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[2];
+  p[1][0] = u[0][1].zxy;
+  p[1][0][0u] = u[0][1].x;
+  s = p[1][0].x;
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_storage.wgsl.expected.ir.glsl
index 72ca17c..1480802 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,34 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat4x3 u[4];
+mat4x3 s[4];
+void tint_store_and_preserve_padding_1(inout mat4x3 target, mat4x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+  target[3u] = value_param[3u];
+}
+void tint_store_and_preserve_padding(inout mat4x3 target[4], mat4x3 value_param[4]) {
+  {
+    uint v = 0u;
+    v = 0u;
+    while(true) {
+      uint v_1 = v;
+      if ((v_1 >= 4u)) {
+        break;
+      }
+      tint_store_and_preserve_padding_1(target[v_1], value_param[v_1]);
+      {
+        v = (v_1 + 1u);
+      }
+      continue;
+    }
+  }
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(s, u);
+  tint_store_and_preserve_padding_1(s[1], u[2]);
+  s[1][0] = u[0][1].zxy;
+  s[1][0][0u] = u[0][1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_fn.wgsl.expected.ir.glsl
index 1e74e77..b826561 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,24 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat4 u[4];
+float16_t s;
+float16_t a(f16mat4 a_1[4]) {
+  return a_1[0][0][0u];
+}
+float16_t b(f16mat4 m) {
+  return m[0][0u];
+}
+float16_t c(f16vec4 v) {
+  return v[0u];
+}
+float16_t d(float16_t f) {
+  return f;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  float16_t v_1 = a(u);
+  float16_t v_2 = (v_1 + b(u[1]));
+  float16_t v_3 = (v_2 + c(u[1][0].ywxz));
+  s = (v_3 + d(u[1][0].ywxz[0u]));
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_private.wgsl.expected.ir.glsl
index d4bb1c9..4e6ed8a 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat4 u[4];
+float16_t s;
+f16mat4 p[4] = f16mat4[4](f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf)), f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf)), f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf)), f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf)));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[2];
+  p[1][0] = u[0][1].ywxz;
+  p[1][0][0u] = u[0][1].x;
+  s = p[1][0].x;
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_storage.wgsl.expected.ir.glsl
index d4bb1c9..c2eeaa0 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat4 u[4];
+f16mat4 s[4];
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  s = u;
+  s[1] = u[2];
+  s[1][0] = u[0][1].ywxz;
+  s[1][0][0u] = u[0][1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_fn.wgsl.expected.ir.glsl
index 1e74e77..89a92a6 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,23 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat4 u[4];
+float s;
+float a(mat4 a_1[4]) {
+  return a_1[0][0][0u];
+}
+float b(mat4 m) {
+  return m[0][0u];
+}
+float c(vec4 v) {
+  return v[0u];
+}
+float d(float f) {
+  return f;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  float v_1 = a(u);
+  float v_2 = (v_1 + b(u[1]));
+  float v_3 = (v_2 + c(u[1][0].ywxz));
+  s = (v_3 + d(u[1][0].ywxz[0u]));
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_private.wgsl.expected.ir.glsl
index d4bb1c9..dc1f393 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat4 u[4];
+float s;
+mat4 p[4] = mat4[4](mat4(vec4(0.0f), vec4(0.0f), vec4(0.0f), vec4(0.0f)), mat4(vec4(0.0f), vec4(0.0f), vec4(0.0f), vec4(0.0f)), mat4(vec4(0.0f), vec4(0.0f), vec4(0.0f), vec4(0.0f)), mat4(vec4(0.0f), vec4(0.0f), vec4(0.0f), vec4(0.0f)));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[2];
+  p[1][0] = u[0][1].ywxz;
+  p[1][0][0u] = u[0][1].x;
+  s = p[1][0].x;
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_storage.wgsl.expected.ir.glsl
index d4bb1c9..fe9b1a3 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,11 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat4 u[4];
+mat4 s[4];
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  s = u;
+  s[1] = u[2];
+  s[1][0] = u[0][1].ywxz;
+  s[1][0][0u] = u[0][1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..fcf1aea 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,16 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat2 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f16mat2 t = transpose(u[2].m);
+  float16_t l = length(u[0].m[1].yx);
+  float16_t a = abs(u[0].m[1].yx[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_fn.wgsl.expected.ir.glsl
index 72ca17c..a545b07 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,28 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat2 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+void a(S a_1[4]) {
+}
+void b(S s) {
+}
+void c(f16mat2 m) {
+}
+void d(f16vec2 v) {
+}
+void e(float16_t f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[2]);
+  c(u[2].m);
+  d(u[0].m[1].yx);
+  e(u[0].m[1].yx[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_private.wgsl.expected.ir.glsl
index d4bb1c9..0e72486 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,18 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat2 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S p[4] = S[4](S(0, f16mat2(f16vec2(0.0hf), f16vec2(0.0hf)), 0), S(0, f16mat2(f16vec2(0.0hf), f16vec2(0.0hf)), 0), S(0, f16mat2(f16vec2(0.0hf), f16vec2(0.0hf)), 0), S(0, f16mat2(f16vec2(0.0hf), f16vec2(0.0hf)), 0));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[2];
+  p[3].m = u[2].m;
+  p[1].m[0] = u[0].m[1].yx;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_storage.wgsl.expected.ir.glsl
index 72ca17c..2a29dfc 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,40 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat2 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S s[4];
+void tint_store_and_preserve_padding_1(inout S target, S value_param) {
+  target.before = value_param.before;
+  target.m = value_param.m;
+  target.after = value_param.after;
+}
+void tint_store_and_preserve_padding(inout S target[4], S value_param[4]) {
+  {
+    uint v = 0u;
+    v = 0u;
+    while(true) {
+      uint v_1 = v;
+      if ((v_1 >= 4u)) {
+        break;
+      }
+      tint_store_and_preserve_padding_1(target[v_1], value_param[v_1]);
+      {
+        v = (v_1 + 1u);
+      }
+      continue;
+    }
+  }
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(s, u);
+  tint_store_and_preserve_padding_1(s[1], u[2]);
+  s[3].m = u[2].m;
+  s[1].m[0] = u[0].m[1].yx;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..2f39494 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,15 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat2 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat2 t = transpose(u[2].m);
+  float l = length(u[0].m[1].yx);
+  float a = abs(u[0].m[1].yx[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_fn.wgsl.expected.ir.glsl
index 72ca17c..1017ca8 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,27 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat2 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+void a(S a_1[4]) {
+}
+void b(S s) {
+}
+void c(mat2 m) {
+}
+void d(vec2 v) {
+}
+void e(float f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[2]);
+  c(u[2].m);
+  d(u[0].m[1].yx);
+  e(u[0].m[1].yx[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_private.wgsl.expected.ir.glsl
index d4bb1c9..dbaffc4 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat2 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S p[4] = S[4](S(0, mat2(vec2(0.0f), vec2(0.0f)), 0), S(0, mat2(vec2(0.0f), vec2(0.0f)), 0), S(0, mat2(vec2(0.0f), vec2(0.0f)), 0), S(0, mat2(vec2(0.0f), vec2(0.0f)), 0));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[2];
+  p[3].m = u[2].m;
+  p[1].m[0] = u[0].m[1].yx;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_storage.wgsl.expected.ir.glsl
index 72ca17c..5d67343 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,39 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat2 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S s[4];
+void tint_store_and_preserve_padding_1(inout S target, S value_param) {
+  target.before = value_param.before;
+  target.m = value_param.m;
+  target.after = value_param.after;
+}
+void tint_store_and_preserve_padding(inout S target[4], S value_param[4]) {
+  {
+    uint v = 0u;
+    v = 0u;
+    while(true) {
+      uint v_1 = v;
+      if ((v_1 >= 4u)) {
+        break;
+      }
+      tint_store_and_preserve_padding_1(target[v_1], value_param[v_1]);
+      {
+        v = (v_1 + 1u);
+      }
+      continue;
+    }
+  }
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(s, u);
+  tint_store_and_preserve_padding_1(s[1], u[2]);
+  s[3].m = u[2].m;
+  s[1].m[0] = u[0].m[1].yx;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..4f65e85 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,16 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat2x3 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f16mat3x2 t = transpose(u[2].m);
+  float16_t l = length(u[0].m[1].zxy);
+  float16_t a = abs(u[0].m[1].zxy[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_fn.wgsl.expected.ir.glsl
index 72ca17c..737fa3d 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,28 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat2x3 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+void a(S a_1[4]) {
+}
+void b(S s) {
+}
+void c(f16mat2x3 m) {
+}
+void d(f16vec3 v) {
+}
+void e(float16_t f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[2]);
+  c(u[2].m);
+  d(u[0].m[1].zxy);
+  e(u[0].m[1].zxy[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_private.wgsl.expected.ir.glsl
index d4bb1c9..e726585 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,18 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat2x3 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S p[4] = S[4](S(0, f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf)), 0), S(0, f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf)), 0), S(0, f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf)), 0), S(0, f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf)), 0));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[2];
+  p[3].m = u[2].m;
+  p[1].m[0] = u[0].m[1].zxy;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_storage.wgsl.expected.ir.glsl
index 72ca17c..51022ae 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,44 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat2x3 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S s[4];
+void tint_store_and_preserve_padding_2(inout f16mat2x3 target, f16mat2x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+}
+void tint_store_and_preserve_padding_1(inout S target, S value_param) {
+  target.before = value_param.before;
+  tint_store_and_preserve_padding_2(target.m, value_param.m);
+  target.after = value_param.after;
+}
+void tint_store_and_preserve_padding(inout S target[4], S value_param[4]) {
+  {
+    uint v = 0u;
+    v = 0u;
+    while(true) {
+      uint v_1 = v;
+      if ((v_1 >= 4u)) {
+        break;
+      }
+      tint_store_and_preserve_padding_1(target[v_1], value_param[v_1]);
+      {
+        v = (v_1 + 1u);
+      }
+      continue;
+    }
+  }
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(s, u);
+  tint_store_and_preserve_padding_1(s[1], u[2]);
+  tint_store_and_preserve_padding_2(s[3].m, u[2].m);
+  s[1].m[0] = u[0].m[1].zxy;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..070d1c7 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,15 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat2x3 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat3x2 t = transpose(u[2].m);
+  float l = length(u[0].m[1].zxy);
+  float a = abs(u[0].m[1].zxy[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_fn.wgsl.expected.ir.glsl
index 72ca17c..9a15f5b 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,27 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat2x3 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+void a(S a_1[4]) {
+}
+void b(S s) {
+}
+void c(mat2x3 m) {
+}
+void d(vec3 v) {
+}
+void e(float f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[2]);
+  c(u[2].m);
+  d(u[0].m[1].zxy);
+  e(u[0].m[1].zxy[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_private.wgsl.expected.ir.glsl
index d4bb1c9..d2af835 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat2x3 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S p[4] = S[4](S(0, mat2x3(vec3(0.0f), vec3(0.0f)), 0), S(0, mat2x3(vec3(0.0f), vec3(0.0f)), 0), S(0, mat2x3(vec3(0.0f), vec3(0.0f)), 0), S(0, mat2x3(vec3(0.0f), vec3(0.0f)), 0));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[2];
+  p[3].m = u[2].m;
+  p[1].m[0] = u[0].m[1].zxy;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_storage.wgsl.expected.ir.glsl
index 72ca17c..eb7c52c 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,43 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat2x3 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S s[4];
+void tint_store_and_preserve_padding_2(inout mat2x3 target, mat2x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+}
+void tint_store_and_preserve_padding_1(inout S target, S value_param) {
+  target.before = value_param.before;
+  tint_store_and_preserve_padding_2(target.m, value_param.m);
+  target.after = value_param.after;
+}
+void tint_store_and_preserve_padding(inout S target[4], S value_param[4]) {
+  {
+    uint v = 0u;
+    v = 0u;
+    while(true) {
+      uint v_1 = v;
+      if ((v_1 >= 4u)) {
+        break;
+      }
+      tint_store_and_preserve_padding_1(target[v_1], value_param[v_1]);
+      {
+        v = (v_1 + 1u);
+      }
+      continue;
+    }
+  }
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(s, u);
+  tint_store_and_preserve_padding_1(s[1], u[2]);
+  tint_store_and_preserve_padding_2(s[3].m, u[2].m);
+  s[1].m[0] = u[0].m[1].zxy;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..921c395 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,16 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat2x4 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f16mat4x2 t = transpose(u[2].m);
+  float16_t l = length(u[0].m[1].ywxz);
+  float16_t a = abs(u[0].m[1].ywxz[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_fn.wgsl.expected.ir.glsl
index 72ca17c..99ae1f6 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,28 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat2x4 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+void a(S a_1[4]) {
+}
+void b(S s) {
+}
+void c(f16mat2x4 m) {
+}
+void d(f16vec4 v) {
+}
+void e(float16_t f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[2]);
+  c(u[2].m);
+  d(u[0].m[1].ywxz);
+  e(u[0].m[1].ywxz[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_private.wgsl.expected.ir.glsl
index d4bb1c9..143732f 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,18 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat2x4 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S p[4] = S[4](S(0, f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf)), 0), S(0, f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf)), 0), S(0, f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf)), 0), S(0, f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf)), 0));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[2];
+  p[3].m = u[2].m;
+  p[1].m[0] = u[0].m[1].ywxz;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_storage.wgsl.expected.ir.glsl
index 72ca17c..28ae045 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,40 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat2x4 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S s[4];
+void tint_store_and_preserve_padding_1(inout S target, S value_param) {
+  target.before = value_param.before;
+  target.m = value_param.m;
+  target.after = value_param.after;
+}
+void tint_store_and_preserve_padding(inout S target[4], S value_param[4]) {
+  {
+    uint v = 0u;
+    v = 0u;
+    while(true) {
+      uint v_1 = v;
+      if ((v_1 >= 4u)) {
+        break;
+      }
+      tint_store_and_preserve_padding_1(target[v_1], value_param[v_1]);
+      {
+        v = (v_1 + 1u);
+      }
+      continue;
+    }
+  }
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(s, u);
+  tint_store_and_preserve_padding_1(s[1], u[2]);
+  s[3].m = u[2].m;
+  s[1].m[0] = u[0].m[1].ywxz;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..b143e67 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,15 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat2x4 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat4x2 t = transpose(u[2].m);
+  float l = length(u[0].m[1].ywxz);
+  float a = abs(u[0].m[1].ywxz[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_fn.wgsl.expected.ir.glsl
index 72ca17c..222890e 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,27 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat2x4 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+void a(S a_1[4]) {
+}
+void b(S s) {
+}
+void c(mat2x4 m) {
+}
+void d(vec4 v) {
+}
+void e(float f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[2]);
+  c(u[2].m);
+  d(u[0].m[1].ywxz);
+  e(u[0].m[1].ywxz[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_private.wgsl.expected.ir.glsl
index d4bb1c9..38bc18a 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat2x4 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S p[4] = S[4](S(0, mat2x4(vec4(0.0f), vec4(0.0f)), 0), S(0, mat2x4(vec4(0.0f), vec4(0.0f)), 0), S(0, mat2x4(vec4(0.0f), vec4(0.0f)), 0), S(0, mat2x4(vec4(0.0f), vec4(0.0f)), 0));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[2];
+  p[3].m = u[2].m;
+  p[1].m[0] = u[0].m[1].ywxz;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_storage.wgsl.expected.ir.glsl
index 72ca17c..f84945e 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,39 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat2x4 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S s[4];
+void tint_store_and_preserve_padding_1(inout S target, S value_param) {
+  target.before = value_param.before;
+  target.m = value_param.m;
+  target.after = value_param.after;
+}
+void tint_store_and_preserve_padding(inout S target[4], S value_param[4]) {
+  {
+    uint v = 0u;
+    v = 0u;
+    while(true) {
+      uint v_1 = v;
+      if ((v_1 >= 4u)) {
+        break;
+      }
+      tint_store_and_preserve_padding_1(target[v_1], value_param[v_1]);
+      {
+        v = (v_1 + 1u);
+      }
+      continue;
+    }
+  }
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(s, u);
+  tint_store_and_preserve_padding_1(s[1], u[2]);
+  s[3].m = u[2].m;
+  s[1].m[0] = u[0].m[1].ywxz;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..5fdfd2f 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,16 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat3x2 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f16mat2x3 t = transpose(u[2].m);
+  float16_t l = length(u[0].m[1].yx);
+  float16_t a = abs(u[0].m[1].yx[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_fn.wgsl.expected.ir.glsl
index 72ca17c..ab66bc5 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,28 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat3x2 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+void a(S a_1[4]) {
+}
+void b(S s) {
+}
+void c(f16mat3x2 m) {
+}
+void d(f16vec2 v) {
+}
+void e(float16_t f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[2]);
+  c(u[2].m);
+  d(u[0].m[1].yx);
+  e(u[0].m[1].yx[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_private.wgsl.expected.ir.glsl
index d4bb1c9..0852022 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,18 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat3x2 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S p[4] = S[4](S(0, f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf)), 0), S(0, f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf)), 0), S(0, f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf)), 0), S(0, f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf)), 0));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[2];
+  p[3].m = u[2].m;
+  p[1].m[0] = u[0].m[1].yx;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_storage.wgsl.expected.ir.glsl
index 72ca17c..f56e1f3 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,40 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat3x2 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S s[4];
+void tint_store_and_preserve_padding_1(inout S target, S value_param) {
+  target.before = value_param.before;
+  target.m = value_param.m;
+  target.after = value_param.after;
+}
+void tint_store_and_preserve_padding(inout S target[4], S value_param[4]) {
+  {
+    uint v = 0u;
+    v = 0u;
+    while(true) {
+      uint v_1 = v;
+      if ((v_1 >= 4u)) {
+        break;
+      }
+      tint_store_and_preserve_padding_1(target[v_1], value_param[v_1]);
+      {
+        v = (v_1 + 1u);
+      }
+      continue;
+    }
+  }
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(s, u);
+  tint_store_and_preserve_padding_1(s[1], u[2]);
+  s[3].m = u[2].m;
+  s[1].m[0] = u[0].m[1].yx;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..16e755d 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,15 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat3x2 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat2x3 t = transpose(u[2].m);
+  float l = length(u[0].m[1].yx);
+  float a = abs(u[0].m[1].yx[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_fn.wgsl.expected.ir.glsl
index 72ca17c..d06f473 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,27 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat3x2 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+void a(S a_1[4]) {
+}
+void b(S s) {
+}
+void c(mat3x2 m) {
+}
+void d(vec2 v) {
+}
+void e(float f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[2]);
+  c(u[2].m);
+  d(u[0].m[1].yx);
+  e(u[0].m[1].yx[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_private.wgsl.expected.ir.glsl
index d4bb1c9..affc08a 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat3x2 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S p[4] = S[4](S(0, mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f)), 0), S(0, mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f)), 0), S(0, mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f)), 0), S(0, mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f)), 0));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[2];
+  p[3].m = u[2].m;
+  p[1].m[0] = u[0].m[1].yx;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_storage.wgsl.expected.ir.glsl
index 72ca17c..8679e45 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,39 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat3x2 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S s[4];
+void tint_store_and_preserve_padding_1(inout S target, S value_param) {
+  target.before = value_param.before;
+  target.m = value_param.m;
+  target.after = value_param.after;
+}
+void tint_store_and_preserve_padding(inout S target[4], S value_param[4]) {
+  {
+    uint v = 0u;
+    v = 0u;
+    while(true) {
+      uint v_1 = v;
+      if ((v_1 >= 4u)) {
+        break;
+      }
+      tint_store_and_preserve_padding_1(target[v_1], value_param[v_1]);
+      {
+        v = (v_1 + 1u);
+      }
+      continue;
+    }
+  }
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(s, u);
+  tint_store_and_preserve_padding_1(s[1], u[2]);
+  s[3].m = u[2].m;
+  s[1].m[0] = u[0].m[1].yx;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..5a920bad 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,16 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat3 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f16mat3 t = transpose(u[2].m);
+  float16_t l = length(u[0].m[1].zxy);
+  float16_t a = abs(u[0].m[1].zxy[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_fn.wgsl.expected.ir.glsl
index 72ca17c..f8a566c 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,28 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat3 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+void a(S a_1[4]) {
+}
+void b(S s) {
+}
+void c(f16mat3 m) {
+}
+void d(f16vec3 v) {
+}
+void e(float16_t f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[2]);
+  c(u[2].m);
+  d(u[0].m[1].zxy);
+  e(u[0].m[1].zxy[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_private.wgsl.expected.ir.glsl
index d4bb1c9..955f863 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,18 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat3 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S p[4] = S[4](S(0, f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf)), 0), S(0, f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf)), 0), S(0, f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf)), 0), S(0, f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf)), 0));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[2];
+  p[3].m = u[2].m;
+  p[1].m[0] = u[0].m[1].zxy;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_storage.wgsl.expected.ir.glsl
index 72ca17c..3ee3012 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,45 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat3 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S s[4];
+void tint_store_and_preserve_padding_2(inout f16mat3 target, f16mat3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+}
+void tint_store_and_preserve_padding_1(inout S target, S value_param) {
+  target.before = value_param.before;
+  tint_store_and_preserve_padding_2(target.m, value_param.m);
+  target.after = value_param.after;
+}
+void tint_store_and_preserve_padding(inout S target[4], S value_param[4]) {
+  {
+    uint v = 0u;
+    v = 0u;
+    while(true) {
+      uint v_1 = v;
+      if ((v_1 >= 4u)) {
+        break;
+      }
+      tint_store_and_preserve_padding_1(target[v_1], value_param[v_1]);
+      {
+        v = (v_1 + 1u);
+      }
+      continue;
+    }
+  }
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(s, u);
+  tint_store_and_preserve_padding_1(s[1], u[2]);
+  tint_store_and_preserve_padding_2(s[3].m, u[2].m);
+  s[1].m[0] = u[0].m[1].zxy;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..3db5248 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,15 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat3 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat3 t = transpose(u[2].m);
+  float l = length(u[0].m[1].zxy);
+  float a = abs(u[0].m[1].zxy[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_fn.wgsl.expected.ir.glsl
index 72ca17c..36f093c 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,27 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat3 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+void a(S a_1[4]) {
+}
+void b(S s) {
+}
+void c(mat3 m) {
+}
+void d(vec3 v) {
+}
+void e(float f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[2]);
+  c(u[2].m);
+  d(u[0].m[1].zxy);
+  e(u[0].m[1].zxy[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_private.wgsl.expected.ir.glsl
index d4bb1c9..8966e9b 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat3 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S p[4] = S[4](S(0, mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f)), 0), S(0, mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f)), 0), S(0, mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f)), 0), S(0, mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f)), 0));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[2];
+  p[3].m = u[2].m;
+  p[1].m[0] = u[0].m[1].zxy;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_storage.wgsl.expected.ir.glsl
index 72ca17c..19597f7 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,44 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat3 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S s[4];
+void tint_store_and_preserve_padding_2(inout mat3 target, mat3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+}
+void tint_store_and_preserve_padding_1(inout S target, S value_param) {
+  target.before = value_param.before;
+  tint_store_and_preserve_padding_2(target.m, value_param.m);
+  target.after = value_param.after;
+}
+void tint_store_and_preserve_padding(inout S target[4], S value_param[4]) {
+  {
+    uint v = 0u;
+    v = 0u;
+    while(true) {
+      uint v_1 = v;
+      if ((v_1 >= 4u)) {
+        break;
+      }
+      tint_store_and_preserve_padding_1(target[v_1], value_param[v_1]);
+      {
+        v = (v_1 + 1u);
+      }
+      continue;
+    }
+  }
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(s, u);
+  tint_store_and_preserve_padding_1(s[1], u[2]);
+  tint_store_and_preserve_padding_2(s[3].m, u[2].m);
+  s[1].m[0] = u[0].m[1].zxy;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..f842f18 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,16 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat3x4 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f16mat4x3 t = transpose(u[2].m);
+  float16_t l = length(u[0].m[1].ywxz);
+  float16_t a = abs(u[0].m[1].ywxz[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_fn.wgsl.expected.ir.glsl
index 72ca17c..cbd65f9 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,28 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat3x4 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+void a(S a_1[4]) {
+}
+void b(S s) {
+}
+void c(f16mat3x4 m) {
+}
+void d(f16vec4 v) {
+}
+void e(float16_t f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[2]);
+  c(u[2].m);
+  d(u[0].m[1].ywxz);
+  e(u[0].m[1].ywxz[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_private.wgsl.expected.ir.glsl
index d4bb1c9..ecd97e8 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,18 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat3x4 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S p[4] = S[4](S(0, f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf)), 0), S(0, f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf)), 0), S(0, f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf)), 0), S(0, f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf)), 0));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[2];
+  p[3].m = u[2].m;
+  p[1].m[0] = u[0].m[1].ywxz;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_storage.wgsl.expected.ir.glsl
index 72ca17c..813ef00 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,40 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat3x4 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S s[4];
+void tint_store_and_preserve_padding_1(inout S target, S value_param) {
+  target.before = value_param.before;
+  target.m = value_param.m;
+  target.after = value_param.after;
+}
+void tint_store_and_preserve_padding(inout S target[4], S value_param[4]) {
+  {
+    uint v = 0u;
+    v = 0u;
+    while(true) {
+      uint v_1 = v;
+      if ((v_1 >= 4u)) {
+        break;
+      }
+      tint_store_and_preserve_padding_1(target[v_1], value_param[v_1]);
+      {
+        v = (v_1 + 1u);
+      }
+      continue;
+    }
+  }
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(s, u);
+  tint_store_and_preserve_padding_1(s[1], u[2]);
+  s[3].m = u[2].m;
+  s[1].m[0] = u[0].m[1].ywxz;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..5b998ee 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,15 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat3x4 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat4x3 t = transpose(u[2].m);
+  float l = length(u[0].m[1].ywxz);
+  float a = abs(u[0].m[1].ywxz[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_fn.wgsl.expected.ir.glsl
index 72ca17c..a5e25df 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,27 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat3x4 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+void a(S a_1[4]) {
+}
+void b(S s) {
+}
+void c(mat3x4 m) {
+}
+void d(vec4 v) {
+}
+void e(float f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[2]);
+  c(u[2].m);
+  d(u[0].m[1].ywxz);
+  e(u[0].m[1].ywxz[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_private.wgsl.expected.ir.glsl
index d4bb1c9..78d2000 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat3x4 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S p[4] = S[4](S(0, mat3x4(vec4(0.0f), vec4(0.0f), vec4(0.0f)), 0), S(0, mat3x4(vec4(0.0f), vec4(0.0f), vec4(0.0f)), 0), S(0, mat3x4(vec4(0.0f), vec4(0.0f), vec4(0.0f)), 0), S(0, mat3x4(vec4(0.0f), vec4(0.0f), vec4(0.0f)), 0));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[2];
+  p[3].m = u[2].m;
+  p[1].m[0] = u[0].m[1].ywxz;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_storage.wgsl.expected.ir.glsl
index 72ca17c..e8be633 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,39 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat3x4 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S s[4];
+void tint_store_and_preserve_padding_1(inout S target, S value_param) {
+  target.before = value_param.before;
+  target.m = value_param.m;
+  target.after = value_param.after;
+}
+void tint_store_and_preserve_padding(inout S target[4], S value_param[4]) {
+  {
+    uint v = 0u;
+    v = 0u;
+    while(true) {
+      uint v_1 = v;
+      if ((v_1 >= 4u)) {
+        break;
+      }
+      tint_store_and_preserve_padding_1(target[v_1], value_param[v_1]);
+      {
+        v = (v_1 + 1u);
+      }
+      continue;
+    }
+  }
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(s, u);
+  tint_store_and_preserve_padding_1(s[1], u[2]);
+  s[3].m = u[2].m;
+  s[1].m[0] = u[0].m[1].ywxz;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..0178e4f 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,16 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat4x2 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f16mat2x4 t = transpose(u[2].m);
+  float16_t l = length(u[0].m[1].yx);
+  float16_t a = abs(u[0].m[1].yx[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_fn.wgsl.expected.ir.glsl
index 72ca17c..93c51f5 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,28 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat4x2 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+void a(S a_1[4]) {
+}
+void b(S s) {
+}
+void c(f16mat4x2 m) {
+}
+void d(f16vec2 v) {
+}
+void e(float16_t f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[2]);
+  c(u[2].m);
+  d(u[0].m[1].yx);
+  e(u[0].m[1].yx[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_private.wgsl.expected.ir.glsl
index d4bb1c9..a089b82 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,18 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat4x2 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S p[4] = S[4](S(0, f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf)), 0), S(0, f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf)), 0), S(0, f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf)), 0), S(0, f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf)), 0));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[2];
+  p[3].m = u[2].m;
+  p[1].m[0] = u[0].m[1].yx;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_storage.wgsl.expected.ir.glsl
index 72ca17c..5fa640f 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,40 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat4x2 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S s[4];
+void tint_store_and_preserve_padding_1(inout S target, S value_param) {
+  target.before = value_param.before;
+  target.m = value_param.m;
+  target.after = value_param.after;
+}
+void tint_store_and_preserve_padding(inout S target[4], S value_param[4]) {
+  {
+    uint v = 0u;
+    v = 0u;
+    while(true) {
+      uint v_1 = v;
+      if ((v_1 >= 4u)) {
+        break;
+      }
+      tint_store_and_preserve_padding_1(target[v_1], value_param[v_1]);
+      {
+        v = (v_1 + 1u);
+      }
+      continue;
+    }
+  }
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(s, u);
+  tint_store_and_preserve_padding_1(s[1], u[2]);
+  s[3].m = u[2].m;
+  s[1].m[0] = u[0].m[1].yx;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..a381b84 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,15 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat4x2 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat2x4 t = transpose(u[2].m);
+  float l = length(u[0].m[1].yx);
+  float a = abs(u[0].m[1].yx[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_fn.wgsl.expected.ir.glsl
index 72ca17c..7065011 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,27 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat4x2 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+void a(S a_1[4]) {
+}
+void b(S s) {
+}
+void c(mat4x2 m) {
+}
+void d(vec2 v) {
+}
+void e(float f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[2]);
+  c(u[2].m);
+  d(u[0].m[1].yx);
+  e(u[0].m[1].yx[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_private.wgsl.expected.ir.glsl
index d4bb1c9..df7d465 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat4x2 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S p[4] = S[4](S(0, mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f)), 0), S(0, mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f)), 0), S(0, mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f)), 0), S(0, mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f)), 0));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[2];
+  p[3].m = u[2].m;
+  p[1].m[0] = u[0].m[1].yx;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_storage.wgsl.expected.ir.glsl
index 72ca17c..e5cd212 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,39 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat4x2 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S s[4];
+void tint_store_and_preserve_padding_1(inout S target, S value_param) {
+  target.before = value_param.before;
+  target.m = value_param.m;
+  target.after = value_param.after;
+}
+void tint_store_and_preserve_padding(inout S target[4], S value_param[4]) {
+  {
+    uint v = 0u;
+    v = 0u;
+    while(true) {
+      uint v_1 = v;
+      if ((v_1 >= 4u)) {
+        break;
+      }
+      tint_store_and_preserve_padding_1(target[v_1], value_param[v_1]);
+      {
+        v = (v_1 + 1u);
+      }
+      continue;
+    }
+  }
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(s, u);
+  tint_store_and_preserve_padding_1(s[1], u[2]);
+  s[3].m = u[2].m;
+  s[1].m[0] = u[0].m[1].yx;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..48b474c 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,16 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat4x3 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f16mat3x4 t = transpose(u[2].m);
+  float16_t l = length(u[0].m[1].zxy);
+  float16_t a = abs(u[0].m[1].zxy[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_fn.wgsl.expected.ir.glsl
index 72ca17c..c8dbf05 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,28 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat4x3 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+void a(S a_1[4]) {
+}
+void b(S s) {
+}
+void c(f16mat4x3 m) {
+}
+void d(f16vec3 v) {
+}
+void e(float16_t f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[2]);
+  c(u[2].m);
+  d(u[0].m[1].zxy);
+  e(u[0].m[1].zxy[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_private.wgsl.expected.ir.glsl
index d4bb1c9..66231ff 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,18 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat4x3 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S p[4] = S[4](S(0, f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf)), 0), S(0, f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf)), 0), S(0, f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf)), 0), S(0, f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf)), 0));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[2];
+  p[3].m = u[2].m;
+  p[1].m[0] = u[0].m[1].zxy;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_storage.wgsl.expected.ir.glsl
index 72ca17c..4b62860 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,46 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat4x3 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S s[4];
+void tint_store_and_preserve_padding_2(inout f16mat4x3 target, f16mat4x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+  target[3u] = value_param[3u];
+}
+void tint_store_and_preserve_padding_1(inout S target, S value_param) {
+  target.before = value_param.before;
+  tint_store_and_preserve_padding_2(target.m, value_param.m);
+  target.after = value_param.after;
+}
+void tint_store_and_preserve_padding(inout S target[4], S value_param[4]) {
+  {
+    uint v = 0u;
+    v = 0u;
+    while(true) {
+      uint v_1 = v;
+      if ((v_1 >= 4u)) {
+        break;
+      }
+      tint_store_and_preserve_padding_1(target[v_1], value_param[v_1]);
+      {
+        v = (v_1 + 1u);
+      }
+      continue;
+    }
+  }
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(s, u);
+  tint_store_and_preserve_padding_1(s[1], u[2]);
+  tint_store_and_preserve_padding_2(s[3].m, u[2].m);
+  s[1].m[0] = u[0].m[1].zxy;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..64a55a7 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,15 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat4x3 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat3x4 t = transpose(u[2].m);
+  float l = length(u[0].m[1].zxy);
+  float a = abs(u[0].m[1].zxy[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_fn.wgsl.expected.ir.glsl
index 72ca17c..e94b2d4 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,27 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat4x3 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+void a(S a_1[4]) {
+}
+void b(S s) {
+}
+void c(mat4x3 m) {
+}
+void d(vec3 v) {
+}
+void e(float f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[2]);
+  c(u[2].m);
+  d(u[0].m[1].zxy);
+  e(u[0].m[1].zxy[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_private.wgsl.expected.ir.glsl
index d4bb1c9..c40f3bf 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat4x3 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S p[4] = S[4](S(0, mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f)), 0), S(0, mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f)), 0), S(0, mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f)), 0), S(0, mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f)), 0));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[2];
+  p[3].m = u[2].m;
+  p[1].m[0] = u[0].m[1].zxy;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_storage.wgsl.expected.ir.glsl
index 72ca17c..ef3ce1a 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,45 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat4x3 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S s[4];
+void tint_store_and_preserve_padding_2(inout mat4x3 target, mat4x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+  target[3u] = value_param[3u];
+}
+void tint_store_and_preserve_padding_1(inout S target, S value_param) {
+  target.before = value_param.before;
+  tint_store_and_preserve_padding_2(target.m, value_param.m);
+  target.after = value_param.after;
+}
+void tint_store_and_preserve_padding(inout S target[4], S value_param[4]) {
+  {
+    uint v = 0u;
+    v = 0u;
+    while(true) {
+      uint v_1 = v;
+      if ((v_1 >= 4u)) {
+        break;
+      }
+      tint_store_and_preserve_padding_1(target[v_1], value_param[v_1]);
+      {
+        v = (v_1 + 1u);
+      }
+      continue;
+    }
+  }
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(s, u);
+  tint_store_and_preserve_padding_1(s[1], u[2]);
+  tint_store_and_preserve_padding_2(s[3].m, u[2].m);
+  s[1].m[0] = u[0].m[1].zxy;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..af96480 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,16 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat4 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f16mat4 t = transpose(u[2].m);
+  float16_t l = length(u[0].m[1].ywxz);
+  float16_t a = abs(u[0].m[1].ywxz[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_fn.wgsl.expected.ir.glsl
index 72ca17c..96c867c 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,28 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat4 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+void a(S a_1[4]) {
+}
+void b(S s) {
+}
+void c(f16mat4 m) {
+}
+void d(f16vec4 v) {
+}
+void e(float16_t f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[2]);
+  c(u[2].m);
+  d(u[0].m[1].ywxz);
+  e(u[0].m[1].ywxz[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_private.wgsl.expected.ir.glsl
index d4bb1c9..1060ac9 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,18 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat4 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S p[4] = S[4](S(0, f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf)), 0), S(0, f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf)), 0), S(0, f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf)), 0), S(0, f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf)), 0));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[2];
+  p[3].m = u[2].m;
+  p[1].m[0] = u[0].m[1].ywxz;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_storage.wgsl.expected.ir.glsl
index 72ca17c..d19c7d3 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,40 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  f16mat4 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S s[4];
+void tint_store_and_preserve_padding_1(inout S target, S value_param) {
+  target.before = value_param.before;
+  target.m = value_param.m;
+  target.after = value_param.after;
+}
+void tint_store_and_preserve_padding(inout S target[4], S value_param[4]) {
+  {
+    uint v = 0u;
+    v = 0u;
+    while(true) {
+      uint v_1 = v;
+      if ((v_1 >= 4u)) {
+        break;
+      }
+      tint_store_and_preserve_padding_1(target[v_1], value_param[v_1]);
+      {
+        v = (v_1 + 1u);
+      }
+      continue;
+    }
+  }
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(s, u);
+  tint_store_and_preserve_padding_1(s[1], u[2]);
+  s[3].m = u[2].m;
+  s[1].m[0] = u[0].m[1].ywxz;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..38649e1 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,15 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat4 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat4 t = transpose(u[2].m);
+  float l = length(u[0].m[1].ywxz);
+  float a = abs(u[0].m[1].ywxz[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_fn.wgsl.expected.ir.glsl
index 72ca17c..8a72238 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,27 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat4 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+void a(S a_1[4]) {
+}
+void b(S s) {
+}
+void c(mat4 m) {
+}
+void d(vec4 v) {
+}
+void e(float f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[2]);
+  c(u[2].m);
+  d(u[0].m[1].ywxz);
+  e(u[0].m[1].ywxz[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_private.wgsl.expected.ir.glsl
index d4bb1c9..25656ea 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat4 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S p[4] = S[4](S(0, mat4(vec4(0.0f), vec4(0.0f), vec4(0.0f), vec4(0.0f)), 0), S(0, mat4(vec4(0.0f), vec4(0.0f), vec4(0.0f), vec4(0.0f)), 0), S(0, mat4(vec4(0.0f), vec4(0.0f), vec4(0.0f), vec4(0.0f)), 0), S(0, mat4(vec4(0.0f), vec4(0.0f), vec4(0.0f), vec4(0.0f)), 0));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[2];
+  p[3].m = u[2].m;
+  p[1].m[0] = u[0].m[1].ywxz;
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_storage.wgsl.expected.ir.glsl
index 72ca17c..5f0e066 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,39 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int before;
+  mat4 m;
+  int after;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S u[4];
+S s[4];
+void tint_store_and_preserve_padding_1(inout S target, S value_param) {
+  target.before = value_param.before;
+  target.m = value_param.m;
+  target.after = value_param.after;
+}
+void tint_store_and_preserve_padding(inout S target[4], S value_param[4]) {
+  {
+    uint v = 0u;
+    v = 0u;
+    while(true) {
+      uint v_1 = v;
+      if ((v_1 >= 4u)) {
+        break;
+      }
+      tint_store_and_preserve_padding_1(target[v_1], value_param[v_1]);
+      {
+        v = (v_1 + 1u);
+      }
+      continue;
+    }
+  }
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(s, u);
+  tint_store_and_preserve_padding_1(s[1], u[2]);
+  s[3].m = u[2].m;
+  s[1].m[0] = u[0].m[1].ywxz;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..6bfe4b5 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat2 u;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f16mat2 t = transpose(u);
+  float16_t l = length(u[1]);
+  float16_t a = abs(u[0].yx[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_fn.wgsl.expected.ir.glsl
index 72ca17c..914e8bd 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,18 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat2 u;
+void a(f16mat2 m) {
+}
+void b(f16vec2 v) {
+}
+void c(float16_t f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[1]);
+  b(u[1].yx);
+  c(u[1].x);
+  c(u[1].yx[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_private.wgsl.expected.ir.glsl
index d4bb1c9..83de027 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat2 u;
+f16mat2 p = f16mat2(f16vec2(0.0hf), f16vec2(0.0hf));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[0];
+  p[1] = u[0].yx;
+  p[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_storage.wgsl.expected.ir.glsl
index d4bb1c9..e266aac 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat2 u;
+f16mat2 s;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  s = u;
+  s[1] = u[0];
+  s[1] = u[0].yx;
+  s[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..a564021 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat2 u;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat2 t = transpose(u);
+  float l = length(u[1]);
+  float a = abs(u[0].yx[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_fn.wgsl.expected.ir.glsl
index 72ca17c..b158732 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat2 u;
+void a(mat2 m) {
+}
+void b(vec2 v) {
+}
+void c(float f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[1]);
+  b(u[1].yx);
+  c(u[1].x);
+  c(u[1].yx[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_private.wgsl.expected.ir.glsl
index d4bb1c9..2b7523c 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,11 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat2 u;
+mat2 p = mat2(vec2(0.0f), vec2(0.0f));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[0];
+  p[1] = u[0].yx;
+  p[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_storage.wgsl.expected.ir.glsl
index d4bb1c9..5f9f438 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,11 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat2 u;
+mat2 s;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  s = u;
+  s[1] = u[0];
+  s[1] = u[0].yx;
+  s[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..0b91c84 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat2x3 u;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f16mat3x2 t = transpose(u);
+  float16_t l = length(u[1]);
+  float16_t a = abs(u[0].zxy[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_fn.wgsl.expected.ir.glsl
index 72ca17c..e0024ba 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,18 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat2x3 u;
+void a(f16mat2x3 m) {
+}
+void b(f16vec3 v) {
+}
+void c(float16_t f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[1]);
+  b(u[1].zxy);
+  c(u[1].x);
+  c(u[1].zxy[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_private.wgsl.expected.ir.glsl
index d4bb1c9..0c36ca1 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat2x3 u;
+f16mat2x3 p = f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[0];
+  p[1] = u[0].zxy;
+  p[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_storage.wgsl.expected.ir.glsl
index 72ca17c..47e1153 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,16 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat2x3 u;
+f16mat2x3 s;
+void tint_store_and_preserve_padding(inout f16mat2x3 target, f16mat2x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(s, u);
+  s[1] = u[0];
+  s[1] = u[0].zxy;
+  s[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..47f215d 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat2x3 u;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat3x2 t = transpose(u);
+  float l = length(u[1]);
+  float a = abs(u[0].zxy[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_fn.wgsl.expected.ir.glsl
index 72ca17c..392cff5 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat2x3 u;
+void a(mat2x3 m) {
+}
+void b(vec3 v) {
+}
+void c(float f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[1]);
+  b(u[1].zxy);
+  c(u[1].x);
+  c(u[1].zxy[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_private.wgsl.expected.ir.glsl
index d4bb1c9..e3a31ea 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,11 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat2x3 u;
+mat2x3 p = mat2x3(vec3(0.0f), vec3(0.0f));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[0];
+  p[1] = u[0].zxy;
+  p[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_storage.wgsl.expected.ir.glsl
index 72ca17c..336f55ab 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,15 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat2x3 u;
+mat2x3 s;
+void tint_store_and_preserve_padding(inout mat2x3 target, mat2x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(s, u);
+  s[1] = u[0];
+  s[1] = u[0].zxy;
+  s[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..d5461cf 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat2x4 u;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f16mat4x2 t = transpose(u);
+  float16_t l = length(u[1]);
+  float16_t a = abs(u[0].ywxz[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_fn.wgsl.expected.ir.glsl
index 72ca17c..31b2df7 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,18 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat2x4 u;
+void a(f16mat2x4 m) {
+}
+void b(f16vec4 v) {
+}
+void c(float16_t f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[1]);
+  b(u[1].ywxz);
+  c(u[1].x);
+  c(u[1].ywxz[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_private.wgsl.expected.ir.glsl
index d4bb1c9..6305d71 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat2x4 u;
+f16mat2x4 p = f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[0];
+  p[1] = u[0].ywxz;
+  p[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_storage.wgsl.expected.ir.glsl
index d4bb1c9..ff74846 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat2x4 u;
+f16mat2x4 s;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  s = u;
+  s[1] = u[0];
+  s[1] = u[0].ywxz;
+  s[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..00ec920 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat2x4 u;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat4x2 t = transpose(u);
+  float l = length(u[1]);
+  float a = abs(u[0].ywxz[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_fn.wgsl.expected.ir.glsl
index 72ca17c..8872cf9 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat2x4 u;
+void a(mat2x4 m) {
+}
+void b(vec4 v) {
+}
+void c(float f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[1]);
+  b(u[1].ywxz);
+  c(u[1].x);
+  c(u[1].ywxz[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_private.wgsl.expected.ir.glsl
index d4bb1c9..c0519ad 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,11 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat2x4 u;
+mat2x4 p = mat2x4(vec4(0.0f), vec4(0.0f));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[0];
+  p[1] = u[0].ywxz;
+  p[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_storage.wgsl.expected.ir.glsl
index d4bb1c9..4aa67b7 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,11 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat2x4 u;
+mat2x4 s;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  s = u;
+  s[1] = u[0];
+  s[1] = u[0].ywxz;
+  s[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..4b5f84a 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat3x2 u;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f16mat2x3 t = transpose(u);
+  float16_t l = length(u[1]);
+  float16_t a = abs(u[0].yx[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_fn.wgsl.expected.ir.glsl
index 72ca17c..5c4d2c8 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,18 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat3x2 u;
+void a(f16mat3x2 m) {
+}
+void b(f16vec2 v) {
+}
+void c(float16_t f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[1]);
+  b(u[1].yx);
+  c(u[1].x);
+  c(u[1].yx[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_private.wgsl.expected.ir.glsl
index d4bb1c9..9af38a8 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat3x2 u;
+f16mat3x2 p = f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[0];
+  p[1] = u[0].yx;
+  p[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_storage.wgsl.expected.ir.glsl
index d4bb1c9..321b3636 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat3x2 u;
+f16mat3x2 s;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  s = u;
+  s[1] = u[0];
+  s[1] = u[0].yx;
+  s[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..77cfa1a 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat3x2 u;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat2x3 t = transpose(u);
+  float l = length(u[1]);
+  float a = abs(u[0].yx[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_fn.wgsl.expected.ir.glsl
index 72ca17c..755ef46 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat3x2 u;
+void a(mat3x2 m) {
+}
+void b(vec2 v) {
+}
+void c(float f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[1]);
+  b(u[1].yx);
+  c(u[1].x);
+  c(u[1].yx[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_private.wgsl.expected.ir.glsl
index d4bb1c9..e9650bd 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,11 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat3x2 u;
+mat3x2 p = mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[0];
+  p[1] = u[0].yx;
+  p[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_storage.wgsl.expected.ir.glsl
index d4bb1c9..e6a285d 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,11 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat3x2 u;
+mat3x2 s;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  s = u;
+  s[1] = u[0];
+  s[1] = u[0].yx;
+  s[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..b65ee0e 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat3 u;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f16mat3 t = transpose(u);
+  float16_t l = length(u[1]);
+  float16_t a = abs(u[0].zxy[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_fn.wgsl.expected.ir.glsl
index 72ca17c..ed143bc 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,18 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat3 u;
+void a(f16mat3 m) {
+}
+void b(f16vec3 v) {
+}
+void c(float16_t f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[1]);
+  b(u[1].zxy);
+  c(u[1].x);
+  c(u[1].zxy[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_private.wgsl.expected.ir.glsl
index d4bb1c9..67012bf 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat3 u;
+f16mat3 p = f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[0];
+  p[1] = u[0].zxy;
+  p[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_storage.wgsl.expected.ir.glsl
index 72ca17c..e1bd36c 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat3 u;
+f16mat3 s;
+void tint_store_and_preserve_padding(inout f16mat3 target, f16mat3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(s, u);
+  s[1] = u[0];
+  s[1] = u[0].zxy;
+  s[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..63b41a2 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat3 u;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat3 t = transpose(u);
+  float l = length(u[1]);
+  float a = abs(u[0].zxy[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_fn.wgsl.expected.ir.glsl
index 72ca17c..bc86315 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat3 u;
+void a(mat3 m) {
+}
+void b(vec3 v) {
+}
+void c(float f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[1]);
+  b(u[1].zxy);
+  c(u[1].x);
+  c(u[1].zxy[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_private.wgsl.expected.ir.glsl
index d4bb1c9..81c1ec1 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,11 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat3 u;
+mat3 p = mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[0];
+  p[1] = u[0].zxy;
+  p[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_storage.wgsl.expected.ir.glsl
index 72ca17c..4dd0b58 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,16 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat3 u;
+mat3 s;
+void tint_store_and_preserve_padding(inout mat3 target, mat3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(s, u);
+  s[1] = u[0];
+  s[1] = u[0].zxy;
+  s[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..a7861f9 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat3x4 u;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f16mat4x3 t = transpose(u);
+  float16_t l = length(u[1]);
+  float16_t a = abs(u[0].ywxz[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_fn.wgsl.expected.ir.glsl
index 72ca17c..9027ccf 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,18 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat3x4 u;
+void a(f16mat3x4 m) {
+}
+void b(f16vec4 v) {
+}
+void c(float16_t f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[1]);
+  b(u[1].ywxz);
+  c(u[1].x);
+  c(u[1].ywxz[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_private.wgsl.expected.ir.glsl
index d4bb1c9..0f376d1 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat3x4 u;
+f16mat3x4 p = f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[0];
+  p[1] = u[0].ywxz;
+  p[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_storage.wgsl.expected.ir.glsl
index d4bb1c9..7bda4f2 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat3x4 u;
+f16mat3x4 s;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  s = u;
+  s[1] = u[0];
+  s[1] = u[0].ywxz;
+  s[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..83e9ed8 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat3x4 u;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat4x3 t = transpose(u);
+  float l = length(u[1]);
+  float a = abs(u[0].ywxz[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_fn.wgsl.expected.ir.glsl
index 72ca17c..c1bb67e 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat3x4 u;
+void a(mat3x4 m) {
+}
+void b(vec4 v) {
+}
+void c(float f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[1]);
+  b(u[1].ywxz);
+  c(u[1].x);
+  c(u[1].ywxz[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_private.wgsl.expected.ir.glsl
index d4bb1c9..a5c2c56 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,11 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat3x4 u;
+mat3x4 p = mat3x4(vec4(0.0f), vec4(0.0f), vec4(0.0f));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[0];
+  p[1] = u[0].ywxz;
+  p[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_storage.wgsl.expected.ir.glsl
index d4bb1c9..34fe330 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,11 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat3x4 u;
+mat3x4 s;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  s = u;
+  s[1] = u[0];
+  s[1] = u[0].ywxz;
+  s[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..c42b267 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat4x2 u;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f16mat2x4 t = transpose(u);
+  float16_t l = length(u[1]);
+  float16_t a = abs(u[0].yx[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_fn.wgsl.expected.ir.glsl
index 72ca17c..da702d7 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,18 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat4x2 u;
+void a(f16mat4x2 m) {
+}
+void b(f16vec2 v) {
+}
+void c(float16_t f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[1]);
+  b(u[1].yx);
+  c(u[1].x);
+  c(u[1].yx[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_private.wgsl.expected.ir.glsl
index d4bb1c9..633b31b 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat4x2 u;
+f16mat4x2 p = f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[0];
+  p[1] = u[0].yx;
+  p[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_storage.wgsl.expected.ir.glsl
index d4bb1c9..e107015 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat4x2 u;
+f16mat4x2 s;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  s = u;
+  s[1] = u[0];
+  s[1] = u[0].yx;
+  s[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..39656fb 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat4x2 u;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat2x4 t = transpose(u);
+  float l = length(u[1]);
+  float a = abs(u[0].yx[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_fn.wgsl.expected.ir.glsl
index 72ca17c..06f26cd 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat4x2 u;
+void a(mat4x2 m) {
+}
+void b(vec2 v) {
+}
+void c(float f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[1]);
+  b(u[1].yx);
+  c(u[1].x);
+  c(u[1].yx[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_private.wgsl.expected.ir.glsl
index d4bb1c9..afe8a0c 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,11 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat4x2 u;
+mat4x2 p = mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[0];
+  p[1] = u[0].yx;
+  p[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_storage.wgsl.expected.ir.glsl
index d4bb1c9..deb1b1f 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,11 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat4x2 u;
+mat4x2 s;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  s = u;
+  s[1] = u[0];
+  s[1] = u[0].yx;
+  s[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..920bf0f 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat4x3 u;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f16mat3x4 t = transpose(u);
+  float16_t l = length(u[1]);
+  float16_t a = abs(u[0].zxy[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_fn.wgsl.expected.ir.glsl
index 72ca17c..a37f7b1 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,18 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat4x3 u;
+void a(f16mat4x3 m) {
+}
+void b(f16vec3 v) {
+}
+void c(float16_t f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[1]);
+  b(u[1].zxy);
+  c(u[1].x);
+  c(u[1].zxy[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_private.wgsl.expected.ir.glsl
index d4bb1c9..7f9029b 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat4x3 u;
+f16mat4x3 p = f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[0];
+  p[1] = u[0].zxy;
+  p[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_storage.wgsl.expected.ir.glsl
index 72ca17c..b900f61 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,18 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat4x3 u;
+f16mat4x3 s;
+void tint_store_and_preserve_padding(inout f16mat4x3 target, f16mat4x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+  target[3u] = value_param[3u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(s, u);
+  s[1] = u[0];
+  s[1] = u[0].zxy;
+  s[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..94f2a0b 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat4x3 u;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat3x4 t = transpose(u);
+  float l = length(u[1]);
+  float a = abs(u[0].zxy[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_fn.wgsl.expected.ir.glsl
index 72ca17c..80f9ab5 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat4x3 u;
+void a(mat4x3 m) {
+}
+void b(vec3 v) {
+}
+void c(float f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[1]);
+  b(u[1].zxy);
+  c(u[1].x);
+  c(u[1].zxy[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_private.wgsl.expected.ir.glsl
index d4bb1c9..2f3a9a7 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,11 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat4x3 u;
+mat4x3 p = mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[0];
+  p[1] = u[0].zxy;
+  p[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_storage.wgsl.expected.ir.glsl
index 72ca17c..5722166 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat4x3 u;
+mat4x3 s;
+void tint_store_and_preserve_padding(inout mat4x3 target, mat4x3 value_param) {
+  target[0u] = value_param[0u];
+  target[1u] = value_param[1u];
+  target[2u] = value_param[2u];
+  target[3u] = value_param[3u];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_store_and_preserve_padding(s, u);
+  s[1] = u[0];
+  s[1] = u[0].zxy;
+  s[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..77c0d48 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat4 u;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f16mat4 t = transpose(u);
+  float16_t l = length(u[1]);
+  float16_t a = abs(u[0].ywxz[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_fn.wgsl.expected.ir.glsl
index 72ca17c..d1ed871 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,18 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat4 u;
+void a(f16mat4 m) {
+}
+void b(f16vec4 v) {
+}
+void c(float16_t f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[1]);
+  b(u[1].ywxz);
+  c(u[1].x);
+  c(u[1].ywxz[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_private.wgsl.expected.ir.glsl
index d4bb1c9..ffadbef 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat4 u;
+f16mat4 p = f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[0];
+  p[1] = u[0].ywxz;
+  p[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_storage.wgsl.expected.ir.glsl
index d4bb1c9..0aac068 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform f16mat4 u;
+f16mat4 s;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  s = u;
+  s[1] = u[0];
+  s[1] = u[0].ywxz;
+  s[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_builtin.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_builtin.wgsl.expected.ir.glsl
index 6c6485e..ae46e0f 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_builtin.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_builtin.wgsl.expected.ir.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBuiltinCall
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat4 u;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat4 t = transpose(u);
+  float l = length(u[1]);
+  float a = abs(u[0].ywxz[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_fn.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_fn.wgsl.expected.ir.glsl
index 72ca17c..d9ac9be 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_fn.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_fn.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat4 u;
+void a(mat4 m) {
+}
+void b(vec4 v) {
+}
+void c(float f) {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  a(u);
+  b(u[1]);
+  b(u[1].ywxz);
+  c(u[1].x);
+  c(u[1].ywxz[0u]);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_private.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_private.wgsl.expected.ir.glsl
index d4bb1c9..2e8f11f 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_private.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_private.wgsl.expected.ir.glsl
@@ -1,11 +1,11 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat4 u;
+mat4 p = mat4(vec4(0.0f), vec4(0.0f), vec4(0.0f), vec4(0.0f));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  p = u;
+  p[1] = u[0];
+  p[1] = u[0].ywxz;
+  p[0][1] = u[1].x;
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_storage.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_storage.wgsl.expected.ir.glsl
index d4bb1c9..2496a6f 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_storage.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_storage.wgsl.expected.ir.glsl
@@ -1,11 +1,11 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uniform mat4 u;
+mat4 s;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  s = u;
+  s[1] = u[0];
+  s[1] = u[0].ywxz;
+  s[0][1] = u[1].x;
+}
diff --git a/test/tint/bug/fxc/dyn_array_idx/read/uniform.wgsl.expected.ir.glsl b/test/tint/bug/fxc/dyn_array_idx/read/uniform.wgsl.expected.ir.glsl
index d4bb1c9..e081821 100644
--- a/test/tint/bug/fxc/dyn_array_idx/read/uniform.wgsl.expected.ir.glsl
+++ b/test/tint/bug/fxc/dyn_array_idx/read/uniform.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
+struct UBO {
+  ivec4 data[4];
+  int dynamic_idx;
+};
 
-tint executable returned error: signal: illegal instruction
+struct Result {
+  int tint_symbol;
+};
+
+uniform UBO ubo;
+Result result;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  result.tint_symbol = ubo.data[ubo.dynamic_idx].x;
+}
diff --git a/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_x.wgsl.expected.ir.glsl b/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_x.wgsl.expected.ir.glsl
index 1268749..a0caab4 100644
--- a/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_x.wgsl.expected.ir.glsl
+++ b/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_x.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::StoreVectorElement
-********************************************************************
-*  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.  *
-********************************************************************
+struct Uniforms {
+  uint i;
+  uint j;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform Uniforms uniforms;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat2x4 m1 = mat2x4(vec4(0.0f), vec4(0.0f));
+  m1[uniforms.i][0] = 1.0f;
+}
diff --git a/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_xy.wgsl.expected.ir.glsl b/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_xy.wgsl.expected.ir.glsl
index 1268749..497c41c 100644
--- a/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_xy.wgsl.expected.ir.glsl
+++ b/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_xy.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::StoreVectorElement
-********************************************************************
-*  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.  *
-********************************************************************
+struct Uniforms {
+  uint i;
+  uint j;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform Uniforms uniforms;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  mat2x4 m1 = mat2x4(vec4(0.0f), vec4(0.0f));
+  m1[uniforms.i][uniforms.j] = 1.0f;
+}
diff --git a/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_y.wgsl.expected.ir.glsl b/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_y.wgsl.expected.ir.glsl
index 1268749..6989480 100644
--- a/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_y.wgsl.expected.ir.glsl
+++ b/test/tint/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_y.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::StoreVectorElement
-********************************************************************
-*  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.  *
-********************************************************************
+struct Uniforms {
+  uint i;
+  uint j;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform Uniforms uniforms;
+mat2x4 m1 = mat2x4(vec4(0.0f), vec4(0.0f));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  m1[0][uniforms.j] = 1.0f;
+}
diff --git a/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_x.wgsl.expected.ir.glsl b/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_x.wgsl.expected.ir.glsl
index 1268749..dae10e8 100644
--- a/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_x.wgsl.expected.ir.glsl
+++ b/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_x.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::StoreVectorElement
-********************************************************************
-*  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.  *
-********************************************************************
+struct Uniforms {
+  uint i;
+  uint j;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform Uniforms uniforms;
+mat2x4 m1 = mat2x4(vec4(0.0f), vec4(0.0f));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  m1[uniforms.i][0] = 1.0f;
+}
diff --git a/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_xy.wgsl.expected.ir.glsl b/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_xy.wgsl.expected.ir.glsl
index 1268749..3a421fb 100644
--- a/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_xy.wgsl.expected.ir.glsl
+++ b/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_xy.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::StoreVectorElement
-********************************************************************
-*  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.  *
-********************************************************************
+struct Uniforms {
+  uint i;
+  uint j;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform Uniforms uniforms;
+mat2x4 m1 = mat2x4(vec4(0.0f), vec4(0.0f));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  m1[uniforms.i][uniforms.j] = 1.0f;
+}
diff --git a/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_y.wgsl.expected.ir.glsl b/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_y.wgsl.expected.ir.glsl
index 1268749..6989480 100644
--- a/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_y.wgsl.expected.ir.glsl
+++ b/test/tint/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_y.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::StoreVectorElement
-********************************************************************
-*  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.  *
-********************************************************************
+struct Uniforms {
+  uint i;
+  uint j;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform Uniforms uniforms;
+mat2x4 m1 = mat2x4(vec4(0.0f), vec4(0.0f));
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  m1[0][uniforms.j] = 1.0f;
+}
diff --git a/test/tint/bug/fxc/vector_assignment_in_loop/loop_call_with_loop.wgsl.expected.ir.glsl b/test/tint/bug/fxc/vector_assignment_in_loop/loop_call_with_loop.wgsl.expected.ir.glsl
index 0480431..b7cc5a4 100644
--- a/test/tint/bug/fxc/vector_assignment_in_loop/loop_call_with_loop.wgsl.expected.ir.glsl
+++ b/test/tint/bug/fxc/vector_assignment_in_loop/loop_call_with_loop.wgsl.expected.ir.glsl
@@ -1,11 +1,42 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+vec2 v2f = vec2(0.0f);
+ivec3 v3i = ivec3(0);
+uvec4 v4u = uvec4(0u);
+bvec2 v2b = bvec2(false);
+void foo() {
+  {
+    int i = 0;
+    while(true) {
+      if ((i < 2)) {
+      } else {
+        break;
+      }
+      v2f[i] = 1.0f;
+      v3i[i] = 1;
+      v4u[i] = 1u;
+      v2b[i] = true;
+      {
+        i = (i + 1);
+      }
+      continue;
+    }
+  }
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  {
+    int i = 0;
+    while(true) {
+      if ((i < 2)) {
+      } else {
+        break;
+      }
+      foo();
+      {
+        i = (i + 1);
+      }
+      continue;
+    }
+  }
+}
diff --git a/test/tint/bug/fxc/vector_assignment_in_loop/loop_call_with_no_loop.wgsl.expected.ir.glsl b/test/tint/bug/fxc/vector_assignment_in_loop/loop_call_with_no_loop.wgsl.expected.ir.glsl
index 1268749..6068cba 100644
--- a/test/tint/bug/fxc/vector_assignment_in_loop/loop_call_with_no_loop.wgsl.expected.ir.glsl
+++ b/test/tint/bug/fxc/vector_assignment_in_loop/loop_call_with_no_loop.wgsl.expected.ir.glsl
@@ -1,11 +1,30 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::StoreVectorElement
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+vec2 v2f = vec2(0.0f);
+ivec3 v3i = ivec3(0);
+uvec4 v4u = uvec4(0u);
+bvec2 v2b = bvec2(false);
+void foo() {
+  int i = 0;
+  v2f[i] = 1.0f;
+  v3i[i] = 1;
+  v4u[i] = 1u;
+  v2b[i] = true;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  {
+    int i = 0;
+    while(true) {
+      if ((i < 2)) {
+      } else {
+        break;
+      }
+      foo();
+      {
+        i = (i + 1);
+      }
+      continue;
+    }
+  }
+}
diff --git a/test/tint/bug/fxc/vector_assignment_in_loop/loop_types_all.wgsl.expected.ir.glsl b/test/tint/bug/fxc/vector_assignment_in_loop/loop_types_all.wgsl.expected.ir.glsl
index 0480431..1a7a52b 100644
--- a/test/tint/bug/fxc/vector_assignment_in_loop/loop_types_all.wgsl.expected.ir.glsl
+++ b/test/tint/bug/fxc/vector_assignment_in_loop/loop_types_all.wgsl.expected.ir.glsl
@@ -1,11 +1,42 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  vec2 v2f = vec2(0.0f);
+  vec3 v3f = vec3(0.0f);
+  vec4 v4f = vec4(0.0f);
+  ivec2 v2i = ivec2(0);
+  ivec3 v3i = ivec3(0);
+  ivec4 v4i = ivec4(0);
+  uvec2 v2u = uvec2(0u);
+  uvec3 v3u = uvec3(0u);
+  uvec4 v4u = uvec4(0u);
+  bvec2 v2b = bvec2(false);
+  bvec3 v3b = bvec3(false);
+  bvec4 v4b = bvec4(false);
+  {
+    int i = 0;
+    while(true) {
+      if ((i < 2)) {
+      } else {
+        break;
+      }
+      v2f[i] = 1.0f;
+      v3f[i] = 1.0f;
+      v4f[i] = 1.0f;
+      v2i[i] = 1;
+      v3i[i] = 1;
+      v4i[i] = 1;
+      v2u[i] = 1u;
+      v3u[i] = 1u;
+      v4u[i] = 1u;
+      v2b[i] = true;
+      v3b[i] = true;
+      v4b[i] = true;
+      {
+        i = (i + 1);
+      }
+      continue;
+    }
+  }
+}
diff --git a/test/tint/bug/fxc/vector_assignment_in_loop/loop_types_repeated.wgsl.expected.ir.glsl b/test/tint/bug/fxc/vector_assignment_in_loop/loop_types_repeated.wgsl.expected.ir.glsl
index 0480431..35cd935 100644
--- a/test/tint/bug/fxc/vector_assignment_in_loop/loop_types_repeated.wgsl.expected.ir.glsl
+++ b/test/tint/bug/fxc/vector_assignment_in_loop/loop_types_repeated.wgsl.expected.ir.glsl
@@ -1,11 +1,34 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  vec2 v2f = vec2(0.0f);
+  vec2 v2f_2 = vec2(0.0f);
+  ivec3 v3i = ivec3(0);
+  ivec3 v3i_2 = ivec3(0);
+  uvec4 v4u = uvec4(0u);
+  uvec4 v4u_2 = uvec4(0u);
+  bvec2 v2b = bvec2(false);
+  bvec2 v2b_2 = bvec2(false);
+  {
+    int i = 0;
+    while(true) {
+      if ((i < 2)) {
+      } else {
+        break;
+      }
+      v2f[i] = 1.0f;
+      v3i[i] = 1;
+      v4u[i] = 1u;
+      v2b[i] = true;
+      v2f_2[i] = 1.0f;
+      v3i_2[i] = 1;
+      v4u_2[i] = 1u;
+      v2b_2[i] = true;
+      {
+        i = (i + 1);
+      }
+      continue;
+    }
+  }
+}
diff --git a/test/tint/bug/fxc/vector_assignment_in_loop/loop_types_some.wgsl.expected.ir.glsl b/test/tint/bug/fxc/vector_assignment_in_loop/loop_types_some.wgsl.expected.ir.glsl
index 0480431..c24ea24 100644
--- a/test/tint/bug/fxc/vector_assignment_in_loop/loop_types_some.wgsl.expected.ir.glsl
+++ b/test/tint/bug/fxc/vector_assignment_in_loop/loop_types_some.wgsl.expected.ir.glsl
@@ -1,11 +1,43 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Loop
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  vec2 v2f = vec2(0.0f);
+  vec3 v3f = vec3(0.0f);
+  vec4 v4f = vec4(0.0f);
+  ivec2 v2i = ivec2(0);
+  ivec3 v3i = ivec3(0);
+  ivec4 v4i = ivec4(0);
+  uvec2 v2u = uvec2(0u);
+  uvec3 v3u = uvec3(0u);
+  uvec4 v4u = uvec4(0u);
+  bvec2 v2b = bvec2(false);
+  bvec3 v3b = bvec3(false);
+  bvec4 v4b = bvec4(false);
+  {
+    int i = 0;
+    while(true) {
+      if ((i < 2)) {
+      } else {
+        break;
+      }
+      v2f[i] = 1.0f;
+      v2i[i] = 1;
+      v2u[i] = 1u;
+      v2b[i] = true;
+      {
+        i = (i + 1);
+      }
+      continue;
+    }
+  }
+  int i = 0;
+  v3f[i] = 1.0f;
+  v4f[i] = 1.0f;
+  v3i[i] = 1;
+  v4i[i] = 1;
+  v3u[i] = 1u;
+  v4u[i] = 1u;
+  v3b[i] = true;
+  v4b[i] = true;
+}
diff --git a/test/tint/bug/fxc/vector_assignment_in_loop/no_loop.wgsl.expected.ir.glsl b/test/tint/bug/fxc/vector_assignment_in_loop/no_loop.wgsl.expected.ir.glsl
index 1268749..7b6e49a 100644
--- a/test/tint/bug/fxc/vector_assignment_in_loop/no_loop.wgsl.expected.ir.glsl
+++ b/test/tint/bug/fxc/vector_assignment_in_loop/no_loop.wgsl.expected.ir.glsl
@@ -1,11 +1,30 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::StoreVectorElement
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  vec2 v2f = vec2(0.0f);
+  vec3 v3f = vec3(0.0f);
+  vec4 v4f = vec4(0.0f);
+  ivec2 v2i = ivec2(0);
+  ivec3 v3i = ivec3(0);
+  ivec4 v4i = ivec4(0);
+  uvec2 v2u = uvec2(0u);
+  uvec3 v3u = uvec3(0u);
+  uvec4 v4u = uvec4(0u);
+  bvec2 v2b = bvec2(false);
+  bvec3 v3b = bvec3(false);
+  bvec4 v4b = bvec4(false);
+  int i = 0;
+  v2f[i] = 1.0f;
+  v3f[i] = 1.0f;
+  v4f[i] = 1.0f;
+  v2i[i] = 1;
+  v3i[i] = 1;
+  v4i[i] = 1;
+  v2u[i] = 1u;
+  v3u[i] = 1u;
+  v4u[i] = 1u;
+  v2b[i] = true;
+  v3b[i] = true;
+  v4b[i] = true;
+}
diff --git a/test/tint/bug/tint/2146.wgsl.expected.ir.glsl b/test/tint/bug/tint/2146.wgsl.expected.ir.glsl
index 4a20bc7..94731d8 100644
--- a/test/tint/bug/tint/2146.wgsl.expected.ir.glsl
+++ b/test/tint/bug/tint/2146.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uvec3 localId = uvec3(0u);
+uint localIndex = 0u;
+uvec3 globalId = uvec3(0u);
+uvec3 numWorkgroups = uvec3(0u);
+uvec3 workgroupId = uvec3(0u);
+uint globalId2Index() {
+  return globalId.x;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f16vec4 a = f16vec4(0.0hf);
+  float16_t b = 1.0hf;
+  a[0] = (a.x + b);
+}
diff --git a/test/tint/bug/tint/219.spvasm.expected.ir.glsl b/test/tint/bug/tint/219.spvasm.expected.ir.glsl
index 4a20bc7..0564a29 100644
--- a/test/tint/bug/tint/219.spvasm.expected.ir.glsl
+++ b/test/tint/bug/tint/219.spvasm.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+float x_200(inout vec2 x_201) {
+  float x_212 = x_201.x;
+  return x_212;
+}
+void main_1() {
+  vec2 x_11 = vec2(0.0f);
+  float x_12 = x_200(x_11);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  main_1();
+}
diff --git a/test/tint/expressions/index/var/let/literal/vector.wgsl.expected.ir.glsl b/test/tint/expressions/index/var/let/literal/vector.wgsl.expected.ir.glsl
index 4a20bc7..b6cfdca 100644
--- a/test/tint/expressions/index/var/let/literal/vector.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/var/let/literal/vector.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+float f() {
+  vec3 v = vec3(1.0f, 2.0f, 3.0f);
+  int i = 1;
+  return v[i];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/var/let/param/vector.wgsl.expected.ir.glsl b/test/tint/expressions/index/var/let/param/vector.wgsl.expected.ir.glsl
index 4a20bc7..69600ec 100644
--- a/test/tint/expressions/index/var/let/param/vector.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/var/let/param/vector.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+float f(int x) {
+  vec3 v = vec3(1.0f, 2.0f, 3.0f);
+  int i = x;
+  return v[i];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/var/literal/vector.wgsl.expected.ir.glsl b/test/tint/expressions/index/var/literal/vector.wgsl.expected.ir.glsl
index 4a20bc7..ed6fdc1 100644
--- a/test/tint/expressions/index/var/literal/vector.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/var/literal/vector.wgsl.expected.ir.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+float f() {
+  vec3 v = vec3(1.0f, 2.0f, 3.0f);
+  return v.y;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/var/param/vector.wgsl.expected.ir.glsl b/test/tint/expressions/index/var/param/vector.wgsl.expected.ir.glsl
index 4a20bc7..9ad3700 100644
--- a/test/tint/expressions/index/var/param/vector.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/var/param/vector.wgsl.expected.ir.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+float f(int i) {
+  vec3 v = vec3(1.0f, 2.0f, 3.0f);
+  return v[i];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/var/struct_with_matrix.wgsl.expected.ir.glsl b/test/tint/expressions/index/var/struct_with_matrix.wgsl.expected.ir.glsl
index 4a20bc7..815503d 100644
--- a/test/tint/expressions/index/var/struct_with_matrix.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/var/struct_with_matrix.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int m;
+  mat4 n;
+};
 
-tint executable returned error: signal: illegal instruction
+float f() {
+  S a = S(0, mat4(vec4(0.0f), vec4(0.0f), vec4(0.0f), vec4(0.0f)));
+  return a.n[2].y;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/index/var/struct_with_vector.wgsl.expected.ir.glsl b/test/tint/expressions/index/var/struct_with_vector.wgsl.expected.ir.glsl
index 4a20bc7..88391ed 100644
--- a/test/tint/expressions/index/var/struct_with_vector.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/index/var/struct_with_vector.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  int m;
+  uvec3 n;
+};
 
-tint executable returned error: signal: illegal instruction
+uint f() {
+  S a = S(0, uvec3(0u));
+  return a.n.z;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/swizzle/read/packed_vec3/f16.wgsl.expected.ir.glsl b/test/tint/expressions/swizzle/read/packed_vec3/f16.wgsl.expected.ir.glsl
index 72ca17c..516661b 100644
--- a/test/tint/expressions/swizzle/read/packed_vec3/f16.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/swizzle/read/packed_vec3/f16.wgsl.expected.ir.glsl
@@ -1,11 +1,134 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  f16vec3 v;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S U;
+void f() {
+  f16vec3 v = U.v;
+  float16_t x = U.v.x;
+  float16_t y = U.v.y;
+  float16_t z = U.v.z;
+  f16vec2 xx = U.v.xx;
+  f16vec2 xy = U.v.xy;
+  f16vec2 xz = U.v.xz;
+  f16vec2 yx = U.v.yx;
+  f16vec2 yy = U.v.yy;
+  f16vec2 yz = U.v.yz;
+  f16vec2 zx = U.v.zx;
+  f16vec2 zy = U.v.zy;
+  f16vec2 zz = U.v.zz;
+  f16vec3 xxx = U.v.xxx;
+  f16vec3 xxy = U.v.xxy;
+  f16vec3 xxz = U.v.xxz;
+  f16vec3 xyx = U.v.xyx;
+  f16vec3 xyy = U.v.xyy;
+  f16vec3 xyz = U.v.xyz;
+  f16vec3 xzx = U.v.xzx;
+  f16vec3 xzy = U.v.xzy;
+  f16vec3 xzz = U.v.xzz;
+  f16vec3 yxx = U.v.yxx;
+  f16vec3 yxy = U.v.yxy;
+  f16vec3 yxz = U.v.yxz;
+  f16vec3 yyx = U.v.yyx;
+  f16vec3 yyy = U.v.yyy;
+  f16vec3 yyz = U.v.yyz;
+  f16vec3 yzx = U.v.yzx;
+  f16vec3 yzy = U.v.yzy;
+  f16vec3 yzz = U.v.yzz;
+  f16vec3 zxx = U.v.zxx;
+  f16vec3 zxy = U.v.zxy;
+  f16vec3 zxz = U.v.zxz;
+  f16vec3 zyx = U.v.zyx;
+  f16vec3 zyy = U.v.zyy;
+  f16vec3 zyz = U.v.zyz;
+  f16vec3 zzx = U.v.zzx;
+  f16vec3 zzy = U.v.zzy;
+  f16vec3 zzz = U.v.zzz;
+  f16vec4 xxxx = U.v.xxxx;
+  f16vec4 xxxy = U.v.xxxy;
+  f16vec4 xxxz = U.v.xxxz;
+  f16vec4 xxyx = U.v.xxyx;
+  f16vec4 xxyy = U.v.xxyy;
+  f16vec4 xxyz = U.v.xxyz;
+  f16vec4 xxzx = U.v.xxzx;
+  f16vec4 xxzy = U.v.xxzy;
+  f16vec4 xxzz = U.v.xxzz;
+  f16vec4 xyxx = U.v.xyxx;
+  f16vec4 xyxy = U.v.xyxy;
+  f16vec4 xyxz = U.v.xyxz;
+  f16vec4 xyyx = U.v.xyyx;
+  f16vec4 xyyy = U.v.xyyy;
+  f16vec4 xyyz = U.v.xyyz;
+  f16vec4 xyzx = U.v.xyzx;
+  f16vec4 xyzy = U.v.xyzy;
+  f16vec4 xyzz = U.v.xyzz;
+  f16vec4 xzxx = U.v.xzxx;
+  f16vec4 xzxy = U.v.xzxy;
+  f16vec4 xzxz = U.v.xzxz;
+  f16vec4 xzyx = U.v.xzyx;
+  f16vec4 xzyy = U.v.xzyy;
+  f16vec4 xzyz = U.v.xzyz;
+  f16vec4 xzzx = U.v.xzzx;
+  f16vec4 xzzy = U.v.xzzy;
+  f16vec4 xzzz = U.v.xzzz;
+  f16vec4 yxxx = U.v.yxxx;
+  f16vec4 yxxy = U.v.yxxy;
+  f16vec4 yxxz = U.v.yxxz;
+  f16vec4 yxyx = U.v.yxyx;
+  f16vec4 yxyy = U.v.yxyy;
+  f16vec4 yxyz = U.v.yxyz;
+  f16vec4 yxzx = U.v.yxzx;
+  f16vec4 yxzy = U.v.yxzy;
+  f16vec4 yxzz = U.v.yxzz;
+  f16vec4 yyxx = U.v.yyxx;
+  f16vec4 yyxy = U.v.yyxy;
+  f16vec4 yyxz = U.v.yyxz;
+  f16vec4 yyyx = U.v.yyyx;
+  f16vec4 yyyy = U.v.yyyy;
+  f16vec4 yyyz = U.v.yyyz;
+  f16vec4 yyzx = U.v.yyzx;
+  f16vec4 yyzy = U.v.yyzy;
+  f16vec4 yyzz = U.v.yyzz;
+  f16vec4 yzxx = U.v.yzxx;
+  f16vec4 yzxy = U.v.yzxy;
+  f16vec4 yzxz = U.v.yzxz;
+  f16vec4 yzyx = U.v.yzyx;
+  f16vec4 yzyy = U.v.yzyy;
+  f16vec4 yzyz = U.v.yzyz;
+  f16vec4 yzzx = U.v.yzzx;
+  f16vec4 yzzy = U.v.yzzy;
+  f16vec4 yzzz = U.v.yzzz;
+  f16vec4 zxxx = U.v.zxxx;
+  f16vec4 zxxy = U.v.zxxy;
+  f16vec4 zxxz = U.v.zxxz;
+  f16vec4 zxyx = U.v.zxyx;
+  f16vec4 zxyy = U.v.zxyy;
+  f16vec4 zxyz = U.v.zxyz;
+  f16vec4 zxzx = U.v.zxzx;
+  f16vec4 zxzy = U.v.zxzy;
+  f16vec4 zxzz = U.v.zxzz;
+  f16vec4 zyxx = U.v.zyxx;
+  f16vec4 zyxy = U.v.zyxy;
+  f16vec4 zyxz = U.v.zyxz;
+  f16vec4 zyyx = U.v.zyyx;
+  f16vec4 zyyy = U.v.zyyy;
+  f16vec4 zyyz = U.v.zyyz;
+  f16vec4 zyzx = U.v.zyzx;
+  f16vec4 zyzy = U.v.zyzy;
+  f16vec4 zyzz = U.v.zyzz;
+  f16vec4 zzxx = U.v.zzxx;
+  f16vec4 zzxy = U.v.zzxy;
+  f16vec4 zzxz = U.v.zzxz;
+  f16vec4 zzyx = U.v.zzyx;
+  f16vec4 zzyy = U.v.zzyy;
+  f16vec4 zzyz = U.v.zzyz;
+  f16vec4 zzzx = U.v.zzzx;
+  f16vec4 zzzy = U.v.zzzy;
+  f16vec4 zzzz = U.v.zzzz;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.ir.glsl b/test/tint/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.ir.glsl
index 72ca17c..694870a 100644
--- a/test/tint/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.ir.glsl
@@ -1,11 +1,133 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  vec3 v;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S U;
+void f() {
+  vec3 v = U.v;
+  float x = U.v.x;
+  float y = U.v.y;
+  float z = U.v.z;
+  vec2 xx = U.v.xx;
+  vec2 xy = U.v.xy;
+  vec2 xz = U.v.xz;
+  vec2 yx = U.v.yx;
+  vec2 yy = U.v.yy;
+  vec2 yz = U.v.yz;
+  vec2 zx = U.v.zx;
+  vec2 zy = U.v.zy;
+  vec2 zz = U.v.zz;
+  vec3 xxx = U.v.xxx;
+  vec3 xxy = U.v.xxy;
+  vec3 xxz = U.v.xxz;
+  vec3 xyx = U.v.xyx;
+  vec3 xyy = U.v.xyy;
+  vec3 xyz = U.v.xyz;
+  vec3 xzx = U.v.xzx;
+  vec3 xzy = U.v.xzy;
+  vec3 xzz = U.v.xzz;
+  vec3 yxx = U.v.yxx;
+  vec3 yxy = U.v.yxy;
+  vec3 yxz = U.v.yxz;
+  vec3 yyx = U.v.yyx;
+  vec3 yyy = U.v.yyy;
+  vec3 yyz = U.v.yyz;
+  vec3 yzx = U.v.yzx;
+  vec3 yzy = U.v.yzy;
+  vec3 yzz = U.v.yzz;
+  vec3 zxx = U.v.zxx;
+  vec3 zxy = U.v.zxy;
+  vec3 zxz = U.v.zxz;
+  vec3 zyx = U.v.zyx;
+  vec3 zyy = U.v.zyy;
+  vec3 zyz = U.v.zyz;
+  vec3 zzx = U.v.zzx;
+  vec3 zzy = U.v.zzy;
+  vec3 zzz = U.v.zzz;
+  vec4 xxxx = U.v.xxxx;
+  vec4 xxxy = U.v.xxxy;
+  vec4 xxxz = U.v.xxxz;
+  vec4 xxyx = U.v.xxyx;
+  vec4 xxyy = U.v.xxyy;
+  vec4 xxyz = U.v.xxyz;
+  vec4 xxzx = U.v.xxzx;
+  vec4 xxzy = U.v.xxzy;
+  vec4 xxzz = U.v.xxzz;
+  vec4 xyxx = U.v.xyxx;
+  vec4 xyxy = U.v.xyxy;
+  vec4 xyxz = U.v.xyxz;
+  vec4 xyyx = U.v.xyyx;
+  vec4 xyyy = U.v.xyyy;
+  vec4 xyyz = U.v.xyyz;
+  vec4 xyzx = U.v.xyzx;
+  vec4 xyzy = U.v.xyzy;
+  vec4 xyzz = U.v.xyzz;
+  vec4 xzxx = U.v.xzxx;
+  vec4 xzxy = U.v.xzxy;
+  vec4 xzxz = U.v.xzxz;
+  vec4 xzyx = U.v.xzyx;
+  vec4 xzyy = U.v.xzyy;
+  vec4 xzyz = U.v.xzyz;
+  vec4 xzzx = U.v.xzzx;
+  vec4 xzzy = U.v.xzzy;
+  vec4 xzzz = U.v.xzzz;
+  vec4 yxxx = U.v.yxxx;
+  vec4 yxxy = U.v.yxxy;
+  vec4 yxxz = U.v.yxxz;
+  vec4 yxyx = U.v.yxyx;
+  vec4 yxyy = U.v.yxyy;
+  vec4 yxyz = U.v.yxyz;
+  vec4 yxzx = U.v.yxzx;
+  vec4 yxzy = U.v.yxzy;
+  vec4 yxzz = U.v.yxzz;
+  vec4 yyxx = U.v.yyxx;
+  vec4 yyxy = U.v.yyxy;
+  vec4 yyxz = U.v.yyxz;
+  vec4 yyyx = U.v.yyyx;
+  vec4 yyyy = U.v.yyyy;
+  vec4 yyyz = U.v.yyyz;
+  vec4 yyzx = U.v.yyzx;
+  vec4 yyzy = U.v.yyzy;
+  vec4 yyzz = U.v.yyzz;
+  vec4 yzxx = U.v.yzxx;
+  vec4 yzxy = U.v.yzxy;
+  vec4 yzxz = U.v.yzxz;
+  vec4 yzyx = U.v.yzyx;
+  vec4 yzyy = U.v.yzyy;
+  vec4 yzyz = U.v.yzyz;
+  vec4 yzzx = U.v.yzzx;
+  vec4 yzzy = U.v.yzzy;
+  vec4 yzzz = U.v.yzzz;
+  vec4 zxxx = U.v.zxxx;
+  vec4 zxxy = U.v.zxxy;
+  vec4 zxxz = U.v.zxxz;
+  vec4 zxyx = U.v.zxyx;
+  vec4 zxyy = U.v.zxyy;
+  vec4 zxyz = U.v.zxyz;
+  vec4 zxzx = U.v.zxzx;
+  vec4 zxzy = U.v.zxzy;
+  vec4 zxzz = U.v.zxzz;
+  vec4 zyxx = U.v.zyxx;
+  vec4 zyxy = U.v.zyxy;
+  vec4 zyxz = U.v.zyxz;
+  vec4 zyyx = U.v.zyyx;
+  vec4 zyyy = U.v.zyyy;
+  vec4 zyyz = U.v.zyyz;
+  vec4 zyzx = U.v.zyzx;
+  vec4 zyzy = U.v.zyzy;
+  vec4 zyzz = U.v.zyzz;
+  vec4 zzxx = U.v.zzxx;
+  vec4 zzxy = U.v.zzxy;
+  vec4 zzxz = U.v.zzxz;
+  vec4 zzyx = U.v.zzyx;
+  vec4 zzyy = U.v.zzyy;
+  vec4 zzyz = U.v.zzyz;
+  vec4 zzzx = U.v.zzzx;
+  vec4 zzzy = U.v.zzzy;
+  vec4 zzzz = U.v.zzzz;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.ir.glsl b/test/tint/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.ir.glsl
index 72ca17c..3ace889 100644
--- a/test/tint/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.ir.glsl
@@ -1,11 +1,133 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  ivec3 v;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S U;
+void f() {
+  ivec3 v = U.v;
+  int x = U.v.x;
+  int y = U.v.y;
+  int z = U.v.z;
+  ivec2 xx = U.v.xx;
+  ivec2 xy = U.v.xy;
+  ivec2 xz = U.v.xz;
+  ivec2 yx = U.v.yx;
+  ivec2 yy = U.v.yy;
+  ivec2 yz = U.v.yz;
+  ivec2 zx = U.v.zx;
+  ivec2 zy = U.v.zy;
+  ivec2 zz = U.v.zz;
+  ivec3 xxx = U.v.xxx;
+  ivec3 xxy = U.v.xxy;
+  ivec3 xxz = U.v.xxz;
+  ivec3 xyx = U.v.xyx;
+  ivec3 xyy = U.v.xyy;
+  ivec3 xyz = U.v.xyz;
+  ivec3 xzx = U.v.xzx;
+  ivec3 xzy = U.v.xzy;
+  ivec3 xzz = U.v.xzz;
+  ivec3 yxx = U.v.yxx;
+  ivec3 yxy = U.v.yxy;
+  ivec3 yxz = U.v.yxz;
+  ivec3 yyx = U.v.yyx;
+  ivec3 yyy = U.v.yyy;
+  ivec3 yyz = U.v.yyz;
+  ivec3 yzx = U.v.yzx;
+  ivec3 yzy = U.v.yzy;
+  ivec3 yzz = U.v.yzz;
+  ivec3 zxx = U.v.zxx;
+  ivec3 zxy = U.v.zxy;
+  ivec3 zxz = U.v.zxz;
+  ivec3 zyx = U.v.zyx;
+  ivec3 zyy = U.v.zyy;
+  ivec3 zyz = U.v.zyz;
+  ivec3 zzx = U.v.zzx;
+  ivec3 zzy = U.v.zzy;
+  ivec3 zzz = U.v.zzz;
+  ivec4 xxxx = U.v.xxxx;
+  ivec4 xxxy = U.v.xxxy;
+  ivec4 xxxz = U.v.xxxz;
+  ivec4 xxyx = U.v.xxyx;
+  ivec4 xxyy = U.v.xxyy;
+  ivec4 xxyz = U.v.xxyz;
+  ivec4 xxzx = U.v.xxzx;
+  ivec4 xxzy = U.v.xxzy;
+  ivec4 xxzz = U.v.xxzz;
+  ivec4 xyxx = U.v.xyxx;
+  ivec4 xyxy = U.v.xyxy;
+  ivec4 xyxz = U.v.xyxz;
+  ivec4 xyyx = U.v.xyyx;
+  ivec4 xyyy = U.v.xyyy;
+  ivec4 xyyz = U.v.xyyz;
+  ivec4 xyzx = U.v.xyzx;
+  ivec4 xyzy = U.v.xyzy;
+  ivec4 xyzz = U.v.xyzz;
+  ivec4 xzxx = U.v.xzxx;
+  ivec4 xzxy = U.v.xzxy;
+  ivec4 xzxz = U.v.xzxz;
+  ivec4 xzyx = U.v.xzyx;
+  ivec4 xzyy = U.v.xzyy;
+  ivec4 xzyz = U.v.xzyz;
+  ivec4 xzzx = U.v.xzzx;
+  ivec4 xzzy = U.v.xzzy;
+  ivec4 xzzz = U.v.xzzz;
+  ivec4 yxxx = U.v.yxxx;
+  ivec4 yxxy = U.v.yxxy;
+  ivec4 yxxz = U.v.yxxz;
+  ivec4 yxyx = U.v.yxyx;
+  ivec4 yxyy = U.v.yxyy;
+  ivec4 yxyz = U.v.yxyz;
+  ivec4 yxzx = U.v.yxzx;
+  ivec4 yxzy = U.v.yxzy;
+  ivec4 yxzz = U.v.yxzz;
+  ivec4 yyxx = U.v.yyxx;
+  ivec4 yyxy = U.v.yyxy;
+  ivec4 yyxz = U.v.yyxz;
+  ivec4 yyyx = U.v.yyyx;
+  ivec4 yyyy = U.v.yyyy;
+  ivec4 yyyz = U.v.yyyz;
+  ivec4 yyzx = U.v.yyzx;
+  ivec4 yyzy = U.v.yyzy;
+  ivec4 yyzz = U.v.yyzz;
+  ivec4 yzxx = U.v.yzxx;
+  ivec4 yzxy = U.v.yzxy;
+  ivec4 yzxz = U.v.yzxz;
+  ivec4 yzyx = U.v.yzyx;
+  ivec4 yzyy = U.v.yzyy;
+  ivec4 yzyz = U.v.yzyz;
+  ivec4 yzzx = U.v.yzzx;
+  ivec4 yzzy = U.v.yzzy;
+  ivec4 yzzz = U.v.yzzz;
+  ivec4 zxxx = U.v.zxxx;
+  ivec4 zxxy = U.v.zxxy;
+  ivec4 zxxz = U.v.zxxz;
+  ivec4 zxyx = U.v.zxyx;
+  ivec4 zxyy = U.v.zxyy;
+  ivec4 zxyz = U.v.zxyz;
+  ivec4 zxzx = U.v.zxzx;
+  ivec4 zxzy = U.v.zxzy;
+  ivec4 zxzz = U.v.zxzz;
+  ivec4 zyxx = U.v.zyxx;
+  ivec4 zyxy = U.v.zyxy;
+  ivec4 zyxz = U.v.zyxz;
+  ivec4 zyyx = U.v.zyyx;
+  ivec4 zyyy = U.v.zyyy;
+  ivec4 zyyz = U.v.zyyz;
+  ivec4 zyzx = U.v.zyzx;
+  ivec4 zyzy = U.v.zyzy;
+  ivec4 zyzz = U.v.zyzz;
+  ivec4 zzxx = U.v.zzxx;
+  ivec4 zzxy = U.v.zzxy;
+  ivec4 zzxz = U.v.zzxz;
+  ivec4 zzyx = U.v.zzyx;
+  ivec4 zzyy = U.v.zzyy;
+  ivec4 zzyz = U.v.zzyz;
+  ivec4 zzzx = U.v.zzzx;
+  ivec4 zzzy = U.v.zzzy;
+  ivec4 zzzz = U.v.zzzz;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.ir.glsl b/test/tint/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.ir.glsl
index 72ca17c..580ad7a 100644
--- a/test/tint/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.ir.glsl
@@ -1,11 +1,133 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  uvec3 v;
+};
 
-tint executable returned error: signal: illegal instruction
+uniform S U;
+void f() {
+  uvec3 v = U.v;
+  uint x = U.v.x;
+  uint y = U.v.y;
+  uint z = U.v.z;
+  uvec2 xx = U.v.xx;
+  uvec2 xy = U.v.xy;
+  uvec2 xz = U.v.xz;
+  uvec2 yx = U.v.yx;
+  uvec2 yy = U.v.yy;
+  uvec2 yz = U.v.yz;
+  uvec2 zx = U.v.zx;
+  uvec2 zy = U.v.zy;
+  uvec2 zz = U.v.zz;
+  uvec3 xxx = U.v.xxx;
+  uvec3 xxy = U.v.xxy;
+  uvec3 xxz = U.v.xxz;
+  uvec3 xyx = U.v.xyx;
+  uvec3 xyy = U.v.xyy;
+  uvec3 xyz = U.v.xyz;
+  uvec3 xzx = U.v.xzx;
+  uvec3 xzy = U.v.xzy;
+  uvec3 xzz = U.v.xzz;
+  uvec3 yxx = U.v.yxx;
+  uvec3 yxy = U.v.yxy;
+  uvec3 yxz = U.v.yxz;
+  uvec3 yyx = U.v.yyx;
+  uvec3 yyy = U.v.yyy;
+  uvec3 yyz = U.v.yyz;
+  uvec3 yzx = U.v.yzx;
+  uvec3 yzy = U.v.yzy;
+  uvec3 yzz = U.v.yzz;
+  uvec3 zxx = U.v.zxx;
+  uvec3 zxy = U.v.zxy;
+  uvec3 zxz = U.v.zxz;
+  uvec3 zyx = U.v.zyx;
+  uvec3 zyy = U.v.zyy;
+  uvec3 zyz = U.v.zyz;
+  uvec3 zzx = U.v.zzx;
+  uvec3 zzy = U.v.zzy;
+  uvec3 zzz = U.v.zzz;
+  uvec4 xxxx = U.v.xxxx;
+  uvec4 xxxy = U.v.xxxy;
+  uvec4 xxxz = U.v.xxxz;
+  uvec4 xxyx = U.v.xxyx;
+  uvec4 xxyy = U.v.xxyy;
+  uvec4 xxyz = U.v.xxyz;
+  uvec4 xxzx = U.v.xxzx;
+  uvec4 xxzy = U.v.xxzy;
+  uvec4 xxzz = U.v.xxzz;
+  uvec4 xyxx = U.v.xyxx;
+  uvec4 xyxy = U.v.xyxy;
+  uvec4 xyxz = U.v.xyxz;
+  uvec4 xyyx = U.v.xyyx;
+  uvec4 xyyy = U.v.xyyy;
+  uvec4 xyyz = U.v.xyyz;
+  uvec4 xyzx = U.v.xyzx;
+  uvec4 xyzy = U.v.xyzy;
+  uvec4 xyzz = U.v.xyzz;
+  uvec4 xzxx = U.v.xzxx;
+  uvec4 xzxy = U.v.xzxy;
+  uvec4 xzxz = U.v.xzxz;
+  uvec4 xzyx = U.v.xzyx;
+  uvec4 xzyy = U.v.xzyy;
+  uvec4 xzyz = U.v.xzyz;
+  uvec4 xzzx = U.v.xzzx;
+  uvec4 xzzy = U.v.xzzy;
+  uvec4 xzzz = U.v.xzzz;
+  uvec4 yxxx = U.v.yxxx;
+  uvec4 yxxy = U.v.yxxy;
+  uvec4 yxxz = U.v.yxxz;
+  uvec4 yxyx = U.v.yxyx;
+  uvec4 yxyy = U.v.yxyy;
+  uvec4 yxyz = U.v.yxyz;
+  uvec4 yxzx = U.v.yxzx;
+  uvec4 yxzy = U.v.yxzy;
+  uvec4 yxzz = U.v.yxzz;
+  uvec4 yyxx = U.v.yyxx;
+  uvec4 yyxy = U.v.yyxy;
+  uvec4 yyxz = U.v.yyxz;
+  uvec4 yyyx = U.v.yyyx;
+  uvec4 yyyy = U.v.yyyy;
+  uvec4 yyyz = U.v.yyyz;
+  uvec4 yyzx = U.v.yyzx;
+  uvec4 yyzy = U.v.yyzy;
+  uvec4 yyzz = U.v.yyzz;
+  uvec4 yzxx = U.v.yzxx;
+  uvec4 yzxy = U.v.yzxy;
+  uvec4 yzxz = U.v.yzxz;
+  uvec4 yzyx = U.v.yzyx;
+  uvec4 yzyy = U.v.yzyy;
+  uvec4 yzyz = U.v.yzyz;
+  uvec4 yzzx = U.v.yzzx;
+  uvec4 yzzy = U.v.yzzy;
+  uvec4 yzzz = U.v.yzzz;
+  uvec4 zxxx = U.v.zxxx;
+  uvec4 zxxy = U.v.zxxy;
+  uvec4 zxxz = U.v.zxxz;
+  uvec4 zxyx = U.v.zxyx;
+  uvec4 zxyy = U.v.zxyy;
+  uvec4 zxyz = U.v.zxyz;
+  uvec4 zxzx = U.v.zxzx;
+  uvec4 zxzy = U.v.zxzy;
+  uvec4 zxzz = U.v.zxzz;
+  uvec4 zyxx = U.v.zyxx;
+  uvec4 zyxy = U.v.zyxy;
+  uvec4 zyxz = U.v.zyxz;
+  uvec4 zyyx = U.v.zyyx;
+  uvec4 zyyy = U.v.zyyy;
+  uvec4 zyyz = U.v.zyyz;
+  uvec4 zyzx = U.v.zyzx;
+  uvec4 zyzy = U.v.zyzy;
+  uvec4 zyzz = U.v.zyzz;
+  uvec4 zzxx = U.v.zzxx;
+  uvec4 zzxy = U.v.zzxy;
+  uvec4 zzxz = U.v.zzxz;
+  uvec4 zzyx = U.v.zzyx;
+  uvec4 zzyy = U.v.zzyy;
+  uvec4 zzyz = U.v.zzyz;
+  uvec4 zzzx = U.v.zzzx;
+  uvec4 zzzy = U.v.zzzy;
+  uvec4 zzzz = U.v.zzzz;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/swizzle/read/swizzle.wgsl.expected.ir.glsl b/test/tint/expressions/swizzle/read/swizzle.wgsl.expected.ir.glsl
index 4a20bc7..1fa74ec 100644
--- a/test/tint/expressions/swizzle/read/swizzle.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/swizzle/read/swizzle.wgsl.expected.ir.glsl
@@ -1,11 +1,16 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  vec3 val[3];
+};
 
-tint executable returned error: signal: illegal instruction
+void a() {
+  ivec4 a_1 = ivec4(0);
+  int b = a_1.x;
+  ivec4 c = a_1.zzyy;
+  S d = S(vec3[3](vec3(0.0f), vec3(0.0f), vec3(0.0f)));
+  vec3 e = d.val[2].yzx;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/swizzle/read/vec3/f16.wgsl.expected.ir.glsl b/test/tint/expressions/swizzle/read/vec3/f16.wgsl.expected.ir.glsl
index 72ca17c..71d5b28 100644
--- a/test/tint/expressions/swizzle/read/vec3/f16.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/swizzle/read/vec3/f16.wgsl.expected.ir.glsl
@@ -1,11 +1,134 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  f16vec3 v;
+};
 
-tint executable returned error: signal: illegal instruction
+S P = S(f16vec3(0.0hf));
+void f() {
+  f16vec3 v = P.v;
+  float16_t x = P.v.x;
+  float16_t y = P.v.y;
+  float16_t z = P.v.z;
+  f16vec2 xx = P.v.xx;
+  f16vec2 xy = P.v.xy;
+  f16vec2 xz = P.v.xz;
+  f16vec2 yx = P.v.yx;
+  f16vec2 yy = P.v.yy;
+  f16vec2 yz = P.v.yz;
+  f16vec2 zx = P.v.zx;
+  f16vec2 zy = P.v.zy;
+  f16vec2 zz = P.v.zz;
+  f16vec3 xxx = P.v.xxx;
+  f16vec3 xxy = P.v.xxy;
+  f16vec3 xxz = P.v.xxz;
+  f16vec3 xyx = P.v.xyx;
+  f16vec3 xyy = P.v.xyy;
+  f16vec3 xyz = P.v.xyz;
+  f16vec3 xzx = P.v.xzx;
+  f16vec3 xzy = P.v.xzy;
+  f16vec3 xzz = P.v.xzz;
+  f16vec3 yxx = P.v.yxx;
+  f16vec3 yxy = P.v.yxy;
+  f16vec3 yxz = P.v.yxz;
+  f16vec3 yyx = P.v.yyx;
+  f16vec3 yyy = P.v.yyy;
+  f16vec3 yyz = P.v.yyz;
+  f16vec3 yzx = P.v.yzx;
+  f16vec3 yzy = P.v.yzy;
+  f16vec3 yzz = P.v.yzz;
+  f16vec3 zxx = P.v.zxx;
+  f16vec3 zxy = P.v.zxy;
+  f16vec3 zxz = P.v.zxz;
+  f16vec3 zyx = P.v.zyx;
+  f16vec3 zyy = P.v.zyy;
+  f16vec3 zyz = P.v.zyz;
+  f16vec3 zzx = P.v.zzx;
+  f16vec3 zzy = P.v.zzy;
+  f16vec3 zzz = P.v.zzz;
+  f16vec4 xxxx = P.v.xxxx;
+  f16vec4 xxxy = P.v.xxxy;
+  f16vec4 xxxz = P.v.xxxz;
+  f16vec4 xxyx = P.v.xxyx;
+  f16vec4 xxyy = P.v.xxyy;
+  f16vec4 xxyz = P.v.xxyz;
+  f16vec4 xxzx = P.v.xxzx;
+  f16vec4 xxzy = P.v.xxzy;
+  f16vec4 xxzz = P.v.xxzz;
+  f16vec4 xyxx = P.v.xyxx;
+  f16vec4 xyxy = P.v.xyxy;
+  f16vec4 xyxz = P.v.xyxz;
+  f16vec4 xyyx = P.v.xyyx;
+  f16vec4 xyyy = P.v.xyyy;
+  f16vec4 xyyz = P.v.xyyz;
+  f16vec4 xyzx = P.v.xyzx;
+  f16vec4 xyzy = P.v.xyzy;
+  f16vec4 xyzz = P.v.xyzz;
+  f16vec4 xzxx = P.v.xzxx;
+  f16vec4 xzxy = P.v.xzxy;
+  f16vec4 xzxz = P.v.xzxz;
+  f16vec4 xzyx = P.v.xzyx;
+  f16vec4 xzyy = P.v.xzyy;
+  f16vec4 xzyz = P.v.xzyz;
+  f16vec4 xzzx = P.v.xzzx;
+  f16vec4 xzzy = P.v.xzzy;
+  f16vec4 xzzz = P.v.xzzz;
+  f16vec4 yxxx = P.v.yxxx;
+  f16vec4 yxxy = P.v.yxxy;
+  f16vec4 yxxz = P.v.yxxz;
+  f16vec4 yxyx = P.v.yxyx;
+  f16vec4 yxyy = P.v.yxyy;
+  f16vec4 yxyz = P.v.yxyz;
+  f16vec4 yxzx = P.v.yxzx;
+  f16vec4 yxzy = P.v.yxzy;
+  f16vec4 yxzz = P.v.yxzz;
+  f16vec4 yyxx = P.v.yyxx;
+  f16vec4 yyxy = P.v.yyxy;
+  f16vec4 yyxz = P.v.yyxz;
+  f16vec4 yyyx = P.v.yyyx;
+  f16vec4 yyyy = P.v.yyyy;
+  f16vec4 yyyz = P.v.yyyz;
+  f16vec4 yyzx = P.v.yyzx;
+  f16vec4 yyzy = P.v.yyzy;
+  f16vec4 yyzz = P.v.yyzz;
+  f16vec4 yzxx = P.v.yzxx;
+  f16vec4 yzxy = P.v.yzxy;
+  f16vec4 yzxz = P.v.yzxz;
+  f16vec4 yzyx = P.v.yzyx;
+  f16vec4 yzyy = P.v.yzyy;
+  f16vec4 yzyz = P.v.yzyz;
+  f16vec4 yzzx = P.v.yzzx;
+  f16vec4 yzzy = P.v.yzzy;
+  f16vec4 yzzz = P.v.yzzz;
+  f16vec4 zxxx = P.v.zxxx;
+  f16vec4 zxxy = P.v.zxxy;
+  f16vec4 zxxz = P.v.zxxz;
+  f16vec4 zxyx = P.v.zxyx;
+  f16vec4 zxyy = P.v.zxyy;
+  f16vec4 zxyz = P.v.zxyz;
+  f16vec4 zxzx = P.v.zxzx;
+  f16vec4 zxzy = P.v.zxzy;
+  f16vec4 zxzz = P.v.zxzz;
+  f16vec4 zyxx = P.v.zyxx;
+  f16vec4 zyxy = P.v.zyxy;
+  f16vec4 zyxz = P.v.zyxz;
+  f16vec4 zyyx = P.v.zyyx;
+  f16vec4 zyyy = P.v.zyyy;
+  f16vec4 zyyz = P.v.zyyz;
+  f16vec4 zyzx = P.v.zyzx;
+  f16vec4 zyzy = P.v.zyzy;
+  f16vec4 zyzz = P.v.zyzz;
+  f16vec4 zzxx = P.v.zzxx;
+  f16vec4 zzxy = P.v.zzxy;
+  f16vec4 zzxz = P.v.zzxz;
+  f16vec4 zzyx = P.v.zzyx;
+  f16vec4 zzyy = P.v.zzyy;
+  f16vec4 zzyz = P.v.zzyz;
+  f16vec4 zzzx = P.v.zzzx;
+  f16vec4 zzzy = P.v.zzzy;
+  f16vec4 zzzz = P.v.zzzz;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/swizzle/read/vec3/f32.wgsl.expected.ir.glsl b/test/tint/expressions/swizzle/read/vec3/f32.wgsl.expected.ir.glsl
index 72ca17c..b266daa 100644
--- a/test/tint/expressions/swizzle/read/vec3/f32.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/swizzle/read/vec3/f32.wgsl.expected.ir.glsl
@@ -1,11 +1,133 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  vec3 v;
+};
 
-tint executable returned error: signal: illegal instruction
+S P = S(vec3(0.0f));
+void f() {
+  vec3 v = P.v;
+  float x = P.v.x;
+  float y = P.v.y;
+  float z = P.v.z;
+  vec2 xx = P.v.xx;
+  vec2 xy = P.v.xy;
+  vec2 xz = P.v.xz;
+  vec2 yx = P.v.yx;
+  vec2 yy = P.v.yy;
+  vec2 yz = P.v.yz;
+  vec2 zx = P.v.zx;
+  vec2 zy = P.v.zy;
+  vec2 zz = P.v.zz;
+  vec3 xxx = P.v.xxx;
+  vec3 xxy = P.v.xxy;
+  vec3 xxz = P.v.xxz;
+  vec3 xyx = P.v.xyx;
+  vec3 xyy = P.v.xyy;
+  vec3 xyz = P.v.xyz;
+  vec3 xzx = P.v.xzx;
+  vec3 xzy = P.v.xzy;
+  vec3 xzz = P.v.xzz;
+  vec3 yxx = P.v.yxx;
+  vec3 yxy = P.v.yxy;
+  vec3 yxz = P.v.yxz;
+  vec3 yyx = P.v.yyx;
+  vec3 yyy = P.v.yyy;
+  vec3 yyz = P.v.yyz;
+  vec3 yzx = P.v.yzx;
+  vec3 yzy = P.v.yzy;
+  vec3 yzz = P.v.yzz;
+  vec3 zxx = P.v.zxx;
+  vec3 zxy = P.v.zxy;
+  vec3 zxz = P.v.zxz;
+  vec3 zyx = P.v.zyx;
+  vec3 zyy = P.v.zyy;
+  vec3 zyz = P.v.zyz;
+  vec3 zzx = P.v.zzx;
+  vec3 zzy = P.v.zzy;
+  vec3 zzz = P.v.zzz;
+  vec4 xxxx = P.v.xxxx;
+  vec4 xxxy = P.v.xxxy;
+  vec4 xxxz = P.v.xxxz;
+  vec4 xxyx = P.v.xxyx;
+  vec4 xxyy = P.v.xxyy;
+  vec4 xxyz = P.v.xxyz;
+  vec4 xxzx = P.v.xxzx;
+  vec4 xxzy = P.v.xxzy;
+  vec4 xxzz = P.v.xxzz;
+  vec4 xyxx = P.v.xyxx;
+  vec4 xyxy = P.v.xyxy;
+  vec4 xyxz = P.v.xyxz;
+  vec4 xyyx = P.v.xyyx;
+  vec4 xyyy = P.v.xyyy;
+  vec4 xyyz = P.v.xyyz;
+  vec4 xyzx = P.v.xyzx;
+  vec4 xyzy = P.v.xyzy;
+  vec4 xyzz = P.v.xyzz;
+  vec4 xzxx = P.v.xzxx;
+  vec4 xzxy = P.v.xzxy;
+  vec4 xzxz = P.v.xzxz;
+  vec4 xzyx = P.v.xzyx;
+  vec4 xzyy = P.v.xzyy;
+  vec4 xzyz = P.v.xzyz;
+  vec4 xzzx = P.v.xzzx;
+  vec4 xzzy = P.v.xzzy;
+  vec4 xzzz = P.v.xzzz;
+  vec4 yxxx = P.v.yxxx;
+  vec4 yxxy = P.v.yxxy;
+  vec4 yxxz = P.v.yxxz;
+  vec4 yxyx = P.v.yxyx;
+  vec4 yxyy = P.v.yxyy;
+  vec4 yxyz = P.v.yxyz;
+  vec4 yxzx = P.v.yxzx;
+  vec4 yxzy = P.v.yxzy;
+  vec4 yxzz = P.v.yxzz;
+  vec4 yyxx = P.v.yyxx;
+  vec4 yyxy = P.v.yyxy;
+  vec4 yyxz = P.v.yyxz;
+  vec4 yyyx = P.v.yyyx;
+  vec4 yyyy = P.v.yyyy;
+  vec4 yyyz = P.v.yyyz;
+  vec4 yyzx = P.v.yyzx;
+  vec4 yyzy = P.v.yyzy;
+  vec4 yyzz = P.v.yyzz;
+  vec4 yzxx = P.v.yzxx;
+  vec4 yzxy = P.v.yzxy;
+  vec4 yzxz = P.v.yzxz;
+  vec4 yzyx = P.v.yzyx;
+  vec4 yzyy = P.v.yzyy;
+  vec4 yzyz = P.v.yzyz;
+  vec4 yzzx = P.v.yzzx;
+  vec4 yzzy = P.v.yzzy;
+  vec4 yzzz = P.v.yzzz;
+  vec4 zxxx = P.v.zxxx;
+  vec4 zxxy = P.v.zxxy;
+  vec4 zxxz = P.v.zxxz;
+  vec4 zxyx = P.v.zxyx;
+  vec4 zxyy = P.v.zxyy;
+  vec4 zxyz = P.v.zxyz;
+  vec4 zxzx = P.v.zxzx;
+  vec4 zxzy = P.v.zxzy;
+  vec4 zxzz = P.v.zxzz;
+  vec4 zyxx = P.v.zyxx;
+  vec4 zyxy = P.v.zyxy;
+  vec4 zyxz = P.v.zyxz;
+  vec4 zyyx = P.v.zyyx;
+  vec4 zyyy = P.v.zyyy;
+  vec4 zyyz = P.v.zyyz;
+  vec4 zyzx = P.v.zyzx;
+  vec4 zyzy = P.v.zyzy;
+  vec4 zyzz = P.v.zyzz;
+  vec4 zzxx = P.v.zzxx;
+  vec4 zzxy = P.v.zzxy;
+  vec4 zzxz = P.v.zzxz;
+  vec4 zzyx = P.v.zzyx;
+  vec4 zzyy = P.v.zzyy;
+  vec4 zzyz = P.v.zzyz;
+  vec4 zzzx = P.v.zzzx;
+  vec4 zzzy = P.v.zzzy;
+  vec4 zzzz = P.v.zzzz;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/swizzle/read/vec3/i32.wgsl.expected.ir.glsl b/test/tint/expressions/swizzle/read/vec3/i32.wgsl.expected.ir.glsl
index 72ca17c..b742043 100644
--- a/test/tint/expressions/swizzle/read/vec3/i32.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/swizzle/read/vec3/i32.wgsl.expected.ir.glsl
@@ -1,11 +1,133 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  ivec3 v;
+};
 
-tint executable returned error: signal: illegal instruction
+S P = S(ivec3(0));
+void f() {
+  ivec3 v = P.v;
+  int x = P.v.x;
+  int y = P.v.y;
+  int z = P.v.z;
+  ivec2 xx = P.v.xx;
+  ivec2 xy = P.v.xy;
+  ivec2 xz = P.v.xz;
+  ivec2 yx = P.v.yx;
+  ivec2 yy = P.v.yy;
+  ivec2 yz = P.v.yz;
+  ivec2 zx = P.v.zx;
+  ivec2 zy = P.v.zy;
+  ivec2 zz = P.v.zz;
+  ivec3 xxx = P.v.xxx;
+  ivec3 xxy = P.v.xxy;
+  ivec3 xxz = P.v.xxz;
+  ivec3 xyx = P.v.xyx;
+  ivec3 xyy = P.v.xyy;
+  ivec3 xyz = P.v.xyz;
+  ivec3 xzx = P.v.xzx;
+  ivec3 xzy = P.v.xzy;
+  ivec3 xzz = P.v.xzz;
+  ivec3 yxx = P.v.yxx;
+  ivec3 yxy = P.v.yxy;
+  ivec3 yxz = P.v.yxz;
+  ivec3 yyx = P.v.yyx;
+  ivec3 yyy = P.v.yyy;
+  ivec3 yyz = P.v.yyz;
+  ivec3 yzx = P.v.yzx;
+  ivec3 yzy = P.v.yzy;
+  ivec3 yzz = P.v.yzz;
+  ivec3 zxx = P.v.zxx;
+  ivec3 zxy = P.v.zxy;
+  ivec3 zxz = P.v.zxz;
+  ivec3 zyx = P.v.zyx;
+  ivec3 zyy = P.v.zyy;
+  ivec3 zyz = P.v.zyz;
+  ivec3 zzx = P.v.zzx;
+  ivec3 zzy = P.v.zzy;
+  ivec3 zzz = P.v.zzz;
+  ivec4 xxxx = P.v.xxxx;
+  ivec4 xxxy = P.v.xxxy;
+  ivec4 xxxz = P.v.xxxz;
+  ivec4 xxyx = P.v.xxyx;
+  ivec4 xxyy = P.v.xxyy;
+  ivec4 xxyz = P.v.xxyz;
+  ivec4 xxzx = P.v.xxzx;
+  ivec4 xxzy = P.v.xxzy;
+  ivec4 xxzz = P.v.xxzz;
+  ivec4 xyxx = P.v.xyxx;
+  ivec4 xyxy = P.v.xyxy;
+  ivec4 xyxz = P.v.xyxz;
+  ivec4 xyyx = P.v.xyyx;
+  ivec4 xyyy = P.v.xyyy;
+  ivec4 xyyz = P.v.xyyz;
+  ivec4 xyzx = P.v.xyzx;
+  ivec4 xyzy = P.v.xyzy;
+  ivec4 xyzz = P.v.xyzz;
+  ivec4 xzxx = P.v.xzxx;
+  ivec4 xzxy = P.v.xzxy;
+  ivec4 xzxz = P.v.xzxz;
+  ivec4 xzyx = P.v.xzyx;
+  ivec4 xzyy = P.v.xzyy;
+  ivec4 xzyz = P.v.xzyz;
+  ivec4 xzzx = P.v.xzzx;
+  ivec4 xzzy = P.v.xzzy;
+  ivec4 xzzz = P.v.xzzz;
+  ivec4 yxxx = P.v.yxxx;
+  ivec4 yxxy = P.v.yxxy;
+  ivec4 yxxz = P.v.yxxz;
+  ivec4 yxyx = P.v.yxyx;
+  ivec4 yxyy = P.v.yxyy;
+  ivec4 yxyz = P.v.yxyz;
+  ivec4 yxzx = P.v.yxzx;
+  ivec4 yxzy = P.v.yxzy;
+  ivec4 yxzz = P.v.yxzz;
+  ivec4 yyxx = P.v.yyxx;
+  ivec4 yyxy = P.v.yyxy;
+  ivec4 yyxz = P.v.yyxz;
+  ivec4 yyyx = P.v.yyyx;
+  ivec4 yyyy = P.v.yyyy;
+  ivec4 yyyz = P.v.yyyz;
+  ivec4 yyzx = P.v.yyzx;
+  ivec4 yyzy = P.v.yyzy;
+  ivec4 yyzz = P.v.yyzz;
+  ivec4 yzxx = P.v.yzxx;
+  ivec4 yzxy = P.v.yzxy;
+  ivec4 yzxz = P.v.yzxz;
+  ivec4 yzyx = P.v.yzyx;
+  ivec4 yzyy = P.v.yzyy;
+  ivec4 yzyz = P.v.yzyz;
+  ivec4 yzzx = P.v.yzzx;
+  ivec4 yzzy = P.v.yzzy;
+  ivec4 yzzz = P.v.yzzz;
+  ivec4 zxxx = P.v.zxxx;
+  ivec4 zxxy = P.v.zxxy;
+  ivec4 zxxz = P.v.zxxz;
+  ivec4 zxyx = P.v.zxyx;
+  ivec4 zxyy = P.v.zxyy;
+  ivec4 zxyz = P.v.zxyz;
+  ivec4 zxzx = P.v.zxzx;
+  ivec4 zxzy = P.v.zxzy;
+  ivec4 zxzz = P.v.zxzz;
+  ivec4 zyxx = P.v.zyxx;
+  ivec4 zyxy = P.v.zyxy;
+  ivec4 zyxz = P.v.zyxz;
+  ivec4 zyyx = P.v.zyyx;
+  ivec4 zyyy = P.v.zyyy;
+  ivec4 zyyz = P.v.zyyz;
+  ivec4 zyzx = P.v.zyzx;
+  ivec4 zyzy = P.v.zyzy;
+  ivec4 zyzz = P.v.zyzz;
+  ivec4 zzxx = P.v.zzxx;
+  ivec4 zzxy = P.v.zzxy;
+  ivec4 zzxz = P.v.zzxz;
+  ivec4 zzyx = P.v.zzyx;
+  ivec4 zzyy = P.v.zzyy;
+  ivec4 zzyz = P.v.zzyz;
+  ivec4 zzzx = P.v.zzzx;
+  ivec4 zzzy = P.v.zzzy;
+  ivec4 zzzz = P.v.zzzz;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/swizzle/read/vec3/u32.wgsl.expected.ir.glsl b/test/tint/expressions/swizzle/read/vec3/u32.wgsl.expected.ir.glsl
index 72ca17c..c688473 100644
--- a/test/tint/expressions/swizzle/read/vec3/u32.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/swizzle/read/vec3/u32.wgsl.expected.ir.glsl
@@ -1,11 +1,133 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  uvec3 v;
+};
 
-tint executable returned error: signal: illegal instruction
+S P = S(uvec3(0u));
+void f() {
+  uvec3 v = P.v;
+  uint x = P.v.x;
+  uint y = P.v.y;
+  uint z = P.v.z;
+  uvec2 xx = P.v.xx;
+  uvec2 xy = P.v.xy;
+  uvec2 xz = P.v.xz;
+  uvec2 yx = P.v.yx;
+  uvec2 yy = P.v.yy;
+  uvec2 yz = P.v.yz;
+  uvec2 zx = P.v.zx;
+  uvec2 zy = P.v.zy;
+  uvec2 zz = P.v.zz;
+  uvec3 xxx = P.v.xxx;
+  uvec3 xxy = P.v.xxy;
+  uvec3 xxz = P.v.xxz;
+  uvec3 xyx = P.v.xyx;
+  uvec3 xyy = P.v.xyy;
+  uvec3 xyz = P.v.xyz;
+  uvec3 xzx = P.v.xzx;
+  uvec3 xzy = P.v.xzy;
+  uvec3 xzz = P.v.xzz;
+  uvec3 yxx = P.v.yxx;
+  uvec3 yxy = P.v.yxy;
+  uvec3 yxz = P.v.yxz;
+  uvec3 yyx = P.v.yyx;
+  uvec3 yyy = P.v.yyy;
+  uvec3 yyz = P.v.yyz;
+  uvec3 yzx = P.v.yzx;
+  uvec3 yzy = P.v.yzy;
+  uvec3 yzz = P.v.yzz;
+  uvec3 zxx = P.v.zxx;
+  uvec3 zxy = P.v.zxy;
+  uvec3 zxz = P.v.zxz;
+  uvec3 zyx = P.v.zyx;
+  uvec3 zyy = P.v.zyy;
+  uvec3 zyz = P.v.zyz;
+  uvec3 zzx = P.v.zzx;
+  uvec3 zzy = P.v.zzy;
+  uvec3 zzz = P.v.zzz;
+  uvec4 xxxx = P.v.xxxx;
+  uvec4 xxxy = P.v.xxxy;
+  uvec4 xxxz = P.v.xxxz;
+  uvec4 xxyx = P.v.xxyx;
+  uvec4 xxyy = P.v.xxyy;
+  uvec4 xxyz = P.v.xxyz;
+  uvec4 xxzx = P.v.xxzx;
+  uvec4 xxzy = P.v.xxzy;
+  uvec4 xxzz = P.v.xxzz;
+  uvec4 xyxx = P.v.xyxx;
+  uvec4 xyxy = P.v.xyxy;
+  uvec4 xyxz = P.v.xyxz;
+  uvec4 xyyx = P.v.xyyx;
+  uvec4 xyyy = P.v.xyyy;
+  uvec4 xyyz = P.v.xyyz;
+  uvec4 xyzx = P.v.xyzx;
+  uvec4 xyzy = P.v.xyzy;
+  uvec4 xyzz = P.v.xyzz;
+  uvec4 xzxx = P.v.xzxx;
+  uvec4 xzxy = P.v.xzxy;
+  uvec4 xzxz = P.v.xzxz;
+  uvec4 xzyx = P.v.xzyx;
+  uvec4 xzyy = P.v.xzyy;
+  uvec4 xzyz = P.v.xzyz;
+  uvec4 xzzx = P.v.xzzx;
+  uvec4 xzzy = P.v.xzzy;
+  uvec4 xzzz = P.v.xzzz;
+  uvec4 yxxx = P.v.yxxx;
+  uvec4 yxxy = P.v.yxxy;
+  uvec4 yxxz = P.v.yxxz;
+  uvec4 yxyx = P.v.yxyx;
+  uvec4 yxyy = P.v.yxyy;
+  uvec4 yxyz = P.v.yxyz;
+  uvec4 yxzx = P.v.yxzx;
+  uvec4 yxzy = P.v.yxzy;
+  uvec4 yxzz = P.v.yxzz;
+  uvec4 yyxx = P.v.yyxx;
+  uvec4 yyxy = P.v.yyxy;
+  uvec4 yyxz = P.v.yyxz;
+  uvec4 yyyx = P.v.yyyx;
+  uvec4 yyyy = P.v.yyyy;
+  uvec4 yyyz = P.v.yyyz;
+  uvec4 yyzx = P.v.yyzx;
+  uvec4 yyzy = P.v.yyzy;
+  uvec4 yyzz = P.v.yyzz;
+  uvec4 yzxx = P.v.yzxx;
+  uvec4 yzxy = P.v.yzxy;
+  uvec4 yzxz = P.v.yzxz;
+  uvec4 yzyx = P.v.yzyx;
+  uvec4 yzyy = P.v.yzyy;
+  uvec4 yzyz = P.v.yzyz;
+  uvec4 yzzx = P.v.yzzx;
+  uvec4 yzzy = P.v.yzzy;
+  uvec4 yzzz = P.v.yzzz;
+  uvec4 zxxx = P.v.zxxx;
+  uvec4 zxxy = P.v.zxxy;
+  uvec4 zxxz = P.v.zxxz;
+  uvec4 zxyx = P.v.zxyx;
+  uvec4 zxyy = P.v.zxyy;
+  uvec4 zxyz = P.v.zxyz;
+  uvec4 zxzx = P.v.zxzx;
+  uvec4 zxzy = P.v.zxzy;
+  uvec4 zxzz = P.v.zxzz;
+  uvec4 zyxx = P.v.zyxx;
+  uvec4 zyxy = P.v.zyxy;
+  uvec4 zyxz = P.v.zyxz;
+  uvec4 zyyx = P.v.zyyx;
+  uvec4 zyyy = P.v.zyyy;
+  uvec4 zyyz = P.v.zyyz;
+  uvec4 zyzx = P.v.zyzx;
+  uvec4 zyzy = P.v.zyzy;
+  uvec4 zyzz = P.v.zyzz;
+  uvec4 zzxx = P.v.zzxx;
+  uvec4 zzxy = P.v.zzxy;
+  uvec4 zzxz = P.v.zzxz;
+  uvec4 zzyx = P.v.zzyx;
+  uvec4 zzyy = P.v.zzyy;
+  uvec4 zzyz = P.v.zzyz;
+  uvec4 zzzx = P.v.zzzx;
+  uvec4 zzzy = P.v.zzzy;
+  uvec4 zzzz = P.v.zzzz;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/swizzle/write/packed_vec3/f16.wgsl.expected.ir.glsl b/test/tint/expressions/swizzle/write/packed_vec3/f16.wgsl.expected.ir.glsl
index d4bb1c9..b657961 100644
--- a/test/tint/expressions/swizzle/write/packed_vec3/f16.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/swizzle/write/packed_vec3/f16.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  f16vec3 v;
+};
 
-tint executable returned error: signal: illegal instruction
+S U;
+void f() {
+  U.v = f16vec3(1.0hf, 2.0hf, 3.0hf);
+  U.v[0u] = 1.0hf;
+  U.v[1u] = 2.0hf;
+  U.v[2u] = 3.0hf;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.ir.glsl b/test/tint/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.ir.glsl
index d4bb1c9..257b3dc 100644
--- a/test/tint/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.ir.glsl
@@ -1,11 +1,16 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  vec3 v;
+};
 
-tint executable returned error: signal: illegal instruction
+S U;
+void f() {
+  U.v = vec3(1.0f, 2.0f, 3.0f);
+  U.v[0u] = 1.0f;
+  U.v[1u] = 2.0f;
+  U.v[2u] = 3.0f;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.ir.glsl b/test/tint/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.ir.glsl
index d4bb1c9..f0b7c58 100644
--- a/test/tint/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.ir.glsl
@@ -1,11 +1,16 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  ivec3 v;
+};
 
-tint executable returned error: signal: illegal instruction
+S U;
+void f() {
+  U.v = ivec3(1, 2, 3);
+  U.v[0u] = 1;
+  U.v[1u] = 2;
+  U.v[2u] = 3;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.ir.glsl b/test/tint/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.ir.glsl
index d4bb1c9..cb0d0b4 100644
--- a/test/tint/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.ir.glsl
@@ -1,11 +1,16 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  uvec3 v;
+};
 
-tint executable returned error: signal: illegal instruction
+S U;
+void f() {
+  U.v = uvec3(1u, 2u, 3u);
+  U.v[0u] = 1u;
+  U.v[1u] = 2u;
+  U.v[2u] = 3u;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/swizzle/write/swizzle.wgsl.expected.ir.glsl b/test/tint/expressions/swizzle/write/swizzle.wgsl.expected.ir.glsl
index 1268749..662088f 100644
--- a/test/tint/expressions/swizzle/write/swizzle.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/swizzle/write/swizzle.wgsl.expected.ir.glsl
@@ -1,11 +1,16 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::StoreVectorElement
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  vec3 val[3];
+};
 
-tint executable returned error: signal: illegal instruction
+void a() {
+  ivec4 a_1 = ivec4(0);
+  a_1[0u] = 1;
+  a_1[2u] = 2;
+  S d = S(vec3[3](vec3(0.0f), vec3(0.0f), vec3(0.0f)));
+  d.val[2][1u] = 3.0f;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/swizzle/write/vec3/f16.wgsl.expected.ir.glsl b/test/tint/expressions/swizzle/write/vec3/f16.wgsl.expected.ir.glsl
index d4bb1c9..23a1e0c 100644
--- a/test/tint/expressions/swizzle/write/vec3/f16.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/swizzle/write/vec3/f16.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  f16vec3 v;
+};
 
-tint executable returned error: signal: illegal instruction
+S P = S(f16vec3(0.0hf));
+void f() {
+  P.v = f16vec3(1.0hf, 2.0hf, 3.0hf);
+  P.v[0u] = 1.0hf;
+  P.v[1u] = 2.0hf;
+  P.v[2u] = 3.0hf;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/swizzle/write/vec3/f32.wgsl.expected.ir.glsl b/test/tint/expressions/swizzle/write/vec3/f32.wgsl.expected.ir.glsl
index d4bb1c9..294234d 100644
--- a/test/tint/expressions/swizzle/write/vec3/f32.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/swizzle/write/vec3/f32.wgsl.expected.ir.glsl
@@ -1,11 +1,16 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  vec3 v;
+};
 
-tint executable returned error: signal: illegal instruction
+S P = S(vec3(0.0f));
+void f() {
+  P.v = vec3(1.0f, 2.0f, 3.0f);
+  P.v[0u] = 1.0f;
+  P.v[1u] = 2.0f;
+  P.v[2u] = 3.0f;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/swizzle/write/vec3/i32.wgsl.expected.ir.glsl b/test/tint/expressions/swizzle/write/vec3/i32.wgsl.expected.ir.glsl
index d4bb1c9..ccacc1b 100644
--- a/test/tint/expressions/swizzle/write/vec3/i32.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/swizzle/write/vec3/i32.wgsl.expected.ir.glsl
@@ -1,11 +1,16 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  ivec3 v;
+};
 
-tint executable returned error: signal: illegal instruction
+S P = S(ivec3(0));
+void f() {
+  P.v = ivec3(1, 2, 3);
+  P.v[0u] = 1;
+  P.v[1u] = 2;
+  P.v[2u] = 3;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/expressions/swizzle/write/vec3/u32.wgsl.expected.ir.glsl b/test/tint/expressions/swizzle/write/vec3/u32.wgsl.expected.ir.glsl
index d4bb1c9..0688737 100644
--- a/test/tint/expressions/swizzle/write/vec3/u32.wgsl.expected.ir.glsl
+++ b/test/tint/expressions/swizzle/write/vec3/u32.wgsl.expected.ir.glsl
@@ -1,11 +1,16 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
+struct S {
+  uvec3 v;
+};
 
-tint executable returned error: signal: illegal instruction
+S P = S(uvec3(0u));
+void f() {
+  P.v = uvec3(1u, 2u, 3u);
+  P.v[0u] = 1u;
+  P.v[1u] = 2u;
+  P.v[2u] = 3u;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl.expected.ir.glsl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl.expected.ir.glsl
index d4bb1c9..2a1d7b5 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl.expected.ir.glsl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Store
-********************************************************************
-*  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.  *
-********************************************************************
+struct Uniforms {
+  uint i;
+};
 
-tint executable returned error: signal: illegal instruction
+struct OuterS {
+  mat2x4 m1;
+};
+
+uniform Uniforms uniforms;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  OuterS s1 = OuterS(mat2x4(vec4(0.0f), vec4(0.0f)));
+  s1.m1[uniforms.i] = vec4(1.0f);
+  s1.m1[uniforms.i][uniforms.i] = 1.0f;
+}
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_vector.wgsl.expected.ir.glsl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_vector.wgsl.expected.ir.glsl
index 1268749..0aaa6f8 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_vector.wgsl.expected.ir.glsl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/struct_vector.wgsl.expected.ir.glsl
@@ -1,11 +1,16 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::StoreVectorElement
-********************************************************************
-*  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.  *
-********************************************************************
+struct Uniforms {
+  uint i;
+};
 
-tint executable returned error: signal: illegal instruction
+struct OuterS {
+  vec3 v1;
+};
+
+uniform Uniforms uniforms;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  OuterS s1 = OuterS(vec3(0.0f));
+  s1.v1[uniforms.i] = 1.0f;
+}
diff --git a/test/tint/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl.expected.ir.glsl b/test/tint/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl.expected.ir.glsl
index ae9b6d0..ee105b5 100644
--- a/test/tint/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl.expected.ir.glsl
+++ b/test/tint/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl.expected.ir.glsl
@@ -1,11 +1,21 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::CoreBinary
-********************************************************************
-*  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.  *
-********************************************************************
+struct Uniforms {
+  uint i;
+};
 
-tint executable returned error: signal: illegal instruction
+struct OuterS {
+  uint a1[8];
+};
+
+uniform Uniforms uniforms;
+uint f(uint i) {
+  return (i + 1u);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  OuterS s1 = OuterS(uint[8](0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u));
+  vec3 v = vec3(0.0f);
+  v[s1.a1[uniforms.i]] = 1.0f;
+  v[f(s1.a1[uniforms.i])] = 1.0f;
+}
diff --git a/test/tint/statements/decrement/vector_component.wgsl.expected.ir.glsl b/test/tint/statements/decrement/vector_component.wgsl.expected.ir.glsl
index 1268749..fcce63e 100644
--- a/test/tint/statements/decrement/vector_component.wgsl.expected.ir.glsl
+++ b/test/tint/statements/decrement/vector_component.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::StoreVectorElement
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uvec4 a;
+void tint_symbol() {
+  a[1] = (a.y - 1u);
+  a[2u] = (a.z - 1u);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/statements/increment/vector_component.wgsl.expected.ir.glsl b/test/tint/statements/increment/vector_component.wgsl.expected.ir.glsl
index 1268749..3353f78 100644
--- a/test/tint/statements/increment/vector_component.wgsl.expected.ir.glsl
+++ b/test/tint/statements/increment/vector_component.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::StoreVectorElement
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
+uvec4 a;
+void tint_symbol() {
+  a[1] = (a.y + 1u);
+  a[2u] = (a.z + 1u);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/types/buffers/uniform.wgsl.expected.ir.glsl b/test/tint/types/buffers/uniform.wgsl.expected.ir.glsl
index 4a20bc7..41973ec 100644
--- a/test/tint/types/buffers/uniform.wgsl.expected.ir.glsl
+++ b/test/tint/types/buffers/uniform.wgsl.expected.ir.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
+#version 310 es
+precision highp float;
+precision highp int;
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
-********************************************************************
-*  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.  *
-********************************************************************
 
-tint executable returned error: signal: illegal instruction
+uniform vec2 weights;
+void main() {
+  float a = weights.x;
+}
diff --git a/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_CompositeInsert.spvasm.expected.ir.glsl b/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_CompositeInsert.spvasm.expected.ir.glsl
deleted file mode 100644
index e1168e3..0000000
--- a/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_CompositeInsert.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::If
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
diff --git a/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_VectorInsertDynamic.spvasm.expected.ir.glsl b/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_VectorInsertDynamic.spvasm.expected.ir.glsl
deleted file mode 100644
index e1168e3..0000000
--- a/test/tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_VectorInsertDynamic.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::If
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
diff --git a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Compound_Matrix_Vector.spvasm.expected.ir.glsl b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Compound_Matrix_Vector.spvasm.expected.ir.glsl
deleted file mode 100644
index 1268749..0000000
--- a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Compound_Matrix_Vector.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::StoreVectorElement
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
diff --git a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_DereferenceBase.spvasm.expected.ir.glsl b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_DereferenceBase.spvasm.expected.ir.glsl
deleted file mode 100644
index 4a20bc7..0000000
--- a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_DereferenceBase.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
diff --git a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorNonConstIndex.spvasm.expected.ir.glsl b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorNonConstIndex.spvasm.expected.ir.glsl
deleted file mode 100644
index 4a20bc7..0000000
--- a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorNonConstIndex.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
diff --git a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorSwizzle.spvasm.expected.ir.glsl b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorSwizzle.spvasm.expected.ir.glsl
deleted file mode 100644
index 1268749..0000000
--- a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorSwizzle.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::StoreVectorElement
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
diff --git a/test/tint/unittest/reader/spirv/SpvParserTest_CompositeExtract_Matrix_Vector.spvasm.expected.ir.glsl b/test/tint/unittest/reader/spirv/SpvParserTest_CompositeExtract_Matrix_Vector.spvasm.expected.ir.glsl
deleted file mode 100644
index 4a20bc7..0000000
--- a/test/tint/unittest/reader/spirv/SpvParserTest_CompositeExtract_Matrix_Vector.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
diff --git a/test/tint/unittest/reader/spirv/SpvParserTest_CompositeExtract_Struct_Array_Matrix_Vector.spvasm.expected.ir.glsl b/test/tint/unittest/reader/spirv/SpvParserTest_CompositeExtract_Struct_Array_Matrix_Vector.spvasm.expected.ir.glsl
deleted file mode 100644
index 4a20bc7..0000000
--- a/test/tint/unittest/reader/spirv/SpvParserTest_CompositeExtract_Struct_Array_Matrix_Vector.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::LoadVectorElement
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
diff --git a/test/tint/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct_Array_Matrix_Vector.spvasm.expected.ir.glsl b/test/tint/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct_Array_Matrix_Vector.spvasm.expected.ir.glsl
deleted file mode 100644
index 72ca17c..0000000
--- a/test/tint/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct_Array_Matrix_Vector.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Load
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
diff --git a/test/tint/unittest/reader/spirv/SpvParserTest_CompositeInsert_Vector.spvasm.expected.ir.glsl b/test/tint/unittest/reader/spirv/SpvParserTest_CompositeInsert_Vector.spvasm.expected.ir.glsl
deleted file mode 100644
index 1268749..0000000
--- a/test/tint/unittest/reader/spirv/SpvParserTest_CompositeInsert_Vector.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:252 internal compiler error: Switch() matched no cases. Type: tint::core::ir::StoreVectorElement
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction
diff --git a/test/tint/unittest/reader/spirv/SpvParserTest_VectorInsertDynamic_Sample.spvasm.expected.ir.glsl b/test/tint/unittest/reader/spirv/SpvParserTest_VectorInsertDynamic_Sample.spvasm.expected.ir.glsl
deleted file mode 100644
index b02d7ef..0000000
--- a/test/tint/unittest/reader/spirv/SpvParserTest_VectorInsertDynamic_Sample.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:482 internal compiler error: Switch() matched no cases. Type: tint::core::ir::Let
-********************************************************************
-*  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.  *
-********************************************************************
-
-tint executable returned error: signal: illegal instruction