[glsl][ir] Polyfill the barrier commands.

This CL converts the `workgroupBarrier`, `storageBarrier` and
`textureBarrier` to their GLSL equivalents.

Bug: 42251044
Change-Id: I7f0c4094aa0ac4f8121d655e5e86cd9754c9af43
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/205734
Commit-Queue: dan sinclair <dsinclair@chromium.org>
Reviewed-by: James Price <jrprice@google.com>
diff --git a/src/tint/lang/glsl/BUILD.bazel b/src/tint/lang/glsl/BUILD.bazel
index 1a114c6..6459e96 100644
--- a/src/tint/lang/glsl/BUILD.bazel
+++ b/src/tint/lang/glsl/BUILD.bazel
@@ -36,4 +36,18 @@
 
 load("//src/tint:flags.bzl", "COPTS")
 load("@bazel_skylib//lib:selects.bzl", "selects")
+cc_library(
+  name = "glsl",
+  srcs = [
+    "builtin_fn.cc",
+  ],
+  hdrs = [
+    "builtin_fn.h",
+  ],
+  deps = [
+    "//src/tint/utils/traits",
+  ],
+  copts = COPTS,
+  visibility = ["//visibility:public"],
+)
 
diff --git a/src/tint/lang/glsl/BUILD.cmake b/src/tint/lang/glsl/BUILD.cmake
index 042c033..646aa99 100644
--- a/src/tint/lang/glsl/BUILD.cmake
+++ b/src/tint/lang/glsl/BUILD.cmake
@@ -34,6 +34,20 @@
 #                       Do not modify this file directly
 ################################################################################
 
+include(lang/glsl/intrinsic/BUILD.cmake)
 include(lang/glsl/ir/BUILD.cmake)
 include(lang/glsl/validate/BUILD.cmake)
 include(lang/glsl/writer/BUILD.cmake)
+
+################################################################################
+# Target:    tint_lang_glsl
+# Kind:      lib
+################################################################################
+tint_add_target(tint_lang_glsl lib
+  lang/glsl/builtin_fn.cc
+  lang/glsl/builtin_fn.h
+)
+
+tint_target_add_dependencies(tint_lang_glsl lib
+  tint_utils_traits
+)
diff --git a/src/tint/lang/glsl/BUILD.gn b/src/tint/lang/glsl/BUILD.gn
index bd18a5e..dc42ba4 100644
--- a/src/tint/lang/glsl/BUILD.gn
+++ b/src/tint/lang/glsl/BUILD.gn
@@ -38,3 +38,11 @@
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
+
+libtint_source_set("glsl") {
+  sources = [
+    "builtin_fn.cc",
+    "builtin_fn.h",
+  ]
+  deps = [ "${tint_src_dir}/utils/traits" ]
+}
diff --git a/src/tint/lang/glsl/builtin_fn.cc b/src/tint/lang/glsl/builtin_fn.cc
new file mode 100644
index 0000000..0b018fc
--- /dev/null
+++ b/src/tint/lang/glsl/builtin_fn.cc
@@ -0,0 +1,55 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+//    list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+//    this list of conditions and the following disclaimer in the documentation
+//    and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+//    contributors may be used to endorse or promote products derived from
+//    this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+//   src/tint/lang/glsl/builtin_fn.cc.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+//                       Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+#include "src/tint/lang/glsl/builtin_fn.h"
+
+namespace tint::glsl {
+
+const char* str(BuiltinFn i) {
+    switch (i) {
+        case BuiltinFn::kNone:
+            return "<none>";
+        case BuiltinFn::kBarrier:
+            return "barrier";
+        case BuiltinFn::kMemoryBarrierBuffer:
+            return "memoryBarrierBuffer";
+        case BuiltinFn::kMemoryBarrierImage:
+            return "memoryBarrierImage";
+    }
+    return "<unknown>";
+}
+
+}  // namespace tint::glsl
diff --git a/src/tint/lang/glsl/builtin_fn.cc.tmpl b/src/tint/lang/glsl/builtin_fn.cc.tmpl
new file mode 100644
index 0000000..4c5db03
--- /dev/null
+++ b/src/tint/lang/glsl/builtin_fn.cc.tmpl
@@ -0,0 +1,31 @@
+{{- /*
+--------------------------------------------------------------------------------
+Template file for use with tools/src/cmd/gen to generate builtin_fn.cc
+
+To update the generated file, run:
+    ./tools/run gen
+
+See:
+* tools/src/cmd/gen for structures used by this template
+* https://golang.org/pkg/text/template/ for documentation on the template syntax
+--------------------------------------------------------------------------------
+*/ -}}
+
+{{- $I := LoadIntrinsics "src/tint/lang/glsl/glsl.def" -}}
+#include "src/tint/lang/glsl/builtin_fn.h"
+
+namespace tint::glsl {
+
+const char* str(BuiltinFn i) {
+    switch (i) {
+        case BuiltinFn::kNone:
+            return "<none>";
+{{- range $I.Sem.Builtins  }}
+        case BuiltinFn::k{{PascalCase .Name}}:
+            return "{{.Name}}";
+{{- end  }}
+    }
+    return "<unknown>";
+}
+
+}  // namespace tint::glsl
diff --git a/src/tint/lang/glsl/builtin_fn.h b/src/tint/lang/glsl/builtin_fn.h
new file mode 100644
index 0000000..ce15a3a
--- /dev/null
+++ b/src/tint/lang/glsl/builtin_fn.h
@@ -0,0 +1,68 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+//    list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+//    this list of conditions and the following disclaimer in the documentation
+//    and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+//    contributors may be used to endorse or promote products derived from
+//    this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+//   src/tint/lang/glsl/builtin_fn.h.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+//                       Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+#ifndef SRC_TINT_LANG_GLSL_BUILTIN_FN_H_
+#define SRC_TINT_LANG_GLSL_BUILTIN_FN_H_
+
+#include <cstdint>
+#include <string>
+
+#include "src/tint/utils/traits/traits.h"
+
+// \cond DO_NOT_DOCUMENT
+namespace tint::glsl {
+
+/// Enumerator of all builtin functions
+enum class BuiltinFn : uint8_t {
+    kBarrier,
+    kMemoryBarrierBuffer,
+    kMemoryBarrierImage,
+    kNone,
+};
+
+/// @returns the name of the builtin function type.
+const char* str(BuiltinFn i);
+
+/// Emits the name of the builtin function type.
+template <typename STREAM, typename = traits::EnableIfIsOStream<STREAM>>
+auto& operator<<(STREAM& o, BuiltinFn i) {
+    return o << str(i);
+}
+
+}  // namespace tint::glsl
+// \endcond
+
+#endif  // SRC_TINT_LANG_GLSL_BUILTIN_FN_H_
diff --git a/src/tint/lang/glsl/builtin_fn.h.tmpl b/src/tint/lang/glsl/builtin_fn.h.tmpl
new file mode 100644
index 0000000..7dc1fc9
--- /dev/null
+++ b/src/tint/lang/glsl/builtin_fn.h.tmpl
@@ -0,0 +1,47 @@
+{{- /*
+--------------------------------------------------------------------------------
+Template file for use with tools/src/cmd/gen to generate builtin_fn.h
+
+To update the generated file, run:
+    ./tools/run gen
+
+See:
+* tools/src/cmd/gen for structures used by this template
+* https://golang.org/pkg/text/template/ for documentation on the template syntax
+--------------------------------------------------------------------------------
+*/ -}}
+
+{{- $I := LoadIntrinsics "src/tint/lang/glsl/glsl.def" -}}
+
+#ifndef SRC_TINT_LANG_GLSL_BUILTIN_FN_H_
+#define SRC_TINT_LANG_GLSL_BUILTIN_FN_H_
+
+#include <cstdint>
+#include <string>
+
+#include "src/tint/utils/traits/traits.h"
+
+// \cond DO_NOT_DOCUMENT
+namespace tint::glsl {
+
+/// Enumerator of all builtin functions
+enum class BuiltinFn : uint8_t {
+{{- range $I.Sem.Builtins }}
+    k{{PascalCase .Name}},
+{{- end }}
+    kNone,
+};
+
+/// @returns the name of the builtin function type.
+const char* str(BuiltinFn i);
+
+/// Emits the name of the builtin function type.
+template <typename STREAM, typename = traits::EnableIfIsOStream<STREAM>>
+auto& operator<<(STREAM& o, BuiltinFn i) {
+  return o << str(i);
+}
+
+}  // namespace tint::glsl
+// \endcond
+
+#endif  // SRC_TINT_LANG_GLSL_BUILTIN_FN_H_
diff --git a/src/tint/lang/glsl/glsl.def b/src/tint/lang/glsl/glsl.def
new file mode 100644
index 0000000..b619296
--- /dev/null
+++ b/src/tint/lang/glsl/glsl.def
@@ -0,0 +1,55 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+//    list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+//    this list of conditions and the following disclaimer in the documentation
+//    and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+//    contributors may be used to endorse or promote products derived from
+//    this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// GLSL builtin definition file                                               //
+//                                                                            //
+// After modifying this file, run:                                            //
+//    tools/run gen                                                           //
+// from the Dawn source directory.                                            //
+//                                                                            //
+// See docs/tint/intrinsic_definition_files.md for syntax                     //
+////////////////////////////////////////////////////////////////////////////////
+
+
+////////////////////////////////////////////////////////////////////////////////
+// Types                                                                      //
+////////////////////////////////////////////////////////////////////////////////
+
+
+////////////////////////////////////////////////////////////////////////////////
+// Type matchers                                                              //
+////////////////////////////////////////////////////////////////////////////////
+
+
+////////////////////////////////////////////////////////////////////////////////
+// Builtin Functions                                                          //
+////////////////////////////////////////////////////////////////////////////////
+
+fn barrier()
+fn memoryBarrierBuffer()
+fn memoryBarrierImage()
diff --git a/src/tint/lang/glsl/intrinsic/BUILD.bazel b/src/tint/lang/glsl/intrinsic/BUILD.bazel
new file mode 100644
index 0000000..66d9b4d
--- /dev/null
+++ b/src/tint/lang/glsl/intrinsic/BUILD.bazel
@@ -0,0 +1,71 @@
+# Copyright 2024 The Dawn & Tint Authors
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice, this
+#    list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright notice,
+#    this list of conditions and the following disclaimer in the documentation
+#    and/or other materials provided with the distribution.
+#
+# 3. Neither the name of the copyright holder nor the names of its
+#    contributors may be used to endorse or promote products derived from
+#    this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+################################################################################
+# File generated by 'tools/src/cmd/gen' using the template:
+#   tools/src/cmd/gen/build/BUILD.bazel.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+#                       Do not modify this file directly
+################################################################################
+
+load("//src/tint:flags.bzl", "COPTS")
+load("@bazel_skylib//lib:selects.bzl", "selects")
+cc_library(
+  name = "intrinsic",
+  srcs = [
+    "data.cc",
+  ],
+  hdrs = [
+    "dialect.h",
+  ],
+  deps = [
+    "//src/tint/lang/core",
+    "//src/tint/lang/core/constant",
+    "//src/tint/lang/core/intrinsic",
+    "//src/tint/lang/core/type",
+    "//src/tint/lang/glsl",
+    "//src/tint/utils/containers",
+    "//src/tint/utils/diagnostic",
+    "//src/tint/utils/ice",
+    "//src/tint/utils/id",
+    "//src/tint/utils/macros",
+    "//src/tint/utils/math",
+    "//src/tint/utils/memory",
+    "//src/tint/utils/reflection",
+    "//src/tint/utils/result",
+    "//src/tint/utils/rtti",
+    "//src/tint/utils/symbol",
+    "//src/tint/utils/text",
+    "//src/tint/utils/traits",
+    "//src/utils",
+  ],
+  copts = COPTS,
+  visibility = ["//visibility:public"],
+)
+
diff --git a/src/tint/lang/glsl/intrinsic/BUILD.cmake b/src/tint/lang/glsl/intrinsic/BUILD.cmake
new file mode 100644
index 0000000..9b20294
--- /dev/null
+++ b/src/tint/lang/glsl/intrinsic/BUILD.cmake
@@ -0,0 +1,69 @@
+# Copyright 2024 The Dawn & Tint Authors
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice, this
+#    list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright notice,
+#    this list of conditions and the following disclaimer in the documentation
+#    and/or other materials provided with the distribution.
+#
+# 3. Neither the name of the copyright holder nor the names of its
+#    contributors may be used to endorse or promote products derived from
+#    this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+################################################################################
+# File generated by 'tools/src/cmd/gen' using the template:
+#   tools/src/cmd/gen/build/BUILD.cmake.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+#                       Do not modify this file directly
+################################################################################
+
+################################################################################
+# Target:    tint_lang_glsl_intrinsic
+# Kind:      lib
+################################################################################
+tint_add_target(tint_lang_glsl_intrinsic lib
+  lang/glsl/intrinsic/data.cc
+  lang/glsl/intrinsic/dialect.h
+)
+
+tint_target_add_dependencies(tint_lang_glsl_intrinsic lib
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_intrinsic
+  tint_lang_core_type
+  tint_lang_glsl
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
+)
+
+tint_target_add_external_dependencies(tint_lang_glsl_intrinsic lib
+  "src_utils"
+)
diff --git a/src/tint/lang/glsl/intrinsic/BUILD.gn b/src/tint/lang/glsl/intrinsic/BUILD.gn
new file mode 100644
index 0000000..76bdad3
--- /dev/null
+++ b/src/tint/lang/glsl/intrinsic/BUILD.gn
@@ -0,0 +1,68 @@
+# Copyright 2024 The Dawn & Tint Authors
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice, this
+#    list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright notice,
+#    this list of conditions and the following disclaimer in the documentation
+#    and/or other materials provided with the distribution.
+#
+# 3. Neither the name of the copyright holder nor the names of its
+#    contributors may be used to endorse or promote products derived from
+#    this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+################################################################################
+# File generated by 'tools/src/cmd/gen' using the template:
+#   tools/src/cmd/gen/build/BUILD.gn.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+#                       Do not modify this file directly
+################################################################################
+
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
+import("../../../../../scripts/tint_overrides_with_defaults.gni")
+
+import("${tint_src_dir}/tint.gni")
+
+libtint_source_set("intrinsic") {
+  sources = [
+    "data.cc",
+    "dialect.h",
+  ]
+  deps = [
+    "${dawn_root}/src/utils:utils",
+    "${tint_src_dir}/lang/core",
+    "${tint_src_dir}/lang/core/constant",
+    "${tint_src_dir}/lang/core/intrinsic",
+    "${tint_src_dir}/lang/core/type",
+    "${tint_src_dir}/lang/glsl",
+    "${tint_src_dir}/utils/containers",
+    "${tint_src_dir}/utils/diagnostic",
+    "${tint_src_dir}/utils/ice",
+    "${tint_src_dir}/utils/id",
+    "${tint_src_dir}/utils/macros",
+    "${tint_src_dir}/utils/math",
+    "${tint_src_dir}/utils/memory",
+    "${tint_src_dir}/utils/reflection",
+    "${tint_src_dir}/utils/result",
+    "${tint_src_dir}/utils/rtti",
+    "${tint_src_dir}/utils/symbol",
+    "${tint_src_dir}/utils/text",
+    "${tint_src_dir}/utils/traits",
+  ]
+}
diff --git a/src/tint/lang/glsl/intrinsic/data.cc b/src/tint/lang/glsl/intrinsic/data.cc
new file mode 100644
index 0000000..e2befb3
--- /dev/null
+++ b/src/tint/lang/glsl/intrinsic/data.cc
@@ -0,0 +1,156 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+//    list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+//    this list of conditions and the following disclaimer in the documentation
+//    and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+//    contributors may be used to endorse or promote products derived from
+//    this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+//   src/tint/lang/glsl/intrinsic/data.cc.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+//                       Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+#include <limits>
+#include <string>
+
+#include "src/tint/lang/core/intrinsic/type_matchers.h"
+#include "src/tint/lang/glsl/intrinsic/dialect.h"
+#include "src/tint/utils/text/string_stream.h"
+
+namespace tint::glsl::intrinsic {
+
+using namespace tint::core::intrinsic;  // NOLINT(build/namespaces)
+
+namespace {
+
+using ConstEvalFunctionIndex = tint::core::intrinsic::ConstEvalFunctionIndex;
+using IntrinsicInfo = tint::core::intrinsic::IntrinsicInfo;
+using MatcherIndicesIndex = tint::core::intrinsic::MatcherIndicesIndex;
+using MatchState = tint::core::intrinsic::MatchState;
+using Number = tint::core::intrinsic::Number;
+using NumberMatcher = tint::core::intrinsic::NumberMatcher;
+using NumberMatcherIndex = tint::core::intrinsic::NumberMatcherIndex;
+using OverloadFlag = tint::core::intrinsic::OverloadFlag;
+using OverloadFlags = tint::core::intrinsic::OverloadFlags;
+using OverloadIndex = tint::core::intrinsic::OverloadIndex;
+using OverloadInfo = tint::core::intrinsic::OverloadInfo;
+using ParameterIndex = tint::core::intrinsic::ParameterIndex;
+using ParameterInfo = tint::core::intrinsic::ParameterInfo;
+using StringStream = tint::StringStream;
+using TemplateIndex = tint::core::intrinsic::TemplateIndex;
+using Type = tint::core::type::Type;
+using TypeMatcher = tint::core::intrinsic::TypeMatcher;
+using TypeMatcherIndex = tint::core::intrinsic::TypeMatcherIndex;
+
+template <size_t N>
+using TemplateNumberMatcher = tint::core::intrinsic::TemplateNumberMatcher<N>;
+
+template <size_t N>
+using TemplateTypeMatcher = tint::core::intrinsic::TemplateTypeMatcher<N>;
+
+// clang-format off
+
+/// Type and number matchers
+
+constexpr OverloadInfo kOverloads[] = {
+  {
+    /* [0] */
+    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
+    /* num_parameters */ 0,
+    /* num_explicit_templates */ 0,
+    /* num_templates   */ 0,
+    /* templates */ TemplateIndex(/* invalid */),
+    /* parameters */ ParameterIndex(/* invalid */),
+    /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+  },
+};
+
+static_assert(OverloadIndex::CanIndex(kOverloads),
+              "OverloadIndex is not large enough to index kOverloads");
+
+constexpr IntrinsicInfo kBuiltins[] = {
+  {
+    /* [0] */
+    /* fn barrier() */
+    /* num overloads */ 1,
+    /* overloads */ OverloadIndex(0),
+  },
+  {
+    /* [1] */
+    /* fn memoryBarrierBuffer() */
+    /* num overloads */ 1,
+    /* overloads */ OverloadIndex(0),
+  },
+  {
+    /* [2] */
+    /* fn memoryBarrierImage() */
+    /* num overloads */ 1,
+    /* overloads */ OverloadIndex(0),
+  },
+};
+
+// clang-format on
+
+}  // anonymous namespace
+
+const core::intrinsic::TableData Dialect::kData{
+    /* templates */ Empty,
+    /* type_matcher_indices */ Empty,
+    /* type_matchers */ Empty,
+    /* number_matchers */ Empty,
+    /* parameters */ Empty,
+    /* overloads */ kOverloads,
+    /* const_eval_functions */ Empty,
+    /* ctor_conv */ Empty,
+    /* builtins */ kBuiltins,
+    /* binary '+' */ tint::core::intrinsic::kNoOverloads,
+    /* binary '-' */ tint::core::intrinsic::kNoOverloads,
+    /* binary '*' */ tint::core::intrinsic::kNoOverloads,
+    /* binary '/' */ tint::core::intrinsic::kNoOverloads,
+    /* binary '%' */ tint::core::intrinsic::kNoOverloads,
+    /* binary '^' */ tint::core::intrinsic::kNoOverloads,
+    /* binary '&' */ tint::core::intrinsic::kNoOverloads,
+    /* binary '|' */ tint::core::intrinsic::kNoOverloads,
+    /* binary '&&' */ tint::core::intrinsic::kNoOverloads,
+    /* binary '||' */ tint::core::intrinsic::kNoOverloads,
+    /* binary '==' */ tint::core::intrinsic::kNoOverloads,
+    /* binary '!=' */ tint::core::intrinsic::kNoOverloads,
+    /* binary '<' */ tint::core::intrinsic::kNoOverloads,
+    /* binary '>' */ tint::core::intrinsic::kNoOverloads,
+    /* binary '<=' */ tint::core::intrinsic::kNoOverloads,
+    /* binary '>=' */ tint::core::intrinsic::kNoOverloads,
+    /* binary '<<' */ tint::core::intrinsic::kNoOverloads,
+    /* binary '>>' */ tint::core::intrinsic::kNoOverloads,
+    /* unary '!' */ tint::core::intrinsic::kNoOverloads,
+    /* unary '~' */ tint::core::intrinsic::kNoOverloads,
+    /* unary '-' */ tint::core::intrinsic::kNoOverloads,
+    /* unary '*' */ tint::core::intrinsic::kNoOverloads,
+    /* unary '&' */ tint::core::intrinsic::kNoOverloads,
+};
+
+}  // namespace tint::glsl::intrinsic
diff --git a/src/tint/lang/glsl/intrinsic/data.cc.tmpl b/src/tint/lang/glsl/intrinsic/data.cc.tmpl
new file mode 100644
index 0000000..f5439f2
--- /dev/null
+++ b/src/tint/lang/glsl/intrinsic/data.cc.tmpl
@@ -0,0 +1,34 @@
+{{- /*
+--------------------------------------------------------------------------------
+Template file for use with tools/src/cmd/gen to generate intrinsic_table.inl
+Used by BuiltinTable.cc for builtin overload resolution.
+
+To update the generated file, run:
+    ./tools/run gen
+
+See:
+* tools/src/cmd/gen for structures used by this template
+* https://golang.org/pkg/text/template/ for documentation on the template syntax
+--------------------------------------------------------------------------------
+*/ -}}
+
+{{- Import "src/tint/utils/templates/intrinsic_table_data.tmpl.inc" -}}
+
+{{- $I := LoadIntrinsics "src/tint/lang/glsl/glsl.def" -}}
+
+#include <limits>
+#include <string>
+
+#include "src/tint/lang/core/intrinsic/type_matchers.h"
+#include "src/tint/lang/glsl/intrinsic/dialect.h"
+#include "src/tint/utils/text/string_stream.h"
+
+namespace tint::glsl::intrinsic {
+
+using namespace tint::core::intrinsic;  // NOLINT(build/namespaces)
+
+{{ Eval "Data"
+  "Intrinsics" $I
+  "Name"       "Dialect::kData" -}}
+
+}  // namespace tint::glsl::intrinsic
diff --git a/src/tint/lang/glsl/intrinsic/dialect.h b/src/tint/lang/glsl/intrinsic/dialect.h
new file mode 100644
index 0000000..8ae389a
--- /dev/null
+++ b/src/tint/lang/glsl/intrinsic/dialect.h
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+//    list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+//    this list of conditions and the following disclaimer in the documentation
+//    and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+//    contributors may be used to endorse or promote products derived from
+//    this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#ifndef SRC_TINT_LANG_GLSL_INTRINSIC_DIALECT_H_
+#define SRC_TINT_LANG_GLSL_INTRINSIC_DIALECT_H_
+
+#include "src/tint/lang/core/intrinsic/table_data.h"
+#include "src/tint/lang/glsl/builtin_fn.h"
+
+namespace tint::glsl::intrinsic {
+
+/// Dialect holds the intrinsic table data and types for the GLSL dialect
+struct Dialect {
+    /// The dialect's intrinsic table data
+    static const core::intrinsic::TableData kData;
+
+    /// The dialect's builtin function enumerator
+    using BuiltinFn = glsl::BuiltinFn;
+
+    /// @returns the name of the builtin function @p fn
+    /// @param fn the builtin function
+    static std::string_view ToString(BuiltinFn fn) { return str(fn); }
+};
+
+}  // namespace tint::glsl::intrinsic
+
+#endif  // SRC_TINT_LANG_GLSL_INTRINSIC_DIALECT_H_
diff --git a/src/tint/lang/glsl/ir/BUILD.bazel b/src/tint/lang/glsl/ir/BUILD.bazel
index 73c1862..4f04c35 100644
--- a/src/tint/lang/glsl/ir/BUILD.bazel
+++ b/src/tint/lang/glsl/ir/BUILD.bazel
@@ -39,17 +39,22 @@
 cc_library(
   name = "ir",
   srcs = [
+    "builtin_call.cc",
     "ternary.cc",
   ],
   hdrs = [
+    "builtin_call.h",
     "ternary.h",
   ],
   deps = [
     "//src/tint/api/common",
     "//src/tint/lang/core",
     "//src/tint/lang/core/constant",
+    "//src/tint/lang/core/intrinsic",
     "//src/tint/lang/core/ir",
     "//src/tint/lang/core/type",
+    "//src/tint/lang/glsl",
+    "//src/tint/lang/glsl/intrinsic",
     "//src/tint/utils/containers",
     "//src/tint/utils/diagnostic",
     "//src/tint/utils/ice",
@@ -72,6 +77,7 @@
   name = "test",
   alwayslink = True,
   srcs = [
+    "builtin_call_test.cc",
     "ternary_test.cc",
   ],
   deps = [
@@ -82,6 +88,8 @@
     "//src/tint/lang/core/ir",
     "//src/tint/lang/core/ir:test",
     "//src/tint/lang/core/type",
+    "//src/tint/lang/glsl",
+    "//src/tint/lang/glsl/intrinsic",
     "//src/tint/lang/glsl/ir",
     "//src/tint/utils/containers",
     "//src/tint/utils/diagnostic",
diff --git a/src/tint/lang/glsl/ir/BUILD.cmake b/src/tint/lang/glsl/ir/BUILD.cmake
index 7f7a039..acaa18f 100644
--- a/src/tint/lang/glsl/ir/BUILD.cmake
+++ b/src/tint/lang/glsl/ir/BUILD.cmake
@@ -39,6 +39,8 @@
 # Kind:      lib
 ################################################################################
 tint_add_target(tint_lang_glsl_ir lib
+  lang/glsl/ir/builtin_call.cc
+  lang/glsl/ir/builtin_call.h
   lang/glsl/ir/ternary.cc
   lang/glsl/ir/ternary.h
 )
@@ -47,8 +49,11 @@
   tint_api_common
   tint_lang_core
   tint_lang_core_constant
+  tint_lang_core_intrinsic
   tint_lang_core_ir
   tint_lang_core_type
+  tint_lang_glsl
+  tint_lang_glsl_intrinsic
   tint_utils_containers
   tint_utils_diagnostic
   tint_utils_ice
@@ -73,6 +78,7 @@
 # Kind:      test
 ################################################################################
 tint_add_target(tint_lang_glsl_ir_test test
+  lang/glsl/ir/builtin_call_test.cc
   lang/glsl/ir/ternary_test.cc
 )
 
@@ -84,6 +90,8 @@
   tint_lang_core_ir
   tint_lang_core_ir_test
   tint_lang_core_type
+  tint_lang_glsl
+  tint_lang_glsl_intrinsic
   tint_lang_glsl_ir
   tint_utils_containers
   tint_utils_diagnostic
diff --git a/src/tint/lang/glsl/ir/BUILD.gn b/src/tint/lang/glsl/ir/BUILD.gn
index bd8959a..54868e1 100644
--- a/src/tint/lang/glsl/ir/BUILD.gn
+++ b/src/tint/lang/glsl/ir/BUILD.gn
@@ -45,6 +45,8 @@
 
 libtint_source_set("ir") {
   sources = [
+    "builtin_call.cc",
+    "builtin_call.h",
     "ternary.cc",
     "ternary.h",
   ]
@@ -53,8 +55,11 @@
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/constant",
+    "${tint_src_dir}/lang/core/intrinsic",
     "${tint_src_dir}/lang/core/ir",
     "${tint_src_dir}/lang/core/type",
+    "${tint_src_dir}/lang/glsl",
+    "${tint_src_dir}/lang/glsl/intrinsic",
     "${tint_src_dir}/utils/containers",
     "${tint_src_dir}/utils/diagnostic",
     "${tint_src_dir}/utils/ice",
@@ -72,7 +77,10 @@
 }
 if (tint_build_unittests) {
   tint_unittests_source_set("unittests") {
-    sources = [ "ternary_test.cc" ]
+    sources = [
+      "builtin_call_test.cc",
+      "ternary_test.cc",
+    ]
     deps = [
       "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
@@ -83,6 +91,8 @@
       "${tint_src_dir}/lang/core/ir",
       "${tint_src_dir}/lang/core/ir:unittests",
       "${tint_src_dir}/lang/core/type",
+      "${tint_src_dir}/lang/glsl",
+      "${tint_src_dir}/lang/glsl/intrinsic",
       "${tint_src_dir}/lang/glsl/ir",
       "${tint_src_dir}/utils/containers",
       "${tint_src_dir}/utils/diagnostic",
diff --git a/src/tint/lang/glsl/ir/builtin_call.cc b/src/tint/lang/glsl/ir/builtin_call.cc
new file mode 100644
index 0000000..a32eebb
--- /dev/null
+++ b/src/tint/lang/glsl/ir/builtin_call.cc
@@ -0,0 +1,57 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+//    list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+//    this list of conditions and the following disclaimer in the documentation
+//    and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+//    contributors may be used to endorse or promote products derived from
+//    this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include "src/tint/lang/glsl/ir/builtin_call.h"
+
+#include <utility>
+
+#include "src/tint/lang/core/ir/clone_context.h"
+#include "src/tint/lang/core/ir/module.h"
+#include "src/tint/utils/ice/ice.h"
+
+TINT_INSTANTIATE_TYPEINFO(tint::glsl::ir::BuiltinCall);
+
+namespace tint::glsl::ir {
+
+BuiltinCall::BuiltinCall(Id id,
+                         core::ir::InstructionResult* result,
+                         BuiltinFn func,
+                         VectorRef<core::ir::Value*> arguments)
+    : Base(id, result, arguments), func_(func) {
+    flags_.Add(Flag::kSequenced);
+    TINT_ASSERT(func != BuiltinFn::kNone);
+}
+
+BuiltinCall::~BuiltinCall() = default;
+
+BuiltinCall* BuiltinCall::Clone(core::ir::CloneContext& ctx) {
+    auto* new_result = ctx.Clone(Result(0));
+    auto new_args = ctx.Clone<BuiltinCall::kDefaultNumOperands>(Args());
+    return ctx.ir.CreateInstruction<BuiltinCall>(new_result, func_, new_args);
+}
+
+}  // namespace tint::glsl::ir
diff --git a/src/tint/lang/glsl/ir/builtin_call.h b/src/tint/lang/glsl/ir/builtin_call.h
new file mode 100644
index 0000000..17011d6
--- /dev/null
+++ b/src/tint/lang/glsl/ir/builtin_call.h
@@ -0,0 +1,79 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+//    list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+//    this list of conditions and the following disclaimer in the documentation
+//    and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+//    contributors may be used to endorse or promote products derived from
+//    this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#ifndef SRC_TINT_LANG_GLSL_IR_BUILTIN_CALL_H_
+#define SRC_TINT_LANG_GLSL_IR_BUILTIN_CALL_H_
+
+#include <string>
+
+#include "src/tint/lang/core/intrinsic/table_data.h"
+#include "src/tint/lang/core/ir/builtin_call.h"
+#include "src/tint/lang/glsl/builtin_fn.h"
+#include "src/tint/lang/glsl/intrinsic/dialect.h"
+#include "src/tint/utils/rtti/castable.h"
+
+namespace tint::glsl::ir {
+
+/// A GLSL builtin call instruction in the IR.
+class BuiltinCall final : public Castable<BuiltinCall, core::ir::BuiltinCall> {
+  public:
+    /// Constructor
+    /// @param id the instruction id
+    /// @param result the result value
+    /// @param func the builtin function
+    /// @param args the conversion arguments
+    BuiltinCall(Id id,
+                core::ir::InstructionResult* result,
+                BuiltinFn func,
+                VectorRef<core::ir::Value*> args = tint::Empty);
+
+    ~BuiltinCall() override;
+
+    /// @copydoc core::ir::Instruction::Clone()
+    BuiltinCall* Clone(core::ir::CloneContext& ctx) override;
+
+    /// @returns the builtin function
+    BuiltinFn Func() const { return func_; }
+
+    /// @returns the identifier for the function
+    size_t FuncId() const override { return static_cast<size_t>(func_); }
+
+    /// @returns the friendly name for the instruction
+    std::string FriendlyName() const override { return std::string("glsl.") + str(func_); }
+
+    /// @returns the table data to validate this builtin
+    const core::intrinsic::TableData& TableData() const override {
+        return glsl::intrinsic::Dialect::kData;
+    }
+
+  private:
+    BuiltinFn func_;
+};
+
+}  // namespace tint::glsl::ir
+
+#endif  // SRC_TINT_LANG_GLSL_IR_BUILTIN_CALL_H_
diff --git a/src/tint/lang/glsl/ir/builtin_call_test.cc b/src/tint/lang/glsl/ir/builtin_call_test.cc
new file mode 100644
index 0000000..07a038d
--- /dev/null
+++ b/src/tint/lang/glsl/ir/builtin_call_test.cc
@@ -0,0 +1,59 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+//    list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+//    this list of conditions and the following disclaimer in the documentation
+//    and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+//    contributors may be used to endorse or promote products derived from
+//    this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include "src/tint/lang/glsl/ir/builtin_call.h"
+
+#include "gtest/gtest.h"
+#include "src/tint/lang/core/ir/ir_helper_test.h"
+#include "src/tint/lang/core/ir/validator.h"
+
+using namespace tint::core::fluent_types;  // NOLINT
+
+namespace tint::glsl::ir {
+namespace {
+
+using namespace tint::core::number_suffixes;  // NOLINT
+                                              //
+using IR_GlslBuiltinCallTest = core::ir::IRTestHelper;
+
+TEST_F(IR_GlslBuiltinCallTest, Clone) {
+    auto* builtin = b.Call<BuiltinCall>(mod.Types().void_(), BuiltinFn::kBarrier);
+
+    auto* new_b = clone_ctx.Clone(builtin);
+
+    EXPECT_NE(builtin, new_b);
+    EXPECT_NE(builtin->Result(0), new_b->Result(0));
+    EXPECT_EQ(mod.Types().void_(), new_b->Result(0)->Type());
+
+    EXPECT_EQ(BuiltinFn::kBarrier, new_b->Func());
+
+    auto args = new_b->Args();
+    EXPECT_EQ(0u, args.Length());
+}
+
+}  // namespace
+}  // namespace tint::glsl::ir
diff --git a/src/tint/lang/glsl/writer/builtin_test.cc b/src/tint/lang/glsl/writer/builtin_test.cc
index c9619dd..a1e67df 100644
--- a/src/tint/lang/glsl/writer/builtin_test.cc
+++ b/src/tint/lang/glsl/writer/builtin_test.cc
@@ -117,5 +117,58 @@
 )");
 }
 
+TEST_F(GlslWriterTest, BuiltinStorageBarrier) {
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kCompute);
+    func->SetWorkgroupSize(1, 1, 1);
+    b.Append(func->Block(), [&] {
+        b.Call(ty.void_(), core::BuiltinFn::kStorageBarrier);
+        b.Return(func);
+    });
+
+    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() {
+  barrier();
+  memoryBarrierBuffer();
+}
+)");
+}
+
+TEST_F(GlslWriterTest, BuiltinTextureBarrier) {
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kCompute);
+    func->SetWorkgroupSize(1, 1, 1);
+    b.Append(func->Block(), [&] {
+        b.Call(ty.void_(), core::BuiltinFn::kTextureBarrier);
+        b.Return(func);
+    });
+
+    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() {
+  barrier();
+  memoryBarrierImage();
+}
+)");
+}
+
+TEST_F(GlslWriterTest, BuiltinWorkgroupBarrier) {
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kCompute);
+    func->SetWorkgroupSize(1, 1, 1);
+    b.Append(func->Block(), [&] {
+        b.Call(ty.void_(), core::BuiltinFn::kWorkgroupBarrier);
+        b.Return(func);
+    });
+
+    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() {
+  barrier();
+}
+)");
+}
+
 }  // namespace
 }  // namespace tint::glsl::writer
diff --git a/src/tint/lang/glsl/writer/printer/BUILD.bazel b/src/tint/lang/glsl/writer/printer/BUILD.bazel
index f14670f..77f5fc8 100644
--- a/src/tint/lang/glsl/writer/printer/BUILD.bazel
+++ b/src/tint/lang/glsl/writer/printer/BUILD.bazel
@@ -51,6 +51,8 @@
     "//src/tint/lang/core/intrinsic",
     "//src/tint/lang/core/ir",
     "//src/tint/lang/core/type",
+    "//src/tint/lang/glsl",
+    "//src/tint/lang/glsl/intrinsic",
     "//src/tint/lang/glsl/ir",
     "//src/tint/utils/containers",
     "//src/tint/utils/diagnostic",
diff --git a/src/tint/lang/glsl/writer/printer/BUILD.cmake b/src/tint/lang/glsl/writer/printer/BUILD.cmake
index 24ad598..679f9cb 100644
--- a/src/tint/lang/glsl/writer/printer/BUILD.cmake
+++ b/src/tint/lang/glsl/writer/printer/BUILD.cmake
@@ -52,6 +52,8 @@
   tint_lang_core_intrinsic
   tint_lang_core_ir
   tint_lang_core_type
+  tint_lang_glsl
+  tint_lang_glsl_intrinsic
   tint_lang_glsl_ir
   tint_utils_containers
   tint_utils_diagnostic
diff --git a/src/tint/lang/glsl/writer/printer/BUILD.gn b/src/tint/lang/glsl/writer/printer/BUILD.gn
index 8d3007f..c1a7cf0 100644
--- a/src/tint/lang/glsl/writer/printer/BUILD.gn
+++ b/src/tint/lang/glsl/writer/printer/BUILD.gn
@@ -52,6 +52,8 @@
       "${tint_src_dir}/lang/core/intrinsic",
       "${tint_src_dir}/lang/core/ir",
       "${tint_src_dir}/lang/core/type",
+      "${tint_src_dir}/lang/glsl",
+      "${tint_src_dir}/lang/glsl/intrinsic",
       "${tint_src_dir}/lang/glsl/ir",
       "${tint_src_dir}/utils/containers",
       "${tint_src_dir}/utils/diagnostic",
diff --git a/src/tint/lang/glsl/writer/printer/printer.cc b/src/tint/lang/glsl/writer/printer/printer.cc
index ad6984b..89d8848 100644
--- a/src/tint/lang/glsl/writer/printer/printer.cc
+++ b/src/tint/lang/glsl/writer/printer/printer.cc
@@ -80,6 +80,7 @@
 #include "src/tint/lang/core/type/u32.h"
 #include "src/tint/lang/core/type/vector.h"
 #include "src/tint/lang/core/type/void.h"
+#include "src/tint/lang/glsl/ir/builtin_call.h"
 #include "src/tint/lang/glsl/ir/ternary.h"
 #include "src/tint/lang/glsl/writer/common/printer_support.h"
 #include "src/tint/lang/glsl/writer/common/version.h"
@@ -1099,7 +1100,8 @@
                     [&](const core::ir::UserCall* c) { EmitUserCall(out, c); },
                     [&](const core::ir::Var* var) { out << NameOf(var->Result(0)); },
 
-                    [&](const glsl::ir::Ternary* t) { EmitTernary(out, t); },  //
+                    [&](const glsl::ir::BuiltinCall* c) { EmitGlslBuiltinCall(out, c); },  //
+                    [&](const glsl::ir::Ternary* t) { EmitTernary(out, t); },              //
 
                     TINT_ICE_ON_NO_MATCH);
             },
@@ -1108,6 +1110,19 @@
             TINT_ICE_ON_NO_MATCH);
     }
 
+    void EmitGlslBuiltinCall(StringStream& out, const glsl::ir::BuiltinCall* c) {
+        out << c->Func() << "(";
+        bool needs_comma = false;
+        for (const auto* arg : c->Args()) {
+            if (needs_comma) {
+                out << ", ";
+            }
+            EmitValue(out, arg);
+            needs_comma = true;
+        }
+        out << ")";
+    }
+
     void EmitTernary(StringStream& out, const glsl::ir::Ternary* t) {
         out << "((";
         EmitValue(out, t->Cmp());
diff --git a/src/tint/lang/glsl/writer/raise/BUILD.bazel b/src/tint/lang/glsl/writer/raise/BUILD.bazel
index 911505f..b548cf4 100644
--- a/src/tint/lang/glsl/writer/raise/BUILD.bazel
+++ b/src/tint/lang/glsl/writer/raise/BUILD.bazel
@@ -57,6 +57,8 @@
     "//src/tint/lang/core/ir",
     "//src/tint/lang/core/ir/transform",
     "//src/tint/lang/core/type",
+    "//src/tint/lang/glsl",
+    "//src/tint/lang/glsl/intrinsic",
     "//src/tint/lang/glsl/ir",
     "//src/tint/lang/wgsl",
     "//src/tint/lang/wgsl/ast",
diff --git a/src/tint/lang/glsl/writer/raise/BUILD.cmake b/src/tint/lang/glsl/writer/raise/BUILD.cmake
index 44d26cb..2776d8b 100644
--- a/src/tint/lang/glsl/writer/raise/BUILD.cmake
+++ b/src/tint/lang/glsl/writer/raise/BUILD.cmake
@@ -58,6 +58,8 @@
   tint_lang_core_ir
   tint_lang_core_ir_transform
   tint_lang_core_type
+  tint_lang_glsl
+  tint_lang_glsl_intrinsic
   tint_lang_glsl_ir
   tint_lang_wgsl
   tint_lang_wgsl_ast
diff --git a/src/tint/lang/glsl/writer/raise/BUILD.gn b/src/tint/lang/glsl/writer/raise/BUILD.gn
index 9b60e18..b6a34e7 100644
--- a/src/tint/lang/glsl/writer/raise/BUILD.gn
+++ b/src/tint/lang/glsl/writer/raise/BUILD.gn
@@ -62,6 +62,8 @@
       "${tint_src_dir}/lang/core/ir",
       "${tint_src_dir}/lang/core/ir/transform",
       "${tint_src_dir}/lang/core/type",
+      "${tint_src_dir}/lang/glsl",
+      "${tint_src_dir}/lang/glsl/intrinsic",
       "${tint_src_dir}/lang/glsl/ir",
       "${tint_src_dir}/lang/wgsl",
       "${tint_src_dir}/lang/wgsl/ast",
diff --git a/src/tint/lang/glsl/writer/raise/builtin_polyfill.cc b/src/tint/lang/glsl/writer/raise/builtin_polyfill.cc
index 3f965d9..019db10 100644
--- a/src/tint/lang/glsl/writer/raise/builtin_polyfill.cc
+++ b/src/tint/lang/glsl/writer/raise/builtin_polyfill.cc
@@ -34,6 +34,8 @@
 #include "src/tint/lang/core/ir/builder.h"
 #include "src/tint/lang/core/ir/module.h"
 #include "src/tint/lang/core/ir/validator.h"
+#include "src/tint/lang/glsl/builtin_fn.h"
+#include "src/tint/lang/glsl/ir/builtin_call.h"
 #include "src/tint/lang/glsl/ir/ternary.h"
 
 namespace tint::glsl::writer::raise {
@@ -66,6 +68,9 @@
             if (auto* call = inst->As<core::ir::CoreBuiltinCall>()) {
                 switch (call->Func()) {
                     case core::BuiltinFn::kSelect:
+                    case core::BuiltinFn::kStorageBarrier:
+                    case core::BuiltinFn::kTextureBarrier:
+                    case core::BuiltinFn::kWorkgroupBarrier:
                         call_worklist.Push(call);
                         break;
                     default:
@@ -81,12 +86,37 @@
                 case core::BuiltinFn::kSelect:
                     Select(call);
                     break;
+                case core::BuiltinFn::kStorageBarrier:
+                case core::BuiltinFn::kTextureBarrier:
+                case core::BuiltinFn::kWorkgroupBarrier:
+                    Barrier(call);
+                    break;
                 default:
                     TINT_UNREACHABLE();
             }
         }
     }
 
+    void Barrier(core::ir::CoreBuiltinCall* call) {
+        b.InsertBefore(call, [&] {
+            b.Call<glsl::ir::BuiltinCall>(ty.void_(), glsl::BuiltinFn::kBarrier);
+
+            switch (call->Func()) {
+                case core::BuiltinFn::kStorageBarrier:
+                    b.Call<glsl::ir::BuiltinCall>(ty.void_(),
+                                                  glsl::BuiltinFn::kMemoryBarrierBuffer);
+                    break;
+                case core::BuiltinFn::kTextureBarrier:
+                    b.Call<glsl::ir::BuiltinCall>(ty.void_(), glsl::BuiltinFn::kMemoryBarrierImage);
+                    break;
+                default:
+                    break;
+            }
+        });
+
+        call->Destroy();
+    }
+
     void Select(core::ir::CoreBuiltinCall* call) {
         Vector<core::ir::Value*, 4> args = call->Args();
 
diff --git a/src/tint/lang/glsl/writer/raise/builtin_polyfill_test.cc b/src/tint/lang/glsl/writer/raise/builtin_polyfill_test.cc
index ef88e70..c004f61 100644
--- a/src/tint/lang/glsl/writer/raise/builtin_polyfill_test.cc
+++ b/src/tint/lang/glsl/writer/raise/builtin_polyfill_test.cc
@@ -120,5 +120,100 @@
     EXPECT_EQ(expect, str());
 }
 
+TEST_F(GlslWriter_BuiltinPolyfillTest, StorageBarrier) {
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kCompute);
+    func->SetWorkgroupSize(1, 1, 1);
+    b.Append(func->Block(), [&] {
+        b.Call(ty.void_(), core::BuiltinFn::kStorageBarrier);
+        b.Return(func);
+    });
+
+    auto* src = R"(
+%foo = @compute @workgroup_size(1, 1, 1) func():void {
+  $B1: {
+    %2:void = storageBarrier
+    ret
+  }
+}
+)";
+    EXPECT_EQ(src, str());
+
+    auto* expect = R"(
+%foo = @compute @workgroup_size(1, 1, 1) func():void {
+  $B1: {
+    %2:void = glsl.barrier
+    %3:void = glsl.memoryBarrierBuffer
+    ret
+  }
+}
+)";
+
+    Run(BuiltinPolyfill);
+    EXPECT_EQ(expect, str());
+}
+
+TEST_F(GlslWriter_BuiltinPolyfillTest, TextureBarrier) {
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kCompute);
+    func->SetWorkgroupSize(1, 1, 1);
+    b.Append(func->Block(), [&] {
+        b.Call(ty.void_(), core::BuiltinFn::kTextureBarrier);
+        b.Return(func);
+    });
+
+    auto* src = R"(
+%foo = @compute @workgroup_size(1, 1, 1) func():void {
+  $B1: {
+    %2:void = textureBarrier
+    ret
+  }
+}
+)";
+    EXPECT_EQ(src, str());
+
+    auto* expect = R"(
+%foo = @compute @workgroup_size(1, 1, 1) func():void {
+  $B1: {
+    %2:void = glsl.barrier
+    %3:void = glsl.memoryBarrierImage
+    ret
+  }
+}
+)";
+
+    Run(BuiltinPolyfill);
+    EXPECT_EQ(expect, str());
+}
+
+TEST_F(GlslWriter_BuiltinPolyfillTest, WorkgroupBarrier) {
+    auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kCompute);
+    func->SetWorkgroupSize(1, 1, 1);
+    b.Append(func->Block(), [&] {
+        b.Call(ty.void_(), core::BuiltinFn::kWorkgroupBarrier);
+        b.Return(func);
+    });
+
+    auto* src = R"(
+%foo = @compute @workgroup_size(1, 1, 1) func():void {
+  $B1: {
+    %2:void = workgroupBarrier
+    ret
+  }
+}
+)";
+    EXPECT_EQ(src, str());
+
+    auto* expect = R"(
+%foo = @compute @workgroup_size(1, 1, 1) func():void {
+  $B1: {
+    %2:void = glsl.barrier
+    ret
+  }
+}
+)";
+
+    Run(BuiltinPolyfill);
+    EXPECT_EQ(expect, str());
+}
+
 }  // namespace
 }  // namespace tint::glsl::writer::raise
diff --git a/src/tint/utils/templates/intrinsic_table_data.tmpl.inc b/src/tint/utils/templates/intrinsic_table_data.tmpl.inc
index b88fb1d..6ec6b91 100644
--- a/src/tint/utils/templates/intrinsic_table_data.tmpl.inc
+++ b/src/tint/utils/templates/intrinsic_table_data.tmpl.inc
@@ -246,7 +246,7 @@
   /* type_matcher_indices */ {{if .MatcherIndices}}kMatcherIndices{{else}}Empty{{end}},
   /* type_matchers */ {{if .TMatchers}}kTypeMatchers{{else}}Empty{{end}},
   /* number_matchers */ {{if .NMatchers}}kNumberMatchers{{else}}Empty{{end}},
-  /* parameters */ kParameters,
+  /* parameters */ {{if .Parameters}}kParameters{{else}}Empty{{end}},
   /* overloads */ kOverloads,
   /* const_eval_functions */ {{if .ConstEvalFunctions}}kConstEvalFunctions{{else}}Empty{{end}},
   /* ctor_conv */ {{if .ConstructorsAndConverters}}kConstructorsAndConverters{{else}}Empty{{end}},
diff --git a/test/tint/array/assign_to_function_var.wgsl.expected.ir.glsl b/test/tint/array/assign_to_function_var.wgsl.expected.ir.glsl
index 56f48c5..a12ef00 100644
--- a/test/tint/array/assign_to_function_var.wgsl.expected.ir.glsl
+++ b/test/tint/array/assign_to_function_var.wgsl.expected.ir.glsl
@@ -1,11 +1,65 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct S {
+  ivec4 arr[4];
+};
+
+ivec4 src_private[4] = ivec4[4](ivec4(0), ivec4(0), ivec4(0), ivec4(0));
+shared ivec4 src_workgroup[4];
+layout(binding = 0, std140)
+uniform tint_symbol_2_1_ubo {
+  S tint_symbol_1;
+} v;
+layout(binding = 1, std430)
+buffer tint_symbol_4_1_ssbo {
+  S tint_symbol_3;
+} v_1;
+ivec4[4] ret_arr() {
+  return ivec4[4](ivec4(0), ivec4(0), ivec4(0), ivec4(0));
+}
+S ret_struct_arr() {
+  return S(ivec4[4](ivec4(0), ivec4(0), ivec4(0), ivec4(0)));
+}
+void foo(ivec4 src_param[4]) {
+  ivec4 src_function[4] = ivec4[4](ivec4(0), ivec4(0), ivec4(0), ivec4(0));
+  ivec4 dst[4] = ivec4[4](ivec4(0), ivec4(0), ivec4(0), ivec4(0));
+  dst = ivec4[4](ivec4(1), ivec4(2), ivec4(3), ivec4(3));
+  dst = src_param;
+  dst = ret_arr();
+  ivec4 src_let[4] = ivec4[4](ivec4(0), ivec4(0), ivec4(0), ivec4(0));
+  dst = src_let;
+  dst = src_function;
+  dst = src_private;
+  dst = src_workgroup;
+  dst = ret_struct_arr().arr;
+  dst = v.tint_symbol_1.arr;
+  dst = v_1.tint_symbol_3.arr;
+  int dst_nested[4][3][2] = int[4][3][2](int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)), int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)), int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)), int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)));
+  int src_nested[4][3][2] = int[4][3][2](int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)), int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)), int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)), int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)));
+  dst_nested = src_nested;
+}
+void tint_symbol_inner(uint tint_local_index) {
+  {
+    uint v_2 = 0u;
+    v_2 = tint_local_index;
+    while(true) {
+      uint v_3 = v_2;
+      if ((v_3 >= 4u)) {
+        break;
+      }
+      src_workgroup[v_3] = ivec4(0);
+      {
+        v_2 = (v_3 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  ivec4 val[4] = ivec4[4](ivec4(0), ivec4(0), ivec4(0), ivec4(0));
+  foo(val);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/array/assign_to_private_var.wgsl.expected.ir.glsl b/test/tint/array/assign_to_private_var.wgsl.expected.ir.glsl
index 56f48c5..6a52fb3 100644
--- a/test/tint/array/assign_to_private_var.wgsl.expected.ir.glsl
+++ b/test/tint/array/assign_to_private_var.wgsl.expected.ir.glsl
@@ -1,11 +1,65 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct S {
+  ivec4 arr[4];
+};
+
+ivec4 src_private[4] = ivec4[4](ivec4(0), ivec4(0), ivec4(0), ivec4(0));
+shared ivec4 src_workgroup[4];
+layout(binding = 0, std140)
+uniform tint_symbol_2_1_ubo {
+  S tint_symbol_1;
+} v;
+layout(binding = 1, std430)
+buffer tint_symbol_4_1_ssbo {
+  S tint_symbol_3;
+} v_1;
+ivec4 dst[4] = ivec4[4](ivec4(0), ivec4(0), ivec4(0), ivec4(0));
+int dst_nested[4][3][2] = int[4][3][2](int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)), int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)), int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)), int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)));
+ivec4[4] ret_arr() {
+  return ivec4[4](ivec4(0), ivec4(0), ivec4(0), ivec4(0));
+}
+S ret_struct_arr() {
+  return S(ivec4[4](ivec4(0), ivec4(0), ivec4(0), ivec4(0)));
+}
+void foo(ivec4 src_param[4]) {
+  ivec4 src_function[4] = ivec4[4](ivec4(0), ivec4(0), ivec4(0), ivec4(0));
+  dst = ivec4[4](ivec4(1), ivec4(2), ivec4(3), ivec4(3));
+  dst = src_param;
+  dst = ret_arr();
+  ivec4 src_let[4] = ivec4[4](ivec4(0), ivec4(0), ivec4(0), ivec4(0));
+  dst = src_let;
+  dst = src_function;
+  dst = src_private;
+  dst = src_workgroup;
+  dst = ret_struct_arr().arr;
+  dst = v.tint_symbol_1.arr;
+  dst = v_1.tint_symbol_3.arr;
+  int src_nested[4][3][2] = int[4][3][2](int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)), int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)), int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)), int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)));
+  dst_nested = src_nested;
+}
+void tint_symbol_inner(uint tint_local_index) {
+  {
+    uint v_2 = 0u;
+    v_2 = tint_local_index;
+    while(true) {
+      uint v_3 = v_2;
+      if ((v_3 >= 4u)) {
+        break;
+      }
+      src_workgroup[v_3] = ivec4(0);
+      {
+        v_2 = (v_3 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  ivec4 a[4] = ivec4[4](ivec4(0), ivec4(0), ivec4(0), ivec4(0));
+  foo(a);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/array/assign_to_storage_var.wgsl.expected.ir.glsl b/test/tint/array/assign_to_storage_var.wgsl.expected.ir.glsl
index 56f48c5..5da1d39 100644
--- a/test/tint/array/assign_to_storage_var.wgsl.expected.ir.glsl
+++ b/test/tint/array/assign_to_storage_var.wgsl.expected.ir.glsl
@@ -1,11 +1,75 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct S {
+  ivec4 arr[4];
+};
+
+struct S_nested {
+  int arr[4][3][2];
+};
+
+ivec4 src_private[4] = ivec4[4](ivec4(0), ivec4(0), ivec4(0), ivec4(0));
+shared ivec4 src_workgroup[4];
+layout(binding = 0, std140)
+uniform tint_symbol_2_1_ubo {
+  S tint_symbol_1;
+} v;
+layout(binding = 1, std430)
+buffer tint_symbol_4_1_ssbo {
+  S tint_symbol_3;
+} v_1;
+layout(binding = 2, std430)
+buffer tint_symbol_6_1_ssbo {
+  S tint_symbol_5;
+} v_2;
+layout(binding = 3, std430)
+buffer tint_symbol_8_1_ssbo {
+  S_nested tint_symbol_7;
+} v_3;
+ivec4[4] ret_arr() {
+  return ivec4[4](ivec4(0), ivec4(0), ivec4(0), ivec4(0));
+}
+S ret_struct_arr() {
+  return S(ivec4[4](ivec4(0), ivec4(0), ivec4(0), ivec4(0)));
+}
+void foo(ivec4 src_param[4]) {
+  ivec4 src_function[4] = ivec4[4](ivec4(0), ivec4(0), ivec4(0), ivec4(0));
+  v_2.tint_symbol_5.arr = ivec4[4](ivec4(1), ivec4(2), ivec4(3), ivec4(3));
+  v_2.tint_symbol_5.arr = src_param;
+  v_2.tint_symbol_5.arr = ret_arr();
+  ivec4 src_let[4] = ivec4[4](ivec4(0), ivec4(0), ivec4(0), ivec4(0));
+  v_2.tint_symbol_5.arr = src_let;
+  v_2.tint_symbol_5.arr = src_function;
+  v_2.tint_symbol_5.arr = src_private;
+  v_2.tint_symbol_5.arr = src_workgroup;
+  v_2.tint_symbol_5.arr = ret_struct_arr().arr;
+  v_2.tint_symbol_5.arr = v.tint_symbol_1.arr;
+  v_2.tint_symbol_5.arr = v_1.tint_symbol_3.arr;
+  int src_nested[4][3][2] = int[4][3][2](int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)), int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)), int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)), int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)));
+  v_3.tint_symbol_7.arr = src_nested;
+}
+void tint_symbol_inner(uint tint_local_index) {
+  {
+    uint v_4 = 0u;
+    v_4 = tint_local_index;
+    while(true) {
+      uint v_5 = v_4;
+      if ((v_5 >= 4u)) {
+        break;
+      }
+      src_workgroup[v_5] = ivec4(0);
+      {
+        v_4 = (v_5 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  ivec4 ary[4] = ivec4[4](ivec4(0), ivec4(0), ivec4(0), ivec4(0));
+  foo(ary);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/array/assign_to_workgroup_var.wgsl.expected.ir.glsl b/test/tint/array/assign_to_workgroup_var.wgsl.expected.ir.glsl
index 56f48c5..49158ba 100644
--- a/test/tint/array/assign_to_workgroup_var.wgsl.expected.ir.glsl
+++ b/test/tint/array/assign_to_workgroup_var.wgsl.expected.ir.glsl
@@ -1,11 +1,81 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct S {
+  ivec4 arr[4];
+};
+
+ivec4 src_private[4] = ivec4[4](ivec4(0), ivec4(0), ivec4(0), ivec4(0));
+shared ivec4 src_workgroup[4];
+layout(binding = 0, std140)
+uniform tint_symbol_2_1_ubo {
+  S tint_symbol_1;
+} v;
+layout(binding = 1, std430)
+buffer tint_symbol_4_1_ssbo {
+  S tint_symbol_3;
+} v_1;
+shared ivec4 dst[4];
+shared int dst_nested[4][3][2];
+ivec4[4] ret_arr() {
+  return ivec4[4](ivec4(0), ivec4(0), ivec4(0), ivec4(0));
+}
+S ret_struct_arr() {
+  return S(ivec4[4](ivec4(0), ivec4(0), ivec4(0), ivec4(0)));
+}
+void foo(ivec4 src_param[4]) {
+  ivec4 src_function[4] = ivec4[4](ivec4(0), ivec4(0), ivec4(0), ivec4(0));
+  dst = ivec4[4](ivec4(1), ivec4(2), ivec4(3), ivec4(3));
+  dst = src_param;
+  dst = ret_arr();
+  ivec4 src_let[4] = ivec4[4](ivec4(0), ivec4(0), ivec4(0), ivec4(0));
+  dst = src_let;
+  dst = src_function;
+  dst = src_private;
+  dst = src_workgroup;
+  dst = ret_struct_arr().arr;
+  dst = v.tint_symbol_1.arr;
+  dst = v_1.tint_symbol_3.arr;
+  int src_nested[4][3][2] = int[4][3][2](int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)), int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)), int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)), int[3][2](int[2](0, 0), int[2](0, 0), int[2](0, 0)));
+  dst_nested = src_nested;
+}
+void tint_symbol_inner(uint tint_local_index) {
+  {
+    uint v_2 = 0u;
+    v_2 = tint_local_index;
+    while(true) {
+      uint v_3 = v_2;
+      if ((v_3 >= 4u)) {
+        break;
+      }
+      src_workgroup[v_3] = ivec4(0);
+      dst[v_3] = ivec4(0);
+      {
+        v_2 = (v_3 + 1u);
+      }
+      continue;
+    }
+  }
+  {
+    uint v_4 = 0u;
+    v_4 = tint_local_index;
+    while(true) {
+      uint v_5 = v_4;
+      if ((v_5 >= 24u)) {
+        break;
+      }
+      dst_nested[(v_5 / 6u)][((v_5 / 2u) % 3u)][(v_5 % 2u)] = 0;
+      {
+        v_4 = (v_5 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  ivec4 val[4] = ivec4[4](ivec4(0), ivec4(0), ivec4(0), ivec4(0));
+  foo(val);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/benchmark/uniformity-analysis-pointer-parameters.wgsl.expected.ir.glsl b/test/tint/benchmark/uniformity-analysis-pointer-parameters.wgsl.expected.ir.glsl
deleted file mode 100644
index 56f48c5..0000000
--- a/test/tint/benchmark/uniformity-analysis-pointer-parameters.wgsl.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
diff --git a/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..5647b45 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat2x2_f32/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,56 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct mat2x2_f32_std140 {
+  vec2 col0;
+  vec2 col1;
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  mat2x2_f32_std140 tint_symbol[4];
+} v;
+shared mat2 w[4];
+void f_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 4u)) {
+        break;
+      }
+      w[v_2] = mat2(vec2(0.0f), vec2(0.0f));
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  mat2x2_f32_std140 v_3[4] = v.tint_symbol;
+  mat2 v_4[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)));
+  {
+    uint v_5 = 0u;
+    v_5 = 0u;
+    while(true) {
+      uint v_6 = v_5;
+      if ((v_6 >= 4u)) {
+        break;
+      }
+      v_4[v_6] = mat2(v_3[v_6].col0, v_3[v_6].col1);
+      {
+        v_5 = (v_6 + 1u);
+      }
+      continue;
+    }
+  }
+  w = v_4;
+  w[1] = mat2(v.tint_symbol[2].col0, v.tint_symbol[2].col1);
+  w[1][0] = v.tint_symbol[0].col1.yx;
+  w[1][0][0u] = v.tint_symbol[0].col1.x;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..a7507ae 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat2x3_f16/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,62 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct mat2x3_f16_std140 {
+  f16vec3 col0;
+  f16vec3 col1;
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  mat2x3_f16_std140 tint_symbol[4];
+} v;
+layout(binding = 1, std430)
+buffer tint_symbol_3_1_ssbo {
+  float16_t tint_symbol_2;
+} v_1;
+shared f16mat2x3 w[4];
+void f_inner(uint tint_local_index) {
+  {
+    uint v_2 = 0u;
+    v_2 = tint_local_index;
+    while(true) {
+      uint v_3 = v_2;
+      if ((v_3 >= 4u)) {
+        break;
+      }
+      w[v_3] = f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf));
+      {
+        v_2 = (v_3 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  mat2x3_f16_std140 v_4[4] = v.tint_symbol;
+  f16mat2x3 v_5[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)));
+  {
+    uint v_6 = 0u;
+    v_6 = 0u;
+    while(true) {
+      uint v_7 = v_6;
+      if ((v_7 >= 4u)) {
+        break;
+      }
+      v_5[v_7] = f16mat2x3(v_4[v_7].col0, v_4[v_7].col1);
+      {
+        v_6 = (v_7 + 1u);
+      }
+      continue;
+    }
+  }
+  w = v_5;
+  w[1] = f16mat2x3(v.tint_symbol[2].col0, v.tint_symbol[2].col1);
+  w[1][0] = v.tint_symbol[0].col1.zxy;
+  w[1][0][0u] = v.tint_symbol[0].col1.x;
+  v_1.tint_symbol_2 = w[1][0].x;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..a9a3150 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat2x3_f32/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,56 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct mat2x3_f32_std140 {
+  vec3 col0;
+  vec3 col1;
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  mat2x3_f32_std140 tint_symbol[4];
+} v;
+shared mat2x3 w[4];
+void f_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 4u)) {
+        break;
+      }
+      w[v_2] = mat2x3(vec3(0.0f), vec3(0.0f));
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  mat2x3_f32_std140 v_3[4] = v.tint_symbol;
+  mat2x3 v_4[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)));
+  {
+    uint v_5 = 0u;
+    v_5 = 0u;
+    while(true) {
+      uint v_6 = v_5;
+      if ((v_6 >= 4u)) {
+        break;
+      }
+      v_4[v_6] = mat2x3(v_3[v_6].col0, v_3[v_6].col1);
+      {
+        v_5 = (v_6 + 1u);
+      }
+      continue;
+    }
+  }
+  w = v_4;
+  w[1] = mat2x3(v.tint_symbol[2].col0, v.tint_symbol[2].col1);
+  w[1][0] = v.tint_symbol[0].col1.zxy;
+  w[1][0][0u] = v.tint_symbol[0].col1.x;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..71a158b 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat2x4_f16/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,57 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct mat2x4_f16_std140 {
+  f16vec4 col0;
+  f16vec4 col1;
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  mat2x4_f16_std140 tint_symbol[4];
+} v;
+shared f16mat2x4 w[4];
+void f_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 4u)) {
+        break;
+      }
+      w[v_2] = f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf));
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  mat2x4_f16_std140 v_3[4] = v.tint_symbol;
+  f16mat2x4 v_4[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)));
+  {
+    uint v_5 = 0u;
+    v_5 = 0u;
+    while(true) {
+      uint v_6 = v_5;
+      if ((v_6 >= 4u)) {
+        break;
+      }
+      v_4[v_6] = f16mat2x4(v_3[v_6].col0, v_3[v_6].col1);
+      {
+        v_5 = (v_6 + 1u);
+      }
+      continue;
+    }
+  }
+  w = v_4;
+  w[1] = f16mat2x4(v.tint_symbol[2].col0, v.tint_symbol[2].col1);
+  w[1][0] = v.tint_symbol[0].col1.ywxz;
+  w[1][0][0u] = v.tint_symbol[0].col1.x;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..27ea5f7 100644
--- a/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat2x4_f32/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,33 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+layout(binding = 0, std140)
+uniform tint_symbol_1_1_ubo {
+  mat2x4 tint_symbol[4];
+} v;
+shared mat2x4 w[4];
+void f_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 4u)) {
+        break;
+      }
+      w[v_2] = mat2x4(vec4(0.0f), vec4(0.0f));
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  w = v.tint_symbol;
+  w[1] = v.tint_symbol[2];
+  w[1][0] = v.tint_symbol[0][1].ywxz;
+  w[1][0][0u] = v.tint_symbol[0][1].x;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..c646187 100644
--- a/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat3x3_f32/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,57 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct mat3x3_f32_std140 {
+  vec3 col0;
+  vec3 col1;
+  vec3 col2;
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  mat3x3_f32_std140 tint_symbol[4];
+} v;
+shared mat3 w[4];
+void f_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 4u)) {
+        break;
+      }
+      w[v_2] = mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f));
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  mat3x3_f32_std140 v_3[4] = v.tint_symbol;
+  mat3 v_4[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)));
+  {
+    uint v_5 = 0u;
+    v_5 = 0u;
+    while(true) {
+      uint v_6 = v_5;
+      if ((v_6 >= 4u)) {
+        break;
+      }
+      v_4[v_6] = mat3(v_3[v_6].col0, v_3[v_6].col1, v_3[v_6].col2);
+      {
+        v_5 = (v_6 + 1u);
+      }
+      continue;
+    }
+  }
+  w = v_4;
+  w[1] = mat3(v.tint_symbol[2].col0, v.tint_symbol[2].col1, v.tint_symbol[2].col2);
+  w[1][0] = v.tint_symbol[0].col1.zxy;
+  w[1][0][0u] = v.tint_symbol[0].col1.x;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..eec3eb5 100644
--- a/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat3x4_f32/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,33 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+layout(binding = 0, std140)
+uniform tint_symbol_1_1_ubo {
+  mat3x4 tint_symbol[4];
+} v;
+shared mat3x4 w[4];
+void f_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 4u)) {
+        break;
+      }
+      w[v_2] = mat3x4(vec4(0.0f), vec4(0.0f), vec4(0.0f));
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  w = v.tint_symbol;
+  w[1] = v.tint_symbol[2];
+  w[1][0] = v.tint_symbol[0][1].ywxz;
+  w[1][0][0u] = v.tint_symbol[0][1].x;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..59388f0 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat4x2_f16/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,59 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct mat4x2_f16_std140 {
+  f16vec2 col0;
+  f16vec2 col1;
+  f16vec2 col2;
+  f16vec2 col3;
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  mat4x2_f16_std140 tint_symbol[4];
+} v;
+shared f16mat4x2 w[4];
+void f_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 4u)) {
+        break;
+      }
+      w[v_2] = f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf));
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  mat4x2_f16_std140 v_3[4] = v.tint_symbol;
+  f16mat4x2 v_4[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)));
+  {
+    uint v_5 = 0u;
+    v_5 = 0u;
+    while(true) {
+      uint v_6 = v_5;
+      if ((v_6 >= 4u)) {
+        break;
+      }
+      v_4[v_6] = f16mat4x2(v_3[v_6].col0, v_3[v_6].col1, v_3[v_6].col2, v_3[v_6].col3);
+      {
+        v_5 = (v_6 + 1u);
+      }
+      continue;
+    }
+  }
+  w = v_4;
+  w[1] = f16mat4x2(v.tint_symbol[2].col0, v.tint_symbol[2].col1, v.tint_symbol[2].col2, v.tint_symbol[2].col3);
+  w[1][0] = v.tint_symbol[0].col1.yx;
+  w[1][0][0u] = v.tint_symbol[0].col1.x;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..e3574f7 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat4x2_f32/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,58 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct mat4x2_f32_std140 {
+  vec2 col0;
+  vec2 col1;
+  vec2 col2;
+  vec2 col3;
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  mat4x2_f32_std140 tint_symbol[4];
+} v;
+shared mat4x2 w[4];
+void f_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 4u)) {
+        break;
+      }
+      w[v_2] = mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f));
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  mat4x2_f32_std140 v_3[4] = v.tint_symbol;
+  mat4x2 v_4[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)));
+  {
+    uint v_5 = 0u;
+    v_5 = 0u;
+    while(true) {
+      uint v_6 = v_5;
+      if ((v_6 >= 4u)) {
+        break;
+      }
+      v_4[v_6] = mat4x2(v_3[v_6].col0, v_3[v_6].col1, v_3[v_6].col2, v_3[v_6].col3);
+      {
+        v_5 = (v_6 + 1u);
+      }
+      continue;
+    }
+  }
+  w = v_4;
+  w[1] = mat4x2(v.tint_symbol[2].col0, v.tint_symbol[2].col1, v.tint_symbol[2].col2, v.tint_symbol[2].col3);
+  w[1][0] = v.tint_symbol[0].col1.yx;
+  w[1][0][0u] = v.tint_symbol[0].col1.x;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..9a8f6fa 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat4x3_f16/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,59 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct mat4x3_f16_std140 {
+  f16vec3 col0;
+  f16vec3 col1;
+  f16vec3 col2;
+  f16vec3 col3;
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  mat4x3_f16_std140 tint_symbol[4];
+} v;
+shared f16mat4x3 w[4];
+void f_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 4u)) {
+        break;
+      }
+      w[v_2] = f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf));
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  mat4x3_f16_std140 v_3[4] = v.tint_symbol;
+  f16mat4x3 v_4[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)));
+  {
+    uint v_5 = 0u;
+    v_5 = 0u;
+    while(true) {
+      uint v_6 = v_5;
+      if ((v_6 >= 4u)) {
+        break;
+      }
+      v_4[v_6] = f16mat4x3(v_3[v_6].col0, v_3[v_6].col1, v_3[v_6].col2, v_3[v_6].col3);
+      {
+        v_5 = (v_6 + 1u);
+      }
+      continue;
+    }
+  }
+  w = v_4;
+  w[1] = f16mat4x3(v.tint_symbol[2].col0, v.tint_symbol[2].col1, v.tint_symbol[2].col2, v.tint_symbol[2].col3);
+  w[1][0] = v.tint_symbol[0].col1.zxy;
+  w[1][0][0u] = v.tint_symbol[0].col1.x;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..98fba37 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat4x3_f32/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,58 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct mat4x3_f32_std140 {
+  vec3 col0;
+  vec3 col1;
+  vec3 col2;
+  vec3 col3;
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  mat4x3_f32_std140 tint_symbol[4];
+} v;
+shared mat4x3 w[4];
+void f_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 4u)) {
+        break;
+      }
+      w[v_2] = mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f));
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  mat4x3_f32_std140 v_3[4] = v.tint_symbol;
+  mat4x3 v_4[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)));
+  {
+    uint v_5 = 0u;
+    v_5 = 0u;
+    while(true) {
+      uint v_6 = v_5;
+      if ((v_6 >= 4u)) {
+        break;
+      }
+      v_4[v_6] = mat4x3(v_3[v_6].col0, v_3[v_6].col1, v_3[v_6].col2, v_3[v_6].col3);
+      {
+        v_5 = (v_6 + 1u);
+      }
+      continue;
+    }
+  }
+  w = v_4;
+  w[1] = mat4x3(v.tint_symbol[2].col0, v.tint_symbol[2].col1, v.tint_symbol[2].col2, v.tint_symbol[2].col3);
+  w[1][0] = v.tint_symbol[0].col1.zxy;
+  w[1][0][0u] = v.tint_symbol[0].col1.x;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..73d2e6b 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat4x4_f16/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,59 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct mat4x4_f16_std140 {
+  f16vec4 col0;
+  f16vec4 col1;
+  f16vec4 col2;
+  f16vec4 col3;
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  mat4x4_f16_std140 tint_symbol[4];
+} v;
+shared f16mat4 w[4];
+void f_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 4u)) {
+        break;
+      }
+      w[v_2] = f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf));
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  mat4x4_f16_std140 v_3[4] = v.tint_symbol;
+  f16mat4 v_4[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)));
+  {
+    uint v_5 = 0u;
+    v_5 = 0u;
+    while(true) {
+      uint v_6 = v_5;
+      if ((v_6 >= 4u)) {
+        break;
+      }
+      v_4[v_6] = f16mat4(v_3[v_6].col0, v_3[v_6].col1, v_3[v_6].col2, v_3[v_6].col3);
+      {
+        v_5 = (v_6 + 1u);
+      }
+      continue;
+    }
+  }
+  w = v_4;
+  w[1] = f16mat4(v.tint_symbol[2].col0, v.tint_symbol[2].col1, v.tint_symbol[2].col2, v.tint_symbol[2].col3);
+  w[1][0] = v.tint_symbol[0].col1.ywxz;
+  w[1][0][0u] = v.tint_symbol[0].col1.x;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..af190ed 100644
--- a/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/array/mat4x4_f32/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,33 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+layout(binding = 0, std140)
+uniform tint_symbol_1_1_ubo {
+  mat4 tint_symbol[4];
+} v;
+shared mat4 w[4];
+void f_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 4u)) {
+        break;
+      }
+      w[v_2] = mat4(vec4(0.0f), vec4(0.0f), vec4(0.0f), vec4(0.0f));
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  w = v.tint_symbol;
+  w[1] = v.tint_symbol[2];
+  w[1][0] = v.tint_symbol[0][1].ywxz;
+  w[1][0][0u] = v.tint_symbol[0][1].x;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..25938ea 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x2_f16/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,68 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct S_std140 {
+  int before;
+  f16vec2 m_col0;
+  f16vec2 m_col1;
+  int after;
+};
+
+struct S {
+  int before;
+  f16mat2 m;
+  int after;
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  S_std140 tint_symbol[4];
+} v;
+shared S w[4];
+S tint_convert_S(S_std140 tint_input) {
+  return S(tint_input.before, f16mat2(tint_input.m_col0, tint_input.m_col1), tint_input.after);
+}
+void f_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 4u)) {
+        break;
+      }
+      w[v_2] = S(0, f16mat2(f16vec2(0.0hf), f16vec2(0.0hf)), 0);
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  S_std140 v_3[4] = v.tint_symbol;
+  S v_4[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));
+  {
+    uint v_5 = 0u;
+    v_5 = 0u;
+    while(true) {
+      uint v_6 = v_5;
+      if ((v_6 >= 4u)) {
+        break;
+      }
+      v_4[v_6] = tint_convert_S(v_3[v_6]);
+      {
+        v_5 = (v_6 + 1u);
+      }
+      continue;
+    }
+  }
+  w = v_4;
+  w[1] = tint_convert_S(v.tint_symbol[2]);
+  w[3].m = f16mat2(v.tint_symbol[2].m_col0, v.tint_symbol[2].m_col1);
+  w[1].m[0] = v.tint_symbol[0].m_col1.yx;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..3faa74f 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x2_f32/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,67 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct S_std140 {
+  int before;
+  vec2 m_col0;
+  vec2 m_col1;
+  int after;
+};
+
+struct S {
+  int before;
+  mat2 m;
+  int after;
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  S_std140 tint_symbol[4];
+} v;
+shared S w[4];
+S tint_convert_S(S_std140 tint_input) {
+  return S(tint_input.before, mat2(tint_input.m_col0, tint_input.m_col1), tint_input.after);
+}
+void f_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 4u)) {
+        break;
+      }
+      w[v_2] = S(0, mat2(vec2(0.0f), vec2(0.0f)), 0);
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  S_std140 v_3[4] = v.tint_symbol;
+  S v_4[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));
+  {
+    uint v_5 = 0u;
+    v_5 = 0u;
+    while(true) {
+      uint v_6 = v_5;
+      if ((v_6 >= 4u)) {
+        break;
+      }
+      v_4[v_6] = tint_convert_S(v_3[v_6]);
+      {
+        v_5 = (v_6 + 1u);
+      }
+      continue;
+    }
+  }
+  w = v_4;
+  w[1] = tint_convert_S(v.tint_symbol[2]);
+  w[3].m = mat2(v.tint_symbol[2].m_col0, v.tint_symbol[2].m_col1);
+  w[1].m[0] = v.tint_symbol[0].m_col1.yx;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..c140dce 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x3_f16/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,68 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct S_std140 {
+  int before;
+  f16vec3 m_col0;
+  f16vec3 m_col1;
+  int after;
+};
+
+struct S {
+  int before;
+  f16mat2x3 m;
+  int after;
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  S_std140 tint_symbol[4];
+} v;
+shared S w[4];
+S tint_convert_S(S_std140 tint_input) {
+  return S(tint_input.before, f16mat2x3(tint_input.m_col0, tint_input.m_col1), tint_input.after);
+}
+void f_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 4u)) {
+        break;
+      }
+      w[v_2] = S(0, f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf)), 0);
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  S_std140 v_3[4] = v.tint_symbol;
+  S v_4[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));
+  {
+    uint v_5 = 0u;
+    v_5 = 0u;
+    while(true) {
+      uint v_6 = v_5;
+      if ((v_6 >= 4u)) {
+        break;
+      }
+      v_4[v_6] = tint_convert_S(v_3[v_6]);
+      {
+        v_5 = (v_6 + 1u);
+      }
+      continue;
+    }
+  }
+  w = v_4;
+  w[1] = tint_convert_S(v.tint_symbol[2]);
+  w[3].m = f16mat2x3(v.tint_symbol[2].m_col0, v.tint_symbol[2].m_col1);
+  w[1].m[0] = v.tint_symbol[0].m_col1.zxy;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..f08d657 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x3_f32/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,67 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct S_std140 {
+  int before;
+  vec3 m_col0;
+  vec3 m_col1;
+  int after;
+};
+
+struct S {
+  int before;
+  mat2x3 m;
+  int after;
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  S_std140 tint_symbol[4];
+} v;
+shared S w[4];
+S tint_convert_S(S_std140 tint_input) {
+  return S(tint_input.before, mat2x3(tint_input.m_col0, tint_input.m_col1), tint_input.after);
+}
+void f_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 4u)) {
+        break;
+      }
+      w[v_2] = S(0, mat2x3(vec3(0.0f), vec3(0.0f)), 0);
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  S_std140 v_3[4] = v.tint_symbol;
+  S v_4[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));
+  {
+    uint v_5 = 0u;
+    v_5 = 0u;
+    while(true) {
+      uint v_6 = v_5;
+      if ((v_6 >= 4u)) {
+        break;
+      }
+      v_4[v_6] = tint_convert_S(v_3[v_6]);
+      {
+        v_5 = (v_6 + 1u);
+      }
+      continue;
+    }
+  }
+  w = v_4;
+  w[1] = tint_convert_S(v.tint_symbol[2]);
+  w[3].m = mat2x3(v.tint_symbol[2].m_col0, v.tint_symbol[2].m_col1);
+  w[1].m[0] = v.tint_symbol[0].m_col1.zxy;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..a59c365 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x4_f16/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,68 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct S_std140 {
+  int before;
+  f16vec4 m_col0;
+  f16vec4 m_col1;
+  int after;
+};
+
+struct S {
+  int before;
+  f16mat2x4 m;
+  int after;
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  S_std140 tint_symbol[4];
+} v;
+shared S w[4];
+S tint_convert_S(S_std140 tint_input) {
+  return S(tint_input.before, f16mat2x4(tint_input.m_col0, tint_input.m_col1), tint_input.after);
+}
+void f_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 4u)) {
+        break;
+      }
+      w[v_2] = S(0, f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf)), 0);
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  S_std140 v_3[4] = v.tint_symbol;
+  S v_4[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));
+  {
+    uint v_5 = 0u;
+    v_5 = 0u;
+    while(true) {
+      uint v_6 = v_5;
+      if ((v_6 >= 4u)) {
+        break;
+      }
+      v_4[v_6] = tint_convert_S(v_3[v_6]);
+      {
+        v_5 = (v_6 + 1u);
+      }
+      continue;
+    }
+  }
+  w = v_4;
+  w[1] = tint_convert_S(v.tint_symbol[2]);
+  w[3].m = f16mat2x4(v.tint_symbol[2].m_col0, v.tint_symbol[2].m_col1);
+  w[1].m[0] = v.tint_symbol[0].m_col1.ywxz;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..b5c449e 100644
--- a/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat2x4_f32/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,40 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct S {
+  int before;
+  mat2x4 m;
+  int after;
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_1_ubo {
+  S tint_symbol[4];
+} v;
+shared S w[4];
+void f_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 4u)) {
+        break;
+      }
+      w[v_2] = S(0, mat2x4(vec4(0.0f), vec4(0.0f)), 0);
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  w = v.tint_symbol;
+  w[1] = v.tint_symbol[2];
+  w[3].m = v.tint_symbol[2].m;
+  w[1].m[0] = v.tint_symbol[0].m[1].ywxz;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..e73750d 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x2_f16/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,69 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct S_std140 {
+  int before;
+  f16vec2 m_col0;
+  f16vec2 m_col1;
+  f16vec2 m_col2;
+  int after;
+};
+
+struct S {
+  int before;
+  f16mat3x2 m;
+  int after;
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  S_std140 tint_symbol[4];
+} v;
+shared S w[4];
+S tint_convert_S(S_std140 tint_input) {
+  return S(tint_input.before, f16mat3x2(tint_input.m_col0, tint_input.m_col1, tint_input.m_col2), tint_input.after);
+}
+void f_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 4u)) {
+        break;
+      }
+      w[v_2] = S(0, f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf)), 0);
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  S_std140 v_3[4] = v.tint_symbol;
+  S v_4[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));
+  {
+    uint v_5 = 0u;
+    v_5 = 0u;
+    while(true) {
+      uint v_6 = v_5;
+      if ((v_6 >= 4u)) {
+        break;
+      }
+      v_4[v_6] = tint_convert_S(v_3[v_6]);
+      {
+        v_5 = (v_6 + 1u);
+      }
+      continue;
+    }
+  }
+  w = v_4;
+  w[1] = tint_convert_S(v.tint_symbol[2]);
+  w[3].m = f16mat3x2(v.tint_symbol[2].m_col0, v.tint_symbol[2].m_col1, v.tint_symbol[2].m_col2);
+  w[1].m[0] = v.tint_symbol[0].m_col1.yx;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..b688154 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x2_f32/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,68 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct S_std140 {
+  int before;
+  vec2 m_col0;
+  vec2 m_col1;
+  vec2 m_col2;
+  int after;
+};
+
+struct S {
+  int before;
+  mat3x2 m;
+  int after;
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  S_std140 tint_symbol[4];
+} v;
+shared S w[4];
+S tint_convert_S(S_std140 tint_input) {
+  return S(tint_input.before, mat3x2(tint_input.m_col0, tint_input.m_col1, tint_input.m_col2), tint_input.after);
+}
+void f_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 4u)) {
+        break;
+      }
+      w[v_2] = S(0, mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f)), 0);
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  S_std140 v_3[4] = v.tint_symbol;
+  S v_4[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));
+  {
+    uint v_5 = 0u;
+    v_5 = 0u;
+    while(true) {
+      uint v_6 = v_5;
+      if ((v_6 >= 4u)) {
+        break;
+      }
+      v_4[v_6] = tint_convert_S(v_3[v_6]);
+      {
+        v_5 = (v_6 + 1u);
+      }
+      continue;
+    }
+  }
+  w = v_4;
+  w[1] = tint_convert_S(v.tint_symbol[2]);
+  w[3].m = mat3x2(v.tint_symbol[2].m_col0, v.tint_symbol[2].m_col1, v.tint_symbol[2].m_col2);
+  w[1].m[0] = v.tint_symbol[0].m_col1.yx;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..228b57f 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x3_f16/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,69 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct S_std140 {
+  int before;
+  f16vec3 m_col0;
+  f16vec3 m_col1;
+  f16vec3 m_col2;
+  int after;
+};
+
+struct S {
+  int before;
+  f16mat3 m;
+  int after;
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  S_std140 tint_symbol[4];
+} v;
+shared S w[4];
+S tint_convert_S(S_std140 tint_input) {
+  return S(tint_input.before, f16mat3(tint_input.m_col0, tint_input.m_col1, tint_input.m_col2), tint_input.after);
+}
+void f_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 4u)) {
+        break;
+      }
+      w[v_2] = S(0, f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf)), 0);
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  S_std140 v_3[4] = v.tint_symbol;
+  S v_4[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));
+  {
+    uint v_5 = 0u;
+    v_5 = 0u;
+    while(true) {
+      uint v_6 = v_5;
+      if ((v_6 >= 4u)) {
+        break;
+      }
+      v_4[v_6] = tint_convert_S(v_3[v_6]);
+      {
+        v_5 = (v_6 + 1u);
+      }
+      continue;
+    }
+  }
+  w = v_4;
+  w[1] = tint_convert_S(v.tint_symbol[2]);
+  w[3].m = f16mat3(v.tint_symbol[2].m_col0, v.tint_symbol[2].m_col1, v.tint_symbol[2].m_col2);
+  w[1].m[0] = v.tint_symbol[0].m_col1.zxy;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..46d08d4 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x3_f32/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,68 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct S_std140 {
+  int before;
+  vec3 m_col0;
+  vec3 m_col1;
+  vec3 m_col2;
+  int after;
+};
+
+struct S {
+  int before;
+  mat3 m;
+  int after;
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  S_std140 tint_symbol[4];
+} v;
+shared S w[4];
+S tint_convert_S(S_std140 tint_input) {
+  return S(tint_input.before, mat3(tint_input.m_col0, tint_input.m_col1, tint_input.m_col2), tint_input.after);
+}
+void f_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 4u)) {
+        break;
+      }
+      w[v_2] = S(0, mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f)), 0);
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  S_std140 v_3[4] = v.tint_symbol;
+  S v_4[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));
+  {
+    uint v_5 = 0u;
+    v_5 = 0u;
+    while(true) {
+      uint v_6 = v_5;
+      if ((v_6 >= 4u)) {
+        break;
+      }
+      v_4[v_6] = tint_convert_S(v_3[v_6]);
+      {
+        v_5 = (v_6 + 1u);
+      }
+      continue;
+    }
+  }
+  w = v_4;
+  w[1] = tint_convert_S(v.tint_symbol[2]);
+  w[3].m = mat3(v.tint_symbol[2].m_col0, v.tint_symbol[2].m_col1, v.tint_symbol[2].m_col2);
+  w[1].m[0] = v.tint_symbol[0].m_col1.zxy;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..bf146ef 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x4_f16/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,69 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct S_std140 {
+  int before;
+  f16vec4 m_col0;
+  f16vec4 m_col1;
+  f16vec4 m_col2;
+  int after;
+};
+
+struct S {
+  int before;
+  f16mat3x4 m;
+  int after;
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  S_std140 tint_symbol[4];
+} v;
+shared S w[4];
+S tint_convert_S(S_std140 tint_input) {
+  return S(tint_input.before, f16mat3x4(tint_input.m_col0, tint_input.m_col1, tint_input.m_col2), tint_input.after);
+}
+void f_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 4u)) {
+        break;
+      }
+      w[v_2] = S(0, f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf)), 0);
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  S_std140 v_3[4] = v.tint_symbol;
+  S v_4[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));
+  {
+    uint v_5 = 0u;
+    v_5 = 0u;
+    while(true) {
+      uint v_6 = v_5;
+      if ((v_6 >= 4u)) {
+        break;
+      }
+      v_4[v_6] = tint_convert_S(v_3[v_6]);
+      {
+        v_5 = (v_6 + 1u);
+      }
+      continue;
+    }
+  }
+  w = v_4;
+  w[1] = tint_convert_S(v.tint_symbol[2]);
+  w[3].m = f16mat3x4(v.tint_symbol[2].m_col0, v.tint_symbol[2].m_col1, v.tint_symbol[2].m_col2);
+  w[1].m[0] = v.tint_symbol[0].m_col1.ywxz;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..d441b7a 100644
--- a/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat3x4_f32/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,40 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct S {
+  int before;
+  mat3x4 m;
+  int after;
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_1_ubo {
+  S tint_symbol[4];
+} v;
+shared S w[4];
+void f_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 4u)) {
+        break;
+      }
+      w[v_2] = S(0, mat3x4(vec4(0.0f), vec4(0.0f), vec4(0.0f)), 0);
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  w = v.tint_symbol;
+  w[1] = v.tint_symbol[2];
+  w[3].m = v.tint_symbol[2].m;
+  w[1].m[0] = v.tint_symbol[0].m[1].ywxz;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..89153e5 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x2_f16/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,70 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct S_std140 {
+  int before;
+  f16vec2 m_col0;
+  f16vec2 m_col1;
+  f16vec2 m_col2;
+  f16vec2 m_col3;
+  int after;
+};
+
+struct S {
+  int before;
+  f16mat4x2 m;
+  int after;
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  S_std140 tint_symbol[4];
+} v;
+shared S w[4];
+S tint_convert_S(S_std140 tint_input) {
+  return S(tint_input.before, f16mat4x2(tint_input.m_col0, tint_input.m_col1, tint_input.m_col2, tint_input.m_col3), tint_input.after);
+}
+void f_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 4u)) {
+        break;
+      }
+      w[v_2] = S(0, f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf)), 0);
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  S_std140 v_3[4] = v.tint_symbol;
+  S v_4[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));
+  {
+    uint v_5 = 0u;
+    v_5 = 0u;
+    while(true) {
+      uint v_6 = v_5;
+      if ((v_6 >= 4u)) {
+        break;
+      }
+      v_4[v_6] = tint_convert_S(v_3[v_6]);
+      {
+        v_5 = (v_6 + 1u);
+      }
+      continue;
+    }
+  }
+  w = v_4;
+  w[1] = tint_convert_S(v.tint_symbol[2]);
+  w[3].m = f16mat4x2(v.tint_symbol[2].m_col0, v.tint_symbol[2].m_col1, v.tint_symbol[2].m_col2, v.tint_symbol[2].m_col3);
+  w[1].m[0] = v.tint_symbol[0].m_col1.yx;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..6b93871 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x2_f32/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,69 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct S_std140 {
+  int before;
+  vec2 m_col0;
+  vec2 m_col1;
+  vec2 m_col2;
+  vec2 m_col3;
+  int after;
+};
+
+struct S {
+  int before;
+  mat4x2 m;
+  int after;
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  S_std140 tint_symbol[4];
+} v;
+shared S w[4];
+S tint_convert_S(S_std140 tint_input) {
+  return S(tint_input.before, mat4x2(tint_input.m_col0, tint_input.m_col1, tint_input.m_col2, tint_input.m_col3), tint_input.after);
+}
+void f_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 4u)) {
+        break;
+      }
+      w[v_2] = S(0, mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f)), 0);
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  S_std140 v_3[4] = v.tint_symbol;
+  S v_4[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));
+  {
+    uint v_5 = 0u;
+    v_5 = 0u;
+    while(true) {
+      uint v_6 = v_5;
+      if ((v_6 >= 4u)) {
+        break;
+      }
+      v_4[v_6] = tint_convert_S(v_3[v_6]);
+      {
+        v_5 = (v_6 + 1u);
+      }
+      continue;
+    }
+  }
+  w = v_4;
+  w[1] = tint_convert_S(v.tint_symbol[2]);
+  w[3].m = mat4x2(v.tint_symbol[2].m_col0, v.tint_symbol[2].m_col1, v.tint_symbol[2].m_col2, v.tint_symbol[2].m_col3);
+  w[1].m[0] = v.tint_symbol[0].m_col1.yx;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..d409357 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x3_f16/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,70 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct S_std140 {
+  int before;
+  f16vec3 m_col0;
+  f16vec3 m_col1;
+  f16vec3 m_col2;
+  f16vec3 m_col3;
+  int after;
+};
+
+struct S {
+  int before;
+  f16mat4x3 m;
+  int after;
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  S_std140 tint_symbol[4];
+} v;
+shared S w[4];
+S tint_convert_S(S_std140 tint_input) {
+  return S(tint_input.before, f16mat4x3(tint_input.m_col0, tint_input.m_col1, tint_input.m_col2, tint_input.m_col3), tint_input.after);
+}
+void f_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 4u)) {
+        break;
+      }
+      w[v_2] = S(0, f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf)), 0);
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  S_std140 v_3[4] = v.tint_symbol;
+  S v_4[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));
+  {
+    uint v_5 = 0u;
+    v_5 = 0u;
+    while(true) {
+      uint v_6 = v_5;
+      if ((v_6 >= 4u)) {
+        break;
+      }
+      v_4[v_6] = tint_convert_S(v_3[v_6]);
+      {
+        v_5 = (v_6 + 1u);
+      }
+      continue;
+    }
+  }
+  w = v_4;
+  w[1] = tint_convert_S(v.tint_symbol[2]);
+  w[3].m = f16mat4x3(v.tint_symbol[2].m_col0, v.tint_symbol[2].m_col1, v.tint_symbol[2].m_col2, v.tint_symbol[2].m_col3);
+  w[1].m[0] = v.tint_symbol[0].m_col1.zxy;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..aa4d762 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x3_f32/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,69 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct S_std140 {
+  int before;
+  vec3 m_col0;
+  vec3 m_col1;
+  vec3 m_col2;
+  vec3 m_col3;
+  int after;
+};
+
+struct S {
+  int before;
+  mat4x3 m;
+  int after;
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  S_std140 tint_symbol[4];
+} v;
+shared S w[4];
+S tint_convert_S(S_std140 tint_input) {
+  return S(tint_input.before, mat4x3(tint_input.m_col0, tint_input.m_col1, tint_input.m_col2, tint_input.m_col3), tint_input.after);
+}
+void f_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 4u)) {
+        break;
+      }
+      w[v_2] = S(0, mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f)), 0);
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  S_std140 v_3[4] = v.tint_symbol;
+  S v_4[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));
+  {
+    uint v_5 = 0u;
+    v_5 = 0u;
+    while(true) {
+      uint v_6 = v_5;
+      if ((v_6 >= 4u)) {
+        break;
+      }
+      v_4[v_6] = tint_convert_S(v_3[v_6]);
+      {
+        v_5 = (v_6 + 1u);
+      }
+      continue;
+    }
+  }
+  w = v_4;
+  w[1] = tint_convert_S(v.tint_symbol[2]);
+  w[3].m = mat4x3(v.tint_symbol[2].m_col0, v.tint_symbol[2].m_col1, v.tint_symbol[2].m_col2, v.tint_symbol[2].m_col3);
+  w[1].m[0] = v.tint_symbol[0].m_col1.zxy;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..8554ae0 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x4_f16/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,70 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct S_std140 {
+  int before;
+  f16vec4 m_col0;
+  f16vec4 m_col1;
+  f16vec4 m_col2;
+  f16vec4 m_col3;
+  int after;
+};
+
+struct S {
+  int before;
+  f16mat4 m;
+  int after;
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  S_std140 tint_symbol[4];
+} v;
+shared S w[4];
+S tint_convert_S(S_std140 tint_input) {
+  return S(tint_input.before, f16mat4(tint_input.m_col0, tint_input.m_col1, tint_input.m_col2, tint_input.m_col3), tint_input.after);
+}
+void f_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 4u)) {
+        break;
+      }
+      w[v_2] = S(0, f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf)), 0);
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  S_std140 v_3[4] = v.tint_symbol;
+  S v_4[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));
+  {
+    uint v_5 = 0u;
+    v_5 = 0u;
+    while(true) {
+      uint v_6 = v_5;
+      if ((v_6 >= 4u)) {
+        break;
+      }
+      v_4[v_6] = tint_convert_S(v_3[v_6]);
+      {
+        v_5 = (v_6 + 1u);
+      }
+      continue;
+    }
+  }
+  w = v_4;
+  w[1] = tint_convert_S(v.tint_symbol[2]);
+  w[3].m = f16mat4(v.tint_symbol[2].m_col0, v.tint_symbol[2].m_col1, v.tint_symbol[2].m_col2, v.tint_symbol[2].m_col3);
+  w[1].m[0] = v.tint_symbol[0].m_col1.ywxz;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..d27534a 100644
--- a/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/struct/mat4x4_f32/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,40 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct S {
+  int before;
+  mat4 m;
+  int after;
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_1_ubo {
+  S tint_symbol[4];
+} v;
+shared S w[4];
+void f_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 4u)) {
+        break;
+      }
+      w[v_2] = S(0, mat4(vec4(0.0f), vec4(0.0f), vec4(0.0f), vec4(0.0f)), 0);
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  w = v.tint_symbol;
+  w[1] = v.tint_symbol[2];
+  w[3].m = v.tint_symbol[2].m;
+  w[1].m[0] = v.tint_symbol[0].m[1].ywxz;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..e24d7a6 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x2_f16/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,23 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  f16vec2 tint_symbol_col0;
+  f16vec2 tint_symbol_col1;
+} v;
+shared f16mat2 w;
+void f_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    w = f16mat2(f16vec2(0.0hf), f16vec2(0.0hf));
+  }
+  barrier();
+  w = f16mat2(v.tint_symbol_col0, v.tint_symbol_col1);
+  w[1] = f16mat2(v.tint_symbol_col0, v.tint_symbol_col1)[0];
+  w[1] = f16mat2(v.tint_symbol_col0, v.tint_symbol_col1)[0].yx;
+  w[0][1] = f16mat2(v.tint_symbol_col0, v.tint_symbol_col1)[1][0];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..272942f 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x2_f32/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,22 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  vec2 tint_symbol_col0;
+  vec2 tint_symbol_col1;
+} v;
+shared mat2 w;
+void f_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    w = mat2(vec2(0.0f), vec2(0.0f));
+  }
+  barrier();
+  w = mat2(v.tint_symbol_col0, v.tint_symbol_col1);
+  w[1] = mat2(v.tint_symbol_col0, v.tint_symbol_col1)[0];
+  w[1] = mat2(v.tint_symbol_col0, v.tint_symbol_col1)[0].yx;
+  w[0][1] = mat2(v.tint_symbol_col0, v.tint_symbol_col1)[1][0];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..d6c470a 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x3_f16/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,23 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  f16vec3 tint_symbol_col0;
+  f16vec3 tint_symbol_col1;
+} v;
+shared f16mat2x3 w;
+void f_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    w = f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf));
+  }
+  barrier();
+  w = f16mat2x3(v.tint_symbol_col0, v.tint_symbol_col1);
+  w[1] = f16mat2x3(v.tint_symbol_col0, v.tint_symbol_col1)[0];
+  w[1] = f16mat2x3(v.tint_symbol_col0, v.tint_symbol_col1)[0].zxy;
+  w[0][1] = f16mat2x3(v.tint_symbol_col0, v.tint_symbol_col1)[1][0];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..445bb35 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x3_f32/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,22 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  vec3 tint_symbol_col0;
+  vec3 tint_symbol_col1;
+} v;
+shared mat2x3 w;
+void f_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    w = mat2x3(vec3(0.0f), vec3(0.0f));
+  }
+  barrier();
+  w = mat2x3(v.tint_symbol_col0, v.tint_symbol_col1);
+  w[1] = mat2x3(v.tint_symbol_col0, v.tint_symbol_col1)[0];
+  w[1] = mat2x3(v.tint_symbol_col0, v.tint_symbol_col1)[0].zxy;
+  w[0][1] = mat2x3(v.tint_symbol_col0, v.tint_symbol_col1)[1][0];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..714990a 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f16/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,23 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  f16vec4 tint_symbol_col0;
+  f16vec4 tint_symbol_col1;
+} v;
+shared f16mat2x4 w;
+void f_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    w = f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf));
+  }
+  barrier();
+  w = f16mat2x4(v.tint_symbol_col0, v.tint_symbol_col1);
+  w[1] = f16mat2x4(v.tint_symbol_col0, v.tint_symbol_col1)[0];
+  w[1] = f16mat2x4(v.tint_symbol_col0, v.tint_symbol_col1)[0].ywxz;
+  w[0][1] = f16mat2x4(v.tint_symbol_col0, v.tint_symbol_col1)[1][0];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..b5a74cc 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat2x4_f32/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,21 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+layout(binding = 0, std140)
+uniform tint_symbol_1_1_ubo {
+  mat2x4 tint_symbol;
+} v;
+shared mat2x4 w;
+void f_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    w = mat2x4(vec4(0.0f), vec4(0.0f));
+  }
+  barrier();
+  w = v.tint_symbol;
+  w[1] = v.tint_symbol[0];
+  w[1] = v.tint_symbol[0].ywxz;
+  w[0][1] = v.tint_symbol[1].x;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..5a5d518 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x2_f16/to_workgroup.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:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  f16vec2 tint_symbol_col0;
+  f16vec2 tint_symbol_col1;
+  f16vec2 tint_symbol_col2;
+} v;
+shared f16mat3x2 w;
+void f_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    w = f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf));
+  }
+  barrier();
+  w = f16mat3x2(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2);
+  w[1] = f16mat3x2(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2)[0];
+  w[1] = f16mat3x2(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2)[0].yx;
+  w[0][1] = f16mat3x2(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2)[1][0];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..85a9c39 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x2_f32/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,23 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  vec2 tint_symbol_col0;
+  vec2 tint_symbol_col1;
+  vec2 tint_symbol_col2;
+} v;
+shared mat3x2 w;
+void f_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    w = mat3x2(vec2(0.0f), vec2(0.0f), vec2(0.0f));
+  }
+  barrier();
+  w = mat3x2(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2);
+  w[1] = mat3x2(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2)[0];
+  w[1] = mat3x2(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2)[0].yx;
+  w[0][1] = mat3x2(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2)[1][0];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..8354048 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x3_f16/to_workgroup.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:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  f16vec3 tint_symbol_col0;
+  f16vec3 tint_symbol_col1;
+  f16vec3 tint_symbol_col2;
+} v;
+shared f16mat3 w;
+void f_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    w = f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf));
+  }
+  barrier();
+  w = f16mat3(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2);
+  w[1] = f16mat3(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2)[0];
+  w[1] = f16mat3(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2)[0].zxy;
+  w[0][1] = f16mat3(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2)[1][0];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..6cfa424 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x3_f32/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,23 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  vec3 tint_symbol_col0;
+  vec3 tint_symbol_col1;
+  vec3 tint_symbol_col2;
+} v;
+shared mat3 w;
+void f_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    w = mat3(vec3(0.0f), vec3(0.0f), vec3(0.0f));
+  }
+  barrier();
+  w = mat3(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2);
+  w[1] = mat3(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2)[0];
+  w[1] = mat3(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2)[0].zxy;
+  w[0][1] = mat3(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2)[1][0];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..5589792 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f16/to_workgroup.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:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  f16vec4 tint_symbol_col0;
+  f16vec4 tint_symbol_col1;
+  f16vec4 tint_symbol_col2;
+} v;
+shared f16mat3x4 w;
+void f_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    w = f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf));
+  }
+  barrier();
+  w = f16mat3x4(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2);
+  w[1] = f16mat3x4(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2)[0];
+  w[1] = f16mat3x4(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2)[0].ywxz;
+  w[0][1] = f16mat3x4(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2)[1][0];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..b60faed 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat3x4_f32/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,21 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+layout(binding = 0, std140)
+uniform tint_symbol_1_1_ubo {
+  mat3x4 tint_symbol;
+} v;
+shared mat3x4 w;
+void f_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    w = mat3x4(vec4(0.0f), vec4(0.0f), vec4(0.0f));
+  }
+  barrier();
+  w = v.tint_symbol;
+  w[1] = v.tint_symbol[0];
+  w[1] = v.tint_symbol[0].ywxz;
+  w[0][1] = v.tint_symbol[1].x;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..609e122 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x2_f16/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,25 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  f16vec2 tint_symbol_col0;
+  f16vec2 tint_symbol_col1;
+  f16vec2 tint_symbol_col2;
+  f16vec2 tint_symbol_col3;
+} v;
+shared f16mat4x2 w;
+void f_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    w = f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf));
+  }
+  barrier();
+  w = f16mat4x2(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2, v.tint_symbol_col3);
+  w[1] = f16mat4x2(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2, v.tint_symbol_col3)[0];
+  w[1] = f16mat4x2(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2, v.tint_symbol_col3)[0].yx;
+  w[0][1] = f16mat4x2(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2, v.tint_symbol_col3)[1][0];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..b242dc2 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x2_f32/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,24 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  vec2 tint_symbol_col0;
+  vec2 tint_symbol_col1;
+  vec2 tint_symbol_col2;
+  vec2 tint_symbol_col3;
+} v;
+shared mat4x2 w;
+void f_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    w = mat4x2(vec2(0.0f), vec2(0.0f), vec2(0.0f), vec2(0.0f));
+  }
+  barrier();
+  w = mat4x2(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2, v.tint_symbol_col3);
+  w[1] = mat4x2(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2, v.tint_symbol_col3)[0];
+  w[1] = mat4x2(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2, v.tint_symbol_col3)[0].yx;
+  w[0][1] = mat4x2(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2, v.tint_symbol_col3)[1][0];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..cc18329 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x3_f16/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,25 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  f16vec3 tint_symbol_col0;
+  f16vec3 tint_symbol_col1;
+  f16vec3 tint_symbol_col2;
+  f16vec3 tint_symbol_col3;
+} v;
+shared f16mat4x3 w;
+void f_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    w = f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf));
+  }
+  barrier();
+  w = f16mat4x3(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2, v.tint_symbol_col3);
+  w[1] = f16mat4x3(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2, v.tint_symbol_col3)[0];
+  w[1] = f16mat4x3(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2, v.tint_symbol_col3)[0].zxy;
+  w[0][1] = f16mat4x3(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2, v.tint_symbol_col3)[1][0];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..eb841d4 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x3_f32/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,24 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  vec3 tint_symbol_col0;
+  vec3 tint_symbol_col1;
+  vec3 tint_symbol_col2;
+  vec3 tint_symbol_col3;
+} v;
+shared mat4x3 w;
+void f_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    w = mat4x3(vec3(0.0f), vec3(0.0f), vec3(0.0f), vec3(0.0f));
+  }
+  barrier();
+  w = mat4x3(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2, v.tint_symbol_col3);
+  w[1] = mat4x3(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2, v.tint_symbol_col3)[0];
+  w[1] = mat4x3(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2, v.tint_symbol_col3)[0].zxy;
+  w[0][1] = mat4x3(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2, v.tint_symbol_col3)[1][0];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..e71565a 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f16/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,25 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+layout(binding = 0, std140)
+uniform tint_symbol_1_std140_1_ubo {
+  f16vec4 tint_symbol_col0;
+  f16vec4 tint_symbol_col1;
+  f16vec4 tint_symbol_col2;
+  f16vec4 tint_symbol_col3;
+} v;
+shared f16mat4 w;
+void f_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    w = f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf));
+  }
+  barrier();
+  w = f16mat4(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2, v.tint_symbol_col3);
+  w[1] = f16mat4(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2, v.tint_symbol_col3)[0];
+  w[1] = f16mat4(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2, v.tint_symbol_col3)[0].ywxz;
+  w[0][1] = f16mat4(v.tint_symbol_col0, v.tint_symbol_col1, v.tint_symbol_col2, v.tint_symbol_col3)[1][0];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_workgroup.wgsl.expected.ir.glsl b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_workgroup.wgsl.expected.ir.glsl
index 56f48c5..cb472af 100644
--- a/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/buffer/uniform/std140/unnested/mat4x4_f32/to_workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,21 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+layout(binding = 0, std140)
+uniform tint_symbol_1_1_ubo {
+  mat4 tint_symbol;
+} v;
+shared mat4 w;
+void f_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    w = mat4(vec4(0.0f), vec4(0.0f), vec4(0.0f), vec4(0.0f));
+  }
+  barrier();
+  w = v.tint_symbol;
+  w[1] = v.tint_symbol[0];
+  w[1] = v.tint_symbol[0].ywxz;
+  w[0][1] = v.tint_symbol[1].x;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/bug/chromium/40943165.wgsl.expected.ir.glsl b/test/tint/bug/chromium/40943165.wgsl.expected.ir.glsl
index 56f48c5..742f6f7 100644
--- a/test/tint/bug/chromium/40943165.wgsl.expected.ir.glsl
+++ b/test/tint/bug/chromium/40943165.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+shared mat2 W;
+void F_inner(uint tint_symbol) {
+  if ((tint_symbol == 0u)) {
+    W = mat2(vec2(0.0f), vec2(0.0f));
+  }
+  barrier();
+  W[0] = (W[0] + 0.0f);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  F_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.ir.glsl b/test/tint/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.ir.glsl
index 56f48c5..81ea061 100644
--- a/test/tint/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,47 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct UBO {
+  int dynamic_idx;
+};
+
+struct Result {
+  int tint_symbol;
+};
+
+struct S {
+  int data[64];
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_2_1_ubo {
+  UBO tint_symbol_1;
+} v;
+layout(binding = 1, std430)
+buffer tint_symbol_4_1_ssbo {
+  Result tint_symbol_3;
+} v_1;
+shared S s;
+void f_inner(uint tint_local_index) {
+  {
+    uint v_2 = 0u;
+    v_2 = tint_local_index;
+    while(true) {
+      uint v_3 = v_2;
+      if ((v_3 >= 64u)) {
+        break;
+      }
+      s.data[v_3] = 0;
+      {
+        v_2 = (v_3 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  v_1.tint_symbol_3.tint_symbol = s.data[v.tint_symbol_1.dynamic_idx];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.ir.glsl b/test/tint/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.ir.glsl
index 56f48c5..5fbb5bd 100644
--- a/test/tint/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,48 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct UBO {
+  int dynamic_idx;
+};
+
+struct Result {
+  int tint_symbol;
+};
+
+struct S {
+  int data[64];
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_2_1_ubo {
+  UBO tint_symbol_1;
+} v;
+layout(binding = 1, std430)
+buffer tint_symbol_4_1_ssbo {
+  Result tint_symbol_3;
+} v_1;
+shared S s;
+void f_inner(uint tint_local_index) {
+  {
+    uint v_2 = 0u;
+    v_2 = tint_local_index;
+    while(true) {
+      uint v_3 = v_2;
+      if ((v_3 >= 64u)) {
+        break;
+      }
+      s.data[v_3] = 0;
+      {
+        v_2 = (v_3 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  s.data[v.tint_symbol_1.dynamic_idx] = 1;
+  v_1.tint_symbol_3.tint_symbol = s.data[3];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  f_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/bug/tint/1926.wgsl.expected.ir.glsl b/test/tint/bug/tint/1926.wgsl.expected.ir.glsl
index 56f48c5..95ba3f4 100644
--- a/test/tint/bug/tint/1926.wgsl.expected.ir.glsl
+++ b/test/tint/bug/tint/1926.wgsl.expected.ir.glsl
@@ -1,11 +1,24 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+shared uint sh_atomic_failed;
+layout(binding = 4, std430)
+buffer tint_symbol_3_1_ssbo {
+  uint tint_symbol_2;
+} v;
+void tint_symbol_1_inner(uvec3 global_id, uvec3 local_id, uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    sh_atomic_failed = 0u;
+  }
+  barrier();
+  barrier();
+  uint v_1 = sh_atomic_failed;
+  barrier();
+  uint failed = v_1;
+  if ((local_id[0u] == 0u)) {
+    v.tint_symbol_2 = failed;
+  }
+}
+layout(local_size_x = 256, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_1_inner(gl_GlobalInvocationID, gl_LocalInvocationID, gl_LocalInvocationIndex);
+}
diff --git a/test/tint/builtins/gen/literal/storageBarrier/d87211.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/storageBarrier/d87211.wgsl.expected.ir.glsl
index 35040d5..4213a92 100644
--- a/test/tint/builtins/gen/literal/storageBarrier/d87211.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/storageBarrier/d87211.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: storageBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+void storageBarrier_d87211() {
+  barrier();
+  memoryBarrierBuffer();
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  storageBarrier_d87211();
+}
diff --git a/test/tint/builtins/gen/literal/textureBarrier/3d0f7e.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/textureBarrier/3d0f7e.wgsl.expected.ir.glsl
index 2280075..491fa86 100644
--- a/test/tint/builtins/gen/literal/textureBarrier/3d0f7e.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/textureBarrier/3d0f7e.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: textureBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+void textureBarrier_3d0f7e() {
+  barrier();
+  memoryBarrierImage();
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  textureBarrier_3d0f7e();
+}
diff --git a/test/tint/builtins/gen/literal/workgroupBarrier/a17f7f.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/workgroupBarrier/a17f7f.wgsl.expected.ir.glsl
index 56f48c5..50a1d2d 100644
--- a/test/tint/builtins/gen/literal/workgroupBarrier/a17f7f.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/workgroupBarrier/a17f7f.wgsl.expected.ir.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+void workgroupBarrier_a17f7f() {
+  barrier();
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  workgroupBarrier_a17f7f();
+}
diff --git a/test/tint/builtins/gen/literal/workgroupUniformLoad/37307c.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/workgroupUniformLoad/37307c.wgsl.expected.ir.glsl
index 56f48c5..d7f6512 100644
--- a/test/tint/builtins/gen/literal/workgroupUniformLoad/37307c.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/workgroupUniformLoad/37307c.wgsl.expected.ir.glsl
@@ -1,11 +1,25 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+  uint tint_symbol;
+} v;
+shared uint arg_0;
+uint workgroupUniformLoad_37307c() {
+  barrier();
+  uint v_1 = arg_0;
+  barrier();
+  uint res = v_1;
+  return res;
+}
+void compute_main_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    arg_0 = 0u;
+  }
+  barrier();
+  v.tint_symbol = workgroupUniformLoad_37307c();
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  compute_main_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/builtins/gen/literal/workgroupUniformLoad/7a857c.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/workgroupUniformLoad/7a857c.wgsl.expected.ir.glsl
index 56f48c5..fedfe45 100644
--- a/test/tint/builtins/gen/literal/workgroupUniformLoad/7a857c.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/workgroupUniformLoad/7a857c.wgsl.expected.ir.glsl
@@ -1,11 +1,25 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+  float tint_symbol;
+} v;
+shared float arg_0;
+float workgroupUniformLoad_7a857c() {
+  barrier();
+  float v_1 = arg_0;
+  barrier();
+  float res = v_1;
+  return res;
+}
+void compute_main_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    arg_0 = 0.0f;
+  }
+  barrier();
+  v.tint_symbol = workgroupUniformLoad_7a857c();
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  compute_main_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/builtins/gen/literal/workgroupUniformLoad/9d33de.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/workgroupUniformLoad/9d33de.wgsl.expected.ir.glsl
index 56f48c5..83d81a0 100644
--- a/test/tint/builtins/gen/literal/workgroupUniformLoad/9d33de.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/workgroupUniformLoad/9d33de.wgsl.expected.ir.glsl
@@ -1,11 +1,25 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+  int tint_symbol;
+} v;
+shared int arg_0;
+int workgroupUniformLoad_9d33de() {
+  barrier();
+  int v_1 = arg_0;
+  barrier();
+  int res = v_1;
+  return res;
+}
+void compute_main_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    arg_0 = 0;
+  }
+  barrier();
+  v.tint_symbol = workgroupUniformLoad_9d33de();
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  compute_main_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/builtins/gen/literal/workgroupUniformLoad/e07d08.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/workgroupUniformLoad/e07d08.wgsl.expected.ir.glsl
index 56f48c5..94c2c0b 100644
--- a/test/tint/builtins/gen/literal/workgroupUniformLoad/e07d08.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/workgroupUniformLoad/e07d08.wgsl.expected.ir.glsl
@@ -1,11 +1,26 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+  float16_t tint_symbol;
+} v;
+shared float16_t arg_0;
+float16_t workgroupUniformLoad_e07d08() {
+  barrier();
+  float16_t v_1 = arg_0;
+  barrier();
+  float16_t res = v_1;
+  return res;
+}
+void compute_main_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    arg_0 = 0.0hf;
+  }
+  barrier();
+  v.tint_symbol = workgroupUniformLoad_e07d08();
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  compute_main_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/builtins/gen/var/storageBarrier/d87211.wgsl.expected.ir.glsl b/test/tint/builtins/gen/var/storageBarrier/d87211.wgsl.expected.ir.glsl
index 35040d5..4213a92 100644
--- a/test/tint/builtins/gen/var/storageBarrier/d87211.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/var/storageBarrier/d87211.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: storageBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+void storageBarrier_d87211() {
+  barrier();
+  memoryBarrierBuffer();
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  storageBarrier_d87211();
+}
diff --git a/test/tint/builtins/gen/var/textureBarrier/3d0f7e.wgsl.expected.ir.glsl b/test/tint/builtins/gen/var/textureBarrier/3d0f7e.wgsl.expected.ir.glsl
index 2280075..491fa86 100644
--- a/test/tint/builtins/gen/var/textureBarrier/3d0f7e.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/var/textureBarrier/3d0f7e.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: textureBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+void textureBarrier_3d0f7e() {
+  barrier();
+  memoryBarrierImage();
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  textureBarrier_3d0f7e();
+}
diff --git a/test/tint/builtins/gen/var/workgroupBarrier/a17f7f.wgsl.expected.ir.glsl b/test/tint/builtins/gen/var/workgroupBarrier/a17f7f.wgsl.expected.ir.glsl
index 56f48c5..50a1d2d 100644
--- a/test/tint/builtins/gen/var/workgroupBarrier/a17f7f.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/var/workgroupBarrier/a17f7f.wgsl.expected.ir.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+void workgroupBarrier_a17f7f() {
+  barrier();
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  workgroupBarrier_a17f7f();
+}
diff --git a/test/tint/builtins/gen/var/workgroupUniformLoad/37307c.wgsl.expected.ir.glsl b/test/tint/builtins/gen/var/workgroupUniformLoad/37307c.wgsl.expected.ir.glsl
index 56f48c5..d7f6512 100644
--- a/test/tint/builtins/gen/var/workgroupUniformLoad/37307c.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/var/workgroupUniformLoad/37307c.wgsl.expected.ir.glsl
@@ -1,11 +1,25 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+  uint tint_symbol;
+} v;
+shared uint arg_0;
+uint workgroupUniformLoad_37307c() {
+  barrier();
+  uint v_1 = arg_0;
+  barrier();
+  uint res = v_1;
+  return res;
+}
+void compute_main_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    arg_0 = 0u;
+  }
+  barrier();
+  v.tint_symbol = workgroupUniformLoad_37307c();
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  compute_main_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/builtins/gen/var/workgroupUniformLoad/7a857c.wgsl.expected.ir.glsl b/test/tint/builtins/gen/var/workgroupUniformLoad/7a857c.wgsl.expected.ir.glsl
index 56f48c5..fedfe45 100644
--- a/test/tint/builtins/gen/var/workgroupUniformLoad/7a857c.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/var/workgroupUniformLoad/7a857c.wgsl.expected.ir.glsl
@@ -1,11 +1,25 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+  float tint_symbol;
+} v;
+shared float arg_0;
+float workgroupUniformLoad_7a857c() {
+  barrier();
+  float v_1 = arg_0;
+  barrier();
+  float res = v_1;
+  return res;
+}
+void compute_main_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    arg_0 = 0.0f;
+  }
+  barrier();
+  v.tint_symbol = workgroupUniformLoad_7a857c();
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  compute_main_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/builtins/gen/var/workgroupUniformLoad/9d33de.wgsl.expected.ir.glsl b/test/tint/builtins/gen/var/workgroupUniformLoad/9d33de.wgsl.expected.ir.glsl
index 56f48c5..83d81a0 100644
--- a/test/tint/builtins/gen/var/workgroupUniformLoad/9d33de.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/var/workgroupUniformLoad/9d33de.wgsl.expected.ir.glsl
@@ -1,11 +1,25 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+  int tint_symbol;
+} v;
+shared int arg_0;
+int workgroupUniformLoad_9d33de() {
+  barrier();
+  int v_1 = arg_0;
+  barrier();
+  int res = v_1;
+  return res;
+}
+void compute_main_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    arg_0 = 0;
+  }
+  barrier();
+  v.tint_symbol = workgroupUniformLoad_9d33de();
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  compute_main_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/builtins/gen/var/workgroupUniformLoad/e07d08.wgsl.expected.ir.glsl b/test/tint/builtins/gen/var/workgroupUniformLoad/e07d08.wgsl.expected.ir.glsl
index 56f48c5..94c2c0b 100644
--- a/test/tint/builtins/gen/var/workgroupUniformLoad/e07d08.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/var/workgroupUniformLoad/e07d08.wgsl.expected.ir.glsl
@@ -1,11 +1,26 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+  float16_t tint_symbol;
+} v;
+shared float16_t arg_0;
+float16_t workgroupUniformLoad_e07d08() {
+  barrier();
+  float16_t v_1 = arg_0;
+  barrier();
+  float16_t res = v_1;
+  return res;
+}
+void compute_main_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    arg_0 = 0.0hf;
+  }
+  barrier();
+  v.tint_symbol = workgroupUniformLoad_e07d08();
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  compute_main_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/builtins/workgroupUniformLoad/array.wgsl.expected.ir.glsl b/test/tint/builtins/workgroupUniformLoad/array.wgsl.expected.ir.glsl
index 56f48c5..5470032 100644
--- a/test/tint/builtins/workgroupUniformLoad/array.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/workgroupUniformLoad/array.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+shared int v[4];
+int[4] foo() {
+  barrier();
+  int v_1[4] = v;
+  barrier();
+  return v_1;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/builtins/workgroupUniformLoad/array_overridable_count.wgsl.expected.ir.glsl b/test/tint/builtins/workgroupUniformLoad/array_overridable_count.wgsl.expected.ir.glsl
index 56f48c5..e3adf9d 100644
--- a/test/tint/builtins/workgroupUniformLoad/array_overridable_count.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/workgroupUniformLoad/array_overridable_count.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+shared int v[128];
+int foo() {
+  barrier();
+  int v_1[128] = v;
+  barrier();
+  return v_1[0];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/builtins/workgroupUniformLoad/array_overridable_count_aliased.wgsl.expected.ir.glsl b/test/tint/builtins/workgroupUniformLoad/array_overridable_count_aliased.wgsl.expected.ir.glsl
index 56f48c5..e3adf9d 100644
--- a/test/tint/builtins/workgroupUniformLoad/array_overridable_count_aliased.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/workgroupUniformLoad/array_overridable_count_aliased.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+shared int v[128];
+int foo() {
+  barrier();
+  int v_1[128] = v;
+  barrier();
+  return v_1[0];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/builtins/workgroupUniformLoad/bool.wgsl.expected.ir.glsl b/test/tint/builtins/workgroupUniformLoad/bool.wgsl.expected.ir.glsl
index 56f48c5..879b21d 100644
--- a/test/tint/builtins/workgroupUniformLoad/bool.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/workgroupUniformLoad/bool.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+shared bool v;
+bool foo() {
+  barrier();
+  bool v_1 = v;
+  barrier();
+  return v_1;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/builtins/workgroupUniformLoad/for_loop.wgsl.expected.ir.glsl b/test/tint/builtins/workgroupUniformLoad/for_loop.wgsl.expected.ir.glsl
index 56f48c5..9c547f8 100644
--- a/test/tint/builtins/workgroupUniformLoad/for_loop.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/workgroupUniformLoad/for_loop.wgsl.expected.ir.glsl
@@ -1,11 +1,29 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+shared int a;
+shared int b;
+void foo() {
+  {
+    int i = 0;
+    while(true) {
+      int v = i;
+      barrier();
+      int v_1 = a;
+      barrier();
+      if ((v < v_1)) {
+      } else {
+        break;
+      }
+      {
+        barrier();
+        int v_2 = b;
+        barrier();
+        i = (i + v_2);
+      }
+      continue;
+    }
+  }
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/builtins/workgroupUniformLoad/if_condition.wgsl.expected.ir.glsl b/test/tint/builtins/workgroupUniformLoad/if_condition.wgsl.expected.ir.glsl
index 56f48c5..ca6ed0c 100644
--- a/test/tint/builtins/workgroupUniformLoad/if_condition.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/workgroupUniformLoad/if_condition.wgsl.expected.ir.glsl
@@ -1,11 +1,15 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+shared bool v;
+int foo() {
+  barrier();
+  bool v_1 = v;
+  barrier();
+  if (v_1) {
+    return 42;
+  }
+  return 0;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/builtins/workgroupUniformLoad/matrix.wgsl.expected.ir.glsl b/test/tint/builtins/workgroupUniformLoad/matrix.wgsl.expected.ir.glsl
index 56f48c5..6e00c7f 100644
--- a/test/tint/builtins/workgroupUniformLoad/matrix.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/workgroupUniformLoad/matrix.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+shared mat3 v;
+mat3 foo() {
+  barrier();
+  mat3 v_1 = v;
+  barrier();
+  return v_1;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/builtins/workgroupUniformLoad/structures.wgsl.expected.ir.glsl b/test/tint/builtins/workgroupUniformLoad/structures.wgsl.expected.ir.glsl
index 56f48c5..b57fbf7 100644
--- a/test/tint/builtins/workgroupUniformLoad/structures.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/workgroupUniformLoad/structures.wgsl.expected.ir.glsl
@@ -1,11 +1,23 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct Inner {
+  bool b;
+  ivec4 v;
+  mat3 m;
+};
+
+struct Outer {
+  Inner a[4];
+};
+
+shared Outer v;
+Outer foo() {
+  barrier();
+  Outer v_1 = v;
+  barrier();
+  return v_1;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/builtins/workgroupUniformLoad/vec.wgsl.expected.ir.glsl b/test/tint/builtins/workgroupUniformLoad/vec.wgsl.expected.ir.glsl
index 56f48c5..c39607a 100644
--- a/test/tint/builtins/workgroupUniformLoad/vec.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/workgroupUniformLoad/vec.wgsl.expected.ir.glsl
@@ -1,11 +1,12 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+shared vec4 v;
+vec4 foo() {
+  barrier();
+  vec4 v_1 = v;
+  barrier();
+  return v_1;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/builtins/workgroupUniformLoad/via_param.wgsl.expected.ir.glsl b/test/tint/builtins/workgroupUniformLoad/via_param.wgsl.expected.ir.glsl
index 56f48c5..96cbd7c 100644
--- a/test/tint/builtins/workgroupUniformLoad/via_param.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/workgroupUniformLoad/via_param.wgsl.expected.ir.glsl
@@ -1,11 +1,15 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+shared int v[4];
+int foo(uint p_indices[1]) {
+  barrier();
+  int v_1 = v[p_indices[0u]];
+  barrier();
+  return v_1;
+}
+int bar() {
+  return foo(uint[1](uint(0)));
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+}
diff --git a/test/tint/ptr_ref/load/param/workgroup/array_in_struct.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/param/workgroup/array_in_struct.wgsl.expected.ir.glsl
index 56f48c5..2769624 100644
--- a/test/tint/ptr_ref/load/param/workgroup/array_in_struct.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/param/workgroup/array_in_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,34 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct str {
+  int arr[4];
+};
+
+shared str S;
+int[4] func() {
+  return S.arr;
+}
+void tint_symbol_inner(uint tint_local_index) {
+  {
+    uint v = 0u;
+    v = tint_local_index;
+    while(true) {
+      uint v_1 = v;
+      if ((v_1 >= 4u)) {
+        break;
+      }
+      S.arr[v_1] = 0;
+      {
+        v = (v_1 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  int r[4] = func();
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/ptr_ref/load/param/workgroup/i32.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/param/workgroup/i32.wgsl.expected.ir.glsl
index 56f48c5..a016517 100644
--- a/test/tint/ptr_ref/load/param/workgroup/i32.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/param/workgroup/i32.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+shared int S;
+int func() {
+  return S;
+}
+void tint_symbol_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    S = 0;
+  }
+  barrier();
+  int r = func();
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/ptr_ref/load/param/workgroup/i32_in_struct.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/param/workgroup/i32_in_struct.wgsl.expected.ir.glsl
index 56f48c5..be83d90 100644
--- a/test/tint/ptr_ref/load/param/workgroup/i32_in_struct.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/param/workgroup/i32_in_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,22 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct str {
+  int i;
+};
+
+shared str S;
+int func() {
+  return S.i;
+}
+void tint_symbol_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    S = str(0);
+  }
+  barrier();
+  int r = func();
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/ptr_ref/load/param/workgroup/struct_in_array.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/param/workgroup/struct_in_array.wgsl.expected.ir.glsl
index 56f48c5..b13edc3 100644
--- a/test/tint/ptr_ref/load/param/workgroup/struct_in_array.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/param/workgroup/struct_in_array.wgsl.expected.ir.glsl
@@ -1,11 +1,34 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct str {
+  int i;
+};
+
+shared str S[4];
+str func(uint pointer_indices[1]) {
+  return S[pointer_indices[0u]];
+}
+void tint_symbol_inner(uint tint_local_index) {
+  {
+    uint v = 0u;
+    v = tint_local_index;
+    while(true) {
+      uint v_1 = v;
+      if ((v_1 >= 4u)) {
+        break;
+      }
+      S[v_1] = str(0);
+      {
+        v = (v_1 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  str r = func(uint[1](uint(2)));
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/ptr_ref/load/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.glsl
index 56f48c5..223ba89 100644
--- a/test/tint/ptr_ref/load/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+shared mat2 S;
+vec2 func(uint pointer_indices[1]) {
+  return S[pointer_indices[0u]];
+}
+void tint_symbol_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    S = mat2(vec2(0.0f), vec2(0.0f));
+  }
+  barrier();
+  vec2 r = func(uint[1](uint(1)));
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/ptr_ref/load/param/workgroup/vec4_f32.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/param/workgroup/vec4_f32.wgsl.expected.ir.glsl
index 56f48c5..5cf842b 100644
--- a/test/tint/ptr_ref/load/param/workgroup/vec4_f32.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/param/workgroup/vec4_f32.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+shared vec4 S;
+vec4 func() {
+  return S;
+}
+void tint_symbol_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    S = vec4(0.0f);
+  }
+  barrier();
+  vec4 r = func();
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.glsl
index 56f48c5..ab4b4a5 100644
--- a/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+shared mat2x4 S;
+vec4 func(uint pointer_indices[1]) {
+  return S[pointer_indices[0u]];
+}
+void tint_symbol_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    S = mat2x4(vec4(0.0f), vec4(0.0f));
+  }
+  barrier();
+  vec4 r = func(uint[1](uint(1)));
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.glsl b/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.glsl
index 56f48c5..fbfeb0d 100644
--- a/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/load/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,22 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct str {
+  vec4 i;
+};
+
+shared str S;
+vec4 func() {
+  return S.i;
+}
+void tint_symbol_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    S = str(vec4(0.0f));
+  }
+  barrier();
+  vec4 r = func();
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/ptr_ref/store/param/workgroup/array_in_struct.wgsl.expected.ir.glsl b/test/tint/ptr_ref/store/param/workgroup/array_in_struct.wgsl.expected.ir.glsl
index 56f48c5..89422a5 100644
--- a/test/tint/ptr_ref/store/param/workgroup/array_in_struct.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/store/param/workgroup/array_in_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,34 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct str {
+  int arr[4];
+};
+
+shared str S;
+void func() {
+  S.arr = int[4](0, 0, 0, 0);
+}
+void tint_symbol_inner(uint tint_local_index) {
+  {
+    uint v = 0u;
+    v = tint_local_index;
+    while(true) {
+      uint v_1 = v;
+      if ((v_1 >= 4u)) {
+        break;
+      }
+      S.arr[v_1] = 0;
+      {
+        v = (v_1 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  func();
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/ptr_ref/store/param/workgroup/i32.wgsl.expected.ir.glsl b/test/tint/ptr_ref/store/param/workgroup/i32.wgsl.expected.ir.glsl
index 56f48c5..b498e96 100644
--- a/test/tint/ptr_ref/store/param/workgroup/i32.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/store/param/workgroup/i32.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+shared int S;
+void func() {
+  S = 42;
+}
+void tint_symbol_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    S = 0;
+  }
+  barrier();
+  func();
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/ptr_ref/store/param/workgroup/i32_in_struct.wgsl.expected.ir.glsl b/test/tint/ptr_ref/store/param/workgroup/i32_in_struct.wgsl.expected.ir.glsl
index 56f48c5..1e601f6 100644
--- a/test/tint/ptr_ref/store/param/workgroup/i32_in_struct.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/store/param/workgroup/i32_in_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,22 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct str {
+  int i;
+};
+
+shared str S;
+void func() {
+  S.i = 42;
+}
+void tint_symbol_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    S = str(0);
+  }
+  barrier();
+  func();
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/ptr_ref/store/param/workgroup/struct_in_array.wgsl.expected.ir.glsl b/test/tint/ptr_ref/store/param/workgroup/struct_in_array.wgsl.expected.ir.glsl
index 56f48c5..d611a88 100644
--- a/test/tint/ptr_ref/store/param/workgroup/struct_in_array.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/store/param/workgroup/struct_in_array.wgsl.expected.ir.glsl
@@ -1,11 +1,34 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct str {
+  int i;
+};
+
+shared str S[4];
+void func(uint pointer_indices[1]) {
+  S[pointer_indices[0u]] = str(0);
+}
+void tint_symbol_inner(uint tint_local_index) {
+  {
+    uint v = 0u;
+    v = tint_local_index;
+    while(true) {
+      uint v_1 = v;
+      if ((v_1 >= 4u)) {
+        break;
+      }
+      S[v_1] = str(0);
+      {
+        v = (v_1 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  func(uint[1](uint(2)));
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/ptr_ref/store/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.glsl b/test/tint/ptr_ref/store/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.glsl
index 56f48c5..5c1475c 100644
--- a/test/tint/ptr_ref/store/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/store/param/workgroup/vec2_f32_in_mat2x2.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+shared mat2 S;
+void func(uint pointer_indices[1]) {
+  S[pointer_indices[0u]] = vec2(0.0f);
+}
+void tint_symbol_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    S = mat2(vec2(0.0f), vec2(0.0f));
+  }
+  barrier();
+  func(uint[1](uint(1)));
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/ptr_ref/store/param/workgroup/vec4_f32.wgsl.expected.ir.glsl b/test/tint/ptr_ref/store/param/workgroup/vec4_f32.wgsl.expected.ir.glsl
index 56f48c5..382b686 100644
--- a/test/tint/ptr_ref/store/param/workgroup/vec4_f32.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/store/param/workgroup/vec4_f32.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+shared vec4 S;
+void func() {
+  S = vec4(0.0f);
+}
+void tint_symbol_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    S = vec4(0.0f);
+  }
+  barrier();
+  func();
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.glsl b/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.glsl
index 56f48c5..1ecadd4 100644
--- a/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_mat2x4.wgsl.expected.ir.glsl
@@ -1,11 +1,17 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+shared mat2x4 S;
+void func(uint pointer_indices[1]) {
+  S[pointer_indices[0u]] = vec4(0.0f);
+}
+void tint_symbol_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    S = mat2x4(vec4(0.0f), vec4(0.0f));
+  }
+  barrier();
+  func(uint[1](uint(1)));
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.glsl b/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.glsl
index 56f48c5..07eb8ff 100644
--- a/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.glsl
+++ b/test/tint/ptr_ref/store/param/workgroup/vec4_f32_in_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,22 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct str {
+  vec4 i;
+};
+
+shared str S;
+void func() {
+  S.i = vec4(0.0f);
+}
+void tint_symbol_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    S = str(vec4(0.0f));
+  }
+  barrier();
+  func();
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/types/module_scope_used_in_functions.wgsl.expected.ir.glsl b/test/tint/types/module_scope_used_in_functions.wgsl.expected.ir.glsl
index 56f48c5..b154a21 100644
--- a/test/tint/types/module_scope_used_in_functions.wgsl.expected.ir.glsl
+++ b/test/tint/types/module_scope_used_in_functions.wgsl.expected.ir.glsl
@@ -1,11 +1,39 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+float p = 0.0f;
+shared float w;
+layout(binding = 1, std430)
+buffer tint_symbol_2_1_ssbo {
+  vec2 tint_symbol_1;
+} v;
+layout(binding = 0, std430)
+buffer tint_symbol_4_1_ssbo {
+  float tint_symbol_3[];
+} v_1;
+void no_uses() {
+}
+void zoo() {
+  p = (p * 2.0f);
+}
+void bar(float a, float b) {
+  p = a;
+  w = b;
+  v_1.tint_symbol_3[0] = v.tint_symbol_1.x;
+  zoo();
+}
+void foo(float a) {
+  float b = 2.0f;
+  bar(a, b);
+  no_uses();
+}
+void tint_symbol_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    w = 0.0f;
+  }
+  barrier();
+  foo(1.0f);
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/types/module_scope_var.wgsl.expected.ir.glsl b/test/tint/types/module_scope_var.wgsl.expected.ir.glsl
index 56f48c5..844f112 100644
--- a/test/tint/types/module_scope_var.wgsl.expected.ir.glsl
+++ b/test/tint/types/module_scope_var.wgsl.expected.ir.glsl
@@ -1,11 +1,39 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct S {
+  float a;
+};
+
+bool bool_var = false;
+int i32_var = 0;
+uint u32_var = 0u;
+float f32_var = 0.0f;
+ivec2 v2i32_var = ivec2(0);
+uvec3 v3u32_var = uvec3(0u);
+vec4 v4f32_var = vec4(0.0f);
+mat2x3 m2x3_var = mat2x3(vec3(0.0f), vec3(0.0f));
+float arr_var[4] = float[4](0.0f, 0.0f, 0.0f, 0.0f);
+S struct_var = S(0.0f);
+shared float wg_var;
+void tint_symbol_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    wg_var = 0.0f;
+  }
+  barrier();
+  bool_var = false;
+  i32_var = 0;
+  u32_var = 0u;
+  f32_var = 0.0f;
+  v2i32_var = ivec2(0);
+  v3u32_var = uvec3(0u);
+  v4f32_var = vec4(0.0f);
+  m2x3_var = mat2x3(vec3(0.0f), vec3(0.0f));
+  arr_var = float[4](0.0f, 0.0f, 0.0f, 0.0f);
+  struct_var = S(0.0f);
+  wg_var = 42.0f;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/var/initialization/workgroup/array/array_i32.wgsl.expected.ir.glsl b/test/tint/var/initialization/workgroup/array/array_i32.wgsl.expected.ir.glsl
index 56f48c5..ad048df 100644
--- a/test/tint/var/initialization/workgroup/array/array_i32.wgsl.expected.ir.glsl
+++ b/test/tint/var/initialization/workgroup/array/array_i32.wgsl.expected.ir.glsl
@@ -1,11 +1,26 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+shared int zero[2][3];
+void tint_symbol_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 6u)) {
+        break;
+      }
+      zero[(v_2 / 3u)][(v_2 % 3u)] = 0;
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  int v[2][3] = zero;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/var/initialization/workgroup/array/i32.wgsl.expected.ir.glsl b/test/tint/var/initialization/workgroup/array/i32.wgsl.expected.ir.glsl
index 56f48c5..cae011b 100644
--- a/test/tint/var/initialization/workgroup/array/i32.wgsl.expected.ir.glsl
+++ b/test/tint/var/initialization/workgroup/array/i32.wgsl.expected.ir.glsl
@@ -1,11 +1,26 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+shared int zero[3];
+void tint_symbol_inner(uint tint_local_index) {
+  {
+    uint v_1 = 0u;
+    v_1 = tint_local_index;
+    while(true) {
+      uint v_2 = v_1;
+      if ((v_2 >= 3u)) {
+        break;
+      }
+      zero[v_2] = 0;
+      {
+        v_1 = (v_2 + 1u);
+      }
+      continue;
+    }
+  }
+  barrier();
+  int v[3] = zero;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/var/initialization/workgroup/matrix.wgsl.expected.ir.glsl b/test/tint/var/initialization/workgroup/matrix.wgsl.expected.ir.glsl
index 56f48c5..e72d94c 100644
--- a/test/tint/var/initialization/workgroup/matrix.wgsl.expected.ir.glsl
+++ b/test/tint/var/initialization/workgroup/matrix.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+shared mat2x3 v;
+void tint_symbol_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    v = mat2x3(vec3(0.0f), vec3(0.0f));
+  }
+  barrier();
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/var/initialization/workgroup/scalar.wgsl.expected.ir.glsl b/test/tint/var/initialization/workgroup/scalar.wgsl.expected.ir.glsl
index 56f48c5..8513dca3 100644
--- a/test/tint/var/initialization/workgroup/scalar.wgsl.expected.ir.glsl
+++ b/test/tint/var/initialization/workgroup/scalar.wgsl.expected.ir.glsl
@@ -1,11 +1,14 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+shared int v;
+void tint_symbol_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    v = 0;
+  }
+  barrier();
+  int i = v;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/var/initialization/workgroup/struct.wgsl.expected.ir.glsl b/test/tint/var/initialization/workgroup/struct.wgsl.expected.ir.glsl
index 56f48c5..a3d45d9 100644
--- a/test/tint/var/initialization/workgroup/struct.wgsl.expected.ir.glsl
+++ b/test/tint/var/initialization/workgroup/struct.wgsl.expected.ir.glsl
@@ -1,11 +1,19 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+struct S {
+  int a;
+  float b;
+};
+
+shared S v;
+void tint_symbol_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    v = S(0, 0.0f);
+  }
+  barrier();
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/var/initialization/workgroup/vector.wgsl.expected.ir.glsl b/test/tint/var/initialization/workgroup/vector.wgsl.expected.ir.glsl
index 56f48c5..b1748a2 100644
--- a/test/tint/var/initialization/workgroup/vector.wgsl.expected.ir.glsl
+++ b/test/tint/var/initialization/workgroup/vector.wgsl.expected.ir.glsl
@@ -1,11 +1,13 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+shared ivec3 v;
+void tint_symbol_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    v = ivec3(0);
+  }
+  barrier();
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/var/uses/many_workgroup_vars.wgsl.expected.ir.glsl b/test/tint/var/uses/many_workgroup_vars.wgsl.expected.ir.glsl
index 56f48c5..54df802 100644
--- a/test/tint/var/uses/many_workgroup_vars.wgsl.expected.ir.glsl
+++ b/test/tint/var/uses/many_workgroup_vars.wgsl.expected.ir.glsl
@@ -1,11 +1,311 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
+shared mat2 m00;
+shared mat2 m01;
+shared mat2 m02;
+shared mat2 m03;
+shared mat2 m04;
+shared mat2 m05;
+shared mat2 m06;
+shared mat2 m07;
+shared mat2 m08;
+shared mat2 m09;
+shared mat2 m10;
+shared mat2 m11;
+shared mat2 m12;
+shared mat2 m13;
+shared mat2 m14;
+shared mat2 m15;
+shared mat2 m16;
+shared mat2 m17;
+shared mat2 m18;
+shared mat2 m19;
+shared mat2 m20;
+shared mat2 m21;
+shared mat2 m22;
+shared mat2 m23;
+shared mat2 m24;
+shared mat2 m25;
+shared mat2 m26;
+shared mat2 m27;
+shared mat2 m28;
+shared mat2 m29;
+shared mat2 m30;
+shared mat2 m31;
+shared mat2 m32;
+shared mat2 m33;
+shared mat2 m34;
+shared mat2 m35;
+shared mat2 m36;
+shared mat2 m37;
+shared mat2 m38;
+shared mat2 m39;
+shared mat2 m40;
+shared mat2 m41;
+shared mat2 m42;
+shared mat2 m43;
+shared mat2 m44;
+shared mat2 m45;
+shared mat2 m46;
+shared mat2 m47;
+shared mat2 m48;
+shared mat2 m49;
+shared mat2 m50;
+shared mat2 m51;
+shared mat2 m52;
+shared mat2 m53;
+shared mat2 m54;
+shared mat2 m55;
+shared mat2 m56;
+shared mat2 m57;
+shared mat2 m58;
+shared mat2 m59;
+shared mat2 m60;
+shared mat2 m61;
+shared mat2 m62;
+shared mat2 m63;
+shared mat2 m64;
+shared mat2 m65;
+shared mat2 m66;
+shared mat2 m67;
+shared mat2 m68;
+shared mat2 m69;
+shared mat2 m70;
+shared mat2 m71;
+shared mat2 m72;
+shared mat2 m73;
+shared mat2 m74;
+shared mat2 m75;
+shared mat2 m76;
+shared mat2 m77;
+shared mat2 m78;
+shared mat2 m79;
+shared mat2 m80;
+shared mat2 m81;
+shared mat2 m82;
+shared mat2 m83;
+shared mat2 m84;
+shared mat2 m85;
+shared mat2 m86;
+shared mat2 m87;
+shared mat2 m88;
+shared mat2 m89;
+shared mat2 m90;
+shared mat2 m91;
+shared mat2 m92;
+shared mat2 m93;
+shared mat2 m94;
+shared mat2 m95;
+shared mat2 m96;
+shared mat2 m97;
+shared mat2 m98;
+shared mat2 m99;
+void tint_symbol_inner(uint idx) {
+  if ((idx == 0u)) {
+    m00 = mat2(vec2(0.0f), vec2(0.0f));
+    m01 = mat2(vec2(0.0f), vec2(0.0f));
+    m02 = mat2(vec2(0.0f), vec2(0.0f));
+    m03 = mat2(vec2(0.0f), vec2(0.0f));
+    m04 = mat2(vec2(0.0f), vec2(0.0f));
+    m05 = mat2(vec2(0.0f), vec2(0.0f));
+    m06 = mat2(vec2(0.0f), vec2(0.0f));
+    m07 = mat2(vec2(0.0f), vec2(0.0f));
+    m08 = mat2(vec2(0.0f), vec2(0.0f));
+    m09 = mat2(vec2(0.0f), vec2(0.0f));
+    m10 = mat2(vec2(0.0f), vec2(0.0f));
+    m11 = mat2(vec2(0.0f), vec2(0.0f));
+    m12 = mat2(vec2(0.0f), vec2(0.0f));
+    m13 = mat2(vec2(0.0f), vec2(0.0f));
+    m14 = mat2(vec2(0.0f), vec2(0.0f));
+    m15 = mat2(vec2(0.0f), vec2(0.0f));
+    m16 = mat2(vec2(0.0f), vec2(0.0f));
+    m17 = mat2(vec2(0.0f), vec2(0.0f));
+    m18 = mat2(vec2(0.0f), vec2(0.0f));
+    m19 = mat2(vec2(0.0f), vec2(0.0f));
+    m20 = mat2(vec2(0.0f), vec2(0.0f));
+    m21 = mat2(vec2(0.0f), vec2(0.0f));
+    m22 = mat2(vec2(0.0f), vec2(0.0f));
+    m23 = mat2(vec2(0.0f), vec2(0.0f));
+    m24 = mat2(vec2(0.0f), vec2(0.0f));
+    m25 = mat2(vec2(0.0f), vec2(0.0f));
+    m26 = mat2(vec2(0.0f), vec2(0.0f));
+    m27 = mat2(vec2(0.0f), vec2(0.0f));
+    m28 = mat2(vec2(0.0f), vec2(0.0f));
+    m29 = mat2(vec2(0.0f), vec2(0.0f));
+    m30 = mat2(vec2(0.0f), vec2(0.0f));
+    m31 = mat2(vec2(0.0f), vec2(0.0f));
+    m32 = mat2(vec2(0.0f), vec2(0.0f));
+    m33 = mat2(vec2(0.0f), vec2(0.0f));
+    m34 = mat2(vec2(0.0f), vec2(0.0f));
+    m35 = mat2(vec2(0.0f), vec2(0.0f));
+    m36 = mat2(vec2(0.0f), vec2(0.0f));
+    m37 = mat2(vec2(0.0f), vec2(0.0f));
+    m38 = mat2(vec2(0.0f), vec2(0.0f));
+    m39 = mat2(vec2(0.0f), vec2(0.0f));
+    m40 = mat2(vec2(0.0f), vec2(0.0f));
+    m41 = mat2(vec2(0.0f), vec2(0.0f));
+    m42 = mat2(vec2(0.0f), vec2(0.0f));
+    m43 = mat2(vec2(0.0f), vec2(0.0f));
+    m44 = mat2(vec2(0.0f), vec2(0.0f));
+    m45 = mat2(vec2(0.0f), vec2(0.0f));
+    m46 = mat2(vec2(0.0f), vec2(0.0f));
+    m47 = mat2(vec2(0.0f), vec2(0.0f));
+    m48 = mat2(vec2(0.0f), vec2(0.0f));
+    m49 = mat2(vec2(0.0f), vec2(0.0f));
+    m50 = mat2(vec2(0.0f), vec2(0.0f));
+    m51 = mat2(vec2(0.0f), vec2(0.0f));
+    m52 = mat2(vec2(0.0f), vec2(0.0f));
+    m53 = mat2(vec2(0.0f), vec2(0.0f));
+    m54 = mat2(vec2(0.0f), vec2(0.0f));
+    m55 = mat2(vec2(0.0f), vec2(0.0f));
+    m56 = mat2(vec2(0.0f), vec2(0.0f));
+    m57 = mat2(vec2(0.0f), vec2(0.0f));
+    m58 = mat2(vec2(0.0f), vec2(0.0f));
+    m59 = mat2(vec2(0.0f), vec2(0.0f));
+    m60 = mat2(vec2(0.0f), vec2(0.0f));
+    m61 = mat2(vec2(0.0f), vec2(0.0f));
+    m62 = mat2(vec2(0.0f), vec2(0.0f));
+    m63 = mat2(vec2(0.0f), vec2(0.0f));
+    m64 = mat2(vec2(0.0f), vec2(0.0f));
+    m65 = mat2(vec2(0.0f), vec2(0.0f));
+    m66 = mat2(vec2(0.0f), vec2(0.0f));
+    m67 = mat2(vec2(0.0f), vec2(0.0f));
+    m68 = mat2(vec2(0.0f), vec2(0.0f));
+    m69 = mat2(vec2(0.0f), vec2(0.0f));
+    m70 = mat2(vec2(0.0f), vec2(0.0f));
+    m71 = mat2(vec2(0.0f), vec2(0.0f));
+    m72 = mat2(vec2(0.0f), vec2(0.0f));
+    m73 = mat2(vec2(0.0f), vec2(0.0f));
+    m74 = mat2(vec2(0.0f), vec2(0.0f));
+    m75 = mat2(vec2(0.0f), vec2(0.0f));
+    m76 = mat2(vec2(0.0f), vec2(0.0f));
+    m77 = mat2(vec2(0.0f), vec2(0.0f));
+    m78 = mat2(vec2(0.0f), vec2(0.0f));
+    m79 = mat2(vec2(0.0f), vec2(0.0f));
+    m80 = mat2(vec2(0.0f), vec2(0.0f));
+    m81 = mat2(vec2(0.0f), vec2(0.0f));
+    m82 = mat2(vec2(0.0f), vec2(0.0f));
+    m83 = mat2(vec2(0.0f), vec2(0.0f));
+    m84 = mat2(vec2(0.0f), vec2(0.0f));
+    m85 = mat2(vec2(0.0f), vec2(0.0f));
+    m86 = mat2(vec2(0.0f), vec2(0.0f));
+    m87 = mat2(vec2(0.0f), vec2(0.0f));
+    m88 = mat2(vec2(0.0f), vec2(0.0f));
+    m89 = mat2(vec2(0.0f), vec2(0.0f));
+    m90 = mat2(vec2(0.0f), vec2(0.0f));
+    m91 = mat2(vec2(0.0f), vec2(0.0f));
+    m92 = mat2(vec2(0.0f), vec2(0.0f));
+    m93 = mat2(vec2(0.0f), vec2(0.0f));
+    m94 = mat2(vec2(0.0f), vec2(0.0f));
+    m95 = mat2(vec2(0.0f), vec2(0.0f));
+    m96 = mat2(vec2(0.0f), vec2(0.0f));
+    m97 = mat2(vec2(0.0f), vec2(0.0f));
+    m98 = mat2(vec2(0.0f), vec2(0.0f));
+    m99 = mat2(vec2(0.0f), vec2(0.0f));
+  }
+  barrier();
+  m00[0][0] = 1.0f;
+  m01[0][0] = 1.0f;
+  m02[0][0] = 1.0f;
+  m03[0][0] = 1.0f;
+  m04[0][0] = 1.0f;
+  m05[0][0] = 1.0f;
+  m06[0][0] = 1.0f;
+  m07[0][0] = 1.0f;
+  m08[0][0] = 1.0f;
+  m09[0][0] = 1.0f;
+  m10[0][0] = 1.0f;
+  m11[0][0] = 1.0f;
+  m12[0][0] = 1.0f;
+  m13[0][0] = 1.0f;
+  m14[0][0] = 1.0f;
+  m15[0][0] = 1.0f;
+  m16[0][0] = 1.0f;
+  m17[0][0] = 1.0f;
+  m18[0][0] = 1.0f;
+  m19[0][0] = 1.0f;
+  m20[0][0] = 1.0f;
+  m21[0][0] = 1.0f;
+  m22[0][0] = 1.0f;
+  m23[0][0] = 1.0f;
+  m24[0][0] = 1.0f;
+  m25[0][0] = 1.0f;
+  m26[0][0] = 1.0f;
+  m27[0][0] = 1.0f;
+  m28[0][0] = 1.0f;
+  m29[0][0] = 1.0f;
+  m30[0][0] = 1.0f;
+  m31[0][0] = 1.0f;
+  m32[0][0] = 1.0f;
+  m33[0][0] = 1.0f;
+  m34[0][0] = 1.0f;
+  m35[0][0] = 1.0f;
+  m36[0][0] = 1.0f;
+  m37[0][0] = 1.0f;
+  m38[0][0] = 1.0f;
+  m39[0][0] = 1.0f;
+  m40[0][0] = 1.0f;
+  m41[0][0] = 1.0f;
+  m42[0][0] = 1.0f;
+  m43[0][0] = 1.0f;
+  m44[0][0] = 1.0f;
+  m45[0][0] = 1.0f;
+  m46[0][0] = 1.0f;
+  m47[0][0] = 1.0f;
+  m48[0][0] = 1.0f;
+  m49[0][0] = 1.0f;
+  m50[0][0] = 1.0f;
+  m51[0][0] = 1.0f;
+  m52[0][0] = 1.0f;
+  m53[0][0] = 1.0f;
+  m54[0][0] = 1.0f;
+  m55[0][0] = 1.0f;
+  m56[0][0] = 1.0f;
+  m57[0][0] = 1.0f;
+  m58[0][0] = 1.0f;
+  m59[0][0] = 1.0f;
+  m60[0][0] = 1.0f;
+  m61[0][0] = 1.0f;
+  m62[0][0] = 1.0f;
+  m63[0][0] = 1.0f;
+  m64[0][0] = 1.0f;
+  m65[0][0] = 1.0f;
+  m66[0][0] = 1.0f;
+  m67[0][0] = 1.0f;
+  m68[0][0] = 1.0f;
+  m69[0][0] = 1.0f;
+  m70[0][0] = 1.0f;
+  m71[0][0] = 1.0f;
+  m72[0][0] = 1.0f;
+  m73[0][0] = 1.0f;
+  m74[0][0] = 1.0f;
+  m75[0][0] = 1.0f;
+  m76[0][0] = 1.0f;
+  m77[0][0] = 1.0f;
+  m78[0][0] = 1.0f;
+  m79[0][0] = 1.0f;
+  m80[0][0] = 1.0f;
+  m81[0][0] = 1.0f;
+  m82[0][0] = 1.0f;
+  m83[0][0] = 1.0f;
+  m84[0][0] = 1.0f;
+  m85[0][0] = 1.0f;
+  m86[0][0] = 1.0f;
+  m87[0][0] = 1.0f;
+  m88[0][0] = 1.0f;
+  m89[0][0] = 1.0f;
+  m90[0][0] = 1.0f;
+  m91[0][0] = 1.0f;
+  m92[0][0] = 1.0f;
+  m93[0][0] = 1.0f;
+  m94[0][0] = 1.0f;
+  m95[0][0] = 1.0f;
+  m96[0][0] = 1.0f;
+  m97[0][0] = 1.0f;
+  m98[0][0] = 1.0f;
+  m99[0][0] = 1.0f;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/var/uses/workgroup.wgsl.expected.ir.glsl b/test/tint/var/uses/workgroup.wgsl.expected.ir.glsl
index 56f48c5..343757a 100644
--- a/test/tint/var/uses/workgroup.wgsl.expected.ir.glsl
+++ b/test/tint/var/uses/workgroup.wgsl.expected.ir.glsl
@@ -1,11 +1,79 @@
-SKIP: FAILED
+#version 310 es
 
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+shared int a;
+void uses_a() {
+  a = (a + 1);
+}
+void main1_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    a = 0;
+  }
+  barrier();
+  a = 42;
+  uses_a();
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  main1_inner(gl_LocalInvocationIndex);
+}
+#version 310 es
 
-tint executable returned error: signal: trace/BPT trap
+shared int b;
+void uses_b() {
+  b = (b * 2);
+}
+void main2_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    b = 0;
+  }
+  barrier();
+  b = 7;
+  uses_b();
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  main2_inner(gl_LocalInvocationIndex);
+}
+#version 310 es
+
+shared int a;
+shared int b;
+void uses_a() {
+  a = (a + 1);
+}
+void uses_b() {
+  b = (b * 2);
+}
+void uses_a_and_b() {
+  b = a;
+}
+void no_uses() {
+}
+void outer() {
+  a = 0;
+  uses_a();
+  uses_a_and_b();
+  uses_b();
+  no_uses();
+}
+void main3_inner(uint tint_local_index) {
+  if ((tint_local_index == 0u)) {
+    a = 0;
+    b = 0;
+  }
+  barrier();
+  outer();
+  no_uses();
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  main3_inner(gl_LocalInvocationIndex);
+}
+#version 310 es
+
+void no_uses() {
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  no_uses();
+}
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.spvasm.expected.ir.glsl b/test/tint/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.spvasm.expected.ir.glsl
deleted file mode 100644
index f297654..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: select
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.wgsl.expected.ir.glsl b/test/tint/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.wgsl.expected.ir.glsl
deleted file mode 100644
index f297654..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.wgsl.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: select
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.spvasm.expected.ir.glsl b/test/tint/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.spvasm.expected.ir.glsl
deleted file mode 100644
index 56f48c5..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.wgsl.expected.ir.glsl b/test/tint/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.wgsl.expected.ir.glsl
deleted file mode 100644
index 56f48c5..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.wgsl.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1116 internal compiler error: TINT_UNREACHABLE unhandled core builtin: workgroupBarrier
-********************************************************************
-*  The tint shader compiler has encountered an unexpected 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: trace/BPT trap