[spirv] Add support for subgroupMatrixStore

Map to OpCooperativeMatrixStoreKHR, converting arguments to SPIR-V
enum constants as necessary.

Enable the Vulkan Memory Model in the Tint executable if the
subgroup_matrix extension is present.

Bug: 348702031
Change-Id: I6b656b8440b51fce756ec0f971690eea48917ec2
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/225115
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Commit-Queue: James Price <jrprice@google.com>
diff --git a/src/tint/cmd/tint/main.cc b/src/tint/cmd/tint/main.cc
index 7e8101c..7946de5 100644
--- a/src/tint/cmd/tint/main.cc
+++ b/src/tint/cmd/tint/main.cc
@@ -790,6 +790,13 @@
 
     gen_options.bindings = tint::spirv::writer::GenerateBindings(ir.Get());
 
+    // Enable the Vulkan Memory Model if needed.
+    for (auto* enable : src_program.AST().Enables()) {
+        if (enable->HasExtension(tint::wgsl::Extension::kChromiumExperimentalSubgroupMatrix)) {
+            gen_options.use_vulkan_memory_model = true;
+        }
+    }
+
     // Check that the module and options are supported by the backend.
     auto check = tint::spirv::writer::CanGenerate(ir.Get(), gen_options);
     if (check != tint::Success) {
diff --git a/src/tint/lang/spirv/builtin_fn.cc b/src/tint/lang/spirv/builtin_fn.cc
index b556140..677625e 100644
--- a/src/tint/lang/spirv/builtin_fn.cc
+++ b/src/tint/lang/spirv/builtin_fn.cc
@@ -150,6 +150,8 @@
             return "sdot";
         case BuiltinFn::kUdot:
             return "udot";
+        case BuiltinFn::kCooperativeMatrixStore:
+            return "cooperative_matrix_store";
     }
     return "<unknown>";
 }
@@ -171,6 +173,7 @@
         case BuiltinFn::kImageWrite:
         case BuiltinFn::kModf:
         case BuiltinFn::kFrexp:
+        case BuiltinFn::kCooperativeMatrixStore:
             return core::ir::Instruction::Accesses{core::ir::Instruction::Access::kStore};
 
         case BuiltinFn::kAtomicAnd:
diff --git a/src/tint/lang/spirv/builtin_fn.cc.tmpl b/src/tint/lang/spirv/builtin_fn.cc.tmpl
index 020f64d..e90dce2 100644
--- a/src/tint/lang/spirv/builtin_fn.cc.tmpl
+++ b/src/tint/lang/spirv/builtin_fn.cc.tmpl
@@ -45,6 +45,7 @@
         case BuiltinFn::kImageWrite:
         case BuiltinFn::kModf:
         case BuiltinFn::kFrexp:
+        case BuiltinFn::kCooperativeMatrixStore:
             return core::ir::Instruction::Accesses{core::ir::Instruction::Access::kStore};
 
         case BuiltinFn::kAtomicAnd:
diff --git a/src/tint/lang/spirv/builtin_fn.h b/src/tint/lang/spirv/builtin_fn.h
index 2288e07..bcecb07 100644
--- a/src/tint/lang/spirv/builtin_fn.h
+++ b/src/tint/lang/spirv/builtin_fn.h
@@ -102,6 +102,7 @@
     kFrexp,
     kSdot,
     kUdot,
+    kCooperativeMatrixStore,
     kNone,
 };
 
diff --git a/src/tint/lang/spirv/intrinsic/data.cc b/src/tint/lang/spirv/intrinsic/data.cc
index 6c5c0cd..1f8d2aa 100644
--- a/src/tint/lang/spirv/intrinsic/data.cc
+++ b/src/tint/lang/spirv/intrinsic/data.cc
@@ -891,6 +891,44 @@
 };
 
 
+/// TypeMatcher for 'type subgroup_matrix'
+constexpr TypeMatcher kSubgroupMatrixMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+  Number S = Number::invalid;
+  const Type* T = nullptr;
+  Number C = Number::invalid;
+  Number R = Number::invalid;
+    if (!MatchSubgroupMatrix(state, ty, S, T, C, R)) {
+      return nullptr;
+    }
+    S = state.Num(S);
+    if (!S.IsValid()) {
+      return nullptr;
+    }
+    T = state.Type(T);
+    if (T == nullptr) {
+      return nullptr;
+    }
+    C = state.Num(C);
+    if (!C.IsValid()) {
+      return nullptr;
+    }
+    R = state.Num(R);
+    if (!R.IsValid()) {
+      return nullptr;
+    }
+    return BuildSubgroupMatrix(state, ty, S, T, C, R);
+  },
+/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {StyledText S;
+  state->PrintNum(S);StyledText T;
+  state->PrintType(T);StyledText C;
+  state->PrintNum(C);StyledText R;
+  state->PrintNum(R);
+    out << style::Type("subgroup_matrix", "<", S, ", ", T, ", ", C, ", ", R, ">");
+  }
+};
+
+
 /// TypeMatcher for 'match f32_f16'
 constexpr TypeMatcher kF32F16Matcher {
 /* match */ [](MatchState& state, const Type* ty) -> const Type* {
@@ -945,6 +983,29 @@
  kF32Matcher.print(nullptr, out); out << style::Plain(", "); kI32Matcher.print(nullptr, out); out << style::Plain(" or "); kU32Matcher.print(nullptr, out);}
 };
 
+/// TypeMatcher for 'match fiu32_f16'
+constexpr TypeMatcher kFiu32F16Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+    if (MatchF32(state, ty)) {
+      return BuildF32(state, ty);
+    }
+    if (MatchI32(state, ty)) {
+      return BuildI32(state, ty);
+    }
+    if (MatchU32(state, ty)) {
+      return BuildU32(state, ty);
+    }
+    if (MatchF16(state, ty)) {
+      return BuildF16(state, ty);
+    }
+    return nullptr;
+  },
+/* print */ [](MatchState*, StyledText& out) {
+    // Note: We pass nullptr to the Matcher.print() functions, as matchers do not support
+    // template arguments, nor can they match sub-types. As such, they have no use for the MatchState.
+ kF32Matcher.print(nullptr, out); out << style::Plain(", "); kI32Matcher.print(nullptr, out); out << style::Plain(", "); kU32Matcher.print(nullptr, out); out << style::Plain(" or "); kF16Matcher.print(nullptr, out);}
+};
+
 /// TypeMatcher for 'match scalar'
 constexpr TypeMatcher kScalarMatcher {
 /* match */ [](MatchState& state, const Type* ty) -> const Type* {
@@ -1140,6 +1201,45 @@
   }
 };
 
+/// EnumMatcher for 'match subgroup_matrix_kind_left'
+constexpr NumberMatcher kSubgroupMatrixKindLeftMatcher {
+/* match */ [](MatchState&, Number number) -> Number {
+    if (number.IsAny() || number.Value() == static_cast<uint32_t>(core::SubgroupMatrixKind::kLeft)) {
+      return Number(static_cast<uint32_t>(core::SubgroupMatrixKind::kLeft));
+    }
+    return Number::invalid;
+  },
+/* print */ [](MatchState*, StyledText& out) {
+  out<< style::Enum("left");
+  }
+};
+
+/// EnumMatcher for 'match subgroup_matrix_kind_right'
+constexpr NumberMatcher kSubgroupMatrixKindRightMatcher {
+/* match */ [](MatchState&, Number number) -> Number {
+    if (number.IsAny() || number.Value() == static_cast<uint32_t>(core::SubgroupMatrixKind::kRight)) {
+      return Number(static_cast<uint32_t>(core::SubgroupMatrixKind::kRight));
+    }
+    return Number::invalid;
+  },
+/* print */ [](MatchState*, StyledText& out) {
+  out<< style::Enum("right");
+  }
+};
+
+/// EnumMatcher for 'match subgroup_matrix_kind_result'
+constexpr NumberMatcher kSubgroupMatrixKindResultMatcher {
+/* match */ [](MatchState&, Number number) -> Number {
+    if (number.IsAny() || number.Value() == static_cast<uint32_t>(core::SubgroupMatrixKind::kResult)) {
+      return Number(static_cast<uint32_t>(core::SubgroupMatrixKind::kResult));
+    }
+    return Number::invalid;
+  },
+/* print */ [](MatchState*, StyledText& out) {
+  out<< style::Enum("result");
+  }
+};
+
 /// Type and number matchers
 
 /// The template types, types, and type matchers
@@ -1191,11 +1291,13 @@
   /* [44] */ kInputAttachmentMatcher,
   /* [45] */ kStructWithRuntimeArrayMatcher,
   /* [46] */ kSampledImageMatcher,
-  /* [47] */ kF32F16Matcher,
-  /* [48] */ kIu32Matcher,
-  /* [49] */ kFiu32Matcher,
-  /* [50] */ kScalarMatcher,
-  /* [51] */ kSamplersMatcher,
+  /* [47] */ kSubgroupMatrixMatcher,
+  /* [48] */ kF32F16Matcher,
+  /* [49] */ kIu32Matcher,
+  /* [50] */ kFiu32Matcher,
+  /* [51] */ kFiu32F16Matcher,
+  /* [52] */ kScalarMatcher,
+  /* [53] */ kSamplersMatcher,
 };
 
 /// The template numbers, and number matchers
@@ -1214,6 +1316,9 @@
   /* [11] */ kU32TexelFormatMatcher,
   /* [12] */ kReadableMatcher,
   /* [13] */ kWritableMatcher,
+  /* [14] */ kSubgroupMatrixKindLeftMatcher,
+  /* [15] */ kSubgroupMatrixKindRightMatcher,
+  /* [16] */ kSubgroupMatrixKindResultMatcher,
 };
 
 constexpr MatcherIndex kMatcherIndices[] = {
@@ -1235,188 +1340,197 @@
   /* [15] */ MatcherIndex(24),
   /* [16] */ MatcherIndex(0),
   /* [17] */ MatcherIndex(5),
-  /* [18] */ MatcherIndex(43),
-  /* [19] */ MatcherIndex(6),
-  /* [20] */ MatcherIndex(45),
-  /* [21] */ MatcherIndex(1),
-  /* [22] */ MatcherIndex(23),
-  /* [23] */ MatcherIndex(2),
-  /* [24] */ MatcherIndex(3),
-  /* [25] */ MatcherIndex(0),
-  /* [26] */ MatcherIndex(23),
-  /* [27] */ MatcherIndex(1),
-  /* [28] */ MatcherIndex(3),
-  /* [29] */ MatcherIndex(0),
-  /* [30] */ MatcherIndex(23),
-  /* [31] */ MatcherIndex(2),
+  /* [18] */ MatcherIndex(47),
+  /* [19] */ MatcherIndex(0),
+  /* [20] */ MatcherIndex(1),
+  /* [21] */ MatcherIndex(2),
+  /* [22] */ MatcherIndex(3),
+  /* [23] */ MatcherIndex(43),
+  /* [24] */ MatcherIndex(6),
+  /* [25] */ MatcherIndex(45),
+  /* [26] */ MatcherIndex(1),
+  /* [27] */ MatcherIndex(23),
+  /* [28] */ MatcherIndex(2),
+  /* [29] */ MatcherIndex(3),
+  /* [30] */ MatcherIndex(0),
+  /* [31] */ MatcherIndex(23),
   /* [32] */ MatcherIndex(1),
-  /* [33] */ MatcherIndex(0),
-  /* [34] */ MatcherIndex(23),
-  /* [35] */ MatcherIndex(1),
+  /* [33] */ MatcherIndex(3),
+  /* [34] */ MatcherIndex(0),
+  /* [35] */ MatcherIndex(23),
   /* [36] */ MatcherIndex(2),
-  /* [37] */ MatcherIndex(0),
-  /* [38] */ MatcherIndex(43),
-  /* [39] */ MatcherIndex(1),
-  /* [40] */ MatcherIndex(0),
-  /* [41] */ MatcherIndex(13),
-  /* [42] */ MatcherIndex(43),
-  /* [43] */ MatcherIndex(2),
+  /* [37] */ MatcherIndex(1),
+  /* [38] */ MatcherIndex(0),
+  /* [39] */ MatcherIndex(23),
+  /* [40] */ MatcherIndex(1),
+  /* [41] */ MatcherIndex(2),
+  /* [42] */ MatcherIndex(0),
+  /* [43] */ MatcherIndex(43),
   /* [44] */ MatcherIndex(1),
-  /* [45] */ MatcherIndex(13),
-  /* [46] */ MatcherIndex(22),
-  /* [47] */ MatcherIndex(0),
-  /* [48] */ MatcherIndex(1),
-  /* [49] */ MatcherIndex(46),
-  /* [50] */ MatcherIndex(27),
-  /* [51] */ MatcherIndex(0),
-  /* [52] */ MatcherIndex(46),
-  /* [53] */ MatcherIndex(28),
-  /* [54] */ MatcherIndex(0),
-  /* [55] */ MatcherIndex(46),
-  /* [56] */ MatcherIndex(29),
-  /* [57] */ MatcherIndex(0),
+  /* [45] */ MatcherIndex(0),
+  /* [46] */ MatcherIndex(13),
+  /* [47] */ MatcherIndex(43),
+  /* [48] */ MatcherIndex(2),
+  /* [49] */ MatcherIndex(1),
+  /* [50] */ MatcherIndex(13),
+  /* [51] */ MatcherIndex(43),
+  /* [52] */ MatcherIndex(7),
+  /* [53] */ MatcherIndex(1),
+  /* [54] */ MatcherIndex(13),
+  /* [55] */ MatcherIndex(22),
+  /* [56] */ MatcherIndex(0),
+  /* [57] */ MatcherIndex(1),
   /* [58] */ MatcherIndex(46),
-  /* [59] */ MatcherIndex(30),
+  /* [59] */ MatcherIndex(27),
   /* [60] */ MatcherIndex(0),
   /* [61] */ MatcherIndex(46),
-  /* [62] */ MatcherIndex(31),
+  /* [62] */ MatcherIndex(28),
   /* [63] */ MatcherIndex(0),
   /* [64] */ MatcherIndex(46),
-  /* [65] */ MatcherIndex(32),
+  /* [65] */ MatcherIndex(29),
   /* [66] */ MatcherIndex(0),
-  /* [67] */ MatcherIndex(39),
-  /* [68] */ MatcherIndex(0),
-  /* [69] */ MatcherIndex(1),
-  /* [70] */ MatcherIndex(40),
-  /* [71] */ MatcherIndex(0),
-  /* [72] */ MatcherIndex(1),
-  /* [73] */ MatcherIndex(41),
-  /* [74] */ MatcherIndex(0),
-  /* [75] */ MatcherIndex(1),
-  /* [76] */ MatcherIndex(42),
+  /* [67] */ MatcherIndex(46),
+  /* [68] */ MatcherIndex(30),
+  /* [69] */ MatcherIndex(0),
+  /* [70] */ MatcherIndex(46),
+  /* [71] */ MatcherIndex(31),
+  /* [72] */ MatcherIndex(0),
+  /* [73] */ MatcherIndex(46),
+  /* [74] */ MatcherIndex(32),
+  /* [75] */ MatcherIndex(0),
+  /* [76] */ MatcherIndex(39),
   /* [77] */ MatcherIndex(0),
   /* [78] */ MatcherIndex(1),
-  /* [79] */ MatcherIndex(39),
-  /* [80] */ MatcherIndex(9),
-  /* [81] */ MatcherIndex(13),
-  /* [82] */ MatcherIndex(39),
-  /* [83] */ MatcherIndex(10),
-  /* [84] */ MatcherIndex(13),
-  /* [85] */ MatcherIndex(39),
-  /* [86] */ MatcherIndex(11),
-  /* [87] */ MatcherIndex(13),
-  /* [88] */ MatcherIndex(40),
+  /* [79] */ MatcherIndex(40),
+  /* [80] */ MatcherIndex(0),
+  /* [81] */ MatcherIndex(1),
+  /* [82] */ MatcherIndex(41),
+  /* [83] */ MatcherIndex(0),
+  /* [84] */ MatcherIndex(1),
+  /* [85] */ MatcherIndex(42),
+  /* [86] */ MatcherIndex(0),
+  /* [87] */ MatcherIndex(1),
+  /* [88] */ MatcherIndex(39),
   /* [89] */ MatcherIndex(9),
   /* [90] */ MatcherIndex(13),
-  /* [91] */ MatcherIndex(40),
+  /* [91] */ MatcherIndex(39),
   /* [92] */ MatcherIndex(10),
   /* [93] */ MatcherIndex(13),
-  /* [94] */ MatcherIndex(40),
+  /* [94] */ MatcherIndex(39),
   /* [95] */ MatcherIndex(11),
   /* [96] */ MatcherIndex(13),
-  /* [97] */ MatcherIndex(41),
+  /* [97] */ MatcherIndex(40),
   /* [98] */ MatcherIndex(9),
   /* [99] */ MatcherIndex(13),
-  /* [100] */ MatcherIndex(41),
+  /* [100] */ MatcherIndex(40),
   /* [101] */ MatcherIndex(10),
   /* [102] */ MatcherIndex(13),
-  /* [103] */ MatcherIndex(41),
+  /* [103] */ MatcherIndex(40),
   /* [104] */ MatcherIndex(11),
   /* [105] */ MatcherIndex(13),
-  /* [106] */ MatcherIndex(42),
+  /* [106] */ MatcherIndex(41),
   /* [107] */ MatcherIndex(9),
   /* [108] */ MatcherIndex(13),
-  /* [109] */ MatcherIndex(42),
+  /* [109] */ MatcherIndex(41),
   /* [110] */ MatcherIndex(10),
   /* [111] */ MatcherIndex(13),
-  /* [112] */ MatcherIndex(42),
+  /* [112] */ MatcherIndex(41),
   /* [113] */ MatcherIndex(11),
   /* [114] */ MatcherIndex(13),
-  /* [115] */ MatcherIndex(22),
-  /* [116] */ MatcherIndex(2),
-  /* [117] */ MatcherIndex(0),
-  /* [118] */ MatcherIndex(22),
-  /* [119] */ MatcherIndex(0),
-  /* [120] */ MatcherIndex(5),
-  /* [121] */ MatcherIndex(22),
-  /* [122] */ MatcherIndex(3),
-  /* [123] */ MatcherIndex(0),
+  /* [115] */ MatcherIndex(42),
+  /* [116] */ MatcherIndex(9),
+  /* [117] */ MatcherIndex(13),
+  /* [118] */ MatcherIndex(42),
+  /* [119] */ MatcherIndex(10),
+  /* [120] */ MatcherIndex(13),
+  /* [121] */ MatcherIndex(42),
+  /* [122] */ MatcherIndex(11),
+  /* [123] */ MatcherIndex(13),
   /* [124] */ MatcherIndex(22),
-  /* [125] */ MatcherIndex(3),
-  /* [126] */ MatcherIndex(1),
+  /* [125] */ MatcherIndex(2),
+  /* [126] */ MatcherIndex(0),
   /* [127] */ MatcherIndex(22),
-  /* [128] */ MatcherIndex(3),
-  /* [129] */ MatcherIndex(2),
+  /* [128] */ MatcherIndex(0),
+  /* [129] */ MatcherIndex(5),
   /* [130] */ MatcherIndex(22),
-  /* [131] */ MatcherIndex(4),
+  /* [131] */ MatcherIndex(3),
   /* [132] */ MatcherIndex(0),
   /* [133] */ MatcherIndex(22),
-  /* [134] */ MatcherIndex(4),
+  /* [134] */ MatcherIndex(3),
   /* [135] */ MatcherIndex(1),
   /* [136] */ MatcherIndex(22),
-  /* [137] */ MatcherIndex(4),
+  /* [137] */ MatcherIndex(3),
   /* [138] */ MatcherIndex(2),
   /* [139] */ MatcherIndex(22),
   /* [140] */ MatcherIndex(4),
-  /* [141] */ MatcherIndex(3),
+  /* [141] */ MatcherIndex(0),
   /* [142] */ MatcherIndex(22),
-  /* [143] */ MatcherIndex(0),
-  /* [144] */ MatcherIndex(2),
-  /* [145] */ MatcherIndex(12),
-  /* [146] */ MatcherIndex(6),
-  /* [147] */ MatcherIndex(46),
-  /* [148] */ MatcherIndex(34),
-  /* [149] */ MatcherIndex(10),
-  /* [150] */ MatcherIndex(6),
-  /* [151] */ MatcherIndex(10),
-  /* [152] */ MatcherIndex(2),
-  /* [153] */ MatcherIndex(46),
-  /* [154] */ MatcherIndex(35),
-  /* [155] */ MatcherIndex(11),
-  /* [156] */ MatcherIndex(6),
-  /* [157] */ MatcherIndex(46),
-  /* [158] */ MatcherIndex(36),
-  /* [159] */ MatcherIndex(46),
-  /* [160] */ MatcherIndex(37),
-  /* [161] */ MatcherIndex(12),
-  /* [162] */ MatcherIndex(0),
-  /* [163] */ MatcherIndex(10),
-  /* [164] */ MatcherIndex(1),
-  /* [165] */ MatcherIndex(11),
-  /* [166] */ MatcherIndex(1),
-  /* [167] */ MatcherIndex(33),
-  /* [168] */ MatcherIndex(0),
-  /* [169] */ MatcherIndex(10),
-  /* [170] */ MatcherIndex(8),
-  /* [171] */ MatcherIndex(10),
-  /* [172] */ MatcherIndex(3),
-  /* [173] */ MatcherIndex(10),
-  /* [174] */ MatcherIndex(9),
-  /* [175] */ MatcherIndex(11),
-  /* [176] */ MatcherIndex(9),
-  /* [177] */ MatcherIndex(12),
-  /* [178] */ MatcherIndex(8),
-  /* [179] */ MatcherIndex(12),
-  /* [180] */ MatcherIndex(9),
-  /* [181] */ MatcherIndex(11),
-  /* [182] */ MatcherIndex(2),
-  /* [183] */ MatcherIndex(44),
-  /* [184] */ MatcherIndex(0),
-  /* [185] */ MatcherIndex(10),
-  /* [186] */ MatcherIndex(0),
-  /* [187] */ MatcherIndex(11),
-  /* [188] */ MatcherIndex(0),
-  /* [189] */ MatcherIndex(17),
-  /* [190] */ MatcherIndex(0),
-  /* [191] */ MatcherIndex(21),
-  /* [192] */ MatcherIndex(0),
-  /* [193] */ MatcherIndex(48),
-  /* [194] */ MatcherIndex(7),
-  /* [195] */ MatcherIndex(47),
-  /* [196] */ MatcherIndex(49),
-  /* [197] */ MatcherIndex(38),
-  /* [198] */ MatcherIndex(51),
-  /* [199] */ MatcherIndex(50),
+  /* [143] */ MatcherIndex(4),
+  /* [144] */ MatcherIndex(1),
+  /* [145] */ MatcherIndex(22),
+  /* [146] */ MatcherIndex(4),
+  /* [147] */ MatcherIndex(2),
+  /* [148] */ MatcherIndex(22),
+  /* [149] */ MatcherIndex(4),
+  /* [150] */ MatcherIndex(3),
+  /* [151] */ MatcherIndex(22),
+  /* [152] */ MatcherIndex(0),
+  /* [153] */ MatcherIndex(2),
+  /* [154] */ MatcherIndex(12),
+  /* [155] */ MatcherIndex(6),
+  /* [156] */ MatcherIndex(46),
+  /* [157] */ MatcherIndex(34),
+  /* [158] */ MatcherIndex(10),
+  /* [159] */ MatcherIndex(6),
+  /* [160] */ MatcherIndex(10),
+  /* [161] */ MatcherIndex(2),
+  /* [162] */ MatcherIndex(46),
+  /* [163] */ MatcherIndex(35),
+  /* [164] */ MatcherIndex(11),
+  /* [165] */ MatcherIndex(6),
+  /* [166] */ MatcherIndex(46),
+  /* [167] */ MatcherIndex(36),
+  /* [168] */ MatcherIndex(46),
+  /* [169] */ MatcherIndex(37),
+  /* [170] */ MatcherIndex(12),
+  /* [171] */ MatcherIndex(0),
+  /* [172] */ MatcherIndex(10),
+  /* [173] */ MatcherIndex(1),
+  /* [174] */ MatcherIndex(11),
+  /* [175] */ MatcherIndex(1),
+  /* [176] */ MatcherIndex(33),
+  /* [177] */ MatcherIndex(0),
+  /* [178] */ MatcherIndex(10),
+  /* [179] */ MatcherIndex(8),
+  /* [180] */ MatcherIndex(10),
+  /* [181] */ MatcherIndex(3),
+  /* [182] */ MatcherIndex(10),
+  /* [183] */ MatcherIndex(9),
+  /* [184] */ MatcherIndex(11),
+  /* [185] */ MatcherIndex(9),
+  /* [186] */ MatcherIndex(12),
+  /* [187] */ MatcherIndex(8),
+  /* [188] */ MatcherIndex(12),
+  /* [189] */ MatcherIndex(9),
+  /* [190] */ MatcherIndex(11),
+  /* [191] */ MatcherIndex(2),
+  /* [192] */ MatcherIndex(44),
+  /* [193] */ MatcherIndex(0),
+  /* [194] */ MatcherIndex(10),
+  /* [195] */ MatcherIndex(0),
+  /* [196] */ MatcherIndex(11),
+  /* [197] */ MatcherIndex(0),
+  /* [198] */ MatcherIndex(17),
+  /* [199] */ MatcherIndex(0),
+  /* [200] */ MatcherIndex(21),
+  /* [201] */ MatcherIndex(0),
+  /* [202] */ MatcherIndex(49),
+  /* [203] */ MatcherIndex(48),
+  /* [204] */ MatcherIndex(50),
+  /* [205] */ MatcherIndex(38),
+  /* [206] */ MatcherIndex(53),
+  /* [207] */ MatcherIndex(52),
+  /* [208] */ MatcherIndex(51),
 };
 
 static_assert(MatcherIndicesIndex::CanIndex(kMatcherIndices),
@@ -1476,12 +1590,12 @@
   {
     /* [10] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(52),
+    /* matcher_indices */ MatcherIndicesIndex(61),
   },
   {
     /* [11] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(149),
+    /* matcher_indices */ MatcherIndicesIndex(158),
   },
   {
     /* [12] */
@@ -1491,27 +1605,27 @@
   {
     /* [13] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(149),
+    /* matcher_indices */ MatcherIndicesIndex(158),
   },
   {
     /* [14] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(149),
+    /* matcher_indices */ MatcherIndicesIndex(158),
   },
   {
     /* [15] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(151),
+    /* matcher_indices */ MatcherIndicesIndex(160),
   },
   {
     /* [16] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(55),
+    /* matcher_indices */ MatcherIndicesIndex(64),
   },
   {
     /* [17] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(155),
+    /* matcher_indices */ MatcherIndicesIndex(164),
   },
   {
     /* [18] */
@@ -1521,27 +1635,27 @@
   {
     /* [19] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(149),
+    /* matcher_indices */ MatcherIndicesIndex(158),
   },
   {
     /* [20] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(149),
+    /* matcher_indices */ MatcherIndicesIndex(158),
   },
   {
     /* [21] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(151),
+    /* matcher_indices */ MatcherIndicesIndex(160),
   },
   {
     /* [22] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(58),
+    /* matcher_indices */ MatcherIndicesIndex(67),
   },
   {
     /* [23] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(155),
+    /* matcher_indices */ MatcherIndicesIndex(164),
   },
   {
     /* [24] */
@@ -1551,32 +1665,32 @@
   {
     /* [25] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(155),
+    /* matcher_indices */ MatcherIndicesIndex(164),
   },
   {
     /* [26] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(155),
+    /* matcher_indices */ MatcherIndicesIndex(164),
   },
   {
     /* [27] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(181),
+    /* matcher_indices */ MatcherIndicesIndex(190),
   },
   {
     /* [28] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(147),
+    /* matcher_indices */ MatcherIndicesIndex(156),
   },
   {
     /* [29] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(149),
+    /* matcher_indices */ MatcherIndicesIndex(158),
   },
   {
     /* [30] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(19),
+    /* matcher_indices */ MatcherIndicesIndex(24),
   },
   {
     /* [31] */
@@ -1586,27 +1700,27 @@
   {
     /* [32] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(19),
+    /* matcher_indices */ MatcherIndicesIndex(24),
   },
   {
     /* [33] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(163),
+    /* matcher_indices */ MatcherIndicesIndex(172),
   },
   {
     /* [34] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(153),
+    /* matcher_indices */ MatcherIndicesIndex(162),
   },
   {
     /* [35] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(155),
+    /* matcher_indices */ MatcherIndicesIndex(164),
   },
   {
     /* [36] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(19),
+    /* matcher_indices */ MatcherIndicesIndex(24),
   },
   {
     /* [37] */
@@ -1616,22 +1730,22 @@
   {
     /* [38] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(19),
+    /* matcher_indices */ MatcherIndicesIndex(24),
   },
   {
     /* [39] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(163),
+    /* matcher_indices */ MatcherIndicesIndex(172),
   },
   {
     /* [40] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(147),
+    /* matcher_indices */ MatcherIndicesIndex(156),
   },
   {
     /* [41] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(149),
+    /* matcher_indices */ MatcherIndicesIndex(158),
   },
   {
     /* [42] */
@@ -1646,17 +1760,17 @@
   {
     /* [44] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(151),
+    /* matcher_indices */ MatcherIndicesIndex(160),
   },
   {
     /* [45] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(153),
+    /* matcher_indices */ MatcherIndicesIndex(162),
   },
   {
     /* [46] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(155),
+    /* matcher_indices */ MatcherIndicesIndex(164),
   },
   {
     /* [47] */
@@ -1671,17 +1785,17 @@
   {
     /* [49] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(151),
+    /* matcher_indices */ MatcherIndicesIndex(160),
   },
   {
     /* [50] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(52),
+    /* matcher_indices */ MatcherIndicesIndex(61),
   },
   {
     /* [51] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(149),
+    /* matcher_indices */ MatcherIndicesIndex(158),
   },
   {
     /* [52] */
@@ -1696,17 +1810,17 @@
   {
     /* [54] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(169),
+    /* matcher_indices */ MatcherIndicesIndex(178),
   },
   {
     /* [55] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(55),
+    /* matcher_indices */ MatcherIndicesIndex(64),
   },
   {
     /* [56] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(155),
+    /* matcher_indices */ MatcherIndicesIndex(164),
   },
   {
     /* [57] */
@@ -1721,17 +1835,17 @@
   {
     /* [59] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(171),
+    /* matcher_indices */ MatcherIndicesIndex(180),
   },
   {
     /* [60] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(52),
+    /* matcher_indices */ MatcherIndicesIndex(61),
   },
   {
     /* [61] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(149),
+    /* matcher_indices */ MatcherIndicesIndex(158),
   },
   {
     /* [62] */
@@ -1741,22 +1855,22 @@
   {
     /* [63] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(19),
+    /* matcher_indices */ MatcherIndicesIndex(24),
   },
   {
     /* [64] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(151),
+    /* matcher_indices */ MatcherIndicesIndex(160),
   },
   {
     /* [65] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(55),
+    /* matcher_indices */ MatcherIndicesIndex(64),
   },
   {
     /* [66] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(155),
+    /* matcher_indices */ MatcherIndicesIndex(164),
   },
   {
     /* [67] */
@@ -1766,22 +1880,22 @@
   {
     /* [68] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(19),
+    /* matcher_indices */ MatcherIndicesIndex(24),
   },
   {
     /* [69] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(151),
+    /* matcher_indices */ MatcherIndicesIndex(160),
   },
   {
     /* [70] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(58),
+    /* matcher_indices */ MatcherIndicesIndex(67),
   },
   {
     /* [71] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(155),
+    /* matcher_indices */ MatcherIndicesIndex(164),
   },
   {
     /* [72] */
@@ -1791,22 +1905,22 @@
   {
     /* [73] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(19),
+    /* matcher_indices */ MatcherIndicesIndex(24),
   },
   {
     /* [74] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(181),
+    /* matcher_indices */ MatcherIndicesIndex(190),
   },
   {
     /* [75] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(52),
+    /* matcher_indices */ MatcherIndicesIndex(61),
   },
   {
     /* [76] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(149),
+    /* matcher_indices */ MatcherIndicesIndex(158),
   },
   {
     /* [77] */
@@ -1816,22 +1930,22 @@
   {
     /* [78] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(149),
+    /* matcher_indices */ MatcherIndicesIndex(158),
   },
   {
     /* [79] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(151),
+    /* matcher_indices */ MatcherIndicesIndex(160),
   },
   {
     /* [80] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(61),
+    /* matcher_indices */ MatcherIndicesIndex(70),
   },
   {
     /* [81] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(155),
+    /* matcher_indices */ MatcherIndicesIndex(164),
   },
   {
     /* [82] */
@@ -1841,22 +1955,22 @@
   {
     /* [83] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(155),
+    /* matcher_indices */ MatcherIndicesIndex(164),
   },
   {
     /* [84] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(155),
+    /* matcher_indices */ MatcherIndicesIndex(164),
   },
   {
     /* [85] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(64),
+    /* matcher_indices */ MatcherIndicesIndex(73),
   },
   {
     /* [86] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(145),
+    /* matcher_indices */ MatcherIndicesIndex(154),
   },
   {
     /* [87] */
@@ -1866,22 +1980,22 @@
   {
     /* [88] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(155),
+    /* matcher_indices */ MatcherIndicesIndex(164),
   },
   {
     /* [89] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(155),
+    /* matcher_indices */ MatcherIndicesIndex(164),
   },
   {
     /* [90] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(147),
+    /* matcher_indices */ MatcherIndicesIndex(156),
   },
   {
     /* [91] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(149),
+    /* matcher_indices */ MatcherIndicesIndex(158),
   },
   {
     /* [92] */
@@ -1891,22 +2005,22 @@
   {
     /* [93] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(19),
+    /* matcher_indices */ MatcherIndicesIndex(24),
   },
   {
     /* [94] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(163),
+    /* matcher_indices */ MatcherIndicesIndex(172),
   },
   {
     /* [95] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(153),
+    /* matcher_indices */ MatcherIndicesIndex(162),
   },
   {
     /* [96] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(155),
+    /* matcher_indices */ MatcherIndicesIndex(164),
   },
   {
     /* [97] */
@@ -1916,27 +2030,27 @@
   {
     /* [98] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(19),
+    /* matcher_indices */ MatcherIndicesIndex(24),
   },
   {
     /* [99] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(163),
+    /* matcher_indices */ MatcherIndicesIndex(172),
   },
   {
     /* [100] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(147),
+    /* matcher_indices */ MatcherIndicesIndex(156),
   },
   {
     /* [101] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(149),
+    /* matcher_indices */ MatcherIndicesIndex(158),
   },
   {
     /* [102] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(19),
+    /* matcher_indices */ MatcherIndicesIndex(24),
   },
   {
     /* [103] */
@@ -1946,22 +2060,22 @@
   {
     /* [104] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(163),
+    /* matcher_indices */ MatcherIndicesIndex(172),
   },
   {
     /* [105] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(153),
+    /* matcher_indices */ MatcherIndicesIndex(162),
   },
   {
     /* [106] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(155),
+    /* matcher_indices */ MatcherIndicesIndex(164),
   },
   {
     /* [107] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(19),
+    /* matcher_indices */ MatcherIndicesIndex(24),
   },
   {
     /* [108] */
@@ -1971,22 +2085,22 @@
   {
     /* [109] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(163),
+    /* matcher_indices */ MatcherIndicesIndex(172),
   },
   {
     /* [110] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(157),
+    /* matcher_indices */ MatcherIndicesIndex(166),
   },
   {
     /* [111] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(155),
+    /* matcher_indices */ MatcherIndicesIndex(164),
   },
   {
     /* [112] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(19),
+    /* matcher_indices */ MatcherIndicesIndex(24),
   },
   {
     /* [113] */
@@ -1996,22 +2110,22 @@
   {
     /* [114] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(19),
+    /* matcher_indices */ MatcherIndicesIndex(24),
   },
   {
     /* [115] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(159),
+    /* matcher_indices */ MatcherIndicesIndex(168),
   },
   {
     /* [116] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(145),
+    /* matcher_indices */ MatcherIndicesIndex(154),
   },
   {
     /* [117] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(19),
+    /* matcher_indices */ MatcherIndicesIndex(24),
   },
   {
     /* [118] */
@@ -2021,42 +2135,42 @@
   {
     /* [119] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(19),
+    /* matcher_indices */ MatcherIndicesIndex(24),
   },
   {
     /* [120] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(13),
+    /* matcher_indices */ MatcherIndicesIndex(51),
   },
   {
     /* [121] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(3),
+    /* matcher_indices */ MatcherIndicesIndex(18),
   },
   {
     /* [122] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(3),
+    /* matcher_indices */ MatcherIndicesIndex(89),
   },
   {
     /* [123] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(4),
+    /* matcher_indices */ MatcherIndicesIndex(89),
   },
   {
     /* [124] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(157),
+    /* matcher_indices */ MatcherIndicesIndex(89),
   },
   {
     /* [125] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(155),
+    /* matcher_indices */ MatcherIndicesIndex(13),
   },
   {
     /* [126] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(4),
+    /* matcher_indices */ MatcherIndicesIndex(3),
   },
   {
     /* [127] */
@@ -2066,137 +2180,137 @@
   {
     /* [128] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(159),
+    /* matcher_indices */ MatcherIndicesIndex(4),
   },
   {
     /* [129] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(145),
+    /* matcher_indices */ MatcherIndicesIndex(166),
   },
   {
     /* [130] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(4),
+    /* matcher_indices */ MatcherIndicesIndex(164),
   },
   {
     /* [131] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(3),
+    /* matcher_indices */ MatcherIndicesIndex(4),
   },
   {
     /* [132] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(50),
+    /* matcher_indices */ MatcherIndicesIndex(3),
   },
   {
     /* [133] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(3),
+    /* matcher_indices */ MatcherIndicesIndex(168),
   },
   {
     /* [134] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(1),
+    /* matcher_indices */ MatcherIndicesIndex(154),
   },
   {
     /* [135] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(8),
+    /* matcher_indices */ MatcherIndicesIndex(4),
   },
   {
     /* [136] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(53),
+    /* matcher_indices */ MatcherIndicesIndex(3),
   },
   {
     /* [137] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(163),
+    /* matcher_indices */ MatcherIndicesIndex(59),
   },
   {
     /* [138] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(1),
+    /* matcher_indices */ MatcherIndicesIndex(3),
   },
   {
     /* [139] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(8),
+    /* matcher_indices */ MatcherIndicesIndex(1),
   },
   {
     /* [140] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(56),
+    /* matcher_indices */ MatcherIndicesIndex(8),
   },
   {
     /* [141] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(165),
+    /* matcher_indices */ MatcherIndicesIndex(62),
   },
   {
     /* [142] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(1),
+    /* matcher_indices */ MatcherIndicesIndex(172),
   },
   {
     /* [143] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(8),
+    /* matcher_indices */ MatcherIndicesIndex(1),
   },
   {
     /* [144] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(59),
+    /* matcher_indices */ MatcherIndicesIndex(8),
   },
   {
     /* [145] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(165),
+    /* matcher_indices */ MatcherIndicesIndex(65),
   },
   {
     /* [146] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(1),
+    /* matcher_indices */ MatcherIndicesIndex(174),
   },
   {
     /* [147] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(8),
+    /* matcher_indices */ MatcherIndicesIndex(1),
   },
   {
     /* [148] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(167),
+    /* matcher_indices */ MatcherIndicesIndex(8),
   },
   {
     /* [149] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(163),
+    /* matcher_indices */ MatcherIndicesIndex(68),
   },
   {
     /* [150] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(1),
+    /* matcher_indices */ MatcherIndicesIndex(174),
   },
   {
     /* [151] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(8),
+    /* matcher_indices */ MatcherIndicesIndex(1),
   },
   {
     /* [152] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(148),
+    /* matcher_indices */ MatcherIndicesIndex(8),
   },
   {
     /* [153] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(163),
+    /* matcher_indices */ MatcherIndicesIndex(176),
   },
   {
     /* [154] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(4),
+    /* matcher_indices */ MatcherIndicesIndex(172),
   },
   {
     /* [155] */
@@ -2206,27 +2320,27 @@
   {
     /* [156] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(154),
+    /* matcher_indices */ MatcherIndicesIndex(8),
   },
   {
     /* [157] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(165),
+    /* matcher_indices */ MatcherIndicesIndex(157),
   },
   {
     /* [158] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(4),
+    /* matcher_indices */ MatcherIndicesIndex(172),
   },
   {
     /* [159] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(1),
+    /* matcher_indices */ MatcherIndicesIndex(4),
   },
   {
     /* [160] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(197),
+    /* matcher_indices */ MatcherIndicesIndex(1),
   },
   {
     /* [161] */
@@ -2236,662 +2350,662 @@
   {
     /* [162] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(4),
+    /* matcher_indices */ MatcherIndicesIndex(174),
   },
   {
     /* [163] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(1),
+    /* matcher_indices */ MatcherIndicesIndex(4),
   },
   {
     /* [164] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(49),
+    /* matcher_indices */ MatcherIndicesIndex(1),
   },
   {
     /* [165] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(149),
+    /* matcher_indices */ MatcherIndicesIndex(205),
   },
   {
     /* [166] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(3),
+    /* matcher_indices */ MatcherIndicesIndex(172),
   },
   {
     /* [167] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(1),
+    /* matcher_indices */ MatcherIndicesIndex(4),
   },
   {
     /* [168] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(58),
+    /* matcher_indices */ MatcherIndicesIndex(1),
   },
   {
     /* [169] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(149),
+    /* matcher_indices */ MatcherIndicesIndex(58),
   },
   {
     /* [170] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(3),
+    /* matcher_indices */ MatcherIndicesIndex(158),
   },
   {
     /* [171] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(1),
+    /* matcher_indices */ MatcherIndicesIndex(3),
   },
   {
     /* [172] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(61),
+    /* matcher_indices */ MatcherIndicesIndex(1),
   },
   {
     /* [173] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(155),
+    /* matcher_indices */ MatcherIndicesIndex(67),
   },
   {
     /* [174] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(3),
+    /* matcher_indices */ MatcherIndicesIndex(158),
   },
   {
     /* [175] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(1),
+    /* matcher_indices */ MatcherIndicesIndex(3),
   },
   {
     /* [176] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(64),
+    /* matcher_indices */ MatcherIndicesIndex(1),
   },
   {
     /* [177] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(145),
+    /* matcher_indices */ MatcherIndicesIndex(70),
   },
   {
     /* [178] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(3),
+    /* matcher_indices */ MatcherIndicesIndex(164),
   },
   {
     /* [179] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(1),
+    /* matcher_indices */ MatcherIndicesIndex(3),
   },
   {
     /* [180] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(52),
+    /* matcher_indices */ MatcherIndicesIndex(1),
   },
   {
     /* [181] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(149),
+    /* matcher_indices */ MatcherIndicesIndex(73),
   },
   {
     /* [182] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(3),
+    /* matcher_indices */ MatcherIndicesIndex(154),
   },
   {
     /* [183] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(151),
+    /* matcher_indices */ MatcherIndicesIndex(3),
   },
   {
     /* [184] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(55),
+    /* matcher_indices */ MatcherIndicesIndex(1),
   },
   {
     /* [185] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(155),
+    /* matcher_indices */ MatcherIndicesIndex(61),
   },
   {
     /* [186] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(3),
+    /* matcher_indices */ MatcherIndicesIndex(158),
   },
   {
     /* [187] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(151),
+    /* matcher_indices */ MatcherIndicesIndex(3),
   },
   {
     /* [188] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(58),
+    /* matcher_indices */ MatcherIndicesIndex(160),
   },
   {
     /* [189] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(155),
+    /* matcher_indices */ MatcherIndicesIndex(64),
   },
   {
     /* [190] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(3),
+    /* matcher_indices */ MatcherIndicesIndex(164),
   },
   {
     /* [191] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(181),
+    /* matcher_indices */ MatcherIndicesIndex(3),
   },
   {
     /* [192] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(61),
+    /* matcher_indices */ MatcherIndicesIndex(160),
   },
   {
     /* [193] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(155),
+    /* matcher_indices */ MatcherIndicesIndex(67),
   },
   {
     /* [194] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(3),
+    /* matcher_indices */ MatcherIndicesIndex(164),
   },
   {
     /* [195] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(19),
+    /* matcher_indices */ MatcherIndicesIndex(3),
   },
   {
     /* [196] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(64),
+    /* matcher_indices */ MatcherIndicesIndex(190),
   },
   {
     /* [197] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(145),
+    /* matcher_indices */ MatcherIndicesIndex(70),
   },
   {
     /* [198] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(3),
+    /* matcher_indices */ MatcherIndicesIndex(164),
   },
   {
     /* [199] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(19),
+    /* matcher_indices */ MatcherIndicesIndex(3),
   },
   {
     /* [200] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(147),
+    /* matcher_indices */ MatcherIndicesIndex(24),
   },
   {
     /* [201] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(149),
+    /* matcher_indices */ MatcherIndicesIndex(73),
   },
   {
     /* [202] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(4),
+    /* matcher_indices */ MatcherIndicesIndex(154),
   },
   {
     /* [203] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(163),
+    /* matcher_indices */ MatcherIndicesIndex(3),
   },
   {
     /* [204] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(153),
+    /* matcher_indices */ MatcherIndicesIndex(24),
   },
   {
     /* [205] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(155),
+    /* matcher_indices */ MatcherIndicesIndex(156),
   },
   {
     /* [206] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(4),
+    /* matcher_indices */ MatcherIndicesIndex(158),
   },
   {
     /* [207] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(163),
+    /* matcher_indices */ MatcherIndicesIndex(4),
   },
   {
     /* [208] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(157),
+    /* matcher_indices */ MatcherIndicesIndex(172),
   },
   {
     /* [209] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(155),
+    /* matcher_indices */ MatcherIndicesIndex(162),
   },
   {
     /* [210] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(4),
+    /* matcher_indices */ MatcherIndicesIndex(164),
   },
   {
     /* [211] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(19),
+    /* matcher_indices */ MatcherIndicesIndex(4),
   },
   {
     /* [212] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(159),
+    /* matcher_indices */ MatcherIndicesIndex(172),
   },
   {
     /* [213] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(145),
+    /* matcher_indices */ MatcherIndicesIndex(166),
   },
   {
     /* [214] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(4),
+    /* matcher_indices */ MatcherIndicesIndex(164),
   },
   {
     /* [215] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(19),
+    /* matcher_indices */ MatcherIndicesIndex(4),
   },
   {
     /* [216] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(79),
+    /* matcher_indices */ MatcherIndicesIndex(24),
   },
   {
     /* [217] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(4),
+    /* matcher_indices */ MatcherIndicesIndex(168),
   },
   {
     /* [218] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(145),
+    /* matcher_indices */ MatcherIndicesIndex(154),
   },
   {
     /* [219] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(3),
+    /* matcher_indices */ MatcherIndicesIndex(4),
   },
   {
     /* [220] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(82),
+    /* matcher_indices */ MatcherIndicesIndex(24),
   },
   {
     /* [221] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(4),
+    /* matcher_indices */ MatcherIndicesIndex(88),
   },
   {
     /* [222] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(177),
+    /* matcher_indices */ MatcherIndicesIndex(4),
   },
   {
     /* [223] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(3),
+    /* matcher_indices */ MatcherIndicesIndex(154),
   },
   {
     /* [224] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(85),
+    /* matcher_indices */ MatcherIndicesIndex(3),
   },
   {
     /* [225] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(4),
+    /* matcher_indices */ MatcherIndicesIndex(91),
   },
   {
     /* [226] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(179),
+    /* matcher_indices */ MatcherIndicesIndex(4),
   },
   {
     /* [227] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(3),
+    /* matcher_indices */ MatcherIndicesIndex(186),
   },
   {
     /* [228] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(88),
+    /* matcher_indices */ MatcherIndicesIndex(3),
   },
   {
     /* [229] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(185),
+    /* matcher_indices */ MatcherIndicesIndex(94),
   },
   {
     /* [230] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(145),
+    /* matcher_indices */ MatcherIndicesIndex(4),
   },
   {
     /* [231] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(3),
+    /* matcher_indices */ MatcherIndicesIndex(188),
   },
   {
     /* [232] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(91),
+    /* matcher_indices */ MatcherIndicesIndex(3),
   },
   {
     /* [233] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(185),
+    /* matcher_indices */ MatcherIndicesIndex(97),
   },
   {
     /* [234] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(177),
+    /* matcher_indices */ MatcherIndicesIndex(194),
   },
   {
     /* [235] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(3),
+    /* matcher_indices */ MatcherIndicesIndex(154),
   },
   {
     /* [236] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(94),
+    /* matcher_indices */ MatcherIndicesIndex(3),
   },
   {
     /* [237] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(185),
+    /* matcher_indices */ MatcherIndicesIndex(100),
   },
   {
     /* [238] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(179),
+    /* matcher_indices */ MatcherIndicesIndex(194),
   },
   {
     /* [239] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(3),
+    /* matcher_indices */ MatcherIndicesIndex(186),
   },
   {
     /* [240] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(97),
+    /* matcher_indices */ MatcherIndicesIndex(3),
   },
   {
     /* [241] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(187),
+    /* matcher_indices */ MatcherIndicesIndex(103),
   },
   {
     /* [242] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(145),
+    /* matcher_indices */ MatcherIndicesIndex(194),
   },
   {
     /* [243] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(3),
+    /* matcher_indices */ MatcherIndicesIndex(188),
   },
   {
     /* [244] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(100),
+    /* matcher_indices */ MatcherIndicesIndex(3),
   },
   {
     /* [245] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(187),
+    /* matcher_indices */ MatcherIndicesIndex(106),
   },
   {
     /* [246] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(177),
+    /* matcher_indices */ MatcherIndicesIndex(196),
   },
   {
     /* [247] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(3),
+    /* matcher_indices */ MatcherIndicesIndex(154),
   },
   {
     /* [248] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(103),
+    /* matcher_indices */ MatcherIndicesIndex(3),
   },
   {
     /* [249] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(187),
+    /* matcher_indices */ MatcherIndicesIndex(109),
   },
   {
     /* [250] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(179),
+    /* matcher_indices */ MatcherIndicesIndex(196),
   },
   {
     /* [251] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(3),
+    /* matcher_indices */ MatcherIndicesIndex(186),
   },
   {
     /* [252] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(106),
+    /* matcher_indices */ MatcherIndicesIndex(3),
   },
   {
     /* [253] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(187),
+    /* matcher_indices */ MatcherIndicesIndex(112),
   },
   {
     /* [254] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(145),
+    /* matcher_indices */ MatcherIndicesIndex(196),
   },
   {
     /* [255] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(3),
+    /* matcher_indices */ MatcherIndicesIndex(188),
   },
   {
     /* [256] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(109),
+    /* matcher_indices */ MatcherIndicesIndex(3),
   },
   {
     /* [257] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(187),
+    /* matcher_indices */ MatcherIndicesIndex(115),
   },
   {
     /* [258] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(177),
+    /* matcher_indices */ MatcherIndicesIndex(196),
   },
   {
     /* [259] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(3),
+    /* matcher_indices */ MatcherIndicesIndex(154),
   },
   {
     /* [260] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(112),
+    /* matcher_indices */ MatcherIndicesIndex(3),
   },
   {
     /* [261] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(187),
+    /* matcher_indices */ MatcherIndicesIndex(118),
   },
   {
     /* [262] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(179),
+    /* matcher_indices */ MatcherIndicesIndex(196),
   },
   {
     /* [263] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(3),
+    /* matcher_indices */ MatcherIndicesIndex(186),
   },
   {
     /* [264] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(67),
+    /* matcher_indices */ MatcherIndicesIndex(3),
   },
   {
     /* [265] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(1),
+    /* matcher_indices */ MatcherIndicesIndex(121),
   },
   {
     /* [266] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(8),
+    /* matcher_indices */ MatcherIndicesIndex(196),
   },
   {
     /* [267] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(70),
+    /* matcher_indices */ MatcherIndicesIndex(188),
   },
   {
     /* [268] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(151),
+    /* matcher_indices */ MatcherIndicesIndex(3),
   },
   {
     /* [269] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(8),
+    /* matcher_indices */ MatcherIndicesIndex(76),
   },
   {
     /* [270] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(73),
+    /* matcher_indices */ MatcherIndicesIndex(1),
   },
   {
     /* [271] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(181),
+    /* matcher_indices */ MatcherIndicesIndex(8),
   },
   {
     /* [272] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(8),
+    /* matcher_indices */ MatcherIndicesIndex(79),
   },
   {
     /* [273] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(76),
+    /* matcher_indices */ MatcherIndicesIndex(160),
   },
   {
     /* [274] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(181),
+    /* matcher_indices */ MatcherIndicesIndex(8),
   },
   {
     /* [275] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(8),
+    /* matcher_indices */ MatcherIndicesIndex(82),
   },
   {
     /* [276] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(49),
+    /* matcher_indices */ MatcherIndicesIndex(190),
   },
   {
     /* [277] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(19),
+    /* matcher_indices */ MatcherIndicesIndex(8),
   },
   {
     /* [278] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(3),
+    /* matcher_indices */ MatcherIndicesIndex(85),
   },
   {
     /* [279] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(17),
+    /* matcher_indices */ MatcherIndicesIndex(190),
   },
   {
     /* [280] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(4),
+    /* matcher_indices */ MatcherIndicesIndex(8),
   },
   {
     /* [281] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(4),
+    /* matcher_indices */ MatcherIndicesIndex(58),
   },
   {
     /* [282] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(118),
+    /* matcher_indices */ MatcherIndicesIndex(24),
   },
   {
     /* [283] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(46),
+    /* matcher_indices */ MatcherIndicesIndex(3),
   },
   {
     /* [284] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(46),
+    /* matcher_indices */ MatcherIndicesIndex(17),
   },
   {
     /* [285] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(142),
+    /* matcher_indices */ MatcherIndicesIndex(4),
   },
   {
     /* [286] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(133),
+    /* matcher_indices */ MatcherIndicesIndex(4),
   },
   {
     /* [287] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(136),
+    /* matcher_indices */ MatcherIndicesIndex(127),
   },
   {
     /* [288] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(139),
+    /* matcher_indices */ MatcherIndicesIndex(55),
   },
   {
     /* [289] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(2),
+    /* matcher_indices */ MatcherIndicesIndex(55),
   },
   {
     /* [290] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(2),
+    /* matcher_indices */ MatcherIndicesIndex(151),
   },
   {
     /* [291] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(4),
+    /* matcher_indices */ MatcherIndicesIndex(142),
   },
   {
     /* [292] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(2),
+    /* matcher_indices */ MatcherIndicesIndex(145),
   },
   {
     /* [293] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(2),
+    /* matcher_indices */ MatcherIndicesIndex(148),
   },
   {
     /* [294] */
@@ -2901,47 +3015,47 @@
   {
     /* [295] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(30),
+    /* matcher_indices */ MatcherIndicesIndex(2),
   },
   {
     /* [296] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(80),
+    /* matcher_indices */ MatcherIndicesIndex(4),
   },
   {
     /* [297] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(80),
+    /* matcher_indices */ MatcherIndicesIndex(2),
   },
   {
     /* [298] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(80),
+    /* matcher_indices */ MatcherIndicesIndex(2),
   },
   {
     /* [299] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(18),
+    /* matcher_indices */ MatcherIndicesIndex(2),
   },
   {
     /* [300] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(4),
+    /* matcher_indices */ MatcherIndicesIndex(35),
   },
   {
     /* [301] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(53),
+    /* matcher_indices */ MatcherIndicesIndex(23),
   },
   {
     /* [302] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(3),
+    /* matcher_indices */ MatcherIndicesIndex(4),
   },
   {
     /* [303] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(56),
+    /* matcher_indices */ MatcherIndicesIndex(62),
   },
   {
     /* [304] */
@@ -2951,7 +3065,7 @@
   {
     /* [305] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(59),
+    /* matcher_indices */ MatcherIndicesIndex(65),
   },
   {
     /* [306] */
@@ -2961,7 +3075,7 @@
   {
     /* [307] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(62),
+    /* matcher_indices */ MatcherIndicesIndex(68),
   },
   {
     /* [308] */
@@ -2971,7 +3085,7 @@
   {
     /* [309] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(65),
+    /* matcher_indices */ MatcherIndicesIndex(71),
   },
   {
     /* [310] */
@@ -2981,17 +3095,17 @@
   {
     /* [311] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(148),
+    /* matcher_indices */ MatcherIndicesIndex(74),
   },
   {
     /* [312] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(4),
+    /* matcher_indices */ MatcherIndicesIndex(3),
   },
   {
     /* [313] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(154),
+    /* matcher_indices */ MatcherIndicesIndex(157),
   },
   {
     /* [314] */
@@ -3001,7 +3115,7 @@
   {
     /* [315] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(158),
+    /* matcher_indices */ MatcherIndicesIndex(163),
   },
   {
     /* [316] */
@@ -3011,7 +3125,7 @@
   {
     /* [317] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(160),
+    /* matcher_indices */ MatcherIndicesIndex(167),
   },
   {
     /* [318] */
@@ -3020,112 +3134,122 @@
   },
   {
     /* [319] */
-    /* usage */ core::ParameterUsage::kInputAttachment,
-    /* matcher_indices */ MatcherIndicesIndex(183),
+    /* usage */ core::ParameterUsage::kNone,
+    /* matcher_indices */ MatcherIndicesIndex(169),
   },
   {
     /* [320] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(163),
+    /* matcher_indices */ MatcherIndicesIndex(4),
   },
   {
     /* [321] */
-    /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(26),
+    /* usage */ core::ParameterUsage::kInputAttachment,
+    /* matcher_indices */ MatcherIndicesIndex(192),
   },
   {
     /* [322] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(30),
+    /* matcher_indices */ MatcherIndicesIndex(172),
   },
   {
     /* [323] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(34),
+    /* matcher_indices */ MatcherIndicesIndex(31),
   },
   {
     /* [324] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(4),
+    /* matcher_indices */ MatcherIndicesIndex(35),
   },
   {
     /* [325] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(34),
+    /* matcher_indices */ MatcherIndicesIndex(39),
   },
   {
     /* [326] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(2),
+    /* matcher_indices */ MatcherIndicesIndex(4),
   },
   {
     /* [327] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(124),
+    /* matcher_indices */ MatcherIndicesIndex(39),
   },
   {
     /* [328] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(127),
+    /* matcher_indices */ MatcherIndicesIndex(2),
   },
   {
     /* [329] */
-    /* usage */ core::ParameterUsage::kX,
-    /* matcher_indices */ MatcherIndicesIndex(4),
+    /* usage */ core::ParameterUsage::kNone,
+    /* matcher_indices */ MatcherIndicesIndex(133),
   },
   {
     /* [330] */
-    /* usage */ core::ParameterUsage::kI,
-    /* matcher_indices */ MatcherIndicesIndex(38),
+    /* usage */ core::ParameterUsage::kNone,
+    /* matcher_indices */ MatcherIndicesIndex(136),
   },
   {
     /* [331] */
     /* usage */ core::ParameterUsage::kX,
-    /* matcher_indices */ MatcherIndicesIndex(2),
+    /* matcher_indices */ MatcherIndicesIndex(4),
   },
   {
     /* [332] */
     /* usage */ core::ParameterUsage::kI,
-    /* matcher_indices */ MatcherIndicesIndex(0),
+    /* matcher_indices */ MatcherIndicesIndex(43),
   },
   {
     /* [333] */
     /* usage */ core::ParameterUsage::kX,
-    /* matcher_indices */ MatcherIndicesIndex(4),
+    /* matcher_indices */ MatcherIndicesIndex(2),
   },
   {
     /* [334] */
     /* usage */ core::ParameterUsage::kI,
-    /* matcher_indices */ MatcherIndicesIndex(42),
+    /* matcher_indices */ MatcherIndicesIndex(0),
   },
   {
     /* [335] */
     /* usage */ core::ParameterUsage::kX,
-    /* matcher_indices */ MatcherIndicesIndex(115),
+    /* matcher_indices */ MatcherIndicesIndex(4),
   },
   {
     /* [336] */
     /* usage */ core::ParameterUsage::kI,
-    /* matcher_indices */ MatcherIndicesIndex(7),
+    /* matcher_indices */ MatcherIndicesIndex(47),
   },
   {
     /* [337] */
-    /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(5),
+    /* usage */ core::ParameterUsage::kX,
+    /* matcher_indices */ MatcherIndicesIndex(124),
   },
   {
     /* [338] */
-    /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(189),
+    /* usage */ core::ParameterUsage::kI,
+    /* matcher_indices */ MatcherIndicesIndex(7),
   },
   {
     /* [339] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(191),
+    /* matcher_indices */ MatcherIndicesIndex(5),
   },
   {
     /* [340] */
     /* usage */ core::ParameterUsage::kNone,
+    /* matcher_indices */ MatcherIndicesIndex(198),
+  },
+  {
+    /* [341] */
+    /* usage */ core::ParameterUsage::kNone,
+    /* matcher_indices */ MatcherIndicesIndex(200),
+  },
+  {
+    /* [342] */
+    /* usage */ core::ParameterUsage::kNone,
     /* matcher_indices */ MatcherIndicesIndex(9),
   },
 };
@@ -3137,25 +3261,25 @@
   {
     /* [0] */
     /* name */ "R",
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* matcher_indices */ MatcherIndicesIndex(202),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [1] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* matcher_indices */ MatcherIndicesIndex(202),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [2] */
     /* name */ "U",
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* matcher_indices */ MatcherIndicesIndex(202),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [3] */
     /* name */ "V",
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* matcher_indices */ MatcherIndicesIndex(202),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
@@ -3167,145 +3291,145 @@
   {
     /* [5] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(195),
+    /* matcher_indices */ MatcherIndicesIndex(203),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [6] */
     /* name */ "U",
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* matcher_indices */ MatcherIndicesIndex(202),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [7] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(196),
+    /* matcher_indices */ MatcherIndicesIndex(204),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [8] */
     /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* matcher_indices */ MatcherIndicesIndex(202),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [9] */
     /* name */ "I",
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* matcher_indices */ MatcherIndicesIndex(202),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [10] */
     /* name */ "S",
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* matcher_indices */ MatcherIndicesIndex(202),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [11] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(196),
+    /* matcher_indices */ MatcherIndicesIndex(204),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [12] */
     /* name */ "A",
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* matcher_indices */ MatcherIndicesIndex(202),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [13] */
     /* name */ "B",
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* matcher_indices */ MatcherIndicesIndex(202),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [14] */
     /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* matcher_indices */ MatcherIndicesIndex(202),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [15] */
     /* name */ "D",
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* matcher_indices */ MatcherIndicesIndex(202),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [16] */
     /* name */ "F",
-    /* matcher_indices */ MatcherIndicesIndex(80),
+    /* matcher_indices */ MatcherIndicesIndex(89),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [17] */
     /* name */ "A",
-    /* matcher_indices */ MatcherIndicesIndex(145),
+    /* matcher_indices */ MatcherIndicesIndex(154),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [18] */
     /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* matcher_indices */ MatcherIndicesIndex(202),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [19] */
     /* name */ "S",
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* matcher_indices */ MatcherIndicesIndex(202),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [20] */
     /* name */ "F",
-    /* matcher_indices */ MatcherIndicesIndex(83),
+    /* matcher_indices */ MatcherIndicesIndex(92),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [21] */
     /* name */ "A",
-    /* matcher_indices */ MatcherIndicesIndex(145),
+    /* matcher_indices */ MatcherIndicesIndex(154),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [22] */
     /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* matcher_indices */ MatcherIndicesIndex(202),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [23] */
     /* name */ "S",
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* matcher_indices */ MatcherIndicesIndex(202),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [24] */
     /* name */ "F",
-    /* matcher_indices */ MatcherIndicesIndex(86),
+    /* matcher_indices */ MatcherIndicesIndex(95),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [25] */
     /* name */ "A",
-    /* matcher_indices */ MatcherIndicesIndex(145),
+    /* matcher_indices */ MatcherIndicesIndex(154),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [26] */
     /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* matcher_indices */ MatcherIndicesIndex(202),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [27] */
     /* name */ "S",
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* matcher_indices */ MatcherIndicesIndex(202),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [28] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(195),
+    /* matcher_indices */ MatcherIndicesIndex(203),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
@@ -3329,19 +3453,19 @@
   {
     /* [32] */
     /* name */ "R",
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* matcher_indices */ MatcherIndicesIndex(202),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [33] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* matcher_indices */ MatcherIndicesIndex(202),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [34] */
     /* name */ "U",
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* matcher_indices */ MatcherIndicesIndex(202),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
@@ -3353,19 +3477,19 @@
   {
     /* [36] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(199),
+    /* matcher_indices */ MatcherIndicesIndex(207),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [37] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(195),
+    /* matcher_indices */ MatcherIndicesIndex(203),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [38] */
     /* name */ "R",
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* matcher_indices */ MatcherIndicesIndex(202),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
@@ -3377,109 +3501,109 @@
   {
     /* [40] */
     /* name */ "S",
-    /* matcher_indices */ MatcherIndicesIndex(170),
+    /* matcher_indices */ MatcherIndicesIndex(179),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [41] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(193),
-    /* kind */ TemplateInfo::Kind::kType,
+    /* name */ "K",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [42] */
-    /* name */ "U",
-    /* matcher_indices */ MatcherIndicesIndex(80),
+    /* name */ "S",
+    /* matcher_indices */ MatcherIndicesIndex(208),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [43] */
-    /* name */ "S",
-    /* matcher_indices */ MatcherIndicesIndex(194),
+    /* name */ "C",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [44] */
-    /* name */ "A",
-    /* matcher_indices */ MatcherIndicesIndex(19),
-    /* kind */ TemplateInfo::Kind::kType,
+    /* name */ "R",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [45] */
-    /* name */ "B",
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(202),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [46] */
-    /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* name */ "U",
+    /* matcher_indices */ MatcherIndicesIndex(89),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [47] */
-    /* name */ "I",
-    /* matcher_indices */ MatcherIndicesIndex(193),
-    /* kind */ TemplateInfo::Kind::kType,
+    /* name */ "S",
+    /* matcher_indices */ MatcherIndicesIndex(52),
+    /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [48] */
-    /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* name */ "A",
+    /* matcher_indices */ MatcherIndicesIndex(24),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [49] */
-    /* name */ "S",
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* name */ "B",
+    /* matcher_indices */ MatcherIndicesIndex(202),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [50] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(196),
+    /* name */ "C",
+    /* matcher_indices */ MatcherIndicesIndex(202),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [51] */
-    /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* name */ "I",
+    /* matcher_indices */ MatcherIndicesIndex(202),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [52] */
-    /* name */ "D",
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* name */ "C",
+    /* matcher_indices */ MatcherIndicesIndex(202),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [53] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(195),
+    /* name */ "S",
+    /* matcher_indices */ MatcherIndicesIndex(202),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [54] */
-    /* name */ "N",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(204),
+    /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [55] */
-    /* name */ "M",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
+    /* name */ "C",
+    /* matcher_indices */ MatcherIndicesIndex(202),
+    /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [56] */
-    /* name */ "R",
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* name */ "D",
+    /* matcher_indices */ MatcherIndicesIndex(202),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [57] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* matcher_indices */ MatcherIndicesIndex(203),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
@@ -3490,86 +3614,110 @@
   },
   {
     /* [59] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(195),
-    /* kind */ TemplateInfo::Kind::kType,
+    /* name */ "M",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [60] */
+    /* name */ "R",
+    /* matcher_indices */ MatcherIndicesIndex(202),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [61] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(202),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [62] */
     /* name */ "N",
     /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
-    /* [61] */
-    /* name */ "S",
-    /* matcher_indices */ MatcherIndicesIndex(170),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [62] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(195),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
     /* [63] */
-    /* name */ "R",
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(203),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [64] */
-    /* name */ "S",
-    /* matcher_indices */ MatcherIndicesIndex(170),
+    /* name */ "N",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [65] */
-    /* name */ "I",
-    /* matcher_indices */ MatcherIndicesIndex(80),
-    /* kind */ TemplateInfo::Kind::kType,
+    /* name */ "S",
+    /* matcher_indices */ MatcherIndicesIndex(179),
+    /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [66] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(203),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [67] */
+    /* name */ "R",
+    /* matcher_indices */ MatcherIndicesIndex(202),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [68] */
+    /* name */ "S",
+    /* matcher_indices */ MatcherIndicesIndex(179),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [69] */
+    /* name */ "I",
+    /* matcher_indices */ MatcherIndicesIndex(89),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [70] */
     /* name */ "A",
     /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
-    /* [67] */
+    /* [71] */
     /* name */ "F",
     /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
-    /* [68] */
+    /* [72] */
     /* name */ "A",
     /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
-    /* [69] */
+    /* [73] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(196),
+    /* matcher_indices */ MatcherIndicesIndex(204),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
-    /* [70] */
+    /* [74] */
     /* name */ "S",
-    /* matcher_indices */ MatcherIndicesIndex(198),
+    /* matcher_indices */ MatcherIndicesIndex(206),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
-    /* [71] */
+    /* [75] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(195),
+    /* matcher_indices */ MatcherIndicesIndex(203),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
-    /* [72] */
+    /* [76] */
     /* name */ "S",
-    /* matcher_indices */ MatcherIndicesIndex(170),
+    /* matcher_indices */ MatcherIndicesIndex(179),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
 };
@@ -3585,8 +3733,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(7),
-    /* parameters */ ParameterIndex(276),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* parameters */ ParameterIndex(281),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3597,7 +3745,7 @@
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(7),
     /* parameters */ ParameterIndex(10),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3608,7 +3756,7 @@
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(7),
     /* parameters */ ParameterIndex(60),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3617,9 +3765,9 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(50),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(60),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3628,9 +3776,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(50),
-    /* parameters */ ParameterIndex(180),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* templates */ TemplateIndex(54),
+    /* parameters */ ParameterIndex(185),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3641,7 +3789,7 @@
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(7),
     /* parameters */ ParameterIndex(16),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3652,7 +3800,7 @@
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(7),
     /* parameters */ ParameterIndex(65),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3661,9 +3809,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(50),
-    /* parameters */ ParameterIndex(184),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* templates */ TemplateIndex(54),
+    /* parameters */ ParameterIndex(189),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3672,9 +3820,9 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(50),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(65),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3685,7 +3833,7 @@
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(7),
     /* parameters */ ParameterIndex(22),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3696,7 +3844,7 @@
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(7),
     /* parameters */ ParameterIndex(70),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3705,9 +3853,9 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(50),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(70),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3716,9 +3864,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(50),
-    /* parameters */ ParameterIndex(188),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* templates */ TemplateIndex(54),
+    /* parameters */ ParameterIndex(193),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3729,7 +3877,7 @@
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(7),
     /* parameters */ ParameterIndex(80),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3739,8 +3887,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(7),
-    /* parameters */ ParameterIndex(192),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* parameters */ ParameterIndex(197),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3751,7 +3899,7 @@
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(7),
     /* parameters */ ParameterIndex(85),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3761,8 +3909,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(7),
-    /* parameters */ ParameterIndex(196),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* parameters */ ParameterIndex(201),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3773,7 +3921,7 @@
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(8),
     /* parameters */ ParameterIndex(40),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3783,8 +3931,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(14),
-    /* parameters */ ParameterIndex(200),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* parameters */ ParameterIndex(205),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3794,8 +3942,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(8),
-    /* parameters */ ParameterIndex(124),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* parameters */ ParameterIndex(129),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3806,7 +3954,7 @@
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(8),
     /* parameters */ ParameterIndex(45),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3816,8 +3964,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(14),
-    /* parameters */ ParameterIndex(204),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* parameters */ ParameterIndex(209),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3827,8 +3975,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(8),
-    /* parameters */ ParameterIndex(128),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* parameters */ ParameterIndex(133),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3839,7 +3987,7 @@
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(7),
     /* parameters */ ParameterIndex(60),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3850,7 +3998,7 @@
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(7),
     /* parameters */ ParameterIndex(10),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3859,9 +4007,9 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(50),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(60),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3870,9 +4018,9 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(50),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(75),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3881,9 +4029,9 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(50),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(10),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3894,7 +4042,7 @@
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(7),
     /* parameters */ ParameterIndex(65),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3905,7 +4053,7 @@
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(7),
     /* parameters */ ParameterIndex(16),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3914,9 +4062,9 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(50),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(65),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3925,9 +4073,9 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(50),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(16),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3938,7 +4086,7 @@
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(7),
     /* parameters */ ParameterIndex(70),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3949,7 +4097,7 @@
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(7),
     /* parameters */ ParameterIndex(22),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3958,9 +4106,9 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(50),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(70),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3969,9 +4117,9 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(50),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(22),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3981,8 +4129,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(7),
-    /* parameters */ ParameterIndex(192),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* parameters */ ParameterIndex(197),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -3993,7 +4141,7 @@
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(7),
     /* parameters */ ParameterIndex(80),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4003,8 +4151,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(7),
-    /* parameters */ ParameterIndex(196),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* parameters */ ParameterIndex(201),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4015,7 +4163,7 @@
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(7),
     /* parameters */ ParameterIndex(85),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4026,7 +4174,7 @@
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(8),
     /* parameters */ ParameterIndex(90),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4037,7 +4185,7 @@
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(14),
     /* parameters */ ParameterIndex(90),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4048,7 +4196,7 @@
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(8),
     /* parameters */ ParameterIndex(95),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4059,7 +4207,7 @@
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(14),
     /* parameters */ ParameterIndex(95),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4069,8 +4217,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(8),
-    /* parameters */ ParameterIndex(208),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* parameters */ ParameterIndex(213),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4080,8 +4228,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(8),
-    /* parameters */ ParameterIndex(212),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* parameters */ ParameterIndex(217),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4091,8 +4239,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(7),
-    /* parameters */ ParameterIndex(132),
-    /* return_matcher_indices */ MatcherIndicesIndex(80),
+    /* parameters */ ParameterIndex(137),
+    /* return_matcher_indices */ MatcherIndicesIndex(89),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4102,8 +4250,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(7),
-    /* parameters */ ParameterIndex(136),
-    /* return_matcher_indices */ MatcherIndicesIndex(173),
+    /* parameters */ ParameterIndex(141),
+    /* return_matcher_indices */ MatcherIndicesIndex(182),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4113,8 +4261,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(7),
-    /* parameters */ ParameterIndex(140),
-    /* return_matcher_indices */ MatcherIndicesIndex(175),
+    /* parameters */ ParameterIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(184),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4124,8 +4272,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(7),
-    /* parameters */ ParameterIndex(144),
-    /* return_matcher_indices */ MatcherIndicesIndex(175),
+    /* parameters */ ParameterIndex(149),
+    /* return_matcher_indices */ MatcherIndicesIndex(184),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4135,8 +4283,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(7),
-    /* parameters */ ParameterIndex(307),
-    /* return_matcher_indices */ MatcherIndicesIndex(173),
+    /* parameters */ ParameterIndex(309),
+    /* return_matcher_indices */ MatcherIndicesIndex(182),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4146,8 +4294,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(7),
-    /* parameters */ ParameterIndex(309),
-    /* return_matcher_indices */ MatcherIndicesIndex(175),
+    /* parameters */ ParameterIndex(311),
+    /* return_matcher_indices */ MatcherIndicesIndex(184),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4157,8 +4305,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(7),
-    /* parameters */ ParameterIndex(148),
-    /* return_matcher_indices */ MatcherIndicesIndex(173),
+    /* parameters */ ParameterIndex(153),
+    /* return_matcher_indices */ MatcherIndicesIndex(182),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4168,8 +4316,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(152),
-    /* return_matcher_indices */ MatcherIndicesIndex(173),
+    /* parameters */ ParameterIndex(157),
+    /* return_matcher_indices */ MatcherIndicesIndex(182),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4179,8 +4327,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(156),
-    /* return_matcher_indices */ MatcherIndicesIndex(175),
+    /* parameters */ ParameterIndex(161),
+    /* return_matcher_indices */ MatcherIndicesIndex(184),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4190,8 +4338,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(315),
-    /* return_matcher_indices */ MatcherIndicesIndex(173),
+    /* parameters */ ParameterIndex(317),
+    /* return_matcher_indices */ MatcherIndicesIndex(182),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4201,8 +4349,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(317),
-    /* return_matcher_indices */ MatcherIndicesIndex(175),
+    /* parameters */ ParameterIndex(319),
+    /* return_matcher_indices */ MatcherIndicesIndex(184),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4212,8 +4360,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(160),
-    /* return_matcher_indices */ MatcherIndicesIndex(173),
+    /* parameters */ ParameterIndex(165),
+    /* return_matcher_indices */ MatcherIndicesIndex(182),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4222,9 +4370,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(67),
-    /* parameters */ ParameterIndex(264),
-    /* return_matcher_indices */ MatcherIndicesIndex(80),
+    /* templates */ TemplateIndex(71),
+    /* parameters */ ParameterIndex(269),
+    /* return_matcher_indices */ MatcherIndicesIndex(89),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4233,9 +4381,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(67),
-    /* parameters */ ParameterIndex(267),
-    /* return_matcher_indices */ MatcherIndicesIndex(173),
+    /* templates */ TemplateIndex(71),
+    /* parameters */ ParameterIndex(272),
+    /* return_matcher_indices */ MatcherIndicesIndex(182),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4244,9 +4392,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(67),
-    /* parameters */ ParameterIndex(270),
-    /* return_matcher_indices */ MatcherIndicesIndex(175),
+    /* templates */ TemplateIndex(71),
+    /* parameters */ ParameterIndex(275),
+    /* return_matcher_indices */ MatcherIndicesIndex(184),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4255,9 +4403,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(67),
-    /* parameters */ ParameterIndex(273),
-    /* return_matcher_indices */ MatcherIndicesIndex(175),
+    /* templates */ TemplateIndex(71),
+    /* parameters */ ParameterIndex(278),
+    /* return_matcher_indices */ MatcherIndicesIndex(184),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4267,8 +4415,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
     /* templates */ TemplateIndex(11),
-    /* parameters */ ParameterIndex(164),
-    /* return_matcher_indices */ MatcherIndicesIndex(161),
+    /* parameters */ ParameterIndex(169),
+    /* return_matcher_indices */ MatcherIndicesIndex(170),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4279,7 +4427,7 @@
     /* num_templates   */ 3,
     /* templates */ TemplateIndex(11),
     /* parameters */ ParameterIndex(50),
-    /* return_matcher_indices */ MatcherIndicesIndex(161),
+    /* return_matcher_indices */ MatcherIndicesIndex(170),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4290,7 +4438,7 @@
     /* num_templates   */ 3,
     /* templates */ TemplateIndex(11),
     /* parameters */ ParameterIndex(50),
-    /* return_matcher_indices */ MatcherIndicesIndex(161),
+    /* return_matcher_indices */ MatcherIndicesIndex(170),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4301,7 +4449,7 @@
     /* num_templates   */ 3,
     /* templates */ TemplateIndex(11),
     /* parameters */ ParameterIndex(55),
-    /* return_matcher_indices */ MatcherIndicesIndex(161),
+    /* return_matcher_indices */ MatcherIndicesIndex(170),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4312,7 +4460,7 @@
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(11),
     /* parameters */ ParameterIndex(55),
-    /* return_matcher_indices */ MatcherIndicesIndex(161),
+    /* return_matcher_indices */ MatcherIndicesIndex(170),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4322,8 +4470,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
     /* templates */ TemplateIndex(11),
-    /* parameters */ ParameterIndex(168),
-    /* return_matcher_indices */ MatcherIndicesIndex(161),
+    /* parameters */ ParameterIndex(173),
+    /* return_matcher_indices */ MatcherIndicesIndex(170),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4333,8 +4481,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
     /* templates */ TemplateIndex(11),
-    /* parameters */ ParameterIndex(172),
-    /* return_matcher_indices */ MatcherIndicesIndex(161),
+    /* parameters */ ParameterIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(170),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4344,8 +4492,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
     /* templates */ TemplateIndex(11),
-    /* parameters */ ParameterIndex(176),
-    /* return_matcher_indices */ MatcherIndicesIndex(161),
+    /* parameters */ ParameterIndex(181),
+    /* return_matcher_indices */ MatcherIndicesIndex(170),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4356,7 +4504,7 @@
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(12),
     /* parameters */ ParameterIndex(40),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4367,7 +4515,7 @@
     /* num_templates   */ 3,
     /* templates */ TemplateIndex(12),
     /* parameters */ ParameterIndex(40),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4378,7 +4526,7 @@
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(12),
     /* parameters */ ParameterIndex(45),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4389,7 +4537,7 @@
     /* num_templates   */ 3,
     /* templates */ TemplateIndex(12),
     /* parameters */ ParameterIndex(45),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4399,8 +4547,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(12),
-    /* parameters */ ParameterIndex(124),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* parameters */ ParameterIndex(129),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4410,8 +4558,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(12),
-    /* parameters */ ParameterIndex(128),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* parameters */ ParameterIndex(133),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4421,8 +4569,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(16),
-    /* parameters */ ParameterIndex(264),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* parameters */ ParameterIndex(269),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4432,8 +4580,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(20),
-    /* parameters */ ParameterIndex(264),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* parameters */ ParameterIndex(269),
+    /* return_matcher_indices */ MatcherIndicesIndex(186),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4443,8 +4591,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(24),
-    /* parameters */ ParameterIndex(264),
-    /* return_matcher_indices */ MatcherIndicesIndex(179),
+    /* parameters */ ParameterIndex(269),
+    /* return_matcher_indices */ MatcherIndicesIndex(188),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4454,8 +4602,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(16),
-    /* parameters */ ParameterIndex(267),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* parameters */ ParameterIndex(272),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4465,8 +4613,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(20),
-    /* parameters */ ParameterIndex(267),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* parameters */ ParameterIndex(272),
+    /* return_matcher_indices */ MatcherIndicesIndex(186),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4476,8 +4624,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(24),
-    /* parameters */ ParameterIndex(267),
-    /* return_matcher_indices */ MatcherIndicesIndex(179),
+    /* parameters */ ParameterIndex(272),
+    /* return_matcher_indices */ MatcherIndicesIndex(188),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4487,8 +4635,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(16),
-    /* parameters */ ParameterIndex(270),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* parameters */ ParameterIndex(275),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4498,8 +4646,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(20),
-    /* parameters */ ParameterIndex(270),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* parameters */ ParameterIndex(275),
+    /* return_matcher_indices */ MatcherIndicesIndex(186),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4509,8 +4657,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(24),
-    /* parameters */ ParameterIndex(270),
-    /* return_matcher_indices */ MatcherIndicesIndex(179),
+    /* parameters */ ParameterIndex(275),
+    /* return_matcher_indices */ MatcherIndicesIndex(188),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4520,8 +4668,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(16),
-    /* parameters */ ParameterIndex(273),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* parameters */ ParameterIndex(278),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4531,8 +4679,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(20),
-    /* parameters */ ParameterIndex(273),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* parameters */ ParameterIndex(278),
+    /* return_matcher_indices */ MatcherIndicesIndex(186),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4542,8 +4690,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(24),
-    /* parameters */ ParameterIndex(273),
-    /* return_matcher_indices */ MatcherIndicesIndex(179),
+    /* parameters */ ParameterIndex(278),
+    /* return_matcher_indices */ MatcherIndicesIndex(188),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4553,8 +4701,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(7),
-    /* parameters */ ParameterIndex(319),
-    /* return_matcher_indices */ MatcherIndicesIndex(161),
+    /* parameters */ ParameterIndex(321),
+    /* return_matcher_indices */ MatcherIndicesIndex(170),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4564,7 +4712,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(14),
-    /* parameters */ ParameterIndex(216),
+    /* parameters */ ParameterIndex(221),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -4575,7 +4723,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(14),
-    /* parameters */ ParameterIndex(220),
+    /* parameters */ ParameterIndex(225),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -4586,7 +4734,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(14),
-    /* parameters */ ParameterIndex(224),
+    /* parameters */ ParameterIndex(229),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -4597,7 +4745,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(14),
-    /* parameters */ ParameterIndex(228),
+    /* parameters */ ParameterIndex(233),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -4608,7 +4756,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(14),
-    /* parameters */ ParameterIndex(232),
+    /* parameters */ ParameterIndex(237),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -4619,7 +4767,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(14),
-    /* parameters */ ParameterIndex(236),
+    /* parameters */ ParameterIndex(241),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -4630,7 +4778,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(14),
-    /* parameters */ ParameterIndex(240),
+    /* parameters */ ParameterIndex(245),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -4641,7 +4789,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(14),
-    /* parameters */ ParameterIndex(244),
+    /* parameters */ ParameterIndex(249),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -4652,7 +4800,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(14),
-    /* parameters */ ParameterIndex(248),
+    /* parameters */ ParameterIndex(253),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -4663,7 +4811,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(14),
-    /* parameters */ ParameterIndex(252),
+    /* parameters */ ParameterIndex(257),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -4674,7 +4822,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(14),
-    /* parameters */ ParameterIndex(256),
+    /* parameters */ ParameterIndex(261),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -4685,7 +4833,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(14),
-    /* parameters */ ParameterIndex(260),
+    /* parameters */ ParameterIndex(265),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -4696,8 +4844,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(11),
-    /* parameters */ ParameterIndex(132),
-    /* return_matcher_indices */ MatcherIndicesIndex(80),
+    /* parameters */ ParameterIndex(137),
+    /* return_matcher_indices */ MatcherIndicesIndex(89),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4707,8 +4855,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(11),
-    /* parameters */ ParameterIndex(301),
-    /* return_matcher_indices */ MatcherIndicesIndex(173),
+    /* parameters */ ParameterIndex(303),
+    /* return_matcher_indices */ MatcherIndicesIndex(182),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4718,8 +4866,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(11),
-    /* parameters */ ParameterIndex(303),
-    /* return_matcher_indices */ MatcherIndicesIndex(175),
+    /* parameters */ ParameterIndex(305),
+    /* return_matcher_indices */ MatcherIndicesIndex(184),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4729,8 +4877,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(11),
-    /* parameters */ ParameterIndex(305),
-    /* return_matcher_indices */ MatcherIndicesIndex(175),
+    /* parameters */ ParameterIndex(307),
+    /* return_matcher_indices */ MatcherIndicesIndex(184),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4740,8 +4888,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(11),
-    /* parameters */ ParameterIndex(307),
-    /* return_matcher_indices */ MatcherIndicesIndex(173),
+    /* parameters */ ParameterIndex(309),
+    /* return_matcher_indices */ MatcherIndicesIndex(182),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4751,8 +4899,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(11),
-    /* parameters */ ParameterIndex(309),
-    /* return_matcher_indices */ MatcherIndicesIndex(175),
+    /* parameters */ ParameterIndex(311),
+    /* return_matcher_indices */ MatcherIndicesIndex(184),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4762,8 +4910,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(12),
-    /* parameters */ ParameterIndex(311),
-    /* return_matcher_indices */ MatcherIndicesIndex(173),
+    /* parameters */ ParameterIndex(313),
+    /* return_matcher_indices */ MatcherIndicesIndex(182),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4773,8 +4921,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(12),
-    /* parameters */ ParameterIndex(313),
-    /* return_matcher_indices */ MatcherIndicesIndex(175),
+    /* parameters */ ParameterIndex(315),
+    /* return_matcher_indices */ MatcherIndicesIndex(184),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4784,8 +4932,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(12),
-    /* parameters */ ParameterIndex(315),
-    /* return_matcher_indices */ MatcherIndicesIndex(173),
+    /* parameters */ ParameterIndex(317),
+    /* return_matcher_indices */ MatcherIndicesIndex(182),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4795,8 +4943,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(12),
-    /* parameters */ ParameterIndex(317),
-    /* return_matcher_indices */ MatcherIndicesIndex(175),
+    /* parameters */ ParameterIndex(319),
+    /* return_matcher_indices */ MatcherIndicesIndex(184),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4805,9 +4953,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(69),
-    /* parameters */ ParameterIndex(132),
-    /* return_matcher_indices */ MatcherIndicesIndex(49),
+    /* templates */ TemplateIndex(73),
+    /* parameters */ ParameterIndex(137),
+    /* return_matcher_indices */ MatcherIndicesIndex(58),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4816,9 +4964,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(69),
-    /* parameters */ ParameterIndex(301),
-    /* return_matcher_indices */ MatcherIndicesIndex(52),
+    /* templates */ TemplateIndex(73),
+    /* parameters */ ParameterIndex(303),
+    /* return_matcher_indices */ MatcherIndicesIndex(61),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4827,9 +4975,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(69),
-    /* parameters */ ParameterIndex(303),
-    /* return_matcher_indices */ MatcherIndicesIndex(55),
+    /* templates */ TemplateIndex(73),
+    /* parameters */ ParameterIndex(305),
+    /* return_matcher_indices */ MatcherIndicesIndex(64),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4838,9 +4986,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(69),
-    /* parameters */ ParameterIndex(305),
-    /* return_matcher_indices */ MatcherIndicesIndex(58),
+    /* templates */ TemplateIndex(73),
+    /* parameters */ ParameterIndex(307),
+    /* return_matcher_indices */ MatcherIndicesIndex(67),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4849,9 +4997,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(69),
-    /* parameters */ ParameterIndex(307),
-    /* return_matcher_indices */ MatcherIndicesIndex(61),
+    /* templates */ TemplateIndex(73),
+    /* parameters */ ParameterIndex(309),
+    /* return_matcher_indices */ MatcherIndicesIndex(70),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4860,9 +5008,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(69),
-    /* parameters */ ParameterIndex(309),
-    /* return_matcher_indices */ MatcherIndicesIndex(64),
+    /* templates */ TemplateIndex(73),
+    /* parameters */ ParameterIndex(311),
+    /* return_matcher_indices */ MatcherIndicesIndex(73),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4871,9 +5019,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(70),
-    /* parameters */ ParameterIndex(311),
-    /* return_matcher_indices */ MatcherIndicesIndex(147),
+    /* templates */ TemplateIndex(74),
+    /* parameters */ ParameterIndex(313),
+    /* return_matcher_indices */ MatcherIndicesIndex(156),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4882,9 +5030,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(70),
-    /* parameters */ ParameterIndex(313),
-    /* return_matcher_indices */ MatcherIndicesIndex(153),
+    /* templates */ TemplateIndex(74),
+    /* parameters */ ParameterIndex(315),
+    /* return_matcher_indices */ MatcherIndicesIndex(162),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4893,9 +5041,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(70),
-    /* parameters */ ParameterIndex(315),
-    /* return_matcher_indices */ MatcherIndicesIndex(157),
+    /* templates */ TemplateIndex(74),
+    /* parameters */ ParameterIndex(317),
+    /* return_matcher_indices */ MatcherIndicesIndex(166),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4904,9 +5052,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(70),
-    /* parameters */ ParameterIndex(317),
-    /* return_matcher_indices */ MatcherIndicesIndex(159),
+    /* templates */ TemplateIndex(74),
+    /* parameters */ ParameterIndex(319),
+    /* return_matcher_indices */ MatcherIndicesIndex(168),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4916,8 +5064,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(7),
-    /* parameters */ ParameterIndex(132),
-    /* return_matcher_indices */ MatcherIndicesIndex(161),
+    /* parameters */ ParameterIndex(137),
+    /* return_matcher_indices */ MatcherIndicesIndex(170),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4927,8 +5075,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(7),
-    /* parameters */ ParameterIndex(136),
-    /* return_matcher_indices */ MatcherIndicesIndex(161),
+    /* parameters */ ParameterIndex(141),
+    /* return_matcher_indices */ MatcherIndicesIndex(170),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4938,8 +5086,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(7),
-    /* parameters */ ParameterIndex(140),
-    /* return_matcher_indices */ MatcherIndicesIndex(161),
+    /* parameters */ ParameterIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(170),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4949,8 +5097,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(7),
-    /* parameters */ ParameterIndex(144),
-    /* return_matcher_indices */ MatcherIndicesIndex(161),
+    /* parameters */ ParameterIndex(149),
+    /* return_matcher_indices */ MatcherIndicesIndex(170),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4960,8 +5108,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(7),
-    /* parameters */ ParameterIndex(148),
-    /* return_matcher_indices */ MatcherIndicesIndex(161),
+    /* parameters */ ParameterIndex(153),
+    /* return_matcher_indices */ MatcherIndicesIndex(170),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4970,9 +5118,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(47),
-    /* parameters */ ParameterIndex(152),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* templates */ TemplateIndex(51),
+    /* parameters */ ParameterIndex(157),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4981,9 +5129,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(47),
-    /* parameters */ ParameterIndex(156),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* templates */ TemplateIndex(51),
+    /* parameters */ ParameterIndex(161),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4992,9 +5140,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(47),
-    /* parameters */ ParameterIndex(160),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* templates */ TemplateIndex(51),
+    /* parameters */ ParameterIndex(165),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5003,9 +5151,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(44),
+    /* templates */ TemplateIndex(48),
     /* parameters */ ParameterIndex(40),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5014,9 +5162,9 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(44),
+    /* templates */ TemplateIndex(48),
     /* parameters */ ParameterIndex(40),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5025,9 +5173,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(44),
+    /* templates */ TemplateIndex(48),
     /* parameters */ ParameterIndex(45),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5036,9 +5184,9 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(44),
+    /* templates */ TemplateIndex(48),
     /* parameters */ ParameterIndex(45),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5047,9 +5195,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(44),
-    /* parameters */ ParameterIndex(124),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* templates */ TemplateIndex(48),
+    /* parameters */ ParameterIndex(129),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5058,9 +5206,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(44),
-    /* parameters */ ParameterIndex(128),
-    /* return_matcher_indices */ MatcherIndicesIndex(145),
+    /* templates */ TemplateIndex(48),
+    /* parameters */ ParameterIndex(133),
+    /* return_matcher_indices */ MatcherIndicesIndex(154),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5071,7 +5219,7 @@
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(8),
     /* parameters */ ParameterIndex(28),
-    /* return_matcher_indices */ MatcherIndicesIndex(19),
+    /* return_matcher_indices */ MatcherIndicesIndex(24),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5082,7 +5230,7 @@
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(14),
     /* parameters */ ParameterIndex(100),
-    /* return_matcher_indices */ MatcherIndicesIndex(19),
+    /* return_matcher_indices */ MatcherIndicesIndex(24),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5093,7 +5241,7 @@
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(8),
     /* parameters */ ParameterIndex(34),
-    /* return_matcher_indices */ MatcherIndicesIndex(19),
+    /* return_matcher_indices */ MatcherIndicesIndex(24),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5104,7 +5252,7 @@
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(14),
     /* parameters */ ParameterIndex(105),
-    /* return_matcher_indices */ MatcherIndicesIndex(19),
+    /* return_matcher_indices */ MatcherIndicesIndex(24),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5115,7 +5263,7 @@
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(8),
     /* parameters */ ParameterIndex(110),
-    /* return_matcher_indices */ MatcherIndicesIndex(19),
+    /* return_matcher_indices */ MatcherIndicesIndex(24),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5126,7 +5274,7 @@
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(8),
     /* parameters */ ParameterIndex(115),
-    /* return_matcher_indices */ MatcherIndicesIndex(19),
+    /* return_matcher_indices */ MatcherIndicesIndex(24),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5137,7 +5285,7 @@
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(8),
     /* parameters */ ParameterIndex(28),
-    /* return_matcher_indices */ MatcherIndicesIndex(19),
+    /* return_matcher_indices */ MatcherIndicesIndex(24),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5148,7 +5296,7 @@
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(14),
     /* parameters */ ParameterIndex(28),
-    /* return_matcher_indices */ MatcherIndicesIndex(19),
+    /* return_matcher_indices */ MatcherIndicesIndex(24),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5159,7 +5307,7 @@
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(8),
     /* parameters */ ParameterIndex(34),
-    /* return_matcher_indices */ MatcherIndicesIndex(19),
+    /* return_matcher_indices */ MatcherIndicesIndex(24),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5170,7 +5318,7 @@
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(14),
     /* parameters */ ParameterIndex(34),
-    /* return_matcher_indices */ MatcherIndicesIndex(19),
+    /* return_matcher_indices */ MatcherIndicesIndex(24),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5181,7 +5329,7 @@
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(8),
     /* parameters */ ParameterIndex(110),
-    /* return_matcher_indices */ MatcherIndicesIndex(19),
+    /* return_matcher_indices */ MatcherIndicesIndex(24),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5192,7 +5340,7 @@
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(8),
     /* parameters */ ParameterIndex(115),
-    /* return_matcher_indices */ MatcherIndicesIndex(19),
+    /* return_matcher_indices */ MatcherIndicesIndex(24),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5202,7 +5350,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(5),
-    /* parameters */ ParameterIndex(337),
+    /* parameters */ ParameterIndex(339),
     /* return_matcher_indices */ MatcherIndicesIndex(5),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5213,8 +5361,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(5),
-    /* parameters */ ParameterIndex(338),
-    /* return_matcher_indices */ MatcherIndicesIndex(189),
+    /* parameters */ ParameterIndex(340),
+    /* return_matcher_indices */ MatcherIndicesIndex(198),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5224,8 +5372,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(5),
-    /* parameters */ ParameterIndex(339),
-    /* return_matcher_indices */ MatcherIndicesIndex(191),
+    /* parameters */ ParameterIndex(341),
+    /* return_matcher_indices */ MatcherIndicesIndex(200),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5235,7 +5383,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(36),
-    /* parameters */ ParameterIndex(279),
+    /* parameters */ ParameterIndex(284),
     /* return_matcher_indices */ MatcherIndicesIndex(4),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5246,8 +5394,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(35),
-    /* parameters */ ParameterIndex(282),
-    /* return_matcher_indices */ MatcherIndicesIndex(46),
+    /* parameters */ ParameterIndex(287),
+    /* return_matcher_indices */ MatcherIndicesIndex(55),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5268,8 +5416,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(4),
-    /* parameters */ ParameterIndex(283),
-    /* return_matcher_indices */ MatcherIndicesIndex(46),
+    /* parameters */ ParameterIndex(288),
+    /* return_matcher_indices */ MatcherIndicesIndex(55),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5289,9 +5437,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(56),
-    /* parameters */ ParameterIndex(340),
-    /* return_matcher_indices */ MatcherIndicesIndex(115),
+    /* templates */ TemplateIndex(60),
+    /* parameters */ ParameterIndex(342),
+    /* return_matcher_indices */ MatcherIndicesIndex(124),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5312,8 +5460,8 @@
     /* num_explicit_templates */ 1,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(32),
-    /* parameters */ ParameterIndex(327),
-    /* return_matcher_indices */ MatcherIndicesIndex(121),
+    /* parameters */ ParameterIndex(329),
+    /* return_matcher_indices */ MatcherIndicesIndex(130),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5334,8 +5482,8 @@
     /* num_explicit_templates */ 1,
     /* num_templates   */ 5,
     /* templates */ TemplateIndex(0),
-    /* parameters */ ParameterIndex(286),
-    /* return_matcher_indices */ MatcherIndicesIndex(130),
+    /* parameters */ ParameterIndex(291),
+    /* return_matcher_indices */ MatcherIndicesIndex(139),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5355,8 +5503,8 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(53),
-    /* parameters */ ParameterIndex(289),
+    /* templates */ TemplateIndex(57),
+    /* parameters */ ParameterIndex(294),
     /* return_matcher_indices */ MatcherIndicesIndex(2),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5377,8 +5525,8 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(53),
-    /* parameters */ ParameterIndex(289),
+    /* templates */ TemplateIndex(57),
+    /* parameters */ ParameterIndex(294),
     /* return_matcher_indices */ MatcherIndicesIndex(2),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5399,8 +5547,8 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(53),
-    /* parameters */ ParameterIndex(292),
+    /* templates */ TemplateIndex(57),
+    /* parameters */ ParameterIndex(297),
     /* return_matcher_indices */ MatcherIndicesIndex(2),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5422,8 +5570,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
     /* templates */ TemplateIndex(4),
-    /* parameters */ ParameterIndex(284),
-    /* return_matcher_indices */ MatcherIndicesIndex(46),
+    /* parameters */ ParameterIndex(289),
+    /* return_matcher_indices */ MatcherIndicesIndex(55),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5432,8 +5580,8 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(71),
-    /* parameters */ ParameterIndex(329),
+    /* templates */ TemplateIndex(75),
+    /* parameters */ ParameterIndex(331),
     /* return_matcher_indices */ MatcherIndicesIndex(4),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5443,8 +5591,8 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(59),
-    /* parameters */ ParameterIndex(331),
+    /* templates */ TemplateIndex(63),
+    /* parameters */ ParameterIndex(333),
     /* return_matcher_indices */ MatcherIndicesIndex(2),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5454,8 +5602,8 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(62),
-    /* parameters */ ParameterIndex(333),
+    /* templates */ TemplateIndex(66),
+    /* parameters */ ParameterIndex(335),
     /* return_matcher_indices */ MatcherIndicesIndex(4),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5466,8 +5614,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(37),
-    /* parameters */ ParameterIndex(335),
-    /* return_matcher_indices */ MatcherIndicesIndex(115),
+    /* parameters */ ParameterIndex(337),
+    /* return_matcher_indices */ MatcherIndicesIndex(124),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5476,9 +5624,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(65),
-    /* parameters */ ParameterIndex(299),
-    /* return_matcher_indices */ MatcherIndicesIndex(80),
+    /* templates */ TemplateIndex(69),
+    /* parameters */ ParameterIndex(301),
+    /* return_matcher_indices */ MatcherIndicesIndex(89),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5487,8 +5635,8 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(41),
-    /* parameters */ ParameterIndex(120),
+    /* templates */ TemplateIndex(45),
+    /* parameters */ ParameterIndex(125),
     /* return_matcher_indices */ MatcherIndicesIndex(4),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5498,7 +5646,7 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(41),
+    /* templates */ TemplateIndex(45),
     /* parameters */ ParameterIndex(0),
     /* return_matcher_indices */ MatcherIndicesIndex(4),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5509,7 +5657,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(41),
+    /* templates */ TemplateIndex(45),
     /* parameters */ ParameterIndex(0),
     /* return_matcher_indices */ MatcherIndicesIndex(4),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5520,8 +5668,8 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(41),
-    /* parameters */ ParameterIndex(120),
+    /* templates */ TemplateIndex(45),
+    /* parameters */ ParameterIndex(125),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5532,7 +5680,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(4),
-    /* parameters */ ParameterIndex(283),
+    /* parameters */ ParameterIndex(288),
     /* return_matcher_indices */ MatcherIndicesIndex(3),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5543,8 +5691,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(28),
-    /* parameters */ ParameterIndex(321),
-    /* return_matcher_indices */ MatcherIndicesIndex(22),
+    /* parameters */ ParameterIndex(323),
+    /* return_matcher_indices */ MatcherIndicesIndex(27),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5553,9 +5701,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(53),
-    /* parameters */ ParameterIndex(323),
-    /* return_matcher_indices */ MatcherIndicesIndex(34),
+    /* templates */ TemplateIndex(57),
+    /* parameters */ ParameterIndex(325),
+    /* return_matcher_indices */ MatcherIndicesIndex(39),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5564,9 +5712,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(53),
-    /* parameters */ ParameterIndex(325),
-    /* return_matcher_indices */ MatcherIndicesIndex(115),
+    /* templates */ TemplateIndex(57),
+    /* parameters */ ParameterIndex(327),
+    /* return_matcher_indices */ MatcherIndicesIndex(124),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5575,9 +5723,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(53),
-    /* parameters */ ParameterIndex(294),
-    /* return_matcher_indices */ MatcherIndicesIndex(115),
+    /* templates */ TemplateIndex(57),
+    /* parameters */ ParameterIndex(299),
+    /* return_matcher_indices */ MatcherIndicesIndex(124),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5586,8 +5734,8 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(53),
-    /* parameters */ ParameterIndex(290),
+    /* templates */ TemplateIndex(57),
+    /* parameters */ ParameterIndex(295),
     /* return_matcher_indices */ MatcherIndicesIndex(2),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5598,8 +5746,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(296),
-    /* return_matcher_indices */ MatcherIndicesIndex(170),
+    /* parameters */ ParameterIndex(122),
+    /* return_matcher_indices */ MatcherIndicesIndex(179),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5609,8 +5757,19 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(296),
-    /* return_matcher_indices */ MatcherIndicesIndex(80),
+    /* parameters */ ParameterIndex(122),
+    /* return_matcher_indices */ MatcherIndicesIndex(89),
+    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+  },
+  {
+    /* [185] */
+    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsComputePipeline),
+    /* num_parameters */ 5,
+    /* num_explicit_templates */ 0,
+    /* num_templates   */ 4,
+    /* templates */ TemplateIndex(41),
+    /* parameters */ ParameterIndex(120),
+    /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
 };
@@ -6099,6 +6258,12 @@
     /* num overloads */ 1,
     /* overloads */ OverloadIndex(184),
   },
+  {
+    /* [54] */
+    /* fn cooperative_matrix_store[K : subgroup_matrix_kind, S : fiu32_f16, C : num, R : num](ptr<workgroup_or_storage, S, writable>, subgroup_matrix<K, S, C, R>, u32, u32, u32) */
+    /* num overloads */ 1,
+    /* overloads */ OverloadIndex(185),
+  },
 };
 
 // clang-format on
diff --git a/src/tint/lang/spirv/spirv.def b/src/tint/lang/spirv/spirv.def
index 9e2ec4a..7a99a5f 100644
--- a/src/tint/lang/spirv/spirv.def
+++ b/src/tint/lang/spirv/spirv.def
@@ -37,6 +37,7 @@
 
 import "src/tint/lang/core/address_space.def"
 import "src/tint/lang/core/access.def"
+import "src/tint/lang/core/subgroup_matrix_kind.def"
 import "src/tint/lang/core/texel_format.def"
 
 type bool
@@ -83,9 +84,12 @@
 type struct_with_runtime_array
 type sampled_image<T>
 
+type subgroup_matrix<S: subgroup_matrix_kind, T, C: num, R: num>
+
 match f32_f16: f32 | f16
 match iu32: i32 | u32
 match fiu32: f32 | i32 | u32
+match fiu32_f16: f32 | i32 | u32 | f16
 match scalar: f32 | f16 | i32 | u32 | bool
 
 match read_write: access.read_write
@@ -134,6 +138,10 @@
   : access.write
   | access.read_write
 
+match subgroup_matrix_kind_left : subgroup_matrix_kind.left
+match subgroup_matrix_kind_right : subgroup_matrix_kind.right
+match subgroup_matrix_kind_result : subgroup_matrix_kind.result
+
 ////////////////////////////////////////////////////////////////////////////////
 // Builtin Functions                                                          //
 ////////////////////////////////////////////////////////////////////////////////
@@ -386,3 +394,9 @@
 ////////////////////////////////////////////////////////////////////////////////
 fn sdot(u32, u32, u32) -> i32
 fn udot(u32, u32, u32) -> u32
+
+////////////////////////////////////////////////////////////////////////////////
+// SPV_KHR_cooperative_matrix instructions
+////////////////////////////////////////////////////////////////////////////////
+@stage("compute") implicit(K: subgroup_matrix_kind, S: fiu32_f16, C: num, R: num) fn cooperative_matrix_store(
+  ptr<workgroup_or_storage, S, writable>, subgroup_matrix<K, S, C, R>, u32, u32, u32)
diff --git a/src/tint/lang/spirv/writer/printer/printer.cc b/src/tint/lang/spirv/writer/printer/printer.cc
index 6d2c5dc..28483f5 100644
--- a/src/tint/lang/spirv/writer/printer/printer.cc
+++ b/src/tint/lang/spirv/writer/printer/printer.cc
@@ -1488,6 +1488,9 @@
             case spirv::BuiltinFn::kVectorTimesScalar:
                 op = spv::Op::OpVectorTimesScalar;
                 break;
+            case spirv::BuiltinFn::kCooperativeMatrixStore:
+                op = spv::Op::OpCooperativeMatrixStoreKHR;
+                break;
             case spirv::BuiltinFn::kNone:
                 TINT_ICE() << "undefined spirv ir function";
         }
diff --git a/src/tint/lang/spirv/writer/raise/builtin_polyfill.cc b/src/tint/lang/spirv/writer/raise/builtin_polyfill.cc
index 1048fbc..9644d55 100644
--- a/src/tint/lang/spirv/writer/raise/builtin_polyfill.cc
+++ b/src/tint/lang/spirv/writer/raise/builtin_polyfill.cc
@@ -107,6 +107,7 @@
                     case core::BuiltinFn::kTextureSampleLevel:
                     case core::BuiltinFn::kTextureStore:
                     case core::BuiltinFn::kInputAttachmentLoad:
+                    case core::BuiltinFn::kSubgroupMatrixStore:
                         worklist.Push(builtin);
                         break;
                     case core::BuiltinFn::kQuantizeToF16:
@@ -188,6 +189,9 @@
                 case core::BuiltinFn::kInputAttachmentLoad:
                     InputAttachmentLoad(builtin);
                     break;
+                case core::BuiltinFn::kSubgroupMatrixStore:
+                    SubgroupMatrixStore(builtin);
+                    break;
                 default:
                     break;
             }
@@ -954,6 +958,34 @@
             builtin->SetArg(1, b.Constant(id->As<core::ir::Constant>()->Value()->ValueAs<u32>()));
         }
     }
+
+    /// Replace a subgroupMatrixStore builtin.
+    /// @param builtin the builtin call instruction
+    void SubgroupMatrixStore(core::ir::CoreBuiltinCall* builtin) {
+        b.InsertBefore(builtin, [&] {
+            auto* p = builtin->Args()[0];
+            auto* offset = builtin->Args()[1];
+            auto* value = builtin->Args()[2];
+            auto* col_major = builtin->Args()[3]->As<core::ir::Constant>();
+            auto* stride = builtin->Args()[4];
+
+            auto* ptr = p->Type()->As<core::type::Pointer>();
+            auto* arr = ptr->StoreType()->As<core::type::Array>();
+
+            // Make a pointer to the first element of the array that we will write to.
+            auto* elem_ptr = ty.ptr(ptr->AddressSpace(), arr->ElemType(), ptr->Access());
+            auto* dst = b.Access(elem_ptr, p, offset);
+
+            auto* layout = b.Constant(u32(col_major->Value()->ValueAs<bool>()
+                                              ? SpvCooperativeMatrixLayoutColumnMajorKHR
+                                              : SpvCooperativeMatrixLayoutRowMajorKHR));
+            auto* memory_operand = Literal(u32(SpvMemoryAccessNonPrivatePointerMask));
+
+            b.Call<spirv::ir::BuiltinCall>(ty.void_(), spirv::BuiltinFn::kCooperativeMatrixStore,
+                                           dst, value, layout, stride, memory_operand);
+        });
+        builtin->Destroy();
+    }
 };
 
 }  // namespace
diff --git a/src/tint/lang/spirv/writer/raise/builtin_polyfill_test.cc b/src/tint/lang/spirv/writer/raise/builtin_polyfill_test.cc
index c055cca..8ebfe97 100644
--- a/src/tint/lang/spirv/writer/raise/builtin_polyfill_test.cc
+++ b/src/tint/lang/spirv/writer/raise/builtin_polyfill_test.cc
@@ -3210,5 +3210,75 @@
     EXPECT_EQ(expect, str());
 }
 
+TEST_F(SpirvWriter_BuiltinPolyfillTest, SubgroupMatrixStore_Storage_ColMajor_F32) {
+    auto* p = b.FunctionParam<ptr<storage, array<f32, 256>>>("p");
+    auto* m = b.FunctionParam("m", ty.subgroup_matrix_result(ty.f32(), 8, 8));
+    auto* func = b.Function("foo", ty.void_());
+    func->SetParams({p, m});
+    b.Append(func->Block(), [&] {
+        b.Call<void>(core::BuiltinFn::kSubgroupMatrixStore, p, 64_u, m, true, 32_u);
+        b.Return(func);
+    });
+
+    auto* src = R"(
+%foo = func(%p:ptr<storage, array<f32, 256>, read_write>, %m:subgroup_matrix_result<f32, 8, 8>):void {
+  $B1: {
+    %4:void = subgroupMatrixStore %p, 64u, %m, true, 32u
+    ret
+  }
+}
+)";
+    EXPECT_EQ(src, str());
+
+    auto* expect = R"(
+%foo = func(%p:ptr<storage, array<f32, 256>, read_write>, %m:subgroup_matrix_result<f32, 8, 8>):void {
+  $B1: {
+    %4:ptr<storage, f32, read_write> = access %p, 64u
+    %5:void = spirv.cooperative_matrix_store %4, %m, 1u, 32u, 32u
+    ret
+  }
+}
+)";
+
+    Run(BuiltinPolyfill, true);
+
+    EXPECT_EQ(expect, str());
+}
+
+TEST_F(SpirvWriter_BuiltinPolyfillTest, SubgroupMatrixStore_Workgroup_RowMajor_U32) {
+    auto* p = b.FunctionParam<ptr<workgroup, array<u32, 256>>>("p");
+    auto* m = b.FunctionParam("m", ty.subgroup_matrix_result(ty.u32(), 8, 8));
+    auto* func = b.Function("foo", ty.void_());
+    func->SetParams({p, m});
+    b.Append(func->Block(), [&] {
+        b.Call<void>(core::BuiltinFn::kSubgroupMatrixStore, p, 64_u, m, false, 32_u);
+        b.Return(func);
+    });
+
+    auto* src = R"(
+%foo = func(%p:ptr<workgroup, array<u32, 256>, read_write>, %m:subgroup_matrix_result<u32, 8, 8>):void {
+  $B1: {
+    %4:void = subgroupMatrixStore %p, 64u, %m, false, 32u
+    ret
+  }
+}
+)";
+    EXPECT_EQ(src, str());
+
+    auto* expect = R"(
+%foo = func(%p:ptr<workgroup, array<u32, 256>, read_write>, %m:subgroup_matrix_result<u32, 8, 8>):void {
+  $B1: {
+    %4:ptr<workgroup, u32, read_write> = access %p, 64u
+    %5:void = spirv.cooperative_matrix_store %4, %m, 0u, 32u, 32u
+    ret
+  }
+}
+)";
+
+    Run(BuiltinPolyfill, true);
+
+    EXPECT_EQ(expect, str());
+}
+
 }  // namespace
 }  // namespace tint::spirv::writer::raise
diff --git a/src/tint/lang/spirv/writer/writer.cc b/src/tint/lang/spirv/writer/writer.cc
index 9d0d926..cd336a7 100644
--- a/src/tint/lang/spirv/writer/writer.cc
+++ b/src/tint/lang/spirv/writer/writer.cc
@@ -42,13 +42,6 @@
 namespace tint::spirv::writer {
 
 Result<SuccessType> CanGenerate(const core::ir::Module& ir, const Options& options) {
-    // Check for unsupported types.
-    for (auto* ty : ir.Types()) {
-        if (ty->Is<core::type::SubgroupMatrix>()) {
-            return Failure("subgroup matrices are not supported by the SPIR-V backend");
-        }
-    }
-
     // If a remapped entry point name is provided, it must not be empty, and must not contain
     // embedded null characters.
     if (!options.remapped_entry_point_name.empty()) {
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixStore/0522d1.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixStore/0522d1.wgsl.expected.spvasm
index 5c64c6a..09a4199 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixStore/0522d1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixStore/0522d1.wgsl.expected.spvasm
@@ -1,5 +1,59 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability Float16
+               OpCapability UniformAndStorageBuffer16BitAccess
+               OpCapability StorageBuffer16BitAccess
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpMemberName %SB_RW 0 "arg_0"
+               OpName %SB_RW "SB_RW"
+               OpMemberName %sb_rw_block 0 "inner"
+               OpName %sb_rw_block "sb_rw_block"
+               OpName %subgroupMatrixStore_0522d1 "subgroupMatrixStore_0522d1"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_half_uint_64 ArrayStride 2
+               OpMemberDecorate %SB_RW 0 Offset 0
+               OpMemberDecorate %sb_rw_block 0 Offset 0
+               OpDecorate %sb_rw_block Block
+               OpDecorate %1 DescriptorSet 0
+               OpDecorate %1 Binding 0
+       %half = OpTypeFloat 16
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_half_uint_64 = OpTypeArray %half %uint_64
+      %SB_RW = OpTypeStruct %_arr_half_uint_64
+%sb_rw_block = OpTypeStruct %SB_RW
+%_ptr_StorageBuffer_sb_rw_block = OpTypePointer StorageBuffer %sb_rw_block
+          %1 = OpVariable %_ptr_StorageBuffer_sb_rw_block StorageBuffer
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+%_ptr_StorageBuffer__arr_half_uint_64 = OpTypePointer StorageBuffer %_arr_half_uint_64
+     %uint_0 = OpConstant %uint 0
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+         %17 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpConstantNull %17
+%_ptr_StorageBuffer_half = OpTypePointer StorageBuffer %half
+     %uint_1 = OpConstant %uint 1
+%subgroupMatrixStore_0522d1 = OpFunction %void None %11
+         %12 = OpLabel
+         %13 = OpAccessChain %_ptr_StorageBuffer__arr_half_uint_64 %1 %uint_0 %uint_0
+         %20 = OpAccessChain %_ptr_StorageBuffer_half %13 %uint_1
+               OpCooperativeMatrixStoreKHR %20 %16 %uint_1 %uint_1 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %25 = OpLabel
+         %26 = OpFunctionCall %void %subgroupMatrixStore_0522d1
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixStore/127fb7.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixStore/127fb7.wgsl.expected.spvasm
index 5c64c6a..cfe3607 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixStore/127fb7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixStore/127fb7.wgsl.expected.spvasm
@@ -1,5 +1,86 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability Float16
+               OpCapability UniformAndStorageBuffer16BitAccess
+               OpCapability StorageBuffer16BitAccess
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main" %compute_main_local_invocation_index_Input
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %arg_0 "arg_0"
+               OpName %compute_main_local_invocation_index_Input "compute_main_local_invocation_index_Input"
+               OpName %subgroupMatrixStore_127fb7 "subgroupMatrixStore_127fb7"
+               OpName %compute_main_inner "compute_main_inner"
+               OpName %tint_local_index "tint_local_index"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_half_uint_64 ArrayStride 2
+               OpDecorate %compute_main_local_invocation_index_Input BuiltIn LocalInvocationIndex
+       %half = OpTypeFloat 16
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_half_uint_64 = OpTypeArray %half %uint_64
+%_ptr_Workgroup__arr_half_uint_64 = OpTypePointer Workgroup %_arr_half_uint_64
+      %arg_0 = OpVariable %_ptr_Workgroup__arr_half_uint_64 Workgroup
+%_ptr_Input_uint = OpTypePointer Input %uint
+%compute_main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_2 = OpConstant %uint 2
+         %14 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_2
+         %13 = OpConstantNull %14
+%_ptr_Workgroup_half = OpTypePointer Workgroup %half
+     %uint_1 = OpConstant %uint 1
+         %24 = OpTypeFunction %void %uint
+       %bool = OpTypeBool
+%half_0x0p_0 = OpConstant %half 0x0p+0
+ %uint_24840 = OpConstant %uint 24840
+%subgroupMatrixStore_127fb7 = OpFunction %void None %11
+         %12 = OpLabel
+         %18 = OpAccessChain %_ptr_Workgroup_half %arg_0 %uint_1
+               OpCooperativeMatrixStoreKHR %18 %13 %uint_1 %uint_1 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main_inner = OpFunction %void None %24
+%tint_local_index = OpFunctionParameter %uint
+         %25 = OpLabel
+               OpBranch %26
+         %26 = OpLabel
+               OpBranch %29
+         %29 = OpLabel
+         %31 = OpPhi %uint %tint_local_index %26 %32 %28
+               OpLoopMerge %30 %28 None
+               OpBranch %27
+         %27 = OpLabel
+         %33 = OpUGreaterThanEqual %bool %31 %uint_64
+               OpSelectionMerge %35 None
+               OpBranchConditional %33 %36 %35
+         %36 = OpLabel
+               OpBranch %30
+         %35 = OpLabel
+         %37 = OpAccessChain %_ptr_Workgroup_half %arg_0 %31
+               OpStore %37 %half_0x0p_0 NonPrivatePointer
+               OpBranch %28
+         %28 = OpLabel
+         %32 = OpIAdd %uint %31 %uint_1
+               OpBranch %29
+         %30 = OpLabel
+               OpControlBarrier %uint_2 %uint_2 %uint_24840
+         %41 = OpFunctionCall %void %subgroupMatrixStore_127fb7
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %43 = OpLabel
+         %44 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %45 = OpFunctionCall %void %compute_main_inner %44
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixStore/1466ba.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixStore/1466ba.wgsl.expected.spvasm
index 5c64c6a..3978309 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixStore/1466ba.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixStore/1466ba.wgsl.expected.spvasm
@@ -1,5 +1,60 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 28
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability Float16
+               OpCapability UniformAndStorageBuffer16BitAccess
+               OpCapability StorageBuffer16BitAccess
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpMemberName %SB_RW 0 "arg_0"
+               OpName %SB_RW "SB_RW"
+               OpMemberName %sb_rw_block 0 "inner"
+               OpName %sb_rw_block "sb_rw_block"
+               OpName %subgroupMatrixStore_1466ba "subgroupMatrixStore_1466ba"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_half_uint_64 ArrayStride 2
+               OpMemberDecorate %SB_RW 0 Offset 0
+               OpMemberDecorate %sb_rw_block 0 Offset 0
+               OpDecorate %sb_rw_block Block
+               OpDecorate %1 DescriptorSet 0
+               OpDecorate %1 Binding 0
+       %half = OpTypeFloat 16
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_half_uint_64 = OpTypeArray %half %uint_64
+      %SB_RW = OpTypeStruct %_arr_half_uint_64
+%sb_rw_block = OpTypeStruct %SB_RW
+%_ptr_StorageBuffer_sb_rw_block = OpTypePointer StorageBuffer %sb_rw_block
+          %1 = OpVariable %_ptr_StorageBuffer_sb_rw_block StorageBuffer
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+%_ptr_StorageBuffer__arr_half_uint_64 = OpTypePointer StorageBuffer %_arr_half_uint_64
+     %uint_0 = OpConstant %uint 0
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_2 = OpConstant %uint 2
+         %17 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_2
+         %16 = OpConstantNull %17
+%_ptr_StorageBuffer_half = OpTypePointer StorageBuffer %half
+     %uint_1 = OpConstant %uint 1
+%subgroupMatrixStore_1466ba = OpFunction %void None %11
+         %12 = OpLabel
+         %13 = OpAccessChain %_ptr_StorageBuffer__arr_half_uint_64 %1 %uint_0 %uint_0
+         %21 = OpAccessChain %_ptr_StorageBuffer_half %13 %uint_1
+               OpCooperativeMatrixStoreKHR %21 %16 %uint_1 %uint_1 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %subgroupMatrixStore_1466ba
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixStore/184580.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixStore/184580.wgsl.expected.spvasm
index 5c64c6a..6ac60b3 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixStore/184580.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixStore/184580.wgsl.expected.spvasm
@@ -1,5 +1,56 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpMemberName %SB_RW 0 "arg_0"
+               OpName %SB_RW "SB_RW"
+               OpMemberName %sb_rw_block 0 "inner"
+               OpName %sb_rw_block "sb_rw_block"
+               OpName %subgroupMatrixStore_184580 "subgroupMatrixStore_184580"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_int_uint_64 ArrayStride 4
+               OpMemberDecorate %SB_RW 0 Offset 0
+               OpMemberDecorate %sb_rw_block 0 Offset 0
+               OpDecorate %sb_rw_block Block
+               OpDecorate %1 DescriptorSet 0
+               OpDecorate %1 Binding 0
+        %int = OpTypeInt 32 1
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_int_uint_64 = OpTypeArray %int %uint_64
+      %SB_RW = OpTypeStruct %_arr_int_uint_64
+%sb_rw_block = OpTypeStruct %SB_RW
+%_ptr_StorageBuffer_sb_rw_block = OpTypePointer StorageBuffer %sb_rw_block
+          %1 = OpVariable %_ptr_StorageBuffer_sb_rw_block StorageBuffer
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+%_ptr_StorageBuffer__arr_int_uint_64 = OpTypePointer StorageBuffer %_arr_int_uint_64
+     %uint_0 = OpConstant %uint 0
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_1 = OpConstant %uint 1
+         %17 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_1
+         %16 = OpConstantNull %17
+%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
+%subgroupMatrixStore_184580 = OpFunction %void None %11
+         %12 = OpLabel
+         %13 = OpAccessChain %_ptr_StorageBuffer__arr_int_uint_64 %1 %uint_0 %uint_0
+         %21 = OpAccessChain %_ptr_StorageBuffer_int %13 %uint_1
+               OpCooperativeMatrixStoreKHR %21 %16 %uint_1 %uint_1 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %25 = OpLabel
+         %26 = OpFunctionCall %void %subgroupMatrixStore_184580
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixStore/197435.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixStore/197435.wgsl.expected.spvasm
index 5c64c6a..9a0bbb4 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixStore/197435.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixStore/197435.wgsl.expected.spvasm
@@ -1,5 +1,56 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpMemberName %SB_RW 0 "arg_0"
+               OpName %SB_RW "SB_RW"
+               OpMemberName %sb_rw_block 0 "inner"
+               OpName %sb_rw_block "sb_rw_block"
+               OpName %subgroupMatrixStore_197435 "subgroupMatrixStore_197435"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_float_uint_64 ArrayStride 4
+               OpMemberDecorate %SB_RW 0 Offset 0
+               OpMemberDecorate %sb_rw_block 0 Offset 0
+               OpDecorate %sb_rw_block Block
+               OpDecorate %1 DescriptorSet 0
+               OpDecorate %1 Binding 0
+      %float = OpTypeFloat 32
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_float_uint_64 = OpTypeArray %float %uint_64
+      %SB_RW = OpTypeStruct %_arr_float_uint_64
+%sb_rw_block = OpTypeStruct %SB_RW
+%_ptr_StorageBuffer_sb_rw_block = OpTypePointer StorageBuffer %sb_rw_block
+          %1 = OpVariable %_ptr_StorageBuffer_sb_rw_block StorageBuffer
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+%_ptr_StorageBuffer__arr_float_uint_64 = OpTypePointer StorageBuffer %_arr_float_uint_64
+     %uint_0 = OpConstant %uint 0
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+         %17 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpConstantNull %17
+%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
+     %uint_1 = OpConstant %uint 1
+%subgroupMatrixStore_197435 = OpFunction %void None %11
+         %12 = OpLabel
+         %13 = OpAccessChain %_ptr_StorageBuffer__arr_float_uint_64 %1 %uint_0 %uint_0
+         %20 = OpAccessChain %_ptr_StorageBuffer_float %13 %uint_1
+               OpCooperativeMatrixStoreKHR %20 %16 %uint_1 %uint_1 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %25 = OpLabel
+         %26 = OpFunctionCall %void %subgroupMatrixStore_197435
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixStore/2de0b1.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixStore/2de0b1.wgsl.expected.spvasm
index 5c64c6a..fda3265 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixStore/2de0b1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixStore/2de0b1.wgsl.expected.spvasm
@@ -1,5 +1,82 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main" %compute_main_local_invocation_index_Input
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %arg_0 "arg_0"
+               OpName %compute_main_local_invocation_index_Input "compute_main_local_invocation_index_Input"
+               OpName %subgroupMatrixStore_2de0b1 "subgroupMatrixStore_2de0b1"
+               OpName %compute_main_inner "compute_main_inner"
+               OpName %tint_local_index "tint_local_index"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_uint_uint_64 ArrayStride 4
+               OpDecorate %compute_main_local_invocation_index_Input BuiltIn LocalInvocationIndex
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_uint_uint_64 = OpTypeArray %uint %uint_64
+%_ptr_Workgroup__arr_uint_uint_64 = OpTypePointer Workgroup %_arr_uint_uint_64
+      %arg_0 = OpVariable %_ptr_Workgroup__arr_uint_uint_64 Workgroup
+%_ptr_Input_uint = OpTypePointer Input %uint
+%compute_main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
+       %void = OpTypeVoid
+         %10 = OpTypeFunction %void
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_1 = OpConstant %uint 1
+         %13 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_1
+         %12 = OpConstantNull %13
+%_ptr_Workgroup_uint = OpTypePointer Workgroup %uint
+         %22 = OpTypeFunction %void %uint
+       %bool = OpTypeBool
+     %uint_0 = OpConstant %uint 0
+     %uint_2 = OpConstant %uint 2
+ %uint_24840 = OpConstant %uint 24840
+%subgroupMatrixStore_2de0b1 = OpFunction %void None %10
+         %11 = OpLabel
+         %17 = OpAccessChain %_ptr_Workgroup_uint %arg_0 %uint_1
+               OpCooperativeMatrixStoreKHR %17 %12 %uint_1 %uint_1 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main_inner = OpFunction %void None %22
+%tint_local_index = OpFunctionParameter %uint
+         %23 = OpLabel
+               OpBranch %24
+         %24 = OpLabel
+               OpBranch %27
+         %27 = OpLabel
+         %29 = OpPhi %uint %tint_local_index %24 %30 %26
+               OpLoopMerge %28 %26 None
+               OpBranch %25
+         %25 = OpLabel
+         %31 = OpUGreaterThanEqual %bool %29 %uint_64
+               OpSelectionMerge %33 None
+               OpBranchConditional %31 %34 %33
+         %34 = OpLabel
+               OpBranch %28
+         %33 = OpLabel
+         %35 = OpAccessChain %_ptr_Workgroup_uint %arg_0 %29
+               OpStore %35 %uint_0 NonPrivatePointer
+               OpBranch %26
+         %26 = OpLabel
+         %30 = OpIAdd %uint %29 %uint_1
+               OpBranch %27
+         %28 = OpLabel
+               OpControlBarrier %uint_2 %uint_2 %uint_24840
+         %40 = OpFunctionCall %void %subgroupMatrixStore_2de0b1
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %10
+         %42 = OpLabel
+         %43 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %44 = OpFunctionCall %void %compute_main_inner %43
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixStore/3fcc0f.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixStore/3fcc0f.wgsl.expected.spvasm
index 5c64c6a..653db40 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixStore/3fcc0f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixStore/3fcc0f.wgsl.expected.spvasm
@@ -1,5 +1,56 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpMemberName %SB_RW 0 "arg_0"
+               OpName %SB_RW "SB_RW"
+               OpMemberName %sb_rw_block 0 "inner"
+               OpName %sb_rw_block "sb_rw_block"
+               OpName %subgroupMatrixStore_3fcc0f "subgroupMatrixStore_3fcc0f"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_float_uint_64 ArrayStride 4
+               OpMemberDecorate %SB_RW 0 Offset 0
+               OpMemberDecorate %sb_rw_block 0 Offset 0
+               OpDecorate %sb_rw_block Block
+               OpDecorate %1 DescriptorSet 0
+               OpDecorate %1 Binding 0
+      %float = OpTypeFloat 32
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_float_uint_64 = OpTypeArray %float %uint_64
+      %SB_RW = OpTypeStruct %_arr_float_uint_64
+%sb_rw_block = OpTypeStruct %SB_RW
+%_ptr_StorageBuffer_sb_rw_block = OpTypePointer StorageBuffer %sb_rw_block
+          %1 = OpVariable %_ptr_StorageBuffer_sb_rw_block StorageBuffer
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+%_ptr_StorageBuffer__arr_float_uint_64 = OpTypePointer StorageBuffer %_arr_float_uint_64
+     %uint_0 = OpConstant %uint 0
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_1 = OpConstant %uint 1
+         %17 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_1
+         %16 = OpConstantNull %17
+%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
+%subgroupMatrixStore_3fcc0f = OpFunction %void None %11
+         %12 = OpLabel
+         %13 = OpAccessChain %_ptr_StorageBuffer__arr_float_uint_64 %1 %uint_0 %uint_0
+         %21 = OpAccessChain %_ptr_StorageBuffer_float %13 %uint_1
+               OpCooperativeMatrixStoreKHR %21 %16 %uint_1 %uint_1 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %25 = OpLabel
+         %26 = OpFunctionCall %void %subgroupMatrixStore_3fcc0f
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixStore/49b25b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixStore/49b25b.wgsl.expected.spvasm
index 5c64c6a..a0b1231 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixStore/49b25b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixStore/49b25b.wgsl.expected.spvasm
@@ -1,5 +1,83 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main" %compute_main_local_invocation_index_Input
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %arg_0 "arg_0"
+               OpName %compute_main_local_invocation_index_Input "compute_main_local_invocation_index_Input"
+               OpName %subgroupMatrixStore_49b25b "subgroupMatrixStore_49b25b"
+               OpName %compute_main_inner "compute_main_inner"
+               OpName %tint_local_index "tint_local_index"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_float_uint_64 ArrayStride 4
+               OpDecorate %compute_main_local_invocation_index_Input BuiltIn LocalInvocationIndex
+      %float = OpTypeFloat 32
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_float_uint_64 = OpTypeArray %float %uint_64
+%_ptr_Workgroup__arr_float_uint_64 = OpTypePointer Workgroup %_arr_float_uint_64
+      %arg_0 = OpVariable %_ptr_Workgroup__arr_float_uint_64 Workgroup
+%_ptr_Input_uint = OpTypePointer Input %uint
+%compute_main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_1 = OpConstant %uint 1
+         %14 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_1
+         %13 = OpConstantNull %14
+%_ptr_Workgroup_float = OpTypePointer Workgroup %float
+         %23 = OpTypeFunction %void %uint
+       %bool = OpTypeBool
+    %float_0 = OpConstant %float 0
+     %uint_2 = OpConstant %uint 2
+ %uint_24840 = OpConstant %uint 24840
+%subgroupMatrixStore_49b25b = OpFunction %void None %11
+         %12 = OpLabel
+         %18 = OpAccessChain %_ptr_Workgroup_float %arg_0 %uint_1
+               OpCooperativeMatrixStoreKHR %18 %13 %uint_1 %uint_1 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main_inner = OpFunction %void None %23
+%tint_local_index = OpFunctionParameter %uint
+         %24 = OpLabel
+               OpBranch %25
+         %25 = OpLabel
+               OpBranch %28
+         %28 = OpLabel
+         %30 = OpPhi %uint %tint_local_index %25 %31 %27
+               OpLoopMerge %29 %27 None
+               OpBranch %26
+         %26 = OpLabel
+         %32 = OpUGreaterThanEqual %bool %30 %uint_64
+               OpSelectionMerge %34 None
+               OpBranchConditional %32 %35 %34
+         %35 = OpLabel
+               OpBranch %29
+         %34 = OpLabel
+         %36 = OpAccessChain %_ptr_Workgroup_float %arg_0 %30
+               OpStore %36 %float_0 NonPrivatePointer
+               OpBranch %27
+         %27 = OpLabel
+         %31 = OpIAdd %uint %30 %uint_1
+               OpBranch %28
+         %29 = OpLabel
+               OpControlBarrier %uint_2 %uint_2 %uint_24840
+         %41 = OpFunctionCall %void %subgroupMatrixStore_49b25b
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %43 = OpLabel
+         %44 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %45 = OpFunctionCall %void %compute_main_inner %44
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixStore/5671e2.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixStore/5671e2.wgsl.expected.spvasm
index 5c64c6a..f9d90b1 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixStore/5671e2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixStore/5671e2.wgsl.expected.spvasm
@@ -1,5 +1,83 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main" %compute_main_local_invocation_index_Input
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %arg_0 "arg_0"
+               OpName %compute_main_local_invocation_index_Input "compute_main_local_invocation_index_Input"
+               OpName %subgroupMatrixStore_5671e2 "subgroupMatrixStore_5671e2"
+               OpName %compute_main_inner "compute_main_inner"
+               OpName %tint_local_index "tint_local_index"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_int_uint_64 ArrayStride 4
+               OpDecorate %compute_main_local_invocation_index_Input BuiltIn LocalInvocationIndex
+        %int = OpTypeInt 32 1
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_int_uint_64 = OpTypeArray %int %uint_64
+%_ptr_Workgroup__arr_int_uint_64 = OpTypePointer Workgroup %_arr_int_uint_64
+      %arg_0 = OpVariable %_ptr_Workgroup__arr_int_uint_64 Workgroup
+%_ptr_Input_uint = OpTypePointer Input %uint
+%compute_main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_1 = OpConstant %uint 1
+         %14 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_1
+         %13 = OpConstantNull %14
+%_ptr_Workgroup_int = OpTypePointer Workgroup %int
+         %23 = OpTypeFunction %void %uint
+       %bool = OpTypeBool
+      %int_0 = OpConstant %int 0
+     %uint_2 = OpConstant %uint 2
+ %uint_24840 = OpConstant %uint 24840
+%subgroupMatrixStore_5671e2 = OpFunction %void None %11
+         %12 = OpLabel
+         %18 = OpAccessChain %_ptr_Workgroup_int %arg_0 %uint_1
+               OpCooperativeMatrixStoreKHR %18 %13 %uint_1 %uint_1 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main_inner = OpFunction %void None %23
+%tint_local_index = OpFunctionParameter %uint
+         %24 = OpLabel
+               OpBranch %25
+         %25 = OpLabel
+               OpBranch %28
+         %28 = OpLabel
+         %30 = OpPhi %uint %tint_local_index %25 %31 %27
+               OpLoopMerge %29 %27 None
+               OpBranch %26
+         %26 = OpLabel
+         %32 = OpUGreaterThanEqual %bool %30 %uint_64
+               OpSelectionMerge %34 None
+               OpBranchConditional %32 %35 %34
+         %35 = OpLabel
+               OpBranch %29
+         %34 = OpLabel
+         %36 = OpAccessChain %_ptr_Workgroup_int %arg_0 %30
+               OpStore %36 %int_0 NonPrivatePointer
+               OpBranch %27
+         %27 = OpLabel
+         %31 = OpIAdd %uint %30 %uint_1
+               OpBranch %28
+         %29 = OpLabel
+               OpControlBarrier %uint_2 %uint_2 %uint_24840
+         %41 = OpFunctionCall %void %subgroupMatrixStore_5671e2
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %43 = OpLabel
+         %44 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %45 = OpFunctionCall %void %compute_main_inner %44
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixStore/57de92.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixStore/57de92.wgsl.expected.spvasm
index 5c64c6a..7ac5e24 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixStore/57de92.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixStore/57de92.wgsl.expected.spvasm
@@ -1,5 +1,55 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 26
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpMemberName %SB_RW 0 "arg_0"
+               OpName %SB_RW "SB_RW"
+               OpMemberName %sb_rw_block 0 "inner"
+               OpName %sb_rw_block "sb_rw_block"
+               OpName %subgroupMatrixStore_57de92 "subgroupMatrixStore_57de92"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_uint_uint_64 ArrayStride 4
+               OpMemberDecorate %SB_RW 0 Offset 0
+               OpMemberDecorate %sb_rw_block 0 Offset 0
+               OpDecorate %sb_rw_block Block
+               OpDecorate %1 DescriptorSet 0
+               OpDecorate %1 Binding 0
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_uint_uint_64 = OpTypeArray %uint %uint_64
+      %SB_RW = OpTypeStruct %_arr_uint_uint_64
+%sb_rw_block = OpTypeStruct %SB_RW
+%_ptr_StorageBuffer_sb_rw_block = OpTypePointer StorageBuffer %sb_rw_block
+          %1 = OpVariable %_ptr_StorageBuffer_sb_rw_block StorageBuffer
+       %void = OpTypeVoid
+         %10 = OpTypeFunction %void
+%_ptr_StorageBuffer__arr_uint_uint_64 = OpTypePointer StorageBuffer %_arr_uint_uint_64
+     %uint_0 = OpConstant %uint 0
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_1 = OpConstant %uint 1
+         %16 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_1
+         %15 = OpConstantNull %16
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+%subgroupMatrixStore_57de92 = OpFunction %void None %10
+         %11 = OpLabel
+         %12 = OpAccessChain %_ptr_StorageBuffer__arr_uint_uint_64 %1 %uint_0 %uint_0
+         %20 = OpAccessChain %_ptr_StorageBuffer_uint %12 %uint_1
+               OpCooperativeMatrixStoreKHR %20 %15 %uint_1 %uint_1 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %10
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %subgroupMatrixStore_57de92
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixStore/5915fe.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixStore/5915fe.wgsl.expected.spvasm
index 5c64c6a..b2ea17b 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixStore/5915fe.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixStore/5915fe.wgsl.expected.spvasm
@@ -1,5 +1,82 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main" %compute_main_local_invocation_index_Input
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %arg_0 "arg_0"
+               OpName %compute_main_local_invocation_index_Input "compute_main_local_invocation_index_Input"
+               OpName %subgroupMatrixStore_5915fe "subgroupMatrixStore_5915fe"
+               OpName %compute_main_inner "compute_main_inner"
+               OpName %tint_local_index "tint_local_index"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_uint_uint_64 ArrayStride 4
+               OpDecorate %compute_main_local_invocation_index_Input BuiltIn LocalInvocationIndex
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_uint_uint_64 = OpTypeArray %uint %uint_64
+%_ptr_Workgroup__arr_uint_uint_64 = OpTypePointer Workgroup %_arr_uint_uint_64
+      %arg_0 = OpVariable %_ptr_Workgroup__arr_uint_uint_64 Workgroup
+%_ptr_Input_uint = OpTypePointer Input %uint
+%compute_main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
+       %void = OpTypeVoid
+         %10 = OpTypeFunction %void
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_0 = OpConstant %uint 0
+         %13 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_0
+         %12 = OpConstantNull %13
+%_ptr_Workgroup_uint = OpTypePointer Workgroup %uint
+     %uint_1 = OpConstant %uint 1
+         %23 = OpTypeFunction %void %uint
+       %bool = OpTypeBool
+     %uint_2 = OpConstant %uint 2
+ %uint_24840 = OpConstant %uint 24840
+%subgroupMatrixStore_5915fe = OpFunction %void None %10
+         %11 = OpLabel
+         %17 = OpAccessChain %_ptr_Workgroup_uint %arg_0 %uint_1
+               OpCooperativeMatrixStoreKHR %17 %12 %uint_1 %uint_1 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main_inner = OpFunction %void None %23
+%tint_local_index = OpFunctionParameter %uint
+         %24 = OpLabel
+               OpBranch %25
+         %25 = OpLabel
+               OpBranch %28
+         %28 = OpLabel
+         %30 = OpPhi %uint %tint_local_index %25 %31 %27
+               OpLoopMerge %29 %27 None
+               OpBranch %26
+         %26 = OpLabel
+         %32 = OpUGreaterThanEqual %bool %30 %uint_64
+               OpSelectionMerge %34 None
+               OpBranchConditional %32 %35 %34
+         %35 = OpLabel
+               OpBranch %29
+         %34 = OpLabel
+         %36 = OpAccessChain %_ptr_Workgroup_uint %arg_0 %30
+               OpStore %36 %uint_0 NonPrivatePointer
+               OpBranch %27
+         %27 = OpLabel
+         %31 = OpIAdd %uint %30 %uint_1
+               OpBranch %28
+         %29 = OpLabel
+               OpControlBarrier %uint_2 %uint_2 %uint_24840
+         %40 = OpFunctionCall %void %subgroupMatrixStore_5915fe
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %10
+         %42 = OpLabel
+         %43 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %44 = OpFunctionCall %void %compute_main_inner %43
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixStore/8a2280.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixStore/8a2280.wgsl.expected.spvasm
index 5c64c6a..6ec0c48 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixStore/8a2280.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixStore/8a2280.wgsl.expected.spvasm
@@ -1,5 +1,57 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 28
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpMemberName %SB_RW 0 "arg_0"
+               OpName %SB_RW "SB_RW"
+               OpMemberName %sb_rw_block 0 "inner"
+               OpName %sb_rw_block "sb_rw_block"
+               OpName %subgroupMatrixStore_8a2280 "subgroupMatrixStore_8a2280"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_float_uint_64 ArrayStride 4
+               OpMemberDecorate %SB_RW 0 Offset 0
+               OpMemberDecorate %sb_rw_block 0 Offset 0
+               OpDecorate %sb_rw_block Block
+               OpDecorate %1 DescriptorSet 0
+               OpDecorate %1 Binding 0
+      %float = OpTypeFloat 32
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_float_uint_64 = OpTypeArray %float %uint_64
+      %SB_RW = OpTypeStruct %_arr_float_uint_64
+%sb_rw_block = OpTypeStruct %SB_RW
+%_ptr_StorageBuffer_sb_rw_block = OpTypePointer StorageBuffer %sb_rw_block
+          %1 = OpVariable %_ptr_StorageBuffer_sb_rw_block StorageBuffer
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+%_ptr_StorageBuffer__arr_float_uint_64 = OpTypePointer StorageBuffer %_arr_float_uint_64
+     %uint_0 = OpConstant %uint 0
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_2 = OpConstant %uint 2
+         %17 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_2
+         %16 = OpConstantNull %17
+%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
+     %uint_1 = OpConstant %uint 1
+%subgroupMatrixStore_8a2280 = OpFunction %void None %11
+         %12 = OpLabel
+         %13 = OpAccessChain %_ptr_StorageBuffer__arr_float_uint_64 %1 %uint_0 %uint_0
+         %21 = OpAccessChain %_ptr_StorageBuffer_float %13 %uint_1
+               OpCooperativeMatrixStoreKHR %21 %16 %uint_1 %uint_1 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %subgroupMatrixStore_8a2280
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixStore/9019ee.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixStore/9019ee.wgsl.expected.spvasm
index 5c64c6a..d93c8ea 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixStore/9019ee.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixStore/9019ee.wgsl.expected.spvasm
@@ -1,5 +1,56 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpMemberName %SB_RW 0 "arg_0"
+               OpName %SB_RW "SB_RW"
+               OpMemberName %sb_rw_block 0 "inner"
+               OpName %sb_rw_block "sb_rw_block"
+               OpName %subgroupMatrixStore_9019ee "subgroupMatrixStore_9019ee"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_int_uint_64 ArrayStride 4
+               OpMemberDecorate %SB_RW 0 Offset 0
+               OpMemberDecorate %sb_rw_block 0 Offset 0
+               OpDecorate %sb_rw_block Block
+               OpDecorate %1 DescriptorSet 0
+               OpDecorate %1 Binding 0
+        %int = OpTypeInt 32 1
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_int_uint_64 = OpTypeArray %int %uint_64
+      %SB_RW = OpTypeStruct %_arr_int_uint_64
+%sb_rw_block = OpTypeStruct %SB_RW
+%_ptr_StorageBuffer_sb_rw_block = OpTypePointer StorageBuffer %sb_rw_block
+          %1 = OpVariable %_ptr_StorageBuffer_sb_rw_block StorageBuffer
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+%_ptr_StorageBuffer__arr_int_uint_64 = OpTypePointer StorageBuffer %_arr_int_uint_64
+     %uint_0 = OpConstant %uint 0
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+         %17 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpConstantNull %17
+%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
+     %uint_1 = OpConstant %uint 1
+%subgroupMatrixStore_9019ee = OpFunction %void None %11
+         %12 = OpLabel
+         %13 = OpAccessChain %_ptr_StorageBuffer__arr_int_uint_64 %1 %uint_0 %uint_0
+         %20 = OpAccessChain %_ptr_StorageBuffer_int %13 %uint_1
+               OpCooperativeMatrixStoreKHR %20 %16 %uint_1 %uint_1 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %25 = OpLabel
+         %26 = OpFunctionCall %void %subgroupMatrixStore_9019ee
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixStore/9a7d60.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixStore/9a7d60.wgsl.expected.spvasm
index 5c64c6a..c1f3a32 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixStore/9a7d60.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixStore/9a7d60.wgsl.expected.spvasm
@@ -1,5 +1,82 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main" %compute_main_local_invocation_index_Input
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %arg_0 "arg_0"
+               OpName %compute_main_local_invocation_index_Input "compute_main_local_invocation_index_Input"
+               OpName %subgroupMatrixStore_9a7d60 "subgroupMatrixStore_9a7d60"
+               OpName %compute_main_inner "compute_main_inner"
+               OpName %tint_local_index "tint_local_index"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_uint_uint_64 ArrayStride 4
+               OpDecorate %compute_main_local_invocation_index_Input BuiltIn LocalInvocationIndex
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_uint_uint_64 = OpTypeArray %uint %uint_64
+%_ptr_Workgroup__arr_uint_uint_64 = OpTypePointer Workgroup %_arr_uint_uint_64
+      %arg_0 = OpVariable %_ptr_Workgroup__arr_uint_uint_64 Workgroup
+%_ptr_Input_uint = OpTypePointer Input %uint
+%compute_main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
+       %void = OpTypeVoid
+         %10 = OpTypeFunction %void
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_2 = OpConstant %uint 2
+         %13 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_2
+         %12 = OpConstantNull %13
+%_ptr_Workgroup_uint = OpTypePointer Workgroup %uint
+     %uint_1 = OpConstant %uint 1
+         %23 = OpTypeFunction %void %uint
+       %bool = OpTypeBool
+     %uint_0 = OpConstant %uint 0
+ %uint_24840 = OpConstant %uint 24840
+%subgroupMatrixStore_9a7d60 = OpFunction %void None %10
+         %11 = OpLabel
+         %17 = OpAccessChain %_ptr_Workgroup_uint %arg_0 %uint_1
+               OpCooperativeMatrixStoreKHR %17 %12 %uint_1 %uint_1 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main_inner = OpFunction %void None %23
+%tint_local_index = OpFunctionParameter %uint
+         %24 = OpLabel
+               OpBranch %25
+         %25 = OpLabel
+               OpBranch %28
+         %28 = OpLabel
+         %30 = OpPhi %uint %tint_local_index %25 %31 %27
+               OpLoopMerge %29 %27 None
+               OpBranch %26
+         %26 = OpLabel
+         %32 = OpUGreaterThanEqual %bool %30 %uint_64
+               OpSelectionMerge %34 None
+               OpBranchConditional %32 %35 %34
+         %35 = OpLabel
+               OpBranch %29
+         %34 = OpLabel
+         %36 = OpAccessChain %_ptr_Workgroup_uint %arg_0 %30
+               OpStore %36 %uint_0 NonPrivatePointer
+               OpBranch %27
+         %27 = OpLabel
+         %31 = OpIAdd %uint %30 %uint_1
+               OpBranch %28
+         %29 = OpLabel
+               OpControlBarrier %uint_2 %uint_2 %uint_24840
+         %40 = OpFunctionCall %void %subgroupMatrixStore_9a7d60
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %10
+         %42 = OpLabel
+         %43 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %44 = OpFunctionCall %void %compute_main_inner %43
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixStore/9fffe5.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixStore/9fffe5.wgsl.expected.spvasm
index 5c64c6a..6bd5c3c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixStore/9fffe5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixStore/9fffe5.wgsl.expected.spvasm
@@ -1,5 +1,57 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 28
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpMemberName %SB_RW 0 "arg_0"
+               OpName %SB_RW "SB_RW"
+               OpMemberName %sb_rw_block 0 "inner"
+               OpName %sb_rw_block "sb_rw_block"
+               OpName %subgroupMatrixStore_9fffe5 "subgroupMatrixStore_9fffe5"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_int_uint_64 ArrayStride 4
+               OpMemberDecorate %SB_RW 0 Offset 0
+               OpMemberDecorate %sb_rw_block 0 Offset 0
+               OpDecorate %sb_rw_block Block
+               OpDecorate %1 DescriptorSet 0
+               OpDecorate %1 Binding 0
+        %int = OpTypeInt 32 1
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_int_uint_64 = OpTypeArray %int %uint_64
+      %SB_RW = OpTypeStruct %_arr_int_uint_64
+%sb_rw_block = OpTypeStruct %SB_RW
+%_ptr_StorageBuffer_sb_rw_block = OpTypePointer StorageBuffer %sb_rw_block
+          %1 = OpVariable %_ptr_StorageBuffer_sb_rw_block StorageBuffer
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+%_ptr_StorageBuffer__arr_int_uint_64 = OpTypePointer StorageBuffer %_arr_int_uint_64
+     %uint_0 = OpConstant %uint 0
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_2 = OpConstant %uint 2
+         %17 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_2
+         %16 = OpConstantNull %17
+%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
+     %uint_1 = OpConstant %uint 1
+%subgroupMatrixStore_9fffe5 = OpFunction %void None %11
+         %12 = OpLabel
+         %13 = OpAccessChain %_ptr_StorageBuffer__arr_int_uint_64 %1 %uint_0 %uint_0
+         %21 = OpAccessChain %_ptr_StorageBuffer_int %13 %uint_1
+               OpCooperativeMatrixStoreKHR %21 %16 %uint_1 %uint_1 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %subgroupMatrixStore_9fffe5
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixStore/b9ff25.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixStore/b9ff25.wgsl.expected.spvasm
index 5c64c6a..95f1d23 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixStore/b9ff25.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixStore/b9ff25.wgsl.expected.spvasm
@@ -1,5 +1,83 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main" %compute_main_local_invocation_index_Input
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %arg_0 "arg_0"
+               OpName %compute_main_local_invocation_index_Input "compute_main_local_invocation_index_Input"
+               OpName %subgroupMatrixStore_b9ff25 "subgroupMatrixStore_b9ff25"
+               OpName %compute_main_inner "compute_main_inner"
+               OpName %tint_local_index "tint_local_index"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_float_uint_64 ArrayStride 4
+               OpDecorate %compute_main_local_invocation_index_Input BuiltIn LocalInvocationIndex
+      %float = OpTypeFloat 32
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_float_uint_64 = OpTypeArray %float %uint_64
+%_ptr_Workgroup__arr_float_uint_64 = OpTypePointer Workgroup %_arr_float_uint_64
+      %arg_0 = OpVariable %_ptr_Workgroup__arr_float_uint_64 Workgroup
+%_ptr_Input_uint = OpTypePointer Input %uint
+%compute_main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_2 = OpConstant %uint 2
+         %14 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_2
+         %13 = OpConstantNull %14
+%_ptr_Workgroup_float = OpTypePointer Workgroup %float
+     %uint_1 = OpConstant %uint 1
+         %24 = OpTypeFunction %void %uint
+       %bool = OpTypeBool
+    %float_0 = OpConstant %float 0
+ %uint_24840 = OpConstant %uint 24840
+%subgroupMatrixStore_b9ff25 = OpFunction %void None %11
+         %12 = OpLabel
+         %18 = OpAccessChain %_ptr_Workgroup_float %arg_0 %uint_1
+               OpCooperativeMatrixStoreKHR %18 %13 %uint_1 %uint_1 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main_inner = OpFunction %void None %24
+%tint_local_index = OpFunctionParameter %uint
+         %25 = OpLabel
+               OpBranch %26
+         %26 = OpLabel
+               OpBranch %29
+         %29 = OpLabel
+         %31 = OpPhi %uint %tint_local_index %26 %32 %28
+               OpLoopMerge %30 %28 None
+               OpBranch %27
+         %27 = OpLabel
+         %33 = OpUGreaterThanEqual %bool %31 %uint_64
+               OpSelectionMerge %35 None
+               OpBranchConditional %33 %36 %35
+         %36 = OpLabel
+               OpBranch %30
+         %35 = OpLabel
+         %37 = OpAccessChain %_ptr_Workgroup_float %arg_0 %31
+               OpStore %37 %float_0 NonPrivatePointer
+               OpBranch %28
+         %28 = OpLabel
+         %32 = OpIAdd %uint %31 %uint_1
+               OpBranch %29
+         %30 = OpLabel
+               OpControlBarrier %uint_2 %uint_2 %uint_24840
+         %41 = OpFunctionCall %void %subgroupMatrixStore_b9ff25
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %43 = OpLabel
+         %44 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %45 = OpFunctionCall %void %compute_main_inner %44
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixStore/ba9442.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixStore/ba9442.wgsl.expected.spvasm
index 5c64c6a..66dcc4f 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixStore/ba9442.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixStore/ba9442.wgsl.expected.spvasm
@@ -1,5 +1,59 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability Float16
+               OpCapability UniformAndStorageBuffer16BitAccess
+               OpCapability StorageBuffer16BitAccess
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpMemberName %SB_RW 0 "arg_0"
+               OpName %SB_RW "SB_RW"
+               OpMemberName %sb_rw_block 0 "inner"
+               OpName %sb_rw_block "sb_rw_block"
+               OpName %subgroupMatrixStore_ba9442 "subgroupMatrixStore_ba9442"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_half_uint_64 ArrayStride 2
+               OpMemberDecorate %SB_RW 0 Offset 0
+               OpMemberDecorate %sb_rw_block 0 Offset 0
+               OpDecorate %sb_rw_block Block
+               OpDecorate %1 DescriptorSet 0
+               OpDecorate %1 Binding 0
+       %half = OpTypeFloat 16
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_half_uint_64 = OpTypeArray %half %uint_64
+      %SB_RW = OpTypeStruct %_arr_half_uint_64
+%sb_rw_block = OpTypeStruct %SB_RW
+%_ptr_StorageBuffer_sb_rw_block = OpTypePointer StorageBuffer %sb_rw_block
+          %1 = OpVariable %_ptr_StorageBuffer_sb_rw_block StorageBuffer
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+%_ptr_StorageBuffer__arr_half_uint_64 = OpTypePointer StorageBuffer %_arr_half_uint_64
+     %uint_0 = OpConstant %uint 0
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_1 = OpConstant %uint 1
+         %17 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_1
+         %16 = OpConstantNull %17
+%_ptr_StorageBuffer_half = OpTypePointer StorageBuffer %half
+%subgroupMatrixStore_ba9442 = OpFunction %void None %11
+         %12 = OpLabel
+         %13 = OpAccessChain %_ptr_StorageBuffer__arr_half_uint_64 %1 %uint_0 %uint_0
+         %21 = OpAccessChain %_ptr_StorageBuffer_half %13 %uint_1
+               OpCooperativeMatrixStoreKHR %21 %16 %uint_1 %uint_1 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %25 = OpLabel
+         %26 = OpFunctionCall %void %subgroupMatrixStore_ba9442
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixStore/bfd0a4.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixStore/bfd0a4.wgsl.expected.spvasm
index 5c64c6a..8da2eb8 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixStore/bfd0a4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixStore/bfd0a4.wgsl.expected.spvasm
@@ -1,5 +1,84 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 47
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main" %compute_main_local_invocation_index_Input
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %arg_0 "arg_0"
+               OpName %compute_main_local_invocation_index_Input "compute_main_local_invocation_index_Input"
+               OpName %subgroupMatrixStore_bfd0a4 "subgroupMatrixStore_bfd0a4"
+               OpName %compute_main_inner "compute_main_inner"
+               OpName %tint_local_index "tint_local_index"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_int_uint_64 ArrayStride 4
+               OpDecorate %compute_main_local_invocation_index_Input BuiltIn LocalInvocationIndex
+        %int = OpTypeInt 32 1
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_int_uint_64 = OpTypeArray %int %uint_64
+%_ptr_Workgroup__arr_int_uint_64 = OpTypePointer Workgroup %_arr_int_uint_64
+      %arg_0 = OpVariable %_ptr_Workgroup__arr_int_uint_64 Workgroup
+%_ptr_Input_uint = OpTypePointer Input %uint
+%compute_main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_0 = OpConstant %uint 0
+         %14 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_0
+         %13 = OpConstantNull %14
+%_ptr_Workgroup_int = OpTypePointer Workgroup %int
+     %uint_1 = OpConstant %uint 1
+         %24 = OpTypeFunction %void %uint
+       %bool = OpTypeBool
+      %int_0 = OpConstant %int 0
+     %uint_2 = OpConstant %uint 2
+ %uint_24840 = OpConstant %uint 24840
+%subgroupMatrixStore_bfd0a4 = OpFunction %void None %11
+         %12 = OpLabel
+         %18 = OpAccessChain %_ptr_Workgroup_int %arg_0 %uint_1
+               OpCooperativeMatrixStoreKHR %18 %13 %uint_1 %uint_1 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main_inner = OpFunction %void None %24
+%tint_local_index = OpFunctionParameter %uint
+         %25 = OpLabel
+               OpBranch %26
+         %26 = OpLabel
+               OpBranch %29
+         %29 = OpLabel
+         %31 = OpPhi %uint %tint_local_index %26 %32 %28
+               OpLoopMerge %30 %28 None
+               OpBranch %27
+         %27 = OpLabel
+         %33 = OpUGreaterThanEqual %bool %31 %uint_64
+               OpSelectionMerge %35 None
+               OpBranchConditional %33 %36 %35
+         %36 = OpLabel
+               OpBranch %30
+         %35 = OpLabel
+         %37 = OpAccessChain %_ptr_Workgroup_int %arg_0 %31
+               OpStore %37 %int_0 NonPrivatePointer
+               OpBranch %28
+         %28 = OpLabel
+         %32 = OpIAdd %uint %31 %uint_1
+               OpBranch %29
+         %30 = OpLabel
+               OpControlBarrier %uint_2 %uint_2 %uint_24840
+         %42 = OpFunctionCall %void %subgroupMatrixStore_bfd0a4
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %44 = OpLabel
+         %45 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %46 = OpFunctionCall %void %compute_main_inner %45
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixStore/d07581.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixStore/d07581.wgsl.expected.spvasm
index 5c64c6a..93f02a9 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixStore/d07581.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixStore/d07581.wgsl.expected.spvasm
@@ -1,5 +1,86 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability Float16
+               OpCapability UniformAndStorageBuffer16BitAccess
+               OpCapability StorageBuffer16BitAccess
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main" %compute_main_local_invocation_index_Input
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %arg_0 "arg_0"
+               OpName %compute_main_local_invocation_index_Input "compute_main_local_invocation_index_Input"
+               OpName %subgroupMatrixStore_d07581 "subgroupMatrixStore_d07581"
+               OpName %compute_main_inner "compute_main_inner"
+               OpName %tint_local_index "tint_local_index"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_half_uint_64 ArrayStride 2
+               OpDecorate %compute_main_local_invocation_index_Input BuiltIn LocalInvocationIndex
+       %half = OpTypeFloat 16
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_half_uint_64 = OpTypeArray %half %uint_64
+%_ptr_Workgroup__arr_half_uint_64 = OpTypePointer Workgroup %_arr_half_uint_64
+      %arg_0 = OpVariable %_ptr_Workgroup__arr_half_uint_64 Workgroup
+%_ptr_Input_uint = OpTypePointer Input %uint
+%compute_main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_1 = OpConstant %uint 1
+         %14 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_1
+         %13 = OpConstantNull %14
+%_ptr_Workgroup_half = OpTypePointer Workgroup %half
+         %23 = OpTypeFunction %void %uint
+       %bool = OpTypeBool
+%half_0x0p_0 = OpConstant %half 0x0p+0
+     %uint_2 = OpConstant %uint 2
+ %uint_24840 = OpConstant %uint 24840
+%subgroupMatrixStore_d07581 = OpFunction %void None %11
+         %12 = OpLabel
+         %18 = OpAccessChain %_ptr_Workgroup_half %arg_0 %uint_1
+               OpCooperativeMatrixStoreKHR %18 %13 %uint_1 %uint_1 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main_inner = OpFunction %void None %23
+%tint_local_index = OpFunctionParameter %uint
+         %24 = OpLabel
+               OpBranch %25
+         %25 = OpLabel
+               OpBranch %28
+         %28 = OpLabel
+         %30 = OpPhi %uint %tint_local_index %25 %31 %27
+               OpLoopMerge %29 %27 None
+               OpBranch %26
+         %26 = OpLabel
+         %32 = OpUGreaterThanEqual %bool %30 %uint_64
+               OpSelectionMerge %34 None
+               OpBranchConditional %32 %35 %34
+         %35 = OpLabel
+               OpBranch %29
+         %34 = OpLabel
+         %36 = OpAccessChain %_ptr_Workgroup_half %arg_0 %30
+               OpStore %36 %half_0x0p_0 NonPrivatePointer
+               OpBranch %27
+         %27 = OpLabel
+         %31 = OpIAdd %uint %30 %uint_1
+               OpBranch %28
+         %29 = OpLabel
+               OpControlBarrier %uint_2 %uint_2 %uint_24840
+         %41 = OpFunctionCall %void %subgroupMatrixStore_d07581
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %43 = OpLabel
+         %44 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %45 = OpFunctionCall %void %compute_main_inner %44
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixStore/db6dd2.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixStore/db6dd2.wgsl.expected.spvasm
index 5c64c6a..18a5581 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixStore/db6dd2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixStore/db6dd2.wgsl.expected.spvasm
@@ -1,5 +1,55 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 26
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpMemberName %SB_RW 0 "arg_0"
+               OpName %SB_RW "SB_RW"
+               OpMemberName %sb_rw_block 0 "inner"
+               OpName %sb_rw_block "sb_rw_block"
+               OpName %subgroupMatrixStore_db6dd2 "subgroupMatrixStore_db6dd2"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_uint_uint_64 ArrayStride 4
+               OpMemberDecorate %SB_RW 0 Offset 0
+               OpMemberDecorate %sb_rw_block 0 Offset 0
+               OpDecorate %sb_rw_block Block
+               OpDecorate %1 DescriptorSet 0
+               OpDecorate %1 Binding 0
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_uint_uint_64 = OpTypeArray %uint %uint_64
+      %SB_RW = OpTypeStruct %_arr_uint_uint_64
+%sb_rw_block = OpTypeStruct %SB_RW
+%_ptr_StorageBuffer_sb_rw_block = OpTypePointer StorageBuffer %sb_rw_block
+          %1 = OpVariable %_ptr_StorageBuffer_sb_rw_block StorageBuffer
+       %void = OpTypeVoid
+         %10 = OpTypeFunction %void
+%_ptr_StorageBuffer__arr_uint_uint_64 = OpTypePointer StorageBuffer %_arr_uint_uint_64
+     %uint_0 = OpConstant %uint 0
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+         %16 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_0
+         %15 = OpConstantNull %16
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+     %uint_1 = OpConstant %uint 1
+%subgroupMatrixStore_db6dd2 = OpFunction %void None %10
+         %11 = OpLabel
+         %12 = OpAccessChain %_ptr_StorageBuffer__arr_uint_uint_64 %1 %uint_0 %uint_0
+         %19 = OpAccessChain %_ptr_StorageBuffer_uint %12 %uint_1
+               OpCooperativeMatrixStoreKHR %19 %15 %uint_1 %uint_1 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %10
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %subgroupMatrixStore_db6dd2
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixStore/dc92cf.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixStore/dc92cf.wgsl.expected.spvasm
index 5c64c6a..686dcb7 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixStore/dc92cf.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixStore/dc92cf.wgsl.expected.spvasm
@@ -1,5 +1,84 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 47
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main" %compute_main_local_invocation_index_Input
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %arg_0 "arg_0"
+               OpName %compute_main_local_invocation_index_Input "compute_main_local_invocation_index_Input"
+               OpName %subgroupMatrixStore_dc92cf "subgroupMatrixStore_dc92cf"
+               OpName %compute_main_inner "compute_main_inner"
+               OpName %tint_local_index "tint_local_index"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_float_uint_64 ArrayStride 4
+               OpDecorate %compute_main_local_invocation_index_Input BuiltIn LocalInvocationIndex
+      %float = OpTypeFloat 32
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_float_uint_64 = OpTypeArray %float %uint_64
+%_ptr_Workgroup__arr_float_uint_64 = OpTypePointer Workgroup %_arr_float_uint_64
+      %arg_0 = OpVariable %_ptr_Workgroup__arr_float_uint_64 Workgroup
+%_ptr_Input_uint = OpTypePointer Input %uint
+%compute_main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_0 = OpConstant %uint 0
+         %14 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_0
+         %13 = OpConstantNull %14
+%_ptr_Workgroup_float = OpTypePointer Workgroup %float
+     %uint_1 = OpConstant %uint 1
+         %24 = OpTypeFunction %void %uint
+       %bool = OpTypeBool
+    %float_0 = OpConstant %float 0
+     %uint_2 = OpConstant %uint 2
+ %uint_24840 = OpConstant %uint 24840
+%subgroupMatrixStore_dc92cf = OpFunction %void None %11
+         %12 = OpLabel
+         %18 = OpAccessChain %_ptr_Workgroup_float %arg_0 %uint_1
+               OpCooperativeMatrixStoreKHR %18 %13 %uint_1 %uint_1 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main_inner = OpFunction %void None %24
+%tint_local_index = OpFunctionParameter %uint
+         %25 = OpLabel
+               OpBranch %26
+         %26 = OpLabel
+               OpBranch %29
+         %29 = OpLabel
+         %31 = OpPhi %uint %tint_local_index %26 %32 %28
+               OpLoopMerge %30 %28 None
+               OpBranch %27
+         %27 = OpLabel
+         %33 = OpUGreaterThanEqual %bool %31 %uint_64
+               OpSelectionMerge %35 None
+               OpBranchConditional %33 %36 %35
+         %36 = OpLabel
+               OpBranch %30
+         %35 = OpLabel
+         %37 = OpAccessChain %_ptr_Workgroup_float %arg_0 %31
+               OpStore %37 %float_0 NonPrivatePointer
+               OpBranch %28
+         %28 = OpLabel
+         %32 = OpIAdd %uint %31 %uint_1
+               OpBranch %29
+         %30 = OpLabel
+               OpControlBarrier %uint_2 %uint_2 %uint_24840
+         %42 = OpFunctionCall %void %subgroupMatrixStore_dc92cf
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %44 = OpLabel
+         %45 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %46 = OpFunctionCall %void %compute_main_inner %45
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixStore/dce0b7.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixStore/dce0b7.wgsl.expected.spvasm
index 5c64c6a..39a85fc 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixStore/dce0b7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixStore/dce0b7.wgsl.expected.spvasm
@@ -1,5 +1,56 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpMemberName %SB_RW 0 "arg_0"
+               OpName %SB_RW "SB_RW"
+               OpMemberName %sb_rw_block 0 "inner"
+               OpName %sb_rw_block "sb_rw_block"
+               OpName %subgroupMatrixStore_dce0b7 "subgroupMatrixStore_dce0b7"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_uint_uint_64 ArrayStride 4
+               OpMemberDecorate %SB_RW 0 Offset 0
+               OpMemberDecorate %sb_rw_block 0 Offset 0
+               OpDecorate %sb_rw_block Block
+               OpDecorate %1 DescriptorSet 0
+               OpDecorate %1 Binding 0
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_uint_uint_64 = OpTypeArray %uint %uint_64
+      %SB_RW = OpTypeStruct %_arr_uint_uint_64
+%sb_rw_block = OpTypeStruct %SB_RW
+%_ptr_StorageBuffer_sb_rw_block = OpTypePointer StorageBuffer %sb_rw_block
+          %1 = OpVariable %_ptr_StorageBuffer_sb_rw_block StorageBuffer
+       %void = OpTypeVoid
+         %10 = OpTypeFunction %void
+%_ptr_StorageBuffer__arr_uint_uint_64 = OpTypePointer StorageBuffer %_arr_uint_uint_64
+     %uint_0 = OpConstant %uint 0
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_2 = OpConstant %uint 2
+         %16 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_2
+         %15 = OpConstantNull %16
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+     %uint_1 = OpConstant %uint 1
+%subgroupMatrixStore_dce0b7 = OpFunction %void None %10
+         %11 = OpLabel
+         %12 = OpAccessChain %_ptr_StorageBuffer__arr_uint_uint_64 %1 %uint_0 %uint_0
+         %20 = OpAccessChain %_ptr_StorageBuffer_uint %12 %uint_1
+               OpCooperativeMatrixStoreKHR %20 %15 %uint_1 %uint_1 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %10
+         %25 = OpLabel
+         %26 = OpFunctionCall %void %subgroupMatrixStore_dce0b7
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixStore/ee1195.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixStore/ee1195.wgsl.expected.spvasm
index 5c64c6a..408d4b4 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixStore/ee1195.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixStore/ee1195.wgsl.expected.spvasm
@@ -1,5 +1,87 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 47
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability Float16
+               OpCapability UniformAndStorageBuffer16BitAccess
+               OpCapability StorageBuffer16BitAccess
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main" %compute_main_local_invocation_index_Input
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %arg_0 "arg_0"
+               OpName %compute_main_local_invocation_index_Input "compute_main_local_invocation_index_Input"
+               OpName %subgroupMatrixStore_ee1195 "subgroupMatrixStore_ee1195"
+               OpName %compute_main_inner "compute_main_inner"
+               OpName %tint_local_index "tint_local_index"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_half_uint_64 ArrayStride 2
+               OpDecorate %compute_main_local_invocation_index_Input BuiltIn LocalInvocationIndex
+       %half = OpTypeFloat 16
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_half_uint_64 = OpTypeArray %half %uint_64
+%_ptr_Workgroup__arr_half_uint_64 = OpTypePointer Workgroup %_arr_half_uint_64
+      %arg_0 = OpVariable %_ptr_Workgroup__arr_half_uint_64 Workgroup
+%_ptr_Input_uint = OpTypePointer Input %uint
+%compute_main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_0 = OpConstant %uint 0
+         %14 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_0
+         %13 = OpConstantNull %14
+%_ptr_Workgroup_half = OpTypePointer Workgroup %half
+     %uint_1 = OpConstant %uint 1
+         %24 = OpTypeFunction %void %uint
+       %bool = OpTypeBool
+%half_0x0p_0 = OpConstant %half 0x0p+0
+     %uint_2 = OpConstant %uint 2
+ %uint_24840 = OpConstant %uint 24840
+%subgroupMatrixStore_ee1195 = OpFunction %void None %11
+         %12 = OpLabel
+         %18 = OpAccessChain %_ptr_Workgroup_half %arg_0 %uint_1
+               OpCooperativeMatrixStoreKHR %18 %13 %uint_1 %uint_1 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main_inner = OpFunction %void None %24
+%tint_local_index = OpFunctionParameter %uint
+         %25 = OpLabel
+               OpBranch %26
+         %26 = OpLabel
+               OpBranch %29
+         %29 = OpLabel
+         %31 = OpPhi %uint %tint_local_index %26 %32 %28
+               OpLoopMerge %30 %28 None
+               OpBranch %27
+         %27 = OpLabel
+         %33 = OpUGreaterThanEqual %bool %31 %uint_64
+               OpSelectionMerge %35 None
+               OpBranchConditional %33 %36 %35
+         %36 = OpLabel
+               OpBranch %30
+         %35 = OpLabel
+         %37 = OpAccessChain %_ptr_Workgroup_half %arg_0 %31
+               OpStore %37 %half_0x0p_0 NonPrivatePointer
+               OpBranch %28
+         %28 = OpLabel
+         %32 = OpIAdd %uint %31 %uint_1
+               OpBranch %29
+         %30 = OpLabel
+               OpControlBarrier %uint_2 %uint_2 %uint_24840
+         %42 = OpFunctionCall %void %subgroupMatrixStore_ee1195
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %44 = OpLabel
+         %45 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %46 = OpFunctionCall %void %compute_main_inner %45
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixStore/f04d67.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixStore/f04d67.wgsl.expected.spvasm
index 5c64c6a..0185986 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixStore/f04d67.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixStore/f04d67.wgsl.expected.spvasm
@@ -1,5 +1,83 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main" %compute_main_local_invocation_index_Input
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %arg_0 "arg_0"
+               OpName %compute_main_local_invocation_index_Input "compute_main_local_invocation_index_Input"
+               OpName %subgroupMatrixStore_f04d67 "subgroupMatrixStore_f04d67"
+               OpName %compute_main_inner "compute_main_inner"
+               OpName %tint_local_index "tint_local_index"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_int_uint_64 ArrayStride 4
+               OpDecorate %compute_main_local_invocation_index_Input BuiltIn LocalInvocationIndex
+        %int = OpTypeInt 32 1
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_int_uint_64 = OpTypeArray %int %uint_64
+%_ptr_Workgroup__arr_int_uint_64 = OpTypePointer Workgroup %_arr_int_uint_64
+      %arg_0 = OpVariable %_ptr_Workgroup__arr_int_uint_64 Workgroup
+%_ptr_Input_uint = OpTypePointer Input %uint
+%compute_main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_2 = OpConstant %uint 2
+         %14 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_2
+         %13 = OpConstantNull %14
+%_ptr_Workgroup_int = OpTypePointer Workgroup %int
+     %uint_1 = OpConstant %uint 1
+         %24 = OpTypeFunction %void %uint
+       %bool = OpTypeBool
+      %int_0 = OpConstant %int 0
+ %uint_24840 = OpConstant %uint 24840
+%subgroupMatrixStore_f04d67 = OpFunction %void None %11
+         %12 = OpLabel
+         %18 = OpAccessChain %_ptr_Workgroup_int %arg_0 %uint_1
+               OpCooperativeMatrixStoreKHR %18 %13 %uint_1 %uint_1 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main_inner = OpFunction %void None %24
+%tint_local_index = OpFunctionParameter %uint
+         %25 = OpLabel
+               OpBranch %26
+         %26 = OpLabel
+               OpBranch %29
+         %29 = OpLabel
+         %31 = OpPhi %uint %tint_local_index %26 %32 %28
+               OpLoopMerge %30 %28 None
+               OpBranch %27
+         %27 = OpLabel
+         %33 = OpUGreaterThanEqual %bool %31 %uint_64
+               OpSelectionMerge %35 None
+               OpBranchConditional %33 %36 %35
+         %36 = OpLabel
+               OpBranch %30
+         %35 = OpLabel
+         %37 = OpAccessChain %_ptr_Workgroup_int %arg_0 %31
+               OpStore %37 %int_0 NonPrivatePointer
+               OpBranch %28
+         %28 = OpLabel
+         %32 = OpIAdd %uint %31 %uint_1
+               OpBranch %29
+         %30 = OpLabel
+               OpControlBarrier %uint_2 %uint_2 %uint_24840
+         %41 = OpFunctionCall %void %subgroupMatrixStore_f04d67
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %43 = OpLabel
+         %44 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %45 = OpFunctionCall %void %compute_main_inner %44
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixStore/0522d1.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixStore/0522d1.wgsl.expected.spvasm
index 5c64c6a..e11f2a0 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixStore/0522d1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixStore/0522d1.wgsl.expected.spvasm
@@ -1,5 +1,73 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 35
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability Float16
+               OpCapability UniformAndStorageBuffer16BitAccess
+               OpCapability StorageBuffer16BitAccess
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpMemberName %SB_RW 0 "arg_0"
+               OpName %SB_RW "SB_RW"
+               OpMemberName %sb_rw_block 0 "inner"
+               OpName %sb_rw_block "sb_rw_block"
+               OpName %subgroupMatrixStore_0522d1 "subgroupMatrixStore_0522d1"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_4 "arg_4"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_half_uint_64 ArrayStride 2
+               OpMemberDecorate %SB_RW 0 Offset 0
+               OpMemberDecorate %sb_rw_block 0 Offset 0
+               OpDecorate %sb_rw_block Block
+               OpDecorate %1 DescriptorSet 0
+               OpDecorate %1 Binding 0
+       %half = OpTypeFloat 16
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_half_uint_64 = OpTypeArray %half %uint_64
+      %SB_RW = OpTypeStruct %_arr_half_uint_64
+%sb_rw_block = OpTypeStruct %SB_RW
+%_ptr_StorageBuffer_sb_rw_block = OpTypePointer StorageBuffer %sb_rw_block
+          %1 = OpVariable %_ptr_StorageBuffer_sb_rw_block StorageBuffer
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+     %uint_1 = OpConstant %uint 1
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_0 = OpConstant %uint 0
+         %17 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpConstantNull %17
+%_ptr_Function_17 = OpTypePointer Function %17
+%_ptr_StorageBuffer__arr_half_uint_64 = OpTypePointer StorageBuffer %_arr_half_uint_64
+%_ptr_StorageBuffer_half = OpTypePointer StorageBuffer %half
+%subgroupMatrixStore_0522d1 = OpFunction %void None %11
+         %12 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function
+      %arg_2 = OpVariable %_ptr_Function_17 Function
+      %arg_4 = OpVariable %_ptr_Function_uint Function
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %16
+               OpStore %arg_4 %uint_1
+         %24 = OpAccessChain %_ptr_StorageBuffer__arr_half_uint_64 %1 %uint_0 %uint_0
+         %26 = OpLoad %uint %arg_1 None
+         %27 = OpLoad %17 %arg_2 None
+         %28 = OpLoad %uint %arg_4 None
+         %29 = OpAccessChain %_ptr_StorageBuffer_half %24 %26
+               OpCooperativeMatrixStoreKHR %29 %27 %uint_1 %28 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %subgroupMatrixStore_0522d1
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixStore/127fb7.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixStore/127fb7.wgsl.expected.spvasm
index 5c64c6a..5c4e6c7 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixStore/127fb7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixStore/127fb7.wgsl.expected.spvasm
@@ -1,5 +1,100 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability Float16
+               OpCapability UniformAndStorageBuffer16BitAccess
+               OpCapability StorageBuffer16BitAccess
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main" %compute_main_local_invocation_index_Input
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %arg_0 "arg_0"
+               OpName %compute_main_local_invocation_index_Input "compute_main_local_invocation_index_Input"
+               OpName %subgroupMatrixStore_127fb7 "subgroupMatrixStore_127fb7"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_4 "arg_4"
+               OpName %compute_main_inner "compute_main_inner"
+               OpName %tint_local_index "tint_local_index"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_half_uint_64 ArrayStride 2
+               OpDecorate %compute_main_local_invocation_index_Input BuiltIn LocalInvocationIndex
+       %half = OpTypeFloat 16
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_half_uint_64 = OpTypeArray %half %uint_64
+%_ptr_Workgroup__arr_half_uint_64 = OpTypePointer Workgroup %_arr_half_uint_64
+      %arg_0 = OpVariable %_ptr_Workgroup__arr_half_uint_64 Workgroup
+%_ptr_Input_uint = OpTypePointer Input %uint
+%compute_main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+     %uint_1 = OpConstant %uint 1
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_2 = OpConstant %uint 2
+         %17 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_2
+         %16 = OpConstantNull %17
+%_ptr_Function_17 = OpTypePointer Function %17
+%_ptr_Workgroup_half = OpTypePointer Workgroup %half
+         %32 = OpTypeFunction %void %uint
+       %bool = OpTypeBool
+%half_0x0p_0 = OpConstant %half 0x0p+0
+ %uint_24840 = OpConstant %uint 24840
+%subgroupMatrixStore_127fb7 = OpFunction %void None %11
+         %12 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function
+      %arg_2 = OpVariable %_ptr_Function_17 Function
+      %arg_4 = OpVariable %_ptr_Function_uint Function
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %16
+               OpStore %arg_4 %uint_1
+         %24 = OpLoad %uint %arg_1 None
+         %25 = OpLoad %17 %arg_2 None
+         %26 = OpLoad %uint %arg_4 None
+         %27 = OpAccessChain %_ptr_Workgroup_half %arg_0 %24
+               OpCooperativeMatrixStoreKHR %27 %25 %uint_1 %26 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main_inner = OpFunction %void None %32
+%tint_local_index = OpFunctionParameter %uint
+         %33 = OpLabel
+               OpBranch %34
+         %34 = OpLabel
+               OpBranch %37
+         %37 = OpLabel
+         %39 = OpPhi %uint %tint_local_index %34 %40 %36
+               OpLoopMerge %38 %36 None
+               OpBranch %35
+         %35 = OpLabel
+         %41 = OpUGreaterThanEqual %bool %39 %uint_64
+               OpSelectionMerge %43 None
+               OpBranchConditional %41 %44 %43
+         %44 = OpLabel
+               OpBranch %38
+         %43 = OpLabel
+         %45 = OpAccessChain %_ptr_Workgroup_half %arg_0 %39
+               OpStore %45 %half_0x0p_0 NonPrivatePointer
+               OpBranch %36
+         %36 = OpLabel
+         %40 = OpIAdd %uint %39 %uint_1
+               OpBranch %37
+         %38 = OpLabel
+               OpControlBarrier %uint_2 %uint_2 %uint_24840
+         %49 = OpFunctionCall %void %subgroupMatrixStore_127fb7
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %51 = OpLabel
+         %52 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %53 = OpFunctionCall %void %compute_main_inner %52
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixStore/1466ba.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixStore/1466ba.wgsl.expected.spvasm
index 5c64c6a..3c14426 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixStore/1466ba.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixStore/1466ba.wgsl.expected.spvasm
@@ -1,5 +1,74 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 36
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability Float16
+               OpCapability UniformAndStorageBuffer16BitAccess
+               OpCapability StorageBuffer16BitAccess
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpMemberName %SB_RW 0 "arg_0"
+               OpName %SB_RW "SB_RW"
+               OpMemberName %sb_rw_block 0 "inner"
+               OpName %sb_rw_block "sb_rw_block"
+               OpName %subgroupMatrixStore_1466ba "subgroupMatrixStore_1466ba"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_4 "arg_4"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_half_uint_64 ArrayStride 2
+               OpMemberDecorate %SB_RW 0 Offset 0
+               OpMemberDecorate %sb_rw_block 0 Offset 0
+               OpDecorate %sb_rw_block Block
+               OpDecorate %1 DescriptorSet 0
+               OpDecorate %1 Binding 0
+       %half = OpTypeFloat 16
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_half_uint_64 = OpTypeArray %half %uint_64
+      %SB_RW = OpTypeStruct %_arr_half_uint_64
+%sb_rw_block = OpTypeStruct %SB_RW
+%_ptr_StorageBuffer_sb_rw_block = OpTypePointer StorageBuffer %sb_rw_block
+          %1 = OpVariable %_ptr_StorageBuffer_sb_rw_block StorageBuffer
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+     %uint_1 = OpConstant %uint 1
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_2 = OpConstant %uint 2
+         %17 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_2
+         %16 = OpConstantNull %17
+%_ptr_Function_17 = OpTypePointer Function %17
+%_ptr_StorageBuffer__arr_half_uint_64 = OpTypePointer StorageBuffer %_arr_half_uint_64
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_half = OpTypePointer StorageBuffer %half
+%subgroupMatrixStore_1466ba = OpFunction %void None %11
+         %12 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function
+      %arg_2 = OpVariable %_ptr_Function_17 Function
+      %arg_4 = OpVariable %_ptr_Function_uint Function
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %16
+               OpStore %arg_4 %uint_1
+         %24 = OpAccessChain %_ptr_StorageBuffer__arr_half_uint_64 %1 %uint_0 %uint_0
+         %27 = OpLoad %uint %arg_1 None
+         %28 = OpLoad %17 %arg_2 None
+         %29 = OpLoad %uint %arg_4 None
+         %30 = OpAccessChain %_ptr_StorageBuffer_half %24 %27
+               OpCooperativeMatrixStoreKHR %30 %28 %uint_1 %29 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %subgroupMatrixStore_1466ba
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixStore/184580.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixStore/184580.wgsl.expected.spvasm
index 5c64c6a..570c0e2 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixStore/184580.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixStore/184580.wgsl.expected.spvasm
@@ -1,5 +1,70 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 35
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpMemberName %SB_RW 0 "arg_0"
+               OpName %SB_RW "SB_RW"
+               OpMemberName %sb_rw_block 0 "inner"
+               OpName %sb_rw_block "sb_rw_block"
+               OpName %subgroupMatrixStore_184580 "subgroupMatrixStore_184580"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_4 "arg_4"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_int_uint_64 ArrayStride 4
+               OpMemberDecorate %SB_RW 0 Offset 0
+               OpMemberDecorate %sb_rw_block 0 Offset 0
+               OpDecorate %sb_rw_block Block
+               OpDecorate %1 DescriptorSet 0
+               OpDecorate %1 Binding 0
+        %int = OpTypeInt 32 1
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_int_uint_64 = OpTypeArray %int %uint_64
+      %SB_RW = OpTypeStruct %_arr_int_uint_64
+%sb_rw_block = OpTypeStruct %SB_RW
+%_ptr_StorageBuffer_sb_rw_block = OpTypePointer StorageBuffer %sb_rw_block
+          %1 = OpVariable %_ptr_StorageBuffer_sb_rw_block StorageBuffer
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+     %uint_1 = OpConstant %uint 1
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+         %17 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_1
+         %16 = OpConstantNull %17
+%_ptr_Function_17 = OpTypePointer Function %17
+%_ptr_StorageBuffer__arr_int_uint_64 = OpTypePointer StorageBuffer %_arr_int_uint_64
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
+%subgroupMatrixStore_184580 = OpFunction %void None %11
+         %12 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function
+      %arg_2 = OpVariable %_ptr_Function_17 Function
+      %arg_4 = OpVariable %_ptr_Function_uint Function
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %16
+               OpStore %arg_4 %uint_1
+         %23 = OpAccessChain %_ptr_StorageBuffer__arr_int_uint_64 %1 %uint_0 %uint_0
+         %26 = OpLoad %uint %arg_1 None
+         %27 = OpLoad %17 %arg_2 None
+         %28 = OpLoad %uint %arg_4 None
+         %29 = OpAccessChain %_ptr_StorageBuffer_int %23 %26
+               OpCooperativeMatrixStoreKHR %29 %27 %uint_1 %28 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %subgroupMatrixStore_184580
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixStore/197435.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixStore/197435.wgsl.expected.spvasm
index 5c64c6a..1effe2b 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixStore/197435.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixStore/197435.wgsl.expected.spvasm
@@ -1,5 +1,70 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 35
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpMemberName %SB_RW 0 "arg_0"
+               OpName %SB_RW "SB_RW"
+               OpMemberName %sb_rw_block 0 "inner"
+               OpName %sb_rw_block "sb_rw_block"
+               OpName %subgroupMatrixStore_197435 "subgroupMatrixStore_197435"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_4 "arg_4"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_float_uint_64 ArrayStride 4
+               OpMemberDecorate %SB_RW 0 Offset 0
+               OpMemberDecorate %sb_rw_block 0 Offset 0
+               OpDecorate %sb_rw_block Block
+               OpDecorate %1 DescriptorSet 0
+               OpDecorate %1 Binding 0
+      %float = OpTypeFloat 32
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_float_uint_64 = OpTypeArray %float %uint_64
+      %SB_RW = OpTypeStruct %_arr_float_uint_64
+%sb_rw_block = OpTypeStruct %SB_RW
+%_ptr_StorageBuffer_sb_rw_block = OpTypePointer StorageBuffer %sb_rw_block
+          %1 = OpVariable %_ptr_StorageBuffer_sb_rw_block StorageBuffer
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+     %uint_1 = OpConstant %uint 1
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_0 = OpConstant %uint 0
+         %17 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpConstantNull %17
+%_ptr_Function_17 = OpTypePointer Function %17
+%_ptr_StorageBuffer__arr_float_uint_64 = OpTypePointer StorageBuffer %_arr_float_uint_64
+%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
+%subgroupMatrixStore_197435 = OpFunction %void None %11
+         %12 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function
+      %arg_2 = OpVariable %_ptr_Function_17 Function
+      %arg_4 = OpVariable %_ptr_Function_uint Function
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %16
+               OpStore %arg_4 %uint_1
+         %24 = OpAccessChain %_ptr_StorageBuffer__arr_float_uint_64 %1 %uint_0 %uint_0
+         %26 = OpLoad %uint %arg_1 None
+         %27 = OpLoad %17 %arg_2 None
+         %28 = OpLoad %uint %arg_4 None
+         %29 = OpAccessChain %_ptr_StorageBuffer_float %24 %26
+               OpCooperativeMatrixStoreKHR %29 %27 %uint_1 %28 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %subgroupMatrixStore_197435
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixStore/2de0b1.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixStore/2de0b1.wgsl.expected.spvasm
index 5c64c6a..d29c443 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixStore/2de0b1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixStore/2de0b1.wgsl.expected.spvasm
@@ -1,5 +1,96 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 53
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main" %compute_main_local_invocation_index_Input
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %arg_0 "arg_0"
+               OpName %compute_main_local_invocation_index_Input "compute_main_local_invocation_index_Input"
+               OpName %subgroupMatrixStore_2de0b1 "subgroupMatrixStore_2de0b1"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_4 "arg_4"
+               OpName %compute_main_inner "compute_main_inner"
+               OpName %tint_local_index "tint_local_index"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_uint_uint_64 ArrayStride 4
+               OpDecorate %compute_main_local_invocation_index_Input BuiltIn LocalInvocationIndex
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_uint_uint_64 = OpTypeArray %uint %uint_64
+%_ptr_Workgroup__arr_uint_uint_64 = OpTypePointer Workgroup %_arr_uint_uint_64
+      %arg_0 = OpVariable %_ptr_Workgroup__arr_uint_uint_64 Workgroup
+%_ptr_Input_uint = OpTypePointer Input %uint
+%compute_main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
+       %void = OpTypeVoid
+         %10 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+     %uint_1 = OpConstant %uint 1
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+         %16 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_1
+         %15 = OpConstantNull %16
+%_ptr_Function_16 = OpTypePointer Function %16
+%_ptr_Workgroup_uint = OpTypePointer Workgroup %uint
+         %30 = OpTypeFunction %void %uint
+       %bool = OpTypeBool
+     %uint_0 = OpConstant %uint 0
+     %uint_2 = OpConstant %uint 2
+ %uint_24840 = OpConstant %uint 24840
+%subgroupMatrixStore_2de0b1 = OpFunction %void None %10
+         %11 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function
+      %arg_2 = OpVariable %_ptr_Function_16 Function
+      %arg_4 = OpVariable %_ptr_Function_uint Function
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %15
+               OpStore %arg_4 %uint_1
+         %22 = OpLoad %uint %arg_1 None
+         %23 = OpLoad %16 %arg_2 None
+         %24 = OpLoad %uint %arg_4 None
+         %25 = OpAccessChain %_ptr_Workgroup_uint %arg_0 %22
+               OpCooperativeMatrixStoreKHR %25 %23 %uint_1 %24 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main_inner = OpFunction %void None %30
+%tint_local_index = OpFunctionParameter %uint
+         %31 = OpLabel
+               OpBranch %32
+         %32 = OpLabel
+               OpBranch %35
+         %35 = OpLabel
+         %37 = OpPhi %uint %tint_local_index %32 %38 %34
+               OpLoopMerge %36 %34 None
+               OpBranch %33
+         %33 = OpLabel
+         %39 = OpUGreaterThanEqual %bool %37 %uint_64
+               OpSelectionMerge %41 None
+               OpBranchConditional %39 %42 %41
+         %42 = OpLabel
+               OpBranch %36
+         %41 = OpLabel
+         %43 = OpAccessChain %_ptr_Workgroup_uint %arg_0 %37
+               OpStore %43 %uint_0 NonPrivatePointer
+               OpBranch %34
+         %34 = OpLabel
+         %38 = OpIAdd %uint %37 %uint_1
+               OpBranch %35
+         %36 = OpLabel
+               OpControlBarrier %uint_2 %uint_2 %uint_24840
+         %48 = OpFunctionCall %void %subgroupMatrixStore_2de0b1
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %10
+         %50 = OpLabel
+         %51 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %52 = OpFunctionCall %void %compute_main_inner %51
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixStore/3fcc0f.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixStore/3fcc0f.wgsl.expected.spvasm
index 5c64c6a..d1b978c 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixStore/3fcc0f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixStore/3fcc0f.wgsl.expected.spvasm
@@ -1,5 +1,70 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 35
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpMemberName %SB_RW 0 "arg_0"
+               OpName %SB_RW "SB_RW"
+               OpMemberName %sb_rw_block 0 "inner"
+               OpName %sb_rw_block "sb_rw_block"
+               OpName %subgroupMatrixStore_3fcc0f "subgroupMatrixStore_3fcc0f"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_4 "arg_4"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_float_uint_64 ArrayStride 4
+               OpMemberDecorate %SB_RW 0 Offset 0
+               OpMemberDecorate %sb_rw_block 0 Offset 0
+               OpDecorate %sb_rw_block Block
+               OpDecorate %1 DescriptorSet 0
+               OpDecorate %1 Binding 0
+      %float = OpTypeFloat 32
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_float_uint_64 = OpTypeArray %float %uint_64
+      %SB_RW = OpTypeStruct %_arr_float_uint_64
+%sb_rw_block = OpTypeStruct %SB_RW
+%_ptr_StorageBuffer_sb_rw_block = OpTypePointer StorageBuffer %sb_rw_block
+          %1 = OpVariable %_ptr_StorageBuffer_sb_rw_block StorageBuffer
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+     %uint_1 = OpConstant %uint 1
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+         %17 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_1
+         %16 = OpConstantNull %17
+%_ptr_Function_17 = OpTypePointer Function %17
+%_ptr_StorageBuffer__arr_float_uint_64 = OpTypePointer StorageBuffer %_arr_float_uint_64
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
+%subgroupMatrixStore_3fcc0f = OpFunction %void None %11
+         %12 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function
+      %arg_2 = OpVariable %_ptr_Function_17 Function
+      %arg_4 = OpVariable %_ptr_Function_uint Function
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %16
+               OpStore %arg_4 %uint_1
+         %23 = OpAccessChain %_ptr_StorageBuffer__arr_float_uint_64 %1 %uint_0 %uint_0
+         %26 = OpLoad %uint %arg_1 None
+         %27 = OpLoad %17 %arg_2 None
+         %28 = OpLoad %uint %arg_4 None
+         %29 = OpAccessChain %_ptr_StorageBuffer_float %23 %26
+               OpCooperativeMatrixStoreKHR %29 %27 %uint_1 %28 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %subgroupMatrixStore_3fcc0f
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixStore/49b25b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixStore/49b25b.wgsl.expected.spvasm
index 5c64c6a..9fdf5e5 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixStore/49b25b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixStore/49b25b.wgsl.expected.spvasm
@@ -1,5 +1,97 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main" %compute_main_local_invocation_index_Input
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %arg_0 "arg_0"
+               OpName %compute_main_local_invocation_index_Input "compute_main_local_invocation_index_Input"
+               OpName %subgroupMatrixStore_49b25b "subgroupMatrixStore_49b25b"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_4 "arg_4"
+               OpName %compute_main_inner "compute_main_inner"
+               OpName %tint_local_index "tint_local_index"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_float_uint_64 ArrayStride 4
+               OpDecorate %compute_main_local_invocation_index_Input BuiltIn LocalInvocationIndex
+      %float = OpTypeFloat 32
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_float_uint_64 = OpTypeArray %float %uint_64
+%_ptr_Workgroup__arr_float_uint_64 = OpTypePointer Workgroup %_arr_float_uint_64
+      %arg_0 = OpVariable %_ptr_Workgroup__arr_float_uint_64 Workgroup
+%_ptr_Input_uint = OpTypePointer Input %uint
+%compute_main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+     %uint_1 = OpConstant %uint 1
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+         %17 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_1
+         %16 = OpConstantNull %17
+%_ptr_Function_17 = OpTypePointer Function %17
+%_ptr_Workgroup_float = OpTypePointer Workgroup %float
+         %31 = OpTypeFunction %void %uint
+       %bool = OpTypeBool
+    %float_0 = OpConstant %float 0
+     %uint_2 = OpConstant %uint 2
+ %uint_24840 = OpConstant %uint 24840
+%subgroupMatrixStore_49b25b = OpFunction %void None %11
+         %12 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function
+      %arg_2 = OpVariable %_ptr_Function_17 Function
+      %arg_4 = OpVariable %_ptr_Function_uint Function
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %16
+               OpStore %arg_4 %uint_1
+         %23 = OpLoad %uint %arg_1 None
+         %24 = OpLoad %17 %arg_2 None
+         %25 = OpLoad %uint %arg_4 None
+         %26 = OpAccessChain %_ptr_Workgroup_float %arg_0 %23
+               OpCooperativeMatrixStoreKHR %26 %24 %uint_1 %25 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main_inner = OpFunction %void None %31
+%tint_local_index = OpFunctionParameter %uint
+         %32 = OpLabel
+               OpBranch %33
+         %33 = OpLabel
+               OpBranch %36
+         %36 = OpLabel
+         %38 = OpPhi %uint %tint_local_index %33 %39 %35
+               OpLoopMerge %37 %35 None
+               OpBranch %34
+         %34 = OpLabel
+         %40 = OpUGreaterThanEqual %bool %38 %uint_64
+               OpSelectionMerge %42 None
+               OpBranchConditional %40 %43 %42
+         %43 = OpLabel
+               OpBranch %37
+         %42 = OpLabel
+         %44 = OpAccessChain %_ptr_Workgroup_float %arg_0 %38
+               OpStore %44 %float_0 NonPrivatePointer
+               OpBranch %35
+         %35 = OpLabel
+         %39 = OpIAdd %uint %38 %uint_1
+               OpBranch %36
+         %37 = OpLabel
+               OpControlBarrier %uint_2 %uint_2 %uint_24840
+         %49 = OpFunctionCall %void %subgroupMatrixStore_49b25b
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %51 = OpLabel
+         %52 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %53 = OpFunctionCall %void %compute_main_inner %52
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixStore/5671e2.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixStore/5671e2.wgsl.expected.spvasm
index 5c64c6a..34bb952 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixStore/5671e2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixStore/5671e2.wgsl.expected.spvasm
@@ -1,5 +1,97 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main" %compute_main_local_invocation_index_Input
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %arg_0 "arg_0"
+               OpName %compute_main_local_invocation_index_Input "compute_main_local_invocation_index_Input"
+               OpName %subgroupMatrixStore_5671e2 "subgroupMatrixStore_5671e2"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_4 "arg_4"
+               OpName %compute_main_inner "compute_main_inner"
+               OpName %tint_local_index "tint_local_index"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_int_uint_64 ArrayStride 4
+               OpDecorate %compute_main_local_invocation_index_Input BuiltIn LocalInvocationIndex
+        %int = OpTypeInt 32 1
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_int_uint_64 = OpTypeArray %int %uint_64
+%_ptr_Workgroup__arr_int_uint_64 = OpTypePointer Workgroup %_arr_int_uint_64
+      %arg_0 = OpVariable %_ptr_Workgroup__arr_int_uint_64 Workgroup
+%_ptr_Input_uint = OpTypePointer Input %uint
+%compute_main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+     %uint_1 = OpConstant %uint 1
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+         %17 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_1
+         %16 = OpConstantNull %17
+%_ptr_Function_17 = OpTypePointer Function %17
+%_ptr_Workgroup_int = OpTypePointer Workgroup %int
+         %31 = OpTypeFunction %void %uint
+       %bool = OpTypeBool
+      %int_0 = OpConstant %int 0
+     %uint_2 = OpConstant %uint 2
+ %uint_24840 = OpConstant %uint 24840
+%subgroupMatrixStore_5671e2 = OpFunction %void None %11
+         %12 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function
+      %arg_2 = OpVariable %_ptr_Function_17 Function
+      %arg_4 = OpVariable %_ptr_Function_uint Function
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %16
+               OpStore %arg_4 %uint_1
+         %23 = OpLoad %uint %arg_1 None
+         %24 = OpLoad %17 %arg_2 None
+         %25 = OpLoad %uint %arg_4 None
+         %26 = OpAccessChain %_ptr_Workgroup_int %arg_0 %23
+               OpCooperativeMatrixStoreKHR %26 %24 %uint_1 %25 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main_inner = OpFunction %void None %31
+%tint_local_index = OpFunctionParameter %uint
+         %32 = OpLabel
+               OpBranch %33
+         %33 = OpLabel
+               OpBranch %36
+         %36 = OpLabel
+         %38 = OpPhi %uint %tint_local_index %33 %39 %35
+               OpLoopMerge %37 %35 None
+               OpBranch %34
+         %34 = OpLabel
+         %40 = OpUGreaterThanEqual %bool %38 %uint_64
+               OpSelectionMerge %42 None
+               OpBranchConditional %40 %43 %42
+         %43 = OpLabel
+               OpBranch %37
+         %42 = OpLabel
+         %44 = OpAccessChain %_ptr_Workgroup_int %arg_0 %38
+               OpStore %44 %int_0 NonPrivatePointer
+               OpBranch %35
+         %35 = OpLabel
+         %39 = OpIAdd %uint %38 %uint_1
+               OpBranch %36
+         %37 = OpLabel
+               OpControlBarrier %uint_2 %uint_2 %uint_24840
+         %49 = OpFunctionCall %void %subgroupMatrixStore_5671e2
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %51 = OpLabel
+         %52 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %53 = OpFunctionCall %void %compute_main_inner %52
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixStore/57de92.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixStore/57de92.wgsl.expected.spvasm
index 5c64c6a..1151558 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixStore/57de92.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixStore/57de92.wgsl.expected.spvasm
@@ -1,5 +1,69 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 34
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpMemberName %SB_RW 0 "arg_0"
+               OpName %SB_RW "SB_RW"
+               OpMemberName %sb_rw_block 0 "inner"
+               OpName %sb_rw_block "sb_rw_block"
+               OpName %subgroupMatrixStore_57de92 "subgroupMatrixStore_57de92"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_4 "arg_4"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_uint_uint_64 ArrayStride 4
+               OpMemberDecorate %SB_RW 0 Offset 0
+               OpMemberDecorate %sb_rw_block 0 Offset 0
+               OpDecorate %sb_rw_block Block
+               OpDecorate %1 DescriptorSet 0
+               OpDecorate %1 Binding 0
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_uint_uint_64 = OpTypeArray %uint %uint_64
+      %SB_RW = OpTypeStruct %_arr_uint_uint_64
+%sb_rw_block = OpTypeStruct %SB_RW
+%_ptr_StorageBuffer_sb_rw_block = OpTypePointer StorageBuffer %sb_rw_block
+          %1 = OpVariable %_ptr_StorageBuffer_sb_rw_block StorageBuffer
+       %void = OpTypeVoid
+         %10 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+     %uint_1 = OpConstant %uint 1
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+         %16 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_1
+         %15 = OpConstantNull %16
+%_ptr_Function_16 = OpTypePointer Function %16
+%_ptr_StorageBuffer__arr_uint_uint_64 = OpTypePointer StorageBuffer %_arr_uint_uint_64
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+%subgroupMatrixStore_57de92 = OpFunction %void None %10
+         %11 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function
+      %arg_2 = OpVariable %_ptr_Function_16 Function
+      %arg_4 = OpVariable %_ptr_Function_uint Function
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %15
+               OpStore %arg_4 %uint_1
+         %22 = OpAccessChain %_ptr_StorageBuffer__arr_uint_uint_64 %1 %uint_0 %uint_0
+         %25 = OpLoad %uint %arg_1 None
+         %26 = OpLoad %16 %arg_2 None
+         %27 = OpLoad %uint %arg_4 None
+         %28 = OpAccessChain %_ptr_StorageBuffer_uint %22 %25
+               OpCooperativeMatrixStoreKHR %28 %26 %uint_1 %27 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %10
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %subgroupMatrixStore_57de92
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixStore/5915fe.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixStore/5915fe.wgsl.expected.spvasm
index 5c64c6a..ed0f769 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixStore/5915fe.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixStore/5915fe.wgsl.expected.spvasm
@@ -1,5 +1,96 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 53
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main" %compute_main_local_invocation_index_Input
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %arg_0 "arg_0"
+               OpName %compute_main_local_invocation_index_Input "compute_main_local_invocation_index_Input"
+               OpName %subgroupMatrixStore_5915fe "subgroupMatrixStore_5915fe"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_4 "arg_4"
+               OpName %compute_main_inner "compute_main_inner"
+               OpName %tint_local_index "tint_local_index"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_uint_uint_64 ArrayStride 4
+               OpDecorate %compute_main_local_invocation_index_Input BuiltIn LocalInvocationIndex
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_uint_uint_64 = OpTypeArray %uint %uint_64
+%_ptr_Workgroup__arr_uint_uint_64 = OpTypePointer Workgroup %_arr_uint_uint_64
+      %arg_0 = OpVariable %_ptr_Workgroup__arr_uint_uint_64 Workgroup
+%_ptr_Input_uint = OpTypePointer Input %uint
+%compute_main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
+       %void = OpTypeVoid
+         %10 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+     %uint_1 = OpConstant %uint 1
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_0 = OpConstant %uint 0
+         %16 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_0
+         %15 = OpConstantNull %16
+%_ptr_Function_16 = OpTypePointer Function %16
+%_ptr_Workgroup_uint = OpTypePointer Workgroup %uint
+         %31 = OpTypeFunction %void %uint
+       %bool = OpTypeBool
+     %uint_2 = OpConstant %uint 2
+ %uint_24840 = OpConstant %uint 24840
+%subgroupMatrixStore_5915fe = OpFunction %void None %10
+         %11 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function
+      %arg_2 = OpVariable %_ptr_Function_16 Function
+      %arg_4 = OpVariable %_ptr_Function_uint Function
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %15
+               OpStore %arg_4 %uint_1
+         %23 = OpLoad %uint %arg_1 None
+         %24 = OpLoad %16 %arg_2 None
+         %25 = OpLoad %uint %arg_4 None
+         %26 = OpAccessChain %_ptr_Workgroup_uint %arg_0 %23
+               OpCooperativeMatrixStoreKHR %26 %24 %uint_1 %25 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main_inner = OpFunction %void None %31
+%tint_local_index = OpFunctionParameter %uint
+         %32 = OpLabel
+               OpBranch %33
+         %33 = OpLabel
+               OpBranch %36
+         %36 = OpLabel
+         %38 = OpPhi %uint %tint_local_index %33 %39 %35
+               OpLoopMerge %37 %35 None
+               OpBranch %34
+         %34 = OpLabel
+         %40 = OpUGreaterThanEqual %bool %38 %uint_64
+               OpSelectionMerge %42 None
+               OpBranchConditional %40 %43 %42
+         %43 = OpLabel
+               OpBranch %37
+         %42 = OpLabel
+         %44 = OpAccessChain %_ptr_Workgroup_uint %arg_0 %38
+               OpStore %44 %uint_0 NonPrivatePointer
+               OpBranch %35
+         %35 = OpLabel
+         %39 = OpIAdd %uint %38 %uint_1
+               OpBranch %36
+         %37 = OpLabel
+               OpControlBarrier %uint_2 %uint_2 %uint_24840
+         %48 = OpFunctionCall %void %subgroupMatrixStore_5915fe
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %10
+         %50 = OpLabel
+         %51 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %52 = OpFunctionCall %void %compute_main_inner %51
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixStore/8a2280.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixStore/8a2280.wgsl.expected.spvasm
index 5c64c6a..3a309cd 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixStore/8a2280.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixStore/8a2280.wgsl.expected.spvasm
@@ -1,5 +1,71 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 36
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpMemberName %SB_RW 0 "arg_0"
+               OpName %SB_RW "SB_RW"
+               OpMemberName %sb_rw_block 0 "inner"
+               OpName %sb_rw_block "sb_rw_block"
+               OpName %subgroupMatrixStore_8a2280 "subgroupMatrixStore_8a2280"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_4 "arg_4"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_float_uint_64 ArrayStride 4
+               OpMemberDecorate %SB_RW 0 Offset 0
+               OpMemberDecorate %sb_rw_block 0 Offset 0
+               OpDecorate %sb_rw_block Block
+               OpDecorate %1 DescriptorSet 0
+               OpDecorate %1 Binding 0
+      %float = OpTypeFloat 32
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_float_uint_64 = OpTypeArray %float %uint_64
+      %SB_RW = OpTypeStruct %_arr_float_uint_64
+%sb_rw_block = OpTypeStruct %SB_RW
+%_ptr_StorageBuffer_sb_rw_block = OpTypePointer StorageBuffer %sb_rw_block
+          %1 = OpVariable %_ptr_StorageBuffer_sb_rw_block StorageBuffer
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+     %uint_1 = OpConstant %uint 1
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_2 = OpConstant %uint 2
+         %17 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_2
+         %16 = OpConstantNull %17
+%_ptr_Function_17 = OpTypePointer Function %17
+%_ptr_StorageBuffer__arr_float_uint_64 = OpTypePointer StorageBuffer %_arr_float_uint_64
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
+%subgroupMatrixStore_8a2280 = OpFunction %void None %11
+         %12 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function
+      %arg_2 = OpVariable %_ptr_Function_17 Function
+      %arg_4 = OpVariable %_ptr_Function_uint Function
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %16
+               OpStore %arg_4 %uint_1
+         %24 = OpAccessChain %_ptr_StorageBuffer__arr_float_uint_64 %1 %uint_0 %uint_0
+         %27 = OpLoad %uint %arg_1 None
+         %28 = OpLoad %17 %arg_2 None
+         %29 = OpLoad %uint %arg_4 None
+         %30 = OpAccessChain %_ptr_StorageBuffer_float %24 %27
+               OpCooperativeMatrixStoreKHR %30 %28 %uint_1 %29 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %subgroupMatrixStore_8a2280
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixStore/9019ee.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixStore/9019ee.wgsl.expected.spvasm
index 5c64c6a..f541909 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixStore/9019ee.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixStore/9019ee.wgsl.expected.spvasm
@@ -1,5 +1,70 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 35
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpMemberName %SB_RW 0 "arg_0"
+               OpName %SB_RW "SB_RW"
+               OpMemberName %sb_rw_block 0 "inner"
+               OpName %sb_rw_block "sb_rw_block"
+               OpName %subgroupMatrixStore_9019ee "subgroupMatrixStore_9019ee"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_4 "arg_4"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_int_uint_64 ArrayStride 4
+               OpMemberDecorate %SB_RW 0 Offset 0
+               OpMemberDecorate %sb_rw_block 0 Offset 0
+               OpDecorate %sb_rw_block Block
+               OpDecorate %1 DescriptorSet 0
+               OpDecorate %1 Binding 0
+        %int = OpTypeInt 32 1
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_int_uint_64 = OpTypeArray %int %uint_64
+      %SB_RW = OpTypeStruct %_arr_int_uint_64
+%sb_rw_block = OpTypeStruct %SB_RW
+%_ptr_StorageBuffer_sb_rw_block = OpTypePointer StorageBuffer %sb_rw_block
+          %1 = OpVariable %_ptr_StorageBuffer_sb_rw_block StorageBuffer
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+     %uint_1 = OpConstant %uint 1
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_0 = OpConstant %uint 0
+         %17 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpConstantNull %17
+%_ptr_Function_17 = OpTypePointer Function %17
+%_ptr_StorageBuffer__arr_int_uint_64 = OpTypePointer StorageBuffer %_arr_int_uint_64
+%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
+%subgroupMatrixStore_9019ee = OpFunction %void None %11
+         %12 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function
+      %arg_2 = OpVariable %_ptr_Function_17 Function
+      %arg_4 = OpVariable %_ptr_Function_uint Function
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %16
+               OpStore %arg_4 %uint_1
+         %24 = OpAccessChain %_ptr_StorageBuffer__arr_int_uint_64 %1 %uint_0 %uint_0
+         %26 = OpLoad %uint %arg_1 None
+         %27 = OpLoad %17 %arg_2 None
+         %28 = OpLoad %uint %arg_4 None
+         %29 = OpAccessChain %_ptr_StorageBuffer_int %24 %26
+               OpCooperativeMatrixStoreKHR %29 %27 %uint_1 %28 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %subgroupMatrixStore_9019ee
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixStore/9a7d60.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixStore/9a7d60.wgsl.expected.spvasm
index 5c64c6a..3b784d3 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixStore/9a7d60.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixStore/9a7d60.wgsl.expected.spvasm
@@ -1,5 +1,96 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 53
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main" %compute_main_local_invocation_index_Input
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %arg_0 "arg_0"
+               OpName %compute_main_local_invocation_index_Input "compute_main_local_invocation_index_Input"
+               OpName %subgroupMatrixStore_9a7d60 "subgroupMatrixStore_9a7d60"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_4 "arg_4"
+               OpName %compute_main_inner "compute_main_inner"
+               OpName %tint_local_index "tint_local_index"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_uint_uint_64 ArrayStride 4
+               OpDecorate %compute_main_local_invocation_index_Input BuiltIn LocalInvocationIndex
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_uint_uint_64 = OpTypeArray %uint %uint_64
+%_ptr_Workgroup__arr_uint_uint_64 = OpTypePointer Workgroup %_arr_uint_uint_64
+      %arg_0 = OpVariable %_ptr_Workgroup__arr_uint_uint_64 Workgroup
+%_ptr_Input_uint = OpTypePointer Input %uint
+%compute_main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
+       %void = OpTypeVoid
+         %10 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+     %uint_1 = OpConstant %uint 1
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_2 = OpConstant %uint 2
+         %16 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_2
+         %15 = OpConstantNull %16
+%_ptr_Function_16 = OpTypePointer Function %16
+%_ptr_Workgroup_uint = OpTypePointer Workgroup %uint
+         %31 = OpTypeFunction %void %uint
+       %bool = OpTypeBool
+     %uint_0 = OpConstant %uint 0
+ %uint_24840 = OpConstant %uint 24840
+%subgroupMatrixStore_9a7d60 = OpFunction %void None %10
+         %11 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function
+      %arg_2 = OpVariable %_ptr_Function_16 Function
+      %arg_4 = OpVariable %_ptr_Function_uint Function
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %15
+               OpStore %arg_4 %uint_1
+         %23 = OpLoad %uint %arg_1 None
+         %24 = OpLoad %16 %arg_2 None
+         %25 = OpLoad %uint %arg_4 None
+         %26 = OpAccessChain %_ptr_Workgroup_uint %arg_0 %23
+               OpCooperativeMatrixStoreKHR %26 %24 %uint_1 %25 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main_inner = OpFunction %void None %31
+%tint_local_index = OpFunctionParameter %uint
+         %32 = OpLabel
+               OpBranch %33
+         %33 = OpLabel
+               OpBranch %36
+         %36 = OpLabel
+         %38 = OpPhi %uint %tint_local_index %33 %39 %35
+               OpLoopMerge %37 %35 None
+               OpBranch %34
+         %34 = OpLabel
+         %40 = OpUGreaterThanEqual %bool %38 %uint_64
+               OpSelectionMerge %42 None
+               OpBranchConditional %40 %43 %42
+         %43 = OpLabel
+               OpBranch %37
+         %42 = OpLabel
+         %44 = OpAccessChain %_ptr_Workgroup_uint %arg_0 %38
+               OpStore %44 %uint_0 NonPrivatePointer
+               OpBranch %35
+         %35 = OpLabel
+         %39 = OpIAdd %uint %38 %uint_1
+               OpBranch %36
+         %37 = OpLabel
+               OpControlBarrier %uint_2 %uint_2 %uint_24840
+         %48 = OpFunctionCall %void %subgroupMatrixStore_9a7d60
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %10
+         %50 = OpLabel
+         %51 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %52 = OpFunctionCall %void %compute_main_inner %51
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixStore/9fffe5.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixStore/9fffe5.wgsl.expected.spvasm
index 5c64c6a..30c82eb 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixStore/9fffe5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixStore/9fffe5.wgsl.expected.spvasm
@@ -1,5 +1,71 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 36
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpMemberName %SB_RW 0 "arg_0"
+               OpName %SB_RW "SB_RW"
+               OpMemberName %sb_rw_block 0 "inner"
+               OpName %sb_rw_block "sb_rw_block"
+               OpName %subgroupMatrixStore_9fffe5 "subgroupMatrixStore_9fffe5"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_4 "arg_4"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_int_uint_64 ArrayStride 4
+               OpMemberDecorate %SB_RW 0 Offset 0
+               OpMemberDecorate %sb_rw_block 0 Offset 0
+               OpDecorate %sb_rw_block Block
+               OpDecorate %1 DescriptorSet 0
+               OpDecorate %1 Binding 0
+        %int = OpTypeInt 32 1
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_int_uint_64 = OpTypeArray %int %uint_64
+      %SB_RW = OpTypeStruct %_arr_int_uint_64
+%sb_rw_block = OpTypeStruct %SB_RW
+%_ptr_StorageBuffer_sb_rw_block = OpTypePointer StorageBuffer %sb_rw_block
+          %1 = OpVariable %_ptr_StorageBuffer_sb_rw_block StorageBuffer
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+     %uint_1 = OpConstant %uint 1
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_2 = OpConstant %uint 2
+         %17 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_2
+         %16 = OpConstantNull %17
+%_ptr_Function_17 = OpTypePointer Function %17
+%_ptr_StorageBuffer__arr_int_uint_64 = OpTypePointer StorageBuffer %_arr_int_uint_64
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
+%subgroupMatrixStore_9fffe5 = OpFunction %void None %11
+         %12 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function
+      %arg_2 = OpVariable %_ptr_Function_17 Function
+      %arg_4 = OpVariable %_ptr_Function_uint Function
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %16
+               OpStore %arg_4 %uint_1
+         %24 = OpAccessChain %_ptr_StorageBuffer__arr_int_uint_64 %1 %uint_0 %uint_0
+         %27 = OpLoad %uint %arg_1 None
+         %28 = OpLoad %17 %arg_2 None
+         %29 = OpLoad %uint %arg_4 None
+         %30 = OpAccessChain %_ptr_StorageBuffer_int %24 %27
+               OpCooperativeMatrixStoreKHR %30 %28 %uint_1 %29 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %subgroupMatrixStore_9fffe5
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixStore/b9ff25.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixStore/b9ff25.wgsl.expected.spvasm
index 5c64c6a..89d47ba 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixStore/b9ff25.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixStore/b9ff25.wgsl.expected.spvasm
@@ -1,5 +1,97 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main" %compute_main_local_invocation_index_Input
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %arg_0 "arg_0"
+               OpName %compute_main_local_invocation_index_Input "compute_main_local_invocation_index_Input"
+               OpName %subgroupMatrixStore_b9ff25 "subgroupMatrixStore_b9ff25"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_4 "arg_4"
+               OpName %compute_main_inner "compute_main_inner"
+               OpName %tint_local_index "tint_local_index"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_float_uint_64 ArrayStride 4
+               OpDecorate %compute_main_local_invocation_index_Input BuiltIn LocalInvocationIndex
+      %float = OpTypeFloat 32
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_float_uint_64 = OpTypeArray %float %uint_64
+%_ptr_Workgroup__arr_float_uint_64 = OpTypePointer Workgroup %_arr_float_uint_64
+      %arg_0 = OpVariable %_ptr_Workgroup__arr_float_uint_64 Workgroup
+%_ptr_Input_uint = OpTypePointer Input %uint
+%compute_main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+     %uint_1 = OpConstant %uint 1
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_2 = OpConstant %uint 2
+         %17 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_2
+         %16 = OpConstantNull %17
+%_ptr_Function_17 = OpTypePointer Function %17
+%_ptr_Workgroup_float = OpTypePointer Workgroup %float
+         %32 = OpTypeFunction %void %uint
+       %bool = OpTypeBool
+    %float_0 = OpConstant %float 0
+ %uint_24840 = OpConstant %uint 24840
+%subgroupMatrixStore_b9ff25 = OpFunction %void None %11
+         %12 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function
+      %arg_2 = OpVariable %_ptr_Function_17 Function
+      %arg_4 = OpVariable %_ptr_Function_uint Function
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %16
+               OpStore %arg_4 %uint_1
+         %24 = OpLoad %uint %arg_1 None
+         %25 = OpLoad %17 %arg_2 None
+         %26 = OpLoad %uint %arg_4 None
+         %27 = OpAccessChain %_ptr_Workgroup_float %arg_0 %24
+               OpCooperativeMatrixStoreKHR %27 %25 %uint_1 %26 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main_inner = OpFunction %void None %32
+%tint_local_index = OpFunctionParameter %uint
+         %33 = OpLabel
+               OpBranch %34
+         %34 = OpLabel
+               OpBranch %37
+         %37 = OpLabel
+         %39 = OpPhi %uint %tint_local_index %34 %40 %36
+               OpLoopMerge %38 %36 None
+               OpBranch %35
+         %35 = OpLabel
+         %41 = OpUGreaterThanEqual %bool %39 %uint_64
+               OpSelectionMerge %43 None
+               OpBranchConditional %41 %44 %43
+         %44 = OpLabel
+               OpBranch %38
+         %43 = OpLabel
+         %45 = OpAccessChain %_ptr_Workgroup_float %arg_0 %39
+               OpStore %45 %float_0 NonPrivatePointer
+               OpBranch %36
+         %36 = OpLabel
+         %40 = OpIAdd %uint %39 %uint_1
+               OpBranch %37
+         %38 = OpLabel
+               OpControlBarrier %uint_2 %uint_2 %uint_24840
+         %49 = OpFunctionCall %void %subgroupMatrixStore_b9ff25
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %51 = OpLabel
+         %52 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %53 = OpFunctionCall %void %compute_main_inner %52
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixStore/ba9442.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixStore/ba9442.wgsl.expected.spvasm
index 5c64c6a..37a41c9 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixStore/ba9442.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixStore/ba9442.wgsl.expected.spvasm
@@ -1,5 +1,73 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 35
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability Float16
+               OpCapability UniformAndStorageBuffer16BitAccess
+               OpCapability StorageBuffer16BitAccess
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpMemberName %SB_RW 0 "arg_0"
+               OpName %SB_RW "SB_RW"
+               OpMemberName %sb_rw_block 0 "inner"
+               OpName %sb_rw_block "sb_rw_block"
+               OpName %subgroupMatrixStore_ba9442 "subgroupMatrixStore_ba9442"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_4 "arg_4"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_half_uint_64 ArrayStride 2
+               OpMemberDecorate %SB_RW 0 Offset 0
+               OpMemberDecorate %sb_rw_block 0 Offset 0
+               OpDecorate %sb_rw_block Block
+               OpDecorate %1 DescriptorSet 0
+               OpDecorate %1 Binding 0
+       %half = OpTypeFloat 16
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_half_uint_64 = OpTypeArray %half %uint_64
+      %SB_RW = OpTypeStruct %_arr_half_uint_64
+%sb_rw_block = OpTypeStruct %SB_RW
+%_ptr_StorageBuffer_sb_rw_block = OpTypePointer StorageBuffer %sb_rw_block
+          %1 = OpVariable %_ptr_StorageBuffer_sb_rw_block StorageBuffer
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+     %uint_1 = OpConstant %uint 1
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+         %17 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_1
+         %16 = OpConstantNull %17
+%_ptr_Function_17 = OpTypePointer Function %17
+%_ptr_StorageBuffer__arr_half_uint_64 = OpTypePointer StorageBuffer %_arr_half_uint_64
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_half = OpTypePointer StorageBuffer %half
+%subgroupMatrixStore_ba9442 = OpFunction %void None %11
+         %12 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function
+      %arg_2 = OpVariable %_ptr_Function_17 Function
+      %arg_4 = OpVariable %_ptr_Function_uint Function
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %16
+               OpStore %arg_4 %uint_1
+         %23 = OpAccessChain %_ptr_StorageBuffer__arr_half_uint_64 %1 %uint_0 %uint_0
+         %26 = OpLoad %uint %arg_1 None
+         %27 = OpLoad %17 %arg_2 None
+         %28 = OpLoad %uint %arg_4 None
+         %29 = OpAccessChain %_ptr_StorageBuffer_half %23 %26
+               OpCooperativeMatrixStoreKHR %29 %27 %uint_1 %28 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %subgroupMatrixStore_ba9442
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixStore/bfd0a4.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixStore/bfd0a4.wgsl.expected.spvasm
index 5c64c6a..3797b3e 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixStore/bfd0a4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixStore/bfd0a4.wgsl.expected.spvasm
@@ -1,5 +1,98 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 55
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main" %compute_main_local_invocation_index_Input
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %arg_0 "arg_0"
+               OpName %compute_main_local_invocation_index_Input "compute_main_local_invocation_index_Input"
+               OpName %subgroupMatrixStore_bfd0a4 "subgroupMatrixStore_bfd0a4"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_4 "arg_4"
+               OpName %compute_main_inner "compute_main_inner"
+               OpName %tint_local_index "tint_local_index"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_int_uint_64 ArrayStride 4
+               OpDecorate %compute_main_local_invocation_index_Input BuiltIn LocalInvocationIndex
+        %int = OpTypeInt 32 1
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_int_uint_64 = OpTypeArray %int %uint_64
+%_ptr_Workgroup__arr_int_uint_64 = OpTypePointer Workgroup %_arr_int_uint_64
+      %arg_0 = OpVariable %_ptr_Workgroup__arr_int_uint_64 Workgroup
+%_ptr_Input_uint = OpTypePointer Input %uint
+%compute_main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+     %uint_1 = OpConstant %uint 1
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_0 = OpConstant %uint 0
+         %17 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpConstantNull %17
+%_ptr_Function_17 = OpTypePointer Function %17
+%_ptr_Workgroup_int = OpTypePointer Workgroup %int
+         %32 = OpTypeFunction %void %uint
+       %bool = OpTypeBool
+      %int_0 = OpConstant %int 0
+     %uint_2 = OpConstant %uint 2
+ %uint_24840 = OpConstant %uint 24840
+%subgroupMatrixStore_bfd0a4 = OpFunction %void None %11
+         %12 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function
+      %arg_2 = OpVariable %_ptr_Function_17 Function
+      %arg_4 = OpVariable %_ptr_Function_uint Function
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %16
+               OpStore %arg_4 %uint_1
+         %24 = OpLoad %uint %arg_1 None
+         %25 = OpLoad %17 %arg_2 None
+         %26 = OpLoad %uint %arg_4 None
+         %27 = OpAccessChain %_ptr_Workgroup_int %arg_0 %24
+               OpCooperativeMatrixStoreKHR %27 %25 %uint_1 %26 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main_inner = OpFunction %void None %32
+%tint_local_index = OpFunctionParameter %uint
+         %33 = OpLabel
+               OpBranch %34
+         %34 = OpLabel
+               OpBranch %37
+         %37 = OpLabel
+         %39 = OpPhi %uint %tint_local_index %34 %40 %36
+               OpLoopMerge %38 %36 None
+               OpBranch %35
+         %35 = OpLabel
+         %41 = OpUGreaterThanEqual %bool %39 %uint_64
+               OpSelectionMerge %43 None
+               OpBranchConditional %41 %44 %43
+         %44 = OpLabel
+               OpBranch %38
+         %43 = OpLabel
+         %45 = OpAccessChain %_ptr_Workgroup_int %arg_0 %39
+               OpStore %45 %int_0 NonPrivatePointer
+               OpBranch %36
+         %36 = OpLabel
+         %40 = OpIAdd %uint %39 %uint_1
+               OpBranch %37
+         %38 = OpLabel
+               OpControlBarrier %uint_2 %uint_2 %uint_24840
+         %50 = OpFunctionCall %void %subgroupMatrixStore_bfd0a4
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %52 = OpLabel
+         %53 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %54 = OpFunctionCall %void %compute_main_inner %53
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixStore/d07581.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixStore/d07581.wgsl.expected.spvasm
index 5c64c6a..d7545a8 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixStore/d07581.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixStore/d07581.wgsl.expected.spvasm
@@ -1,5 +1,100 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability Float16
+               OpCapability UniformAndStorageBuffer16BitAccess
+               OpCapability StorageBuffer16BitAccess
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main" %compute_main_local_invocation_index_Input
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %arg_0 "arg_0"
+               OpName %compute_main_local_invocation_index_Input "compute_main_local_invocation_index_Input"
+               OpName %subgroupMatrixStore_d07581 "subgroupMatrixStore_d07581"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_4 "arg_4"
+               OpName %compute_main_inner "compute_main_inner"
+               OpName %tint_local_index "tint_local_index"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_half_uint_64 ArrayStride 2
+               OpDecorate %compute_main_local_invocation_index_Input BuiltIn LocalInvocationIndex
+       %half = OpTypeFloat 16
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_half_uint_64 = OpTypeArray %half %uint_64
+%_ptr_Workgroup__arr_half_uint_64 = OpTypePointer Workgroup %_arr_half_uint_64
+      %arg_0 = OpVariable %_ptr_Workgroup__arr_half_uint_64 Workgroup
+%_ptr_Input_uint = OpTypePointer Input %uint
+%compute_main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+     %uint_1 = OpConstant %uint 1
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+         %17 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_1
+         %16 = OpConstantNull %17
+%_ptr_Function_17 = OpTypePointer Function %17
+%_ptr_Workgroup_half = OpTypePointer Workgroup %half
+         %31 = OpTypeFunction %void %uint
+       %bool = OpTypeBool
+%half_0x0p_0 = OpConstant %half 0x0p+0
+     %uint_2 = OpConstant %uint 2
+ %uint_24840 = OpConstant %uint 24840
+%subgroupMatrixStore_d07581 = OpFunction %void None %11
+         %12 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function
+      %arg_2 = OpVariable %_ptr_Function_17 Function
+      %arg_4 = OpVariable %_ptr_Function_uint Function
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %16
+               OpStore %arg_4 %uint_1
+         %23 = OpLoad %uint %arg_1 None
+         %24 = OpLoad %17 %arg_2 None
+         %25 = OpLoad %uint %arg_4 None
+         %26 = OpAccessChain %_ptr_Workgroup_half %arg_0 %23
+               OpCooperativeMatrixStoreKHR %26 %24 %uint_1 %25 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main_inner = OpFunction %void None %31
+%tint_local_index = OpFunctionParameter %uint
+         %32 = OpLabel
+               OpBranch %33
+         %33 = OpLabel
+               OpBranch %36
+         %36 = OpLabel
+         %38 = OpPhi %uint %tint_local_index %33 %39 %35
+               OpLoopMerge %37 %35 None
+               OpBranch %34
+         %34 = OpLabel
+         %40 = OpUGreaterThanEqual %bool %38 %uint_64
+               OpSelectionMerge %42 None
+               OpBranchConditional %40 %43 %42
+         %43 = OpLabel
+               OpBranch %37
+         %42 = OpLabel
+         %44 = OpAccessChain %_ptr_Workgroup_half %arg_0 %38
+               OpStore %44 %half_0x0p_0 NonPrivatePointer
+               OpBranch %35
+         %35 = OpLabel
+         %39 = OpIAdd %uint %38 %uint_1
+               OpBranch %36
+         %37 = OpLabel
+               OpControlBarrier %uint_2 %uint_2 %uint_24840
+         %49 = OpFunctionCall %void %subgroupMatrixStore_d07581
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %51 = OpLabel
+         %52 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %53 = OpFunctionCall %void %compute_main_inner %52
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixStore/db6dd2.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixStore/db6dd2.wgsl.expected.spvasm
index 5c64c6a..53a369e 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixStore/db6dd2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixStore/db6dd2.wgsl.expected.spvasm
@@ -1,5 +1,69 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 34
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpMemberName %SB_RW 0 "arg_0"
+               OpName %SB_RW "SB_RW"
+               OpMemberName %sb_rw_block 0 "inner"
+               OpName %sb_rw_block "sb_rw_block"
+               OpName %subgroupMatrixStore_db6dd2 "subgroupMatrixStore_db6dd2"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_4 "arg_4"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_uint_uint_64 ArrayStride 4
+               OpMemberDecorate %SB_RW 0 Offset 0
+               OpMemberDecorate %sb_rw_block 0 Offset 0
+               OpDecorate %sb_rw_block Block
+               OpDecorate %1 DescriptorSet 0
+               OpDecorate %1 Binding 0
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_uint_uint_64 = OpTypeArray %uint %uint_64
+      %SB_RW = OpTypeStruct %_arr_uint_uint_64
+%sb_rw_block = OpTypeStruct %SB_RW
+%_ptr_StorageBuffer_sb_rw_block = OpTypePointer StorageBuffer %sb_rw_block
+          %1 = OpVariable %_ptr_StorageBuffer_sb_rw_block StorageBuffer
+       %void = OpTypeVoid
+         %10 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+     %uint_1 = OpConstant %uint 1
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_0 = OpConstant %uint 0
+         %16 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_0
+         %15 = OpConstantNull %16
+%_ptr_Function_16 = OpTypePointer Function %16
+%_ptr_StorageBuffer__arr_uint_uint_64 = OpTypePointer StorageBuffer %_arr_uint_uint_64
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+%subgroupMatrixStore_db6dd2 = OpFunction %void None %10
+         %11 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function
+      %arg_2 = OpVariable %_ptr_Function_16 Function
+      %arg_4 = OpVariable %_ptr_Function_uint Function
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %15
+               OpStore %arg_4 %uint_1
+         %23 = OpAccessChain %_ptr_StorageBuffer__arr_uint_uint_64 %1 %uint_0 %uint_0
+         %25 = OpLoad %uint %arg_1 None
+         %26 = OpLoad %16 %arg_2 None
+         %27 = OpLoad %uint %arg_4 None
+         %28 = OpAccessChain %_ptr_StorageBuffer_uint %23 %25
+               OpCooperativeMatrixStoreKHR %28 %26 %uint_1 %27 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %10
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %subgroupMatrixStore_db6dd2
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixStore/dc92cf.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixStore/dc92cf.wgsl.expected.spvasm
index 5c64c6a..714b3db 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixStore/dc92cf.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixStore/dc92cf.wgsl.expected.spvasm
@@ -1,5 +1,98 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 55
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main" %compute_main_local_invocation_index_Input
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %arg_0 "arg_0"
+               OpName %compute_main_local_invocation_index_Input "compute_main_local_invocation_index_Input"
+               OpName %subgroupMatrixStore_dc92cf "subgroupMatrixStore_dc92cf"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_4 "arg_4"
+               OpName %compute_main_inner "compute_main_inner"
+               OpName %tint_local_index "tint_local_index"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_float_uint_64 ArrayStride 4
+               OpDecorate %compute_main_local_invocation_index_Input BuiltIn LocalInvocationIndex
+      %float = OpTypeFloat 32
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_float_uint_64 = OpTypeArray %float %uint_64
+%_ptr_Workgroup__arr_float_uint_64 = OpTypePointer Workgroup %_arr_float_uint_64
+      %arg_0 = OpVariable %_ptr_Workgroup__arr_float_uint_64 Workgroup
+%_ptr_Input_uint = OpTypePointer Input %uint
+%compute_main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+     %uint_1 = OpConstant %uint 1
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_0 = OpConstant %uint 0
+         %17 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpConstantNull %17
+%_ptr_Function_17 = OpTypePointer Function %17
+%_ptr_Workgroup_float = OpTypePointer Workgroup %float
+         %32 = OpTypeFunction %void %uint
+       %bool = OpTypeBool
+    %float_0 = OpConstant %float 0
+     %uint_2 = OpConstant %uint 2
+ %uint_24840 = OpConstant %uint 24840
+%subgroupMatrixStore_dc92cf = OpFunction %void None %11
+         %12 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function
+      %arg_2 = OpVariable %_ptr_Function_17 Function
+      %arg_4 = OpVariable %_ptr_Function_uint Function
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %16
+               OpStore %arg_4 %uint_1
+         %24 = OpLoad %uint %arg_1 None
+         %25 = OpLoad %17 %arg_2 None
+         %26 = OpLoad %uint %arg_4 None
+         %27 = OpAccessChain %_ptr_Workgroup_float %arg_0 %24
+               OpCooperativeMatrixStoreKHR %27 %25 %uint_1 %26 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main_inner = OpFunction %void None %32
+%tint_local_index = OpFunctionParameter %uint
+         %33 = OpLabel
+               OpBranch %34
+         %34 = OpLabel
+               OpBranch %37
+         %37 = OpLabel
+         %39 = OpPhi %uint %tint_local_index %34 %40 %36
+               OpLoopMerge %38 %36 None
+               OpBranch %35
+         %35 = OpLabel
+         %41 = OpUGreaterThanEqual %bool %39 %uint_64
+               OpSelectionMerge %43 None
+               OpBranchConditional %41 %44 %43
+         %44 = OpLabel
+               OpBranch %38
+         %43 = OpLabel
+         %45 = OpAccessChain %_ptr_Workgroup_float %arg_0 %39
+               OpStore %45 %float_0 NonPrivatePointer
+               OpBranch %36
+         %36 = OpLabel
+         %40 = OpIAdd %uint %39 %uint_1
+               OpBranch %37
+         %38 = OpLabel
+               OpControlBarrier %uint_2 %uint_2 %uint_24840
+         %50 = OpFunctionCall %void %subgroupMatrixStore_dc92cf
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %52 = OpLabel
+         %53 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %54 = OpFunctionCall %void %compute_main_inner %53
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixStore/dce0b7.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixStore/dce0b7.wgsl.expected.spvasm
index 5c64c6a..c1ac220 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixStore/dce0b7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixStore/dce0b7.wgsl.expected.spvasm
@@ -1,5 +1,70 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 35
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpMemberName %SB_RW 0 "arg_0"
+               OpName %SB_RW "SB_RW"
+               OpMemberName %sb_rw_block 0 "inner"
+               OpName %sb_rw_block "sb_rw_block"
+               OpName %subgroupMatrixStore_dce0b7 "subgroupMatrixStore_dce0b7"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_4 "arg_4"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_uint_uint_64 ArrayStride 4
+               OpMemberDecorate %SB_RW 0 Offset 0
+               OpMemberDecorate %sb_rw_block 0 Offset 0
+               OpDecorate %sb_rw_block Block
+               OpDecorate %1 DescriptorSet 0
+               OpDecorate %1 Binding 0
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_uint_uint_64 = OpTypeArray %uint %uint_64
+      %SB_RW = OpTypeStruct %_arr_uint_uint_64
+%sb_rw_block = OpTypeStruct %SB_RW
+%_ptr_StorageBuffer_sb_rw_block = OpTypePointer StorageBuffer %sb_rw_block
+          %1 = OpVariable %_ptr_StorageBuffer_sb_rw_block StorageBuffer
+       %void = OpTypeVoid
+         %10 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+     %uint_1 = OpConstant %uint 1
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_2 = OpConstant %uint 2
+         %16 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_2
+         %15 = OpConstantNull %16
+%_ptr_Function_16 = OpTypePointer Function %16
+%_ptr_StorageBuffer__arr_uint_uint_64 = OpTypePointer StorageBuffer %_arr_uint_uint_64
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+%subgroupMatrixStore_dce0b7 = OpFunction %void None %10
+         %11 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function
+      %arg_2 = OpVariable %_ptr_Function_16 Function
+      %arg_4 = OpVariable %_ptr_Function_uint Function
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %15
+               OpStore %arg_4 %uint_1
+         %23 = OpAccessChain %_ptr_StorageBuffer__arr_uint_uint_64 %1 %uint_0 %uint_0
+         %26 = OpLoad %uint %arg_1 None
+         %27 = OpLoad %16 %arg_2 None
+         %28 = OpLoad %uint %arg_4 None
+         %29 = OpAccessChain %_ptr_StorageBuffer_uint %23 %26
+               OpCooperativeMatrixStoreKHR %29 %27 %uint_1 %28 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %10
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %subgroupMatrixStore_dce0b7
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixStore/ee1195.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixStore/ee1195.wgsl.expected.spvasm
index 5c64c6a..9e1ac0f 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixStore/ee1195.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixStore/ee1195.wgsl.expected.spvasm
@@ -1,5 +1,101 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 55
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability Float16
+               OpCapability UniformAndStorageBuffer16BitAccess
+               OpCapability StorageBuffer16BitAccess
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main" %compute_main_local_invocation_index_Input
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %arg_0 "arg_0"
+               OpName %compute_main_local_invocation_index_Input "compute_main_local_invocation_index_Input"
+               OpName %subgroupMatrixStore_ee1195 "subgroupMatrixStore_ee1195"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_4 "arg_4"
+               OpName %compute_main_inner "compute_main_inner"
+               OpName %tint_local_index "tint_local_index"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_half_uint_64 ArrayStride 2
+               OpDecorate %compute_main_local_invocation_index_Input BuiltIn LocalInvocationIndex
+       %half = OpTypeFloat 16
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_half_uint_64 = OpTypeArray %half %uint_64
+%_ptr_Workgroup__arr_half_uint_64 = OpTypePointer Workgroup %_arr_half_uint_64
+      %arg_0 = OpVariable %_ptr_Workgroup__arr_half_uint_64 Workgroup
+%_ptr_Input_uint = OpTypePointer Input %uint
+%compute_main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+     %uint_1 = OpConstant %uint 1
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_0 = OpConstant %uint 0
+         %17 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpConstantNull %17
+%_ptr_Function_17 = OpTypePointer Function %17
+%_ptr_Workgroup_half = OpTypePointer Workgroup %half
+         %32 = OpTypeFunction %void %uint
+       %bool = OpTypeBool
+%half_0x0p_0 = OpConstant %half 0x0p+0
+     %uint_2 = OpConstant %uint 2
+ %uint_24840 = OpConstant %uint 24840
+%subgroupMatrixStore_ee1195 = OpFunction %void None %11
+         %12 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function
+      %arg_2 = OpVariable %_ptr_Function_17 Function
+      %arg_4 = OpVariable %_ptr_Function_uint Function
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %16
+               OpStore %arg_4 %uint_1
+         %24 = OpLoad %uint %arg_1 None
+         %25 = OpLoad %17 %arg_2 None
+         %26 = OpLoad %uint %arg_4 None
+         %27 = OpAccessChain %_ptr_Workgroup_half %arg_0 %24
+               OpCooperativeMatrixStoreKHR %27 %25 %uint_1 %26 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main_inner = OpFunction %void None %32
+%tint_local_index = OpFunctionParameter %uint
+         %33 = OpLabel
+               OpBranch %34
+         %34 = OpLabel
+               OpBranch %37
+         %37 = OpLabel
+         %39 = OpPhi %uint %tint_local_index %34 %40 %36
+               OpLoopMerge %38 %36 None
+               OpBranch %35
+         %35 = OpLabel
+         %41 = OpUGreaterThanEqual %bool %39 %uint_64
+               OpSelectionMerge %43 None
+               OpBranchConditional %41 %44 %43
+         %44 = OpLabel
+               OpBranch %38
+         %43 = OpLabel
+         %45 = OpAccessChain %_ptr_Workgroup_half %arg_0 %39
+               OpStore %45 %half_0x0p_0 NonPrivatePointer
+               OpBranch %36
+         %36 = OpLabel
+         %40 = OpIAdd %uint %39 %uint_1
+               OpBranch %37
+         %38 = OpLabel
+               OpControlBarrier %uint_2 %uint_2 %uint_24840
+         %50 = OpFunctionCall %void %subgroupMatrixStore_ee1195
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %52 = OpLabel
+         %53 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %54 = OpFunctionCall %void %compute_main_inner %53
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixStore/f04d67.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixStore/f04d67.wgsl.expected.spvasm
index 5c64c6a..ab7cb63 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixStore/f04d67.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixStore/f04d67.wgsl.expected.spvasm
@@ -1,5 +1,97 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the SPIR-V backend
-
-tint executable returned error: exit status 1
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpCapability VulkanMemoryModel
+               OpCapability VulkanMemoryModelDeviceScope
+               OpCapability CooperativeMatrixKHR
+               OpExtension "SPV_KHR_vulkan_memory_model"
+               OpExtension "SPV_KHR_cooperative_matrix"
+               OpMemoryModel Logical Vulkan
+               OpEntryPoint GLCompute %compute_main "compute_main" %compute_main_local_invocation_index_Input
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %arg_0 "arg_0"
+               OpName %compute_main_local_invocation_index_Input "compute_main_local_invocation_index_Input"
+               OpName %subgroupMatrixStore_f04d67 "subgroupMatrixStore_f04d67"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_4 "arg_4"
+               OpName %compute_main_inner "compute_main_inner"
+               OpName %tint_local_index "tint_local_index"
+               OpName %compute_main "compute_main"
+               OpDecorate %_arr_int_uint_64 ArrayStride 4
+               OpDecorate %compute_main_local_invocation_index_Input BuiltIn LocalInvocationIndex
+        %int = OpTypeInt 32 1
+       %uint = OpTypeInt 32 0
+    %uint_64 = OpConstant %uint 64
+%_arr_int_uint_64 = OpTypeArray %int %uint_64
+%_ptr_Workgroup__arr_int_uint_64 = OpTypePointer Workgroup %_arr_int_uint_64
+      %arg_0 = OpVariable %_ptr_Workgroup__arr_int_uint_64 Workgroup
+%_ptr_Input_uint = OpTypePointer Input %uint
+%compute_main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
+       %void = OpTypeVoid
+         %11 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+     %uint_1 = OpConstant %uint 1
+     %uint_3 = OpConstant %uint 3
+     %uint_8 = OpConstant %uint 8
+     %uint_2 = OpConstant %uint 2
+         %17 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_2
+         %16 = OpConstantNull %17
+%_ptr_Function_17 = OpTypePointer Function %17
+%_ptr_Workgroup_int = OpTypePointer Workgroup %int
+         %32 = OpTypeFunction %void %uint
+       %bool = OpTypeBool
+      %int_0 = OpConstant %int 0
+ %uint_24840 = OpConstant %uint 24840
+%subgroupMatrixStore_f04d67 = OpFunction %void None %11
+         %12 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function
+      %arg_2 = OpVariable %_ptr_Function_17 Function
+      %arg_4 = OpVariable %_ptr_Function_uint Function
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %16
+               OpStore %arg_4 %uint_1
+         %24 = OpLoad %uint %arg_1 None
+         %25 = OpLoad %17 %arg_2 None
+         %26 = OpLoad %uint %arg_4 None
+         %27 = OpAccessChain %_ptr_Workgroup_int %arg_0 %24
+               OpCooperativeMatrixStoreKHR %27 %25 %uint_1 %26 NonPrivatePointer
+               OpReturn
+               OpFunctionEnd
+%compute_main_inner = OpFunction %void None %32
+%tint_local_index = OpFunctionParameter %uint
+         %33 = OpLabel
+               OpBranch %34
+         %34 = OpLabel
+               OpBranch %37
+         %37 = OpLabel
+         %39 = OpPhi %uint %tint_local_index %34 %40 %36
+               OpLoopMerge %38 %36 None
+               OpBranch %35
+         %35 = OpLabel
+         %41 = OpUGreaterThanEqual %bool %39 %uint_64
+               OpSelectionMerge %43 None
+               OpBranchConditional %41 %44 %43
+         %44 = OpLabel
+               OpBranch %38
+         %43 = OpLabel
+         %45 = OpAccessChain %_ptr_Workgroup_int %arg_0 %39
+               OpStore %45 %int_0 NonPrivatePointer
+               OpBranch %36
+         %36 = OpLabel
+         %40 = OpIAdd %uint %39 %uint_1
+               OpBranch %37
+         %38 = OpLabel
+               OpControlBarrier %uint_2 %uint_2 %uint_24840
+         %49 = OpFunctionCall %void %subgroupMatrixStore_f04d67
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %11
+         %51 = OpLabel
+         %52 = OpLoad %uint %compute_main_local_invocation_index_Input None
+         %53 = OpFunctionCall %void %compute_main_inner %52
+               OpReturn
+               OpFunctionEnd