[tint] Subgroup matrix component types do not have to match

The components types for the inputs and result do not have to match
for subgroupMatrixMultiply and subgroupMatrixMultiplyAccumulate.

For subgroupMatrixMultiply, this requires an explicit template
parameter to specify what the result component type is.

Bug: 348702031
Change-Id: I17177bea6542e6f6b8acf2c1d5d71eae4ac4c44c
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/226155
Commit-Queue: James Price <jrprice@google.com>
Reviewed-by: dan sinclair <dsinclair@chromium.org>
diff --git a/src/dawn/tests/end2end/SubgroupMatrixTests.cpp b/src/dawn/tests/end2end/SubgroupMatrixTests.cpp
index 36b2ff4..3054891 100644
--- a/src/dawn/tests/end2end/SubgroupMatrixTests.cpp
+++ b/src/dawn/tests/end2end/SubgroupMatrixTests.cpp
@@ -155,7 +155,7 @@
 )";
         switch (op) {
             case MatrixMultiply:
-                shader << "let result = subgroupMatrixMultiply(lhs, rhs);\n";
+                shader << "let result = subgroupMatrixMultiply<ResultComponentType>(lhs, rhs);\n";
                 break;
             case MatrixMultiplyAccumulate:
                 // Perform the multiplication twice, accumulating into a zero matrix the first time.
diff --git a/src/tint/lang/core/core.def b/src/tint/lang/core/core.def
index 31b65cd..8ab4d4d 100644
--- a/src/tint/lang/core/core.def
+++ b/src/tint/lang/core/core.def
@@ -776,15 +776,15 @@
 @stage("compute") implicit(K: subgroup_matrix_kind, S: fiu32_f16, C: num, R: num, AC: num) fn subgroupMatrixLoad<T: subgroup_matrix<K, S, C, R> >(ptr<workgroup_or_storage, array<S, AC>, readable>, u32, @const bool, u32) -> T
 @stage("compute") implicit(K: subgroup_matrix_kind, S: fiu32_f16, C: num, R: num) fn subgroupMatrixStore(ptr<storage, runtime_array<S>, writable>, u32, subgroup_matrix<K, S, C, R>, @const bool, u32)
 @stage("compute") implicit(K: subgroup_matrix_kind, S: fiu32_f16, C: num, R: num, AC: num) fn subgroupMatrixStore(ptr<workgroup_or_storage, array<S, AC>, writable>, u32, subgroup_matrix<K, S, C, R>, @const bool, u32)
-@must_use @stage("compute") implicit(S: subgroup_matrix_elements, C: num, R: num, K: num) fn subgroupMatrixMultiply(
-  subgroup_matrix<subgroup_matrix_kind_left, S, K, R>,
-  subgroup_matrix<subgroup_matrix_kind_right, S, C, K>)
-  -> subgroup_matrix<subgroup_matrix_kind_result, S, C, R>
-@must_use @stage("compute") implicit(S: subgroup_matrix_elements, C: num, R: num, K: num) fn subgroupMatrixMultiplyAccumulate(
-  subgroup_matrix<subgroup_matrix_kind_left, S, K, R>,
-  subgroup_matrix<subgroup_matrix_kind_right, S, C, K>,
-  subgroup_matrix<subgroup_matrix_kind_result, S, C, R>)
-  -> subgroup_matrix<subgroup_matrix_kind_result, S, C, R>
+@must_use @stage("compute") implicit(T: subgroup_matrix_elements, C: num, R: num, K: num) fn subgroupMatrixMultiply<TR: subgroup_matrix_elements>(
+  subgroup_matrix<subgroup_matrix_kind_left, T, K, R>,
+  subgroup_matrix<subgroup_matrix_kind_right, T, C, K>)
+  -> subgroup_matrix<subgroup_matrix_kind_result, TR, C, R>
+@must_use @stage("compute") implicit(T: subgroup_matrix_elements, TR: subgroup_matrix_elements, C: num, R: num, K: num) fn subgroupMatrixMultiplyAccumulate(
+  subgroup_matrix<subgroup_matrix_kind_left, T, K, R>,
+  subgroup_matrix<subgroup_matrix_kind_right, T, C, K>,
+  subgroup_matrix<subgroup_matrix_kind_result, TR, C, R>)
+  -> subgroup_matrix<subgroup_matrix_kind_result, TR, C, R>
 
 ////////////////////////////////////////////////////////////////////////////////
 // Value constructors                                                         //
diff --git a/src/tint/lang/core/intrinsic/data.cc b/src/tint/lang/core/intrinsic/data.cc
index b4dcfb2..4865879 100644
--- a/src/tint/lang/core/intrinsic/data.cc
+++ b/src/tint/lang/core/intrinsic/data.cc
@@ -1737,292 +1737,312 @@
   /* [47] */ MatcherIndex(56),
   /* [48] */ MatcherIndex(8),
   /* [49] */ MatcherIndex(0),
-  /* [50] */ MatcherIndex(1),
-  /* [51] */ MatcherIndex(2),
+  /* [50] */ MatcherIndex(2),
+  /* [51] */ MatcherIndex(3),
   /* [52] */ MatcherIndex(56),
   /* [53] */ MatcherIndex(6),
-  /* [54] */ MatcherIndex(0),
-  /* [55] */ MatcherIndex(3),
-  /* [56] */ MatcherIndex(2),
+  /* [54] */ MatcherIndex(1),
+  /* [55] */ MatcherIndex(4),
+  /* [56] */ MatcherIndex(3),
   /* [57] */ MatcherIndex(56),
   /* [58] */ MatcherIndex(7),
-  /* [59] */ MatcherIndex(0),
-  /* [60] */ MatcherIndex(1),
-  /* [61] */ MatcherIndex(3),
+  /* [59] */ MatcherIndex(1),
+  /* [60] */ MatcherIndex(2),
+  /* [61] */ MatcherIndex(4),
   /* [62] */ MatcherIndex(56),
-  /* [63] */ MatcherIndex(6),
-  /* [64] */ MatcherIndex(0),
-  /* [65] */ MatcherIndex(1),
-  /* [66] */ MatcherIndex(2),
+  /* [63] */ MatcherIndex(8),
+  /* [64] */ MatcherIndex(1),
+  /* [65] */ MatcherIndex(2),
+  /* [66] */ MatcherIndex(3),
   /* [67] */ MatcherIndex(56),
-  /* [68] */ MatcherIndex(7),
+  /* [68] */ MatcherIndex(6),
   /* [69] */ MatcherIndex(0),
-  /* [70] */ MatcherIndex(1),
-  /* [71] */ MatcherIndex(2),
-  /* [72] */ MatcherIndex(26),
-  /* [73] */ MatcherIndex(0),
+  /* [70] */ MatcherIndex(4),
+  /* [71] */ MatcherIndex(3),
+  /* [72] */ MatcherIndex(56),
+  /* [73] */ MatcherIndex(7),
   /* [74] */ MatcherIndex(0),
-  /* [75] */ MatcherIndex(1),
-  /* [76] */ MatcherIndex(26),
-  /* [77] */ MatcherIndex(1),
-  /* [78] */ MatcherIndex(0),
-  /* [79] */ MatcherIndex(2),
-  /* [80] */ MatcherIndex(26),
-  /* [81] */ MatcherIndex(0),
-  /* [82] */ MatcherIndex(1),
-  /* [83] */ MatcherIndex(2),
-  /* [84] */ MatcherIndex(26),
+  /* [75] */ MatcherIndex(2),
+  /* [76] */ MatcherIndex(4),
+  /* [77] */ MatcherIndex(56),
+  /* [78] */ MatcherIndex(6),
+  /* [79] */ MatcherIndex(0),
+  /* [80] */ MatcherIndex(1),
+  /* [81] */ MatcherIndex(2),
+  /* [82] */ MatcherIndex(56),
+  /* [83] */ MatcherIndex(7),
+  /* [84] */ MatcherIndex(0),
   /* [85] */ MatcherIndex(1),
   /* [86] */ MatcherIndex(2),
-  /* [87] */ MatcherIndex(0),
-  /* [88] */ MatcherIndex(26),
-  /* [89] */ MatcherIndex(2),
-  /* [90] */ MatcherIndex(3),
-  /* [91] */ MatcherIndex(0),
+  /* [87] */ MatcherIndex(56),
+  /* [88] */ MatcherIndex(8),
+  /* [89] */ MatcherIndex(0),
+  /* [90] */ MatcherIndex(1),
+  /* [91] */ MatcherIndex(2),
   /* [92] */ MatcherIndex(26),
-  /* [93] */ MatcherIndex(1),
-  /* [94] */ MatcherIndex(3),
-  /* [95] */ MatcherIndex(0),
+  /* [93] */ MatcherIndex(0),
+  /* [94] */ MatcherIndex(0),
+  /* [95] */ MatcherIndex(1),
   /* [96] */ MatcherIndex(26),
-  /* [97] */ MatcherIndex(2),
-  /* [98] */ MatcherIndex(1),
-  /* [99] */ MatcherIndex(0),
-  /* [100] */ MatcherIndex(25),
+  /* [97] */ MatcherIndex(1),
+  /* [98] */ MatcherIndex(0),
+  /* [99] */ MatcherIndex(2),
+  /* [100] */ MatcherIndex(26),
   /* [101] */ MatcherIndex(0),
   /* [102] */ MatcherIndex(1),
-  /* [103] */ MatcherIndex(25),
-  /* [104] */ MatcherIndex(0),
-  /* [105] */ MatcherIndex(6),
-  /* [106] */ MatcherIndex(25),
-  /* [107] */ MatcherIndex(1),
-  /* [108] */ MatcherIndex(0),
-  /* [109] */ MatcherIndex(25),
-  /* [110] */ MatcherIndex(0),
-  /* [111] */ MatcherIndex(11),
-  /* [112] */ MatcherIndex(54),
-  /* [113] */ MatcherIndex(0),
-  /* [114] */ MatcherIndex(1),
-  /* [115] */ MatcherIndex(25),
-  /* [116] */ MatcherIndex(0),
+  /* [103] */ MatcherIndex(2),
+  /* [104] */ MatcherIndex(26),
+  /* [105] */ MatcherIndex(1),
+  /* [106] */ MatcherIndex(2),
+  /* [107] */ MatcherIndex(0),
+  /* [108] */ MatcherIndex(26),
+  /* [109] */ MatcherIndex(2),
+  /* [110] */ MatcherIndex(3),
+  /* [111] */ MatcherIndex(0),
+  /* [112] */ MatcherIndex(26),
+  /* [113] */ MatcherIndex(1),
+  /* [114] */ MatcherIndex(3),
+  /* [115] */ MatcherIndex(0),
+  /* [116] */ MatcherIndex(26),
   /* [117] */ MatcherIndex(2),
-  /* [118] */ MatcherIndex(52),
+  /* [118] */ MatcherIndex(1),
   /* [119] */ MatcherIndex(0),
-  /* [120] */ MatcherIndex(1),
-  /* [121] */ MatcherIndex(45),
-  /* [122] */ MatcherIndex(0),
-  /* [123] */ MatcherIndex(1),
-  /* [124] */ MatcherIndex(46),
-  /* [125] */ MatcherIndex(0),
-  /* [126] */ MatcherIndex(1),
-  /* [127] */ MatcherIndex(47),
+  /* [120] */ MatcherIndex(25),
+  /* [121] */ MatcherIndex(0),
+  /* [122] */ MatcherIndex(1),
+  /* [123] */ MatcherIndex(25),
+  /* [124] */ MatcherIndex(0),
+  /* [125] */ MatcherIndex(6),
+  /* [126] */ MatcherIndex(25),
+  /* [127] */ MatcherIndex(1),
   /* [128] */ MatcherIndex(0),
-  /* [129] */ MatcherIndex(1),
-  /* [130] */ MatcherIndex(48),
-  /* [131] */ MatcherIndex(0),
-  /* [132] */ MatcherIndex(1),
-  /* [133] */ MatcherIndex(45),
-  /* [134] */ MatcherIndex(9),
-  /* [135] */ MatcherIndex(15),
-  /* [136] */ MatcherIndex(10),
-  /* [137] */ MatcherIndex(46),
-  /* [138] */ MatcherIndex(9),
-  /* [139] */ MatcherIndex(15),
-  /* [140] */ MatcherIndex(0),
-  /* [141] */ MatcherIndex(47),
-  /* [142] */ MatcherIndex(9),
-  /* [143] */ MatcherIndex(15),
-  /* [144] */ MatcherIndex(1),
-  /* [145] */ MatcherIndex(48),
-  /* [146] */ MatcherIndex(9),
-  /* [147] */ MatcherIndex(15),
-  /* [148] */ MatcherIndex(45),
-  /* [149] */ MatcherIndex(10),
-  /* [150] */ MatcherIndex(15),
-  /* [151] */ MatcherIndex(46),
-  /* [152] */ MatcherIndex(10),
-  /* [153] */ MatcherIndex(15),
-  /* [154] */ MatcherIndex(47),
-  /* [155] */ MatcherIndex(10),
-  /* [156] */ MatcherIndex(15),
-  /* [157] */ MatcherIndex(48),
-  /* [158] */ MatcherIndex(10),
+  /* [129] */ MatcherIndex(25),
+  /* [130] */ MatcherIndex(0),
+  /* [131] */ MatcherIndex(11),
+  /* [132] */ MatcherIndex(54),
+  /* [133] */ MatcherIndex(0),
+  /* [134] */ MatcherIndex(1),
+  /* [135] */ MatcherIndex(25),
+  /* [136] */ MatcherIndex(0),
+  /* [137] */ MatcherIndex(2),
+  /* [138] */ MatcherIndex(52),
+  /* [139] */ MatcherIndex(0),
+  /* [140] */ MatcherIndex(1),
+  /* [141] */ MatcherIndex(45),
+  /* [142] */ MatcherIndex(0),
+  /* [143] */ MatcherIndex(1),
+  /* [144] */ MatcherIndex(46),
+  /* [145] */ MatcherIndex(0),
+  /* [146] */ MatcherIndex(1),
+  /* [147] */ MatcherIndex(47),
+  /* [148] */ MatcherIndex(0),
+  /* [149] */ MatcherIndex(1),
+  /* [150] */ MatcherIndex(48),
+  /* [151] */ MatcherIndex(0),
+  /* [152] */ MatcherIndex(1),
+  /* [153] */ MatcherIndex(45),
+  /* [154] */ MatcherIndex(9),
+  /* [155] */ MatcherIndex(15),
+  /* [156] */ MatcherIndex(10),
+  /* [157] */ MatcherIndex(46),
+  /* [158] */ MatcherIndex(9),
   /* [159] */ MatcherIndex(15),
-  /* [160] */ MatcherIndex(45),
-  /* [161] */ MatcherIndex(11),
-  /* [162] */ MatcherIndex(15),
-  /* [163] */ MatcherIndex(46),
-  /* [164] */ MatcherIndex(11),
-  /* [165] */ MatcherIndex(15),
-  /* [166] */ MatcherIndex(47),
-  /* [167] */ MatcherIndex(11),
-  /* [168] */ MatcherIndex(15),
-  /* [169] */ MatcherIndex(48),
-  /* [170] */ MatcherIndex(11),
-  /* [171] */ MatcherIndex(15),
-  /* [172] */ MatcherIndex(45),
-  /* [173] */ MatcherIndex(9),
-  /* [174] */ MatcherIndex(14),
-  /* [175] */ MatcherIndex(11),
-  /* [176] */ MatcherIndex(45),
-  /* [177] */ MatcherIndex(10),
-  /* [178] */ MatcherIndex(14),
-  /* [179] */ MatcherIndex(9),
+  /* [160] */ MatcherIndex(0),
+  /* [161] */ MatcherIndex(47),
+  /* [162] */ MatcherIndex(9),
+  /* [163] */ MatcherIndex(15),
+  /* [164] */ MatcherIndex(1),
+  /* [165] */ MatcherIndex(48),
+  /* [166] */ MatcherIndex(9),
+  /* [167] */ MatcherIndex(15),
+  /* [168] */ MatcherIndex(45),
+  /* [169] */ MatcherIndex(10),
+  /* [170] */ MatcherIndex(15),
+  /* [171] */ MatcherIndex(46),
+  /* [172] */ MatcherIndex(10),
+  /* [173] */ MatcherIndex(15),
+  /* [174] */ MatcherIndex(47),
+  /* [175] */ MatcherIndex(10),
+  /* [176] */ MatcherIndex(15),
+  /* [177] */ MatcherIndex(48),
+  /* [178] */ MatcherIndex(10),
+  /* [179] */ MatcherIndex(15),
   /* [180] */ MatcherIndex(45),
   /* [181] */ MatcherIndex(11),
-  /* [182] */ MatcherIndex(14),
-  /* [183] */ MatcherIndex(1),
-  /* [184] */ MatcherIndex(46),
-  /* [185] */ MatcherIndex(9),
-  /* [186] */ MatcherIndex(14),
-  /* [187] */ MatcherIndex(46),
-  /* [188] */ MatcherIndex(10),
-  /* [189] */ MatcherIndex(14),
-  /* [190] */ MatcherIndex(46),
-  /* [191] */ MatcherIndex(11),
-  /* [192] */ MatcherIndex(14),
-  /* [193] */ MatcherIndex(47),
-  /* [194] */ MatcherIndex(9),
-  /* [195] */ MatcherIndex(14),
-  /* [196] */ MatcherIndex(47),
+  /* [182] */ MatcherIndex(15),
+  /* [183] */ MatcherIndex(46),
+  /* [184] */ MatcherIndex(11),
+  /* [185] */ MatcherIndex(15),
+  /* [186] */ MatcherIndex(47),
+  /* [187] */ MatcherIndex(11),
+  /* [188] */ MatcherIndex(15),
+  /* [189] */ MatcherIndex(48),
+  /* [190] */ MatcherIndex(11),
+  /* [191] */ MatcherIndex(15),
+  /* [192] */ MatcherIndex(45),
+  /* [193] */ MatcherIndex(9),
+  /* [194] */ MatcherIndex(14),
+  /* [195] */ MatcherIndex(11),
+  /* [196] */ MatcherIndex(45),
   /* [197] */ MatcherIndex(10),
   /* [198] */ MatcherIndex(14),
-  /* [199] */ MatcherIndex(47),
-  /* [200] */ MatcherIndex(11),
-  /* [201] */ MatcherIndex(14),
-  /* [202] */ MatcherIndex(48),
-  /* [203] */ MatcherIndex(9),
-  /* [204] */ MatcherIndex(14),
-  /* [205] */ MatcherIndex(48),
-  /* [206] */ MatcherIndex(10),
-  /* [207] */ MatcherIndex(14),
-  /* [208] */ MatcherIndex(48),
-  /* [209] */ MatcherIndex(11),
-  /* [210] */ MatcherIndex(14),
-  /* [211] */ MatcherIndex(25),
-  /* [212] */ MatcherIndex(2),
-  /* [213] */ MatcherIndex(0),
-  /* [214] */ MatcherIndex(25),
-  /* [215] */ MatcherIndex(1),
-  /* [216] */ MatcherIndex(6),
-  /* [217] */ MatcherIndex(25),
-  /* [218] */ MatcherIndex(1),
-  /* [219] */ MatcherIndex(10),
-  /* [220] */ MatcherIndex(53),
-  /* [221] */ MatcherIndex(0),
-  /* [222] */ MatcherIndex(51),
-  /* [223] */ MatcherIndex(0),
-  /* [224] */ MatcherIndex(33),
-  /* [225] */ MatcherIndex(0),
-  /* [226] */ MatcherIndex(13),
-  /* [227] */ MatcherIndex(10),
-  /* [228] */ MatcherIndex(34),
-  /* [229] */ MatcherIndex(0),
-  /* [230] */ MatcherIndex(35),
-  /* [231] */ MatcherIndex(0),
-  /* [232] */ MatcherIndex(36),
+  /* [199] */ MatcherIndex(9),
+  /* [200] */ MatcherIndex(45),
+  /* [201] */ MatcherIndex(11),
+  /* [202] */ MatcherIndex(14),
+  /* [203] */ MatcherIndex(1),
+  /* [204] */ MatcherIndex(46),
+  /* [205] */ MatcherIndex(9),
+  /* [206] */ MatcherIndex(14),
+  /* [207] */ MatcherIndex(46),
+  /* [208] */ MatcherIndex(10),
+  /* [209] */ MatcherIndex(14),
+  /* [210] */ MatcherIndex(46),
+  /* [211] */ MatcherIndex(11),
+  /* [212] */ MatcherIndex(14),
+  /* [213] */ MatcherIndex(47),
+  /* [214] */ MatcherIndex(9),
+  /* [215] */ MatcherIndex(14),
+  /* [216] */ MatcherIndex(47),
+  /* [217] */ MatcherIndex(10),
+  /* [218] */ MatcherIndex(14),
+  /* [219] */ MatcherIndex(47),
+  /* [220] */ MatcherIndex(11),
+  /* [221] */ MatcherIndex(14),
+  /* [222] */ MatcherIndex(48),
+  /* [223] */ MatcherIndex(9),
+  /* [224] */ MatcherIndex(14),
+  /* [225] */ MatcherIndex(48),
+  /* [226] */ MatcherIndex(10),
+  /* [227] */ MatcherIndex(14),
+  /* [228] */ MatcherIndex(48),
+  /* [229] */ MatcherIndex(11),
+  /* [230] */ MatcherIndex(14),
+  /* [231] */ MatcherIndex(25),
+  /* [232] */ MatcherIndex(2),
   /* [233] */ MatcherIndex(0),
-  /* [234] */ MatcherIndex(37),
-  /* [235] */ MatcherIndex(0),
-  /* [236] */ MatcherIndex(38),
-  /* [237] */ MatcherIndex(0),
-  /* [238] */ MatcherIndex(39),
-  /* [239] */ MatcherIndex(0),
-  /* [240] */ MatcherIndex(13),
-  /* [241] */ MatcherIndex(9),
-  /* [242] */ MatcherIndex(33),
-  /* [243] */ MatcherIndex(11),
-  /* [244] */ MatcherIndex(34),
-  /* [245] */ MatcherIndex(11),
-  /* [246] */ MatcherIndex(35),
-  /* [247] */ MatcherIndex(11),
-  /* [248] */ MatcherIndex(36),
-  /* [249] */ MatcherIndex(11),
-  /* [250] */ MatcherIndex(37),
-  /* [251] */ MatcherIndex(11),
-  /* [252] */ MatcherIndex(38),
-  /* [253] */ MatcherIndex(11),
-  /* [254] */ MatcherIndex(13),
+  /* [234] */ MatcherIndex(25),
+  /* [235] */ MatcherIndex(1),
+  /* [236] */ MatcherIndex(6),
+  /* [237] */ MatcherIndex(25),
+  /* [238] */ MatcherIndex(1),
+  /* [239] */ MatcherIndex(10),
+  /* [240] */ MatcherIndex(53),
+  /* [241] */ MatcherIndex(0),
+  /* [242] */ MatcherIndex(51),
+  /* [243] */ MatcherIndex(0),
+  /* [244] */ MatcherIndex(33),
+  /* [245] */ MatcherIndex(0),
+  /* [246] */ MatcherIndex(13),
+  /* [247] */ MatcherIndex(10),
+  /* [248] */ MatcherIndex(34),
+  /* [249] */ MatcherIndex(0),
+  /* [250] */ MatcherIndex(35),
+  /* [251] */ MatcherIndex(0),
+  /* [252] */ MatcherIndex(36),
+  /* [253] */ MatcherIndex(0),
+  /* [254] */ MatcherIndex(37),
   /* [255] */ MatcherIndex(0),
-  /* [256] */ MatcherIndex(13),
-  /* [257] */ MatcherIndex(1),
-  /* [258] */ MatcherIndex(50),
+  /* [256] */ MatcherIndex(38),
+  /* [257] */ MatcherIndex(0),
+  /* [258] */ MatcherIndex(39),
   /* [259] */ MatcherIndex(0),
-  /* [260] */ MatcherIndex(55),
-  /* [261] */ MatcherIndex(0),
-  /* [262] */ MatcherIndex(16),
-  /* [263] */ MatcherIndex(0),
-  /* [264] */ MatcherIndex(16),
+  /* [260] */ MatcherIndex(13),
+  /* [261] */ MatcherIndex(9),
+  /* [262] */ MatcherIndex(33),
+  /* [263] */ MatcherIndex(11),
+  /* [264] */ MatcherIndex(34),
   /* [265] */ MatcherIndex(11),
-  /* [266] */ MatcherIndex(16),
-  /* [267] */ MatcherIndex(12),
-  /* [268] */ MatcherIndex(17),
-  /* [269] */ MatcherIndex(0),
-  /* [270] */ MatcherIndex(17),
+  /* [266] */ MatcherIndex(35),
+  /* [267] */ MatcherIndex(11),
+  /* [268] */ MatcherIndex(36),
+  /* [269] */ MatcherIndex(11),
+  /* [270] */ MatcherIndex(37),
   /* [271] */ MatcherIndex(11),
-  /* [272] */ MatcherIndex(17),
-  /* [273] */ MatcherIndex(12),
-  /* [274] */ MatcherIndex(18),
+  /* [272] */ MatcherIndex(38),
+  /* [273] */ MatcherIndex(11),
+  /* [274] */ MatcherIndex(13),
   /* [275] */ MatcherIndex(0),
-  /* [276] */ MatcherIndex(18),
-  /* [277] */ MatcherIndex(11),
-  /* [278] */ MatcherIndex(18),
-  /* [279] */ MatcherIndex(12),
-  /* [280] */ MatcherIndex(19),
+  /* [276] */ MatcherIndex(13),
+  /* [277] */ MatcherIndex(1),
+  /* [278] */ MatcherIndex(50),
+  /* [279] */ MatcherIndex(0),
+  /* [280] */ MatcherIndex(55),
   /* [281] */ MatcherIndex(0),
-  /* [282] */ MatcherIndex(19),
-  /* [283] */ MatcherIndex(11),
-  /* [284] */ MatcherIndex(19),
-  /* [285] */ MatcherIndex(12),
-  /* [286] */ MatcherIndex(20),
-  /* [287] */ MatcherIndex(0),
-  /* [288] */ MatcherIndex(20),
-  /* [289] */ MatcherIndex(11),
-  /* [290] */ MatcherIndex(20),
-  /* [291] */ MatcherIndex(12),
-  /* [292] */ MatcherIndex(21),
-  /* [293] */ MatcherIndex(0),
-  /* [294] */ MatcherIndex(21),
-  /* [295] */ MatcherIndex(11),
-  /* [296] */ MatcherIndex(21),
-  /* [297] */ MatcherIndex(12),
-  /* [298] */ MatcherIndex(22),
-  /* [299] */ MatcherIndex(0),
-  /* [300] */ MatcherIndex(22),
-  /* [301] */ MatcherIndex(11),
-  /* [302] */ MatcherIndex(22),
-  /* [303] */ MatcherIndex(12),
-  /* [304] */ MatcherIndex(23),
-  /* [305] */ MatcherIndex(0),
-  /* [306] */ MatcherIndex(23),
-  /* [307] */ MatcherIndex(11),
-  /* [308] */ MatcherIndex(23),
-  /* [309] */ MatcherIndex(12),
-  /* [310] */ MatcherIndex(24),
-  /* [311] */ MatcherIndex(0),
-  /* [312] */ MatcherIndex(24),
-  /* [313] */ MatcherIndex(11),
-  /* [314] */ MatcherIndex(24),
-  /* [315] */ MatcherIndex(12),
-  /* [316] */ MatcherIndex(63),
-  /* [317] */ MatcherIndex(67),
-  /* [318] */ MatcherIndex(68),
-  /* [319] */ MatcherIndex(57),
-  /* [320] */ MatcherIndex(65),
-  /* [321] */ MatcherIndex(64),
-  /* [322] */ MatcherIndex(40),
-  /* [323] */ MatcherIndex(41),
-  /* [324] */ MatcherIndex(42),
-  /* [325] */ MatcherIndex(43),
-  /* [326] */ MatcherIndex(44),
-  /* [327] */ MatcherIndex(49),
-  /* [328] */ MatcherIndex(31),
-  /* [329] */ MatcherIndex(32),
-  /* [330] */ MatcherIndex(69),
-  /* [331] */ MatcherIndex(60),
-  /* [332] */ MatcherIndex(61),
-  /* [333] */ MatcherIndex(58),
-  /* [334] */ MatcherIndex(59),
-  /* [335] */ MatcherIndex(62),
+  /* [282] */ MatcherIndex(16),
+  /* [283] */ MatcherIndex(0),
+  /* [284] */ MatcherIndex(16),
+  /* [285] */ MatcherIndex(11),
+  /* [286] */ MatcherIndex(16),
+  /* [287] */ MatcherIndex(12),
+  /* [288] */ MatcherIndex(17),
+  /* [289] */ MatcherIndex(0),
+  /* [290] */ MatcherIndex(17),
+  /* [291] */ MatcherIndex(11),
+  /* [292] */ MatcherIndex(17),
+  /* [293] */ MatcherIndex(12),
+  /* [294] */ MatcherIndex(18),
+  /* [295] */ MatcherIndex(0),
+  /* [296] */ MatcherIndex(18),
+  /* [297] */ MatcherIndex(11),
+  /* [298] */ MatcherIndex(18),
+  /* [299] */ MatcherIndex(12),
+  /* [300] */ MatcherIndex(19),
+  /* [301] */ MatcherIndex(0),
+  /* [302] */ MatcherIndex(19),
+  /* [303] */ MatcherIndex(11),
+  /* [304] */ MatcherIndex(19),
+  /* [305] */ MatcherIndex(12),
+  /* [306] */ MatcherIndex(20),
+  /* [307] */ MatcherIndex(0),
+  /* [308] */ MatcherIndex(20),
+  /* [309] */ MatcherIndex(11),
+  /* [310] */ MatcherIndex(20),
+  /* [311] */ MatcherIndex(12),
+  /* [312] */ MatcherIndex(21),
+  /* [313] */ MatcherIndex(0),
+  /* [314] */ MatcherIndex(21),
+  /* [315] */ MatcherIndex(11),
+  /* [316] */ MatcherIndex(21),
+  /* [317] */ MatcherIndex(12),
+  /* [318] */ MatcherIndex(22),
+  /* [319] */ MatcherIndex(0),
+  /* [320] */ MatcherIndex(22),
+  /* [321] */ MatcherIndex(11),
+  /* [322] */ MatcherIndex(22),
+  /* [323] */ MatcherIndex(12),
+  /* [324] */ MatcherIndex(23),
+  /* [325] */ MatcherIndex(0),
+  /* [326] */ MatcherIndex(23),
+  /* [327] */ MatcherIndex(11),
+  /* [328] */ MatcherIndex(23),
+  /* [329] */ MatcherIndex(12),
+  /* [330] */ MatcherIndex(24),
+  /* [331] */ MatcherIndex(0),
+  /* [332] */ MatcherIndex(24),
+  /* [333] */ MatcherIndex(11),
+  /* [334] */ MatcherIndex(24),
+  /* [335] */ MatcherIndex(12),
+  /* [336] */ MatcherIndex(63),
+  /* [337] */ MatcherIndex(67),
+  /* [338] */ MatcherIndex(68),
+  /* [339] */ MatcherIndex(57),
+  /* [340] */ MatcherIndex(65),
+  /* [341] */ MatcherIndex(64),
+  /* [342] */ MatcherIndex(40),
+  /* [343] */ MatcherIndex(41),
+  /* [344] */ MatcherIndex(42),
+  /* [345] */ MatcherIndex(43),
+  /* [346] */ MatcherIndex(44),
+  /* [347] */ MatcherIndex(49),
+  /* [348] */ MatcherIndex(31),
+  /* [349] */ MatcherIndex(32),
+  /* [350] */ MatcherIndex(69),
+  /* [351] */ MatcherIndex(60),
+  /* [352] */ MatcherIndex(61),
+  /* [353] */ MatcherIndex(58),
+  /* [354] */ MatcherIndex(59),
+  /* [355] */ MatcherIndex(62),
 };
 
 static_assert(MatcherIndicesIndex::CanIndex(kMatcherIndices),
@@ -2127,12 +2147,12 @@
   {
     /* [19] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(246),
+    /* matcher_indices */ MatcherIndicesIndex(266),
   },
   {
     /* [20] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(328),
+    /* matcher_indices */ MatcherIndicesIndex(348),
   },
   {
     /* [21] */
@@ -2157,7 +2177,7 @@
   {
     /* [25] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(240),
+    /* matcher_indices */ MatcherIndicesIndex(260),
   },
   {
     /* [26] */
@@ -2167,12 +2187,12 @@
   {
     /* [27] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(230),
+    /* matcher_indices */ MatcherIndicesIndex(250),
   },
   {
     /* [28] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(328),
+    /* matcher_indices */ MatcherIndicesIndex(348),
   },
   {
     /* [29] */
@@ -2187,17 +2207,17 @@
   {
     /* [31] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(240),
+    /* matcher_indices */ MatcherIndicesIndex(260),
   },
   {
     /* [32] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(323),
+    /* matcher_indices */ MatcherIndicesIndex(343),
   },
   {
     /* [33] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(329),
+    /* matcher_indices */ MatcherIndicesIndex(349),
   },
   {
     /* [34] */
@@ -2217,17 +2237,17 @@
   {
     /* [37] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(240),
+    /* matcher_indices */ MatcherIndicesIndex(260),
   },
   {
     /* [38] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(246),
+    /* matcher_indices */ MatcherIndicesIndex(266),
   },
   {
     /* [39] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(328),
+    /* matcher_indices */ MatcherIndicesIndex(348),
   },
   {
     /* [40] */
@@ -2247,17 +2267,17 @@
   {
     /* [43] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(240),
+    /* matcher_indices */ MatcherIndicesIndex(260),
   },
   {
     /* [44] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(244),
+    /* matcher_indices */ MatcherIndicesIndex(264),
   },
   {
     /* [45] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(328),
+    /* matcher_indices */ MatcherIndicesIndex(348),
   },
   {
     /* [46] */
@@ -2277,52 +2297,52 @@
   {
     /* [49] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(240),
+    /* matcher_indices */ MatcherIndicesIndex(260),
   },
   {
     /* [50] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(248),
+    /* matcher_indices */ MatcherIndicesIndex(268),
   },
   {
     /* [51] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(328),
+    /* matcher_indices */ MatcherIndicesIndex(348),
   },
   {
     /* [52] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(174),
+    /* matcher_indices */ MatcherIndicesIndex(194),
   },
   {
     /* [53] */
     /* usage */ core::ParameterUsage::kDdx,
-    /* matcher_indices */ MatcherIndicesIndex(174),
+    /* matcher_indices */ MatcherIndicesIndex(194),
   },
   {
     /* [54] */
     /* usage */ core::ParameterUsage::kDdy,
-    /* matcher_indices */ MatcherIndicesIndex(174),
+    /* matcher_indices */ MatcherIndicesIndex(194),
   },
   {
     /* [55] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(178),
+    /* matcher_indices */ MatcherIndicesIndex(198),
   },
   {
     /* [56] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(252),
+    /* matcher_indices */ MatcherIndicesIndex(272),
   },
   {
     /* [57] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(328),
+    /* matcher_indices */ MatcherIndicesIndex(348),
   },
   {
     /* [58] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(174),
+    /* matcher_indices */ MatcherIndicesIndex(194),
   },
   {
     /* [59] */
@@ -2332,22 +2352,22 @@
   {
     /* [60] */
     /* usage */ core::ParameterUsage::kDdx,
-    /* matcher_indices */ MatcherIndicesIndex(174),
+    /* matcher_indices */ MatcherIndicesIndex(194),
   },
   {
     /* [61] */
     /* usage */ core::ParameterUsage::kDdy,
-    /* matcher_indices */ MatcherIndicesIndex(174),
+    /* matcher_indices */ MatcherIndicesIndex(194),
   },
   {
     /* [62] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(246),
+    /* matcher_indices */ MatcherIndicesIndex(266),
   },
   {
     /* [63] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(328),
+    /* matcher_indices */ MatcherIndicesIndex(348),
   },
   {
     /* [64] */
@@ -2367,17 +2387,17 @@
   {
     /* [67] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(240),
+    /* matcher_indices */ MatcherIndicesIndex(260),
   },
   {
     /* [68] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(323),
+    /* matcher_indices */ MatcherIndicesIndex(343),
   },
   {
     /* [69] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(328),
+    /* matcher_indices */ MatcherIndicesIndex(348),
   },
   {
     /* [70] */
@@ -2397,7 +2417,7 @@
   {
     /* [73] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(240),
+    /* matcher_indices */ MatcherIndicesIndex(260),
   },
   {
     /* [74] */
@@ -2407,12 +2427,12 @@
   {
     /* [75] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(228),
+    /* matcher_indices */ MatcherIndicesIndex(248),
   },
   {
     /* [76] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(328),
+    /* matcher_indices */ MatcherIndicesIndex(348),
   },
   {
     /* [77] */
@@ -2422,7 +2442,7 @@
   {
     /* [78] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(240),
+    /* matcher_indices */ MatcherIndicesIndex(260),
   },
   {
     /* [79] */
@@ -2432,17 +2452,17 @@
   {
     /* [80] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(236),
+    /* matcher_indices */ MatcherIndicesIndex(256),
   },
   {
     /* [81] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(328),
+    /* matcher_indices */ MatcherIndicesIndex(348),
   },
   {
     /* [82] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(174),
+    /* matcher_indices */ MatcherIndicesIndex(194),
   },
   {
     /* [83] */
@@ -2452,12 +2472,12 @@
   {
     /* [84] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(323),
+    /* matcher_indices */ MatcherIndicesIndex(343),
   },
   {
     /* [85] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(328),
+    /* matcher_indices */ MatcherIndicesIndex(348),
   },
   {
     /* [86] */
@@ -2472,17 +2492,17 @@
   {
     /* [88] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(240),
+    /* matcher_indices */ MatcherIndicesIndex(260),
   },
   {
     /* [89] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(322),
+    /* matcher_indices */ MatcherIndicesIndex(342),
   },
   {
     /* [90] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(329),
+    /* matcher_indices */ MatcherIndicesIndex(349),
   },
   {
     /* [91] */
@@ -2497,22 +2517,22 @@
   {
     /* [93] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(240),
+    /* matcher_indices */ MatcherIndicesIndex(260),
   },
   {
     /* [94] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(325),
+    /* matcher_indices */ MatcherIndicesIndex(345),
   },
   {
     /* [95] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(329),
+    /* matcher_indices */ MatcherIndicesIndex(349),
   },
   {
     /* [96] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(174),
+    /* matcher_indices */ MatcherIndicesIndex(194),
   },
   {
     /* [97] */
@@ -2527,12 +2547,12 @@
   {
     /* [99] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(246),
+    /* matcher_indices */ MatcherIndicesIndex(266),
   },
   {
     /* [100] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(328),
+    /* matcher_indices */ MatcherIndicesIndex(348),
   },
   {
     /* [101] */
@@ -2547,17 +2567,17 @@
   {
     /* [103] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(240),
+    /* matcher_indices */ MatcherIndicesIndex(260),
   },
   {
     /* [104] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(244),
+    /* matcher_indices */ MatcherIndicesIndex(264),
   },
   {
     /* [105] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(328),
+    /* matcher_indices */ MatcherIndicesIndex(348),
   },
   {
     /* [106] */
@@ -2572,22 +2592,22 @@
   {
     /* [108] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(240),
+    /* matcher_indices */ MatcherIndicesIndex(260),
   },
   {
     /* [109] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(248),
+    /* matcher_indices */ MatcherIndicesIndex(268),
   },
   {
     /* [110] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(328),
+    /* matcher_indices */ MatcherIndicesIndex(348),
   },
   {
     /* [111] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(174),
+    /* matcher_indices */ MatcherIndicesIndex(194),
   },
   {
     /* [112] */
@@ -2597,22 +2617,22 @@
   {
     /* [113] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(178),
+    /* matcher_indices */ MatcherIndicesIndex(198),
   },
   {
     /* [114] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(252),
+    /* matcher_indices */ MatcherIndicesIndex(272),
   },
   {
     /* [115] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(328),
+    /* matcher_indices */ MatcherIndicesIndex(348),
   },
   {
     /* [116] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(174),
+    /* matcher_indices */ MatcherIndicesIndex(194),
   },
   {
     /* [117] */
@@ -2627,37 +2647,37 @@
   {
     /* [119] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(250),
+    /* matcher_indices */ MatcherIndicesIndex(270),
   },
   {
     /* [120] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(328),
+    /* matcher_indices */ MatcherIndicesIndex(348),
   },
   {
     /* [121] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(174),
+    /* matcher_indices */ MatcherIndicesIndex(194),
   },
   {
     /* [122] */
     /* usage */ core::ParameterUsage::kDdx,
-    /* matcher_indices */ MatcherIndicesIndex(174),
+    /* matcher_indices */ MatcherIndicesIndex(194),
   },
   {
     /* [123] */
     /* usage */ core::ParameterUsage::kDdy,
-    /* matcher_indices */ MatcherIndicesIndex(174),
+    /* matcher_indices */ MatcherIndicesIndex(194),
   },
   {
     /* [124] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(244),
+    /* matcher_indices */ MatcherIndicesIndex(264),
   },
   {
     /* [125] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(328),
+    /* matcher_indices */ MatcherIndicesIndex(348),
   },
   {
     /* [126] */
@@ -2672,22 +2692,22 @@
   {
     /* [128] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(240),
+    /* matcher_indices */ MatcherIndicesIndex(260),
   },
   {
     /* [129] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(248),
+    /* matcher_indices */ MatcherIndicesIndex(268),
   },
   {
     /* [130] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(328),
+    /* matcher_indices */ MatcherIndicesIndex(348),
   },
   {
     /* [131] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(174),
+    /* matcher_indices */ MatcherIndicesIndex(194),
   },
   {
     /* [132] */
@@ -2697,22 +2717,22 @@
   {
     /* [133] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(178),
+    /* matcher_indices */ MatcherIndicesIndex(198),
   },
   {
     /* [134] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(252),
+    /* matcher_indices */ MatcherIndicesIndex(272),
   },
   {
     /* [135] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(328),
+    /* matcher_indices */ MatcherIndicesIndex(348),
   },
   {
     /* [136] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(174),
+    /* matcher_indices */ MatcherIndicesIndex(194),
   },
   {
     /* [137] */
@@ -2727,12 +2747,12 @@
   {
     /* [139] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(322),
+    /* matcher_indices */ MatcherIndicesIndex(342),
   },
   {
     /* [140] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(328),
+    /* matcher_indices */ MatcherIndicesIndex(348),
   },
   {
     /* [141] */
@@ -2747,22 +2767,22 @@
   {
     /* [143] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(240),
+    /* matcher_indices */ MatcherIndicesIndex(260),
   },
   {
     /* [144] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(325),
+    /* matcher_indices */ MatcherIndicesIndex(345),
   },
   {
     /* [145] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(328),
+    /* matcher_indices */ MatcherIndicesIndex(348),
   },
   {
     /* [146] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(174),
+    /* matcher_indices */ MatcherIndicesIndex(194),
   },
   {
     /* [147] */
@@ -2827,12 +2847,12 @@
   {
     /* [159] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(100),
+    /* matcher_indices */ MatcherIndicesIndex(120),
   },
   {
     /* [160] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(100),
+    /* matcher_indices */ MatcherIndicesIndex(120),
   },
   {
     /* [161] */
@@ -2852,27 +2872,27 @@
   {
     /* [164] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(234),
+    /* matcher_indices */ MatcherIndicesIndex(254),
   },
   {
     /* [165] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(328),
+    /* matcher_indices */ MatcherIndicesIndex(348),
   },
   {
     /* [166] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(174),
+    /* matcher_indices */ MatcherIndicesIndex(194),
   },
   {
     /* [167] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(322),
+    /* matcher_indices */ MatcherIndicesIndex(342),
   },
   {
     /* [168] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(328),
+    /* matcher_indices */ MatcherIndicesIndex(348),
   },
   {
     /* [169] */
@@ -2882,22 +2902,22 @@
   {
     /* [170] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(240),
+    /* matcher_indices */ MatcherIndicesIndex(260),
   },
   {
     /* [171] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(324),
+    /* matcher_indices */ MatcherIndicesIndex(344),
   },
   {
     /* [172] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(329),
+    /* matcher_indices */ MatcherIndicesIndex(349),
   },
   {
     /* [173] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(174),
+    /* matcher_indices */ MatcherIndicesIndex(194),
   },
   {
     /* [174] */
@@ -2907,12 +2927,12 @@
   {
     /* [175] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(244),
+    /* matcher_indices */ MatcherIndicesIndex(264),
   },
   {
     /* [176] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(328),
+    /* matcher_indices */ MatcherIndicesIndex(348),
   },
   {
     /* [177] */
@@ -2922,42 +2942,42 @@
   {
     /* [178] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(240),
+    /* matcher_indices */ MatcherIndicesIndex(260),
   },
   {
     /* [179] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(248),
+    /* matcher_indices */ MatcherIndicesIndex(268),
   },
   {
     /* [180] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(328),
+    /* matcher_indices */ MatcherIndicesIndex(348),
   },
   {
     /* [181] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(174),
+    /* matcher_indices */ MatcherIndicesIndex(194),
   },
   {
     /* [182] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(178),
+    /* matcher_indices */ MatcherIndicesIndex(198),
   },
   {
     /* [183] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(250),
+    /* matcher_indices */ MatcherIndicesIndex(270),
   },
   {
     /* [184] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(328),
+    /* matcher_indices */ MatcherIndicesIndex(348),
   },
   {
     /* [185] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(174),
+    /* matcher_indices */ MatcherIndicesIndex(194),
   },
   {
     /* [186] */
@@ -2967,17 +2987,17 @@
   {
     /* [187] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(250),
+    /* matcher_indices */ MatcherIndicesIndex(270),
   },
   {
     /* [188] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(328),
+    /* matcher_indices */ MatcherIndicesIndex(348),
   },
   {
     /* [189] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(174),
+    /* matcher_indices */ MatcherIndicesIndex(194),
   },
   {
     /* [190] */
@@ -2987,17 +3007,17 @@
   {
     /* [191] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(324),
+    /* matcher_indices */ MatcherIndicesIndex(344),
   },
   {
     /* [192] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(328),
+    /* matcher_indices */ MatcherIndicesIndex(348),
   },
   {
     /* [193] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(174),
+    /* matcher_indices */ MatcherIndicesIndex(194),
   },
   {
     /* [194] */
@@ -3007,12 +3027,12 @@
   {
     /* [195] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(141),
+    /* matcher_indices */ MatcherIndicesIndex(161),
   },
   {
     /* [196] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(254),
+    /* matcher_indices */ MatcherIndicesIndex(274),
   },
   {
     /* [197] */
@@ -3027,12 +3047,12 @@
   {
     /* [199] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(154),
+    /* matcher_indices */ MatcherIndicesIndex(174),
   },
   {
     /* [200] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(254),
+    /* matcher_indices */ MatcherIndicesIndex(274),
   },
   {
     /* [201] */
@@ -3047,12 +3067,12 @@
   {
     /* [203] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(166),
+    /* matcher_indices */ MatcherIndicesIndex(186),
   },
   {
     /* [204] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(254),
+    /* matcher_indices */ MatcherIndicesIndex(274),
   },
   {
     /* [205] */
@@ -3062,17 +3082,17 @@
   {
     /* [206] */
     /* usage */ core::ParameterUsage::kValue,
-    /* matcher_indices */ MatcherIndicesIndex(135),
+    /* matcher_indices */ MatcherIndicesIndex(155),
   },
   {
     /* [207] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(230),
+    /* matcher_indices */ MatcherIndicesIndex(250),
   },
   {
     /* [208] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(256),
+    /* matcher_indices */ MatcherIndicesIndex(276),
   },
   {
     /* [209] */
@@ -3087,12 +3107,12 @@
   {
     /* [211] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(323),
+    /* matcher_indices */ MatcherIndicesIndex(343),
   },
   {
     /* [212] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(254),
+    /* matcher_indices */ MatcherIndicesIndex(274),
   },
   {
     /* [213] */
@@ -3167,22 +3187,22 @@
   {
     /* [227] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(254),
+    /* matcher_indices */ MatcherIndicesIndex(274),
   },
   {
     /* [228] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(254),
+    /* matcher_indices */ MatcherIndicesIndex(274),
   },
   {
     /* [229] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(254),
+    /* matcher_indices */ MatcherIndicesIndex(274),
   },
   {
     /* [230] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(254),
+    /* matcher_indices */ MatcherIndicesIndex(274),
   },
   {
     /* [231] */
@@ -3207,37 +3227,37 @@
   {
     /* [235] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(139),
+    /* matcher_indices */ MatcherIndicesIndex(159),
   },
   {
     /* [236] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(139),
+    /* matcher_indices */ MatcherIndicesIndex(159),
   },
   {
     /* [237] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(139),
+    /* matcher_indices */ MatcherIndicesIndex(159),
   },
   {
     /* [238] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(139),
+    /* matcher_indices */ MatcherIndicesIndex(159),
   },
   {
     /* [239] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(106),
+    /* matcher_indices */ MatcherIndicesIndex(126),
   },
   {
     /* [240] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(106),
+    /* matcher_indices */ MatcherIndicesIndex(126),
   },
   {
     /* [241] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(106),
+    /* matcher_indices */ MatcherIndicesIndex(126),
   },
   {
     /* [242] */
@@ -3252,17 +3272,17 @@
   {
     /* [244] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(100),
+    /* matcher_indices */ MatcherIndicesIndex(120),
   },
   {
     /* [245] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(100),
+    /* matcher_indices */ MatcherIndicesIndex(120),
   },
   {
     /* [246] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(100),
+    /* matcher_indices */ MatcherIndicesIndex(120),
   },
   {
     /* [247] */
@@ -3287,32 +3307,32 @@
   {
     /* [251] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(100),
+    /* matcher_indices */ MatcherIndicesIndex(120),
   },
   {
     /* [252] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(100),
+    /* matcher_indices */ MatcherIndicesIndex(120),
   },
   {
     /* [253] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(103),
+    /* matcher_indices */ MatcherIndicesIndex(123),
   },
   {
     /* [254] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(103),
+    /* matcher_indices */ MatcherIndicesIndex(123),
   },
   {
     /* [255] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(242),
+    /* matcher_indices */ MatcherIndicesIndex(262),
   },
   {
     /* [256] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(328),
+    /* matcher_indices */ MatcherIndicesIndex(348),
   },
   {
     /* [257] */
@@ -3322,12 +3342,12 @@
   {
     /* [258] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(327),
+    /* matcher_indices */ MatcherIndicesIndex(347),
   },
   {
     /* [259] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(328),
+    /* matcher_indices */ MatcherIndicesIndex(348),
   },
   {
     /* [260] */
@@ -3337,7 +3357,7 @@
   {
     /* [261] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(133),
+    /* matcher_indices */ MatcherIndicesIndex(153),
   },
   {
     /* [262] */
@@ -3352,12 +3372,12 @@
   {
     /* [264] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(137),
+    /* matcher_indices */ MatcherIndicesIndex(157),
   },
   {
     /* [265] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(254),
+    /* matcher_indices */ MatcherIndicesIndex(274),
   },
   {
     /* [266] */
@@ -3367,7 +3387,7 @@
   {
     /* [267] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(145),
+    /* matcher_indices */ MatcherIndicesIndex(165),
   },
   {
     /* [268] */
@@ -3382,7 +3402,7 @@
   {
     /* [270] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(148),
+    /* matcher_indices */ MatcherIndicesIndex(168),
   },
   {
     /* [271] */
@@ -3397,12 +3417,12 @@
   {
     /* [273] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(151),
+    /* matcher_indices */ MatcherIndicesIndex(171),
   },
   {
     /* [274] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(254),
+    /* matcher_indices */ MatcherIndicesIndex(274),
   },
   {
     /* [275] */
@@ -3412,7 +3432,7 @@
   {
     /* [276] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(157),
+    /* matcher_indices */ MatcherIndicesIndex(177),
   },
   {
     /* [277] */
@@ -3427,7 +3447,7 @@
   {
     /* [279] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(160),
+    /* matcher_indices */ MatcherIndicesIndex(180),
   },
   {
     /* [280] */
@@ -3437,27 +3457,27 @@
   {
     /* [281] */
     /* usage */ core::ParameterUsage::kValue,
-    /* matcher_indices */ MatcherIndicesIndex(135),
+    /* matcher_indices */ MatcherIndicesIndex(155),
   },
   {
     /* [282] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(163),
+    /* matcher_indices */ MatcherIndicesIndex(183),
   },
   {
     /* [283] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(254),
+    /* matcher_indices */ MatcherIndicesIndex(274),
   },
   {
     /* [284] */
     /* usage */ core::ParameterUsage::kValue,
-    /* matcher_indices */ MatcherIndicesIndex(135),
+    /* matcher_indices */ MatcherIndicesIndex(155),
   },
   {
     /* [285] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(169),
+    /* matcher_indices */ MatcherIndicesIndex(189),
   },
   {
     /* [286] */
@@ -3467,12 +3487,12 @@
   {
     /* [287] */
     /* usage */ core::ParameterUsage::kValue,
-    /* matcher_indices */ MatcherIndicesIndex(135),
+    /* matcher_indices */ MatcherIndicesIndex(155),
   },
   {
     /* [288] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(224),
+    /* matcher_indices */ MatcherIndicesIndex(244),
   },
   {
     /* [289] */
@@ -3487,12 +3507,12 @@
   {
     /* [291] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(228),
+    /* matcher_indices */ MatcherIndicesIndex(248),
   },
   {
     /* [292] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(256),
+    /* matcher_indices */ MatcherIndicesIndex(276),
   },
   {
     /* [293] */
@@ -3502,12 +3522,12 @@
   {
     /* [294] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(232),
+    /* matcher_indices */ MatcherIndicesIndex(252),
   },
   {
     /* [295] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(182),
+    /* matcher_indices */ MatcherIndicesIndex(202),
   },
   {
     /* [296] */
@@ -3517,12 +3537,12 @@
   {
     /* [297] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(238),
+    /* matcher_indices */ MatcherIndicesIndex(258),
   },
   {
     /* [298] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(256),
+    /* matcher_indices */ MatcherIndicesIndex(276),
   },
   {
     /* [299] */
@@ -3532,12 +3552,12 @@
   {
     /* [300] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(322),
+    /* matcher_indices */ MatcherIndicesIndex(342),
   },
   {
     /* [301] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(254),
+    /* matcher_indices */ MatcherIndicesIndex(274),
   },
   {
     /* [302] */
@@ -3547,12 +3567,12 @@
   {
     /* [303] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(326),
+    /* matcher_indices */ MatcherIndicesIndex(346),
   },
   {
     /* [304] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(254),
+    /* matcher_indices */ MatcherIndicesIndex(274),
   },
   {
     /* [305] */
@@ -3562,12 +3582,12 @@
   {
     /* [306] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* matcher_indices */ MatcherIndicesIndex(213),
   },
   {
     /* [307] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(254),
+    /* matcher_indices */ MatcherIndicesIndex(274),
   },
   {
     /* [308] */
@@ -3577,12 +3597,12 @@
   {
     /* [309] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(196),
+    /* matcher_indices */ MatcherIndicesIndex(216),
   },
   {
     /* [310] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(254),
+    /* matcher_indices */ MatcherIndicesIndex(274),
   },
   {
     /* [311] */
@@ -3592,12 +3612,12 @@
   {
     /* [312] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(199),
+    /* matcher_indices */ MatcherIndicesIndex(219),
   },
   {
     /* [313] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(254),
+    /* matcher_indices */ MatcherIndicesIndex(274),
   },
   {
     /* [314] */
@@ -3607,22 +3627,22 @@
   {
     /* [315] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(52),
+    /* matcher_indices */ MatcherIndicesIndex(67),
   },
   {
     /* [316] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(57),
+    /* matcher_indices */ MatcherIndicesIndex(72),
   },
   {
     /* [317] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(47),
+    /* matcher_indices */ MatcherIndicesIndex(62),
   },
   {
     /* [318] */
     /* usage */ core::ParameterUsage::kXy,
-    /* matcher_indices */ MatcherIndicesIndex(254),
+    /* matcher_indices */ MatcherIndicesIndex(274),
   },
   {
     /* [319] */
@@ -3642,7 +3662,7 @@
   {
     /* [322] */
     /* usage */ core::ParameterUsage::kYz,
-    /* matcher_indices */ MatcherIndicesIndex(254),
+    /* matcher_indices */ MatcherIndicesIndex(274),
   },
   {
     /* [323] */
@@ -3662,7 +3682,7 @@
   {
     /* [326] */
     /* usage */ core::ParameterUsage::kZw,
-    /* matcher_indices */ MatcherIndicesIndex(254),
+    /* matcher_indices */ MatcherIndicesIndex(274),
   },
   {
     /* [327] */
@@ -3677,17 +3697,17 @@
   {
     /* [329] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(100),
+    /* matcher_indices */ MatcherIndicesIndex(120),
   },
   {
     /* [330] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(115),
+    /* matcher_indices */ MatcherIndicesIndex(135),
   },
   {
     /* [331] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(224),
+    /* matcher_indices */ MatcherIndicesIndex(244),
   },
   {
     /* [332] */
@@ -3697,7 +3717,7 @@
   {
     /* [333] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(228),
+    /* matcher_indices */ MatcherIndicesIndex(248),
   },
   {
     /* [334] */
@@ -3707,7 +3727,7 @@
   {
     /* [335] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(230),
+    /* matcher_indices */ MatcherIndicesIndex(250),
   },
   {
     /* [336] */
@@ -3717,7 +3737,7 @@
   {
     /* [337] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(232),
+    /* matcher_indices */ MatcherIndicesIndex(252),
   },
   {
     /* [338] */
@@ -3727,7 +3747,7 @@
   {
     /* [339] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(234),
+    /* matcher_indices */ MatcherIndicesIndex(254),
   },
   {
     /* [340] */
@@ -3737,7 +3757,7 @@
   {
     /* [341] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(236),
+    /* matcher_indices */ MatcherIndicesIndex(256),
   },
   {
     /* [342] */
@@ -3747,7 +3767,7 @@
   {
     /* [343] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(322),
+    /* matcher_indices */ MatcherIndicesIndex(342),
   },
   {
     /* [344] */
@@ -3757,7 +3777,7 @@
   {
     /* [345] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(323),
+    /* matcher_indices */ MatcherIndicesIndex(343),
   },
   {
     /* [346] */
@@ -3767,7 +3787,7 @@
   {
     /* [347] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(324),
+    /* matcher_indices */ MatcherIndicesIndex(344),
   },
   {
     /* [348] */
@@ -3777,7 +3797,7 @@
   {
     /* [349] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(325),
+    /* matcher_indices */ MatcherIndicesIndex(345),
   },
   {
     /* [350] */
@@ -3787,17 +3807,17 @@
   {
     /* [351] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(327),
+    /* matcher_indices */ MatcherIndicesIndex(347),
   },
   {
     /* [352] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(254),
+    /* matcher_indices */ MatcherIndicesIndex(274),
   },
   {
     /* [353] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(172),
+    /* matcher_indices */ MatcherIndicesIndex(192),
   },
   {
     /* [354] */
@@ -3807,7 +3827,7 @@
   {
     /* [355] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(176),
+    /* matcher_indices */ MatcherIndicesIndex(196),
   },
   {
     /* [356] */
@@ -3817,7 +3837,7 @@
   {
     /* [357] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(180),
+    /* matcher_indices */ MatcherIndicesIndex(200),
   },
   {
     /* [358] */
@@ -3827,37 +3847,37 @@
   {
     /* [359] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(184),
+    /* matcher_indices */ MatcherIndicesIndex(204),
   },
   {
     /* [360] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(254),
+    /* matcher_indices */ MatcherIndicesIndex(274),
   },
   {
     /* [361] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(187),
+    /* matcher_indices */ MatcherIndicesIndex(207),
   },
   {
     /* [362] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(254),
+    /* matcher_indices */ MatcherIndicesIndex(274),
   },
   {
     /* [363] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(190),
+    /* matcher_indices */ MatcherIndicesIndex(210),
   },
   {
     /* [364] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(254),
+    /* matcher_indices */ MatcherIndicesIndex(274),
   },
   {
     /* [365] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(202),
+    /* matcher_indices */ MatcherIndicesIndex(222),
   },
   {
     /* [366] */
@@ -3867,7 +3887,7 @@
   {
     /* [367] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(205),
+    /* matcher_indices */ MatcherIndicesIndex(225),
   },
   {
     /* [368] */
@@ -3877,7 +3897,7 @@
   {
     /* [369] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(208),
+    /* matcher_indices */ MatcherIndicesIndex(228),
   },
   {
     /* [370] */
@@ -3892,17 +3912,17 @@
   {
     /* [372] */
     /* usage */ core::ParameterUsage::kSourceLaneIndex,
-    /* matcher_indices */ MatcherIndicesIndex(318),
+    /* matcher_indices */ MatcherIndicesIndex(338),
   },
   {
     /* [373] */
     /* usage */ core::ParameterUsage::kValue,
-    /* matcher_indices */ MatcherIndicesIndex(100),
+    /* matcher_indices */ MatcherIndicesIndex(120),
   },
   {
     /* [374] */
     /* usage */ core::ParameterUsage::kSourceLaneIndex,
-    /* matcher_indices */ MatcherIndicesIndex(318),
+    /* matcher_indices */ MatcherIndicesIndex(338),
   },
   {
     /* [375] */
@@ -3917,7 +3937,7 @@
   {
     /* [377] */
     /* usage */ core::ParameterUsage::kValue,
-    /* matcher_indices */ MatcherIndicesIndex(100),
+    /* matcher_indices */ MatcherIndicesIndex(120),
   },
   {
     /* [378] */
@@ -3937,7 +3957,7 @@
   {
     /* [381] */
     /* usage */ core::ParameterUsage::kValue,
-    /* matcher_indices */ MatcherIndicesIndex(100),
+    /* matcher_indices */ MatcherIndicesIndex(120),
   },
   {
     /* [382] */
@@ -3952,342 +3972,352 @@
   {
     /* [384] */
     /* usage */ core::ParameterUsage::kId,
-    /* matcher_indices */ MatcherIndicesIndex(318),
+    /* matcher_indices */ MatcherIndicesIndex(338),
   },
   {
     /* [385] */
     /* usage */ core::ParameterUsage::kE,
-    /* matcher_indices */ MatcherIndicesIndex(100),
+    /* matcher_indices */ MatcherIndicesIndex(120),
   },
   {
     /* [386] */
     /* usage */ core::ParameterUsage::kId,
-    /* matcher_indices */ MatcherIndicesIndex(318),
+    /* matcher_indices */ MatcherIndicesIndex(338),
   },
   {
     /* [387] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(106),
+    /* matcher_indices */ MatcherIndicesIndex(52),
   },
   {
     /* [388] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(6),
+    /* matcher_indices */ MatcherIndicesIndex(57),
   },
   {
     /* [389] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(106),
+    /* matcher_indices */ MatcherIndicesIndex(126),
   },
   {
     /* [390] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(217),
+    /* matcher_indices */ MatcherIndicesIndex(6),
   },
   {
     /* [391] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(84),
+    /* matcher_indices */ MatcherIndicesIndex(126),
   },
   {
     /* [392] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(84),
+    /* matcher_indices */ MatcherIndicesIndex(237),
   },
   {
     /* [393] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(6),
+    /* matcher_indices */ MatcherIndicesIndex(104),
   },
   {
     /* [394] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(84),
+    /* matcher_indices */ MatcherIndicesIndex(104),
   },
   {
     /* [395] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(106),
+    /* matcher_indices */ MatcherIndicesIndex(6),
   },
   {
     /* [396] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(211),
+    /* matcher_indices */ MatcherIndicesIndex(104),
   },
   {
     /* [397] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(84),
+    /* matcher_indices */ MatcherIndicesIndex(126),
   },
   {
     /* [398] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(92),
+    /* matcher_indices */ MatcherIndicesIndex(231),
   },
   {
     /* [399] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(96),
+    /* matcher_indices */ MatcherIndicesIndex(104),
   },
   {
     /* [400] */
-    /* usage */ core::ParameterUsage::kXy,
-    /* matcher_indices */ MatcherIndicesIndex(254),
+    /* usage */ core::ParameterUsage::kNone,
+    /* matcher_indices */ MatcherIndicesIndex(112),
   },
   {
     /* [401] */
-    /* usage */ core::ParameterUsage::kZw,
-    /* matcher_indices */ MatcherIndicesIndex(254),
+    /* usage */ core::ParameterUsage::kNone,
+    /* matcher_indices */ MatcherIndicesIndex(116),
   },
   {
     /* [402] */
+    /* usage */ core::ParameterUsage::kXy,
+    /* matcher_indices */ MatcherIndicesIndex(274),
+  },
+  {
+    /* [403] */
+    /* usage */ core::ParameterUsage::kZw,
+    /* matcher_indices */ MatcherIndicesIndex(274),
+  },
+  {
+    /* [404] */
     /* usage */ core::ParameterUsage::kXyz,
     /* matcher_indices */ MatcherIndicesIndex(5),
   },
   {
-    /* [403] */
+    /* [405] */
     /* usage */ core::ParameterUsage::kW,
     /* matcher_indices */ MatcherIndicesIndex(6),
   },
   {
-    /* [404] */
+    /* [406] */
     /* usage */ core::ParameterUsage::kX,
     /* matcher_indices */ MatcherIndicesIndex(6),
   },
   {
-    /* [405] */
+    /* [407] */
     /* usage */ core::ParameterUsage::kZyw,
     /* matcher_indices */ MatcherIndicesIndex(5),
   },
   {
-    /* [406] */
+    /* [408] */
     /* usage */ core::ParameterUsage::kNone,
     /* matcher_indices */ MatcherIndicesIndex(14),
   },
   {
-    /* [407] */
-    /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(72),
-  },
-  {
-    /* [408] */
-    /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(13),
-  },
-  {
     /* [409] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(109),
+    /* matcher_indices */ MatcherIndicesIndex(92),
   },
   {
     /* [410] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(23),
+    /* matcher_indices */ MatcherIndicesIndex(13),
   },
   {
     /* [411] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(12),
+    /* matcher_indices */ MatcherIndicesIndex(129),
   },
   {
     /* [412] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(40),
+    /* matcher_indices */ MatcherIndicesIndex(23),
   },
   {
     /* [413] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(135),
+    /* matcher_indices */ MatcherIndicesIndex(12),
   },
   {
     /* [414] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(80),
+    /* matcher_indices */ MatcherIndicesIndex(40),
   },
   {
     /* [415] */
-    /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(121),
+    /* usage */ core::ParameterUsage::kNone,
+    /* matcher_indices */ MatcherIndicesIndex(155),
   },
   {
     /* [416] */
-    /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(124),
+    /* usage */ core::ParameterUsage::kNone,
+    /* matcher_indices */ MatcherIndicesIndex(100),
   },
   {
     /* [417] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(127),
+    /* matcher_indices */ MatcherIndicesIndex(141),
   },
   {
     /* [418] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(130),
+    /* matcher_indices */ MatcherIndicesIndex(144),
   },
   {
     /* [419] */
-    /* usage */ core::ParameterUsage::kInputAttachment,
-    /* matcher_indices */ MatcherIndicesIndex(258),
+    /* usage */ core::ParameterUsage::kTexture,
+    /* matcher_indices */ MatcherIndicesIndex(147),
   },
   {
     /* [420] */
-    /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(41),
+    /* usage */ core::ParameterUsage::kTexture,
+    /* matcher_indices */ MatcherIndicesIndex(150),
   },
   {
     /* [421] */
-    /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(267),
+    /* usage */ core::ParameterUsage::kInputAttachment,
+    /* matcher_indices */ MatcherIndicesIndex(278),
   },
   {
     /* [422] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(256),
+    /* matcher_indices */ MatcherIndicesIndex(41),
   },
   {
     /* [423] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(182),
+    /* matcher_indices */ MatcherIndicesIndex(287),
   },
   {
     /* [424] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(143),
+    /* matcher_indices */ MatcherIndicesIndex(276),
   },
   {
     /* [425] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(262),
+    /* matcher_indices */ MatcherIndicesIndex(202),
   },
   {
     /* [426] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(264),
+    /* matcher_indices */ MatcherIndicesIndex(163),
   },
   {
     /* [427] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(266),
+    /* matcher_indices */ MatcherIndicesIndex(282),
   },
   {
     /* [428] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(268),
+    /* matcher_indices */ MatcherIndicesIndex(284),
   },
   {
     /* [429] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(270),
+    /* matcher_indices */ MatcherIndicesIndex(286),
   },
   {
     /* [430] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(272),
+    /* matcher_indices */ MatcherIndicesIndex(288),
   },
   {
     /* [431] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(274),
+    /* matcher_indices */ MatcherIndicesIndex(290),
   },
   {
     /* [432] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(276),
+    /* matcher_indices */ MatcherIndicesIndex(292),
   },
   {
     /* [433] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(278),
+    /* matcher_indices */ MatcherIndicesIndex(294),
   },
   {
     /* [434] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(280),
+    /* matcher_indices */ MatcherIndicesIndex(296),
   },
   {
     /* [435] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(282),
+    /* matcher_indices */ MatcherIndicesIndex(298),
   },
   {
     /* [436] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(284),
+    /* matcher_indices */ MatcherIndicesIndex(300),
   },
   {
     /* [437] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(286),
+    /* matcher_indices */ MatcherIndicesIndex(302),
   },
   {
     /* [438] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(288),
+    /* matcher_indices */ MatcherIndicesIndex(304),
   },
   {
     /* [439] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(290),
+    /* matcher_indices */ MatcherIndicesIndex(306),
   },
   {
     /* [440] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(292),
+    /* matcher_indices */ MatcherIndicesIndex(308),
   },
   {
     /* [441] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(294),
+    /* matcher_indices */ MatcherIndicesIndex(310),
   },
   {
     /* [442] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(296),
+    /* matcher_indices */ MatcherIndicesIndex(312),
   },
   {
     /* [443] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(298),
+    /* matcher_indices */ MatcherIndicesIndex(314),
   },
   {
     /* [444] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(300),
+    /* matcher_indices */ MatcherIndicesIndex(316),
   },
   {
     /* [445] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(302),
+    /* matcher_indices */ MatcherIndicesIndex(318),
   },
   {
     /* [446] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(304),
+    /* matcher_indices */ MatcherIndicesIndex(320),
   },
   {
     /* [447] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(306),
+    /* matcher_indices */ MatcherIndicesIndex(322),
   },
   {
     /* [448] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(308),
+    /* matcher_indices */ MatcherIndicesIndex(324),
   },
   {
     /* [449] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(310),
+    /* matcher_indices */ MatcherIndicesIndex(326),
   },
   {
     /* [450] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(312),
+    /* matcher_indices */ MatcherIndicesIndex(328),
   },
   {
     /* [451] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(314),
+    /* matcher_indices */ MatcherIndicesIndex(330),
+  },
+  {
+    /* [452] */
+    /* usage */ core::ParameterUsage::kNone,
+    /* matcher_indices */ MatcherIndicesIndex(332),
+  },
+  {
+    /* [453] */
+    /* usage */ core::ParameterUsage::kNone,
+    /* matcher_indices */ MatcherIndicesIndex(334),
   },
 };
 
@@ -4310,7 +4340,7 @@
   {
     /* [2] */
     /* name */ "S",
-    /* matcher_indices */ MatcherIndicesIndex(316),
+    /* matcher_indices */ MatcherIndicesIndex(336),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
@@ -4333,59 +4363,59 @@
   },
   {
     /* [6] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(321),
+    /* name */ "TR",
+    /* matcher_indices */ MatcherIndicesIndex(350),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [7] */
-    /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(318),
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(350),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [8] */
-    /* name */ "A",
-    /* matcher_indices */ MatcherIndicesIndex(318),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [9] */
-    /* name */ "L",
-    /* matcher_indices */ MatcherIndicesIndex(318),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [10] */
-    /* name */ "S",
-    /* matcher_indices */ MatcherIndicesIndex(330),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [11] */
     /* name */ "C",
     /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
-    /* [12] */
+    /* [9] */
     /* name */ "R",
     /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
-    /* [13] */
+    /* [10] */
     /* name */ "K",
     /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
-    /* [14] */
+    /* [11] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(317),
+    /* matcher_indices */ MatcherIndicesIndex(350),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
+    /* [12] */
+    /* name */ "TR",
+    /* matcher_indices */ MatcherIndicesIndex(350),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [13] */
+    /* name */ "C",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [14] */
+    /* name */ "R",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
     /* [15] */
     /* name */ "K",
     /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
@@ -4393,51 +4423,51 @@
   },
   {
     /* [16] */
-    /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(341),
+    /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [17] */
-    /* name */ "R",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
+    /* name */ "C",
+    /* matcher_indices */ MatcherIndicesIndex(338),
+    /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [18] */
-    /* name */ "N",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
+    /* name */ "A",
+    /* matcher_indices */ MatcherIndicesIndex(338),
+    /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [19] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(317),
+    /* name */ "L",
+    /* matcher_indices */ MatcherIndicesIndex(338),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [20] */
-    /* name */ "U",
-    /* matcher_indices */ MatcherIndicesIndex(41),
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(337),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [21] */
-    /* name */ "M",
+    /* name */ "K",
     /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [22] */
-    /* name */ "N",
+    /* name */ "C",
     /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [23] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(317),
-    /* kind */ TemplateInfo::Kind::kType,
+    /* name */ "R",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [24] */
@@ -4447,86 +4477,86 @@
   },
   {
     /* [25] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(337),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [26] */
+    /* name */ "U",
+    /* matcher_indices */ MatcherIndicesIndex(41),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [27] */
     /* name */ "M",
     /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
-    /* [26] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(321),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [27] */
-    /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(318),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
     /* [28] */
-    /* name */ "L",
-    /* matcher_indices */ MatcherIndicesIndex(318),
-    /* kind */ TemplateInfo::Kind::kType,
+    /* name */ "N",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [29] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(321),
+    /* matcher_indices */ MatcherIndicesIndex(337),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [30] */
-    /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(318),
-    /* kind */ TemplateInfo::Kind::kType,
+    /* name */ "N",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [31] */
-    /* name */ "S",
-    /* matcher_indices */ MatcherIndicesIndex(318),
-    /* kind */ TemplateInfo::Kind::kType,
+    /* name */ "M",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [32] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(317),
+    /* matcher_indices */ MatcherIndicesIndex(341),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [33] */
     /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
+    /* matcher_indices */ MatcherIndicesIndex(338),
+    /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [34] */
-    /* name */ "R",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
+    /* name */ "L",
+    /* matcher_indices */ MatcherIndicesIndex(338),
+    /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [35] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(330),
+    /* matcher_indices */ MatcherIndicesIndex(341),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [36] */
-    /* name */ "K",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
+    /* name */ "C",
+    /* matcher_indices */ MatcherIndicesIndex(338),
+    /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [37] */
-    /* name */ "R",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
+    /* name */ "S",
+    /* matcher_indices */ MatcherIndicesIndex(338),
+    /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [38] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(330),
+    /* matcher_indices */ MatcherIndicesIndex(337),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
@@ -4537,19 +4567,19 @@
   },
   {
     /* [40] */
-    /* name */ "K",
+    /* name */ "R",
     /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [41] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(330),
+    /* matcher_indices */ MatcherIndicesIndex(350),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [42] */
-    /* name */ "C",
+    /* name */ "K",
     /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
@@ -4561,206 +4591,224 @@
   },
   {
     /* [44] */
-    /* name */ "N",
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(350),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [45] */
+    /* name */ "C",
     /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
-    /* [45] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(316),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
     /* [46] */
-    /* name */ "N",
+    /* name */ "K",
     /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [47] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(318),
-    /* kind */ TemplateInfo::Kind::kType,
+    /* name */ "N",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [48] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(336),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [49] */
+    /* name */ "N",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [50] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(338),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [51] */
     /* name */ "S",
     /* matcher_indices */ MatcherIndicesIndex(1),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
-    /* [49] */
+    /* [52] */
     /* name */ "T",
     /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
-    /* [50] */
+    /* [53] */
     /* name */ "A",
     /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
-    /* [51] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(319),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [52] */
-    /* name */ "N",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [53] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(319),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
     /* [54] */
-    /* name */ "N",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(339),
+    /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [55] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(320),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [56] */
     /* name */ "N",
     /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
-    /* [57] */
+    /* [56] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(321),
+    /* matcher_indices */ MatcherIndicesIndex(339),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
+    /* [57] */
+    /* name */ "N",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
     /* [58] */
-    /* name */ "L",
-    /* matcher_indices */ MatcherIndicesIndex(318),
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(340),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [59] */
-    /* name */ "F",
+    /* name */ "N",
     /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [60] */
-    /* name */ "A",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(341),
+    /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [61] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(318),
+    /* name */ "L",
+    /* matcher_indices */ MatcherIndicesIndex(338),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [62] */
-    /* name */ "N",
+    /* name */ "F",
     /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [63] */
+    /* name */ "A",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [64] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(338),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [65] */
+    /* name */ "N",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [66] */
     /* name */ "T",
     /* matcher_indices */ MatcherIndicesIndex(13),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
-    /* [64] */
-    /* name */ "U",
-    /* matcher_indices */ MatcherIndicesIndex(333),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [65] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(267),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [66] */
-    /* name */ "U",
-    /* matcher_indices */ MatcherIndicesIndex(334),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
     /* [67] */
+    /* name */ "U",
+    /* matcher_indices */ MatcherIndicesIndex(353),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [68] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(287),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [69] */
+    /* name */ "U",
+    /* matcher_indices */ MatcherIndicesIndex(354),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [70] */
     /* name */ "T",
     /* matcher_indices */ MatcherIndicesIndex(41),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
-    /* [68] */
+    /* [71] */
     /* name */ "U",
-    /* matcher_indices */ MatcherIndicesIndex(331),
+    /* matcher_indices */ MatcherIndicesIndex(351),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
-    /* [69] */
+    /* [72] */
     /* name */ "T",
     /* matcher_indices */ MatcherIndicesIndex(35),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
-    /* [70] */
-    /* name */ "U",
-    /* matcher_indices */ MatcherIndicesIndex(332),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [71] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(53),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [72] */
-    /* name */ "U",
-    /* matcher_indices */ MatcherIndicesIndex(335),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
     /* [73] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(331),
+    /* name */ "U",
+    /* matcher_indices */ MatcherIndicesIndex(352),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [74] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(332),
+    /* matcher_indices */ MatcherIndicesIndex(53),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [75] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(333),
+    /* name */ "U",
+    /* matcher_indices */ MatcherIndicesIndex(355),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [76] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(334),
+    /* matcher_indices */ MatcherIndicesIndex(351),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [77] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(335),
+    /* matcher_indices */ MatcherIndicesIndex(352),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [78] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(353),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [79] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(354),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [80] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(355),
     /* kind */ TemplateInfo::Kind::kType,
   },
 };
@@ -4894,7 +4942,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(6),
+    /* templates */ TemplateIndex(16),
     /* parameters */ ParameterIndex(288),
     /* return_matcher_indices */ MatcherIndicesIndex(35),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4905,7 +4953,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(57),
+    /* templates */ TemplateIndex(60),
     /* parameters */ ParameterIndex(331),
     /* return_matcher_indices */ MatcherIndicesIndex(35),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4916,9 +4964,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(6),
+    /* templates */ TemplateIndex(16),
     /* parameters */ ParameterIndex(75),
-    /* return_matcher_indices */ MatcherIndicesIndex(226),
+    /* return_matcher_indices */ MatcherIndicesIndex(246),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4927,9 +4975,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(57),
+    /* templates */ TemplateIndex(60),
     /* parameters */ ParameterIndex(333),
-    /* return_matcher_indices */ MatcherIndicesIndex(226),
+    /* return_matcher_indices */ MatcherIndicesIndex(246),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4938,9 +4986,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(6),
+    /* templates */ TemplateIndex(16),
     /* parameters */ ParameterIndex(27),
-    /* return_matcher_indices */ MatcherIndicesIndex(226),
+    /* return_matcher_indices */ MatcherIndicesIndex(246),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4949,9 +4997,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(57),
+    /* templates */ TemplateIndex(60),
     /* parameters */ ParameterIndex(335),
-    /* return_matcher_indices */ MatcherIndicesIndex(226),
+    /* return_matcher_indices */ MatcherIndicesIndex(246),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4960,7 +5008,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(6),
+    /* templates */ TemplateIndex(16),
     /* parameters */ ParameterIndex(294),
     /* return_matcher_indices */ MatcherIndicesIndex(34),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4971,7 +5019,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(57),
+    /* templates */ TemplateIndex(60),
     /* parameters */ ParameterIndex(337),
     /* return_matcher_indices */ MatcherIndicesIndex(34),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4982,9 +5030,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(6),
+    /* templates */ TemplateIndex(16),
     /* parameters */ ParameterIndex(164),
-    /* return_matcher_indices */ MatcherIndicesIndex(226),
+    /* return_matcher_indices */ MatcherIndicesIndex(246),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -4993,9 +5041,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(57),
+    /* templates */ TemplateIndex(60),
     /* parameters */ ParameterIndex(339),
-    /* return_matcher_indices */ MatcherIndicesIndex(226),
+    /* return_matcher_indices */ MatcherIndicesIndex(246),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5004,9 +5052,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(6),
+    /* templates */ TemplateIndex(16),
     /* parameters */ ParameterIndex(80),
-    /* return_matcher_indices */ MatcherIndicesIndex(226),
+    /* return_matcher_indices */ MatcherIndicesIndex(246),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5015,9 +5063,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(57),
+    /* templates */ TemplateIndex(60),
     /* parameters */ ParameterIndex(341),
-    /* return_matcher_indices */ MatcherIndicesIndex(226),
+    /* return_matcher_indices */ MatcherIndicesIndex(246),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5026,9 +5074,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(6),
+    /* templates */ TemplateIndex(16),
     /* parameters */ ParameterIndex(297),
-    /* return_matcher_indices */ MatcherIndicesIndex(226),
+    /* return_matcher_indices */ MatcherIndicesIndex(246),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5039,7 +5087,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(89),
-    /* return_matcher_indices */ MatcherIndicesIndex(226),
+    /* return_matcher_indices */ MatcherIndicesIndex(246),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5048,9 +5096,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(343),
-    /* return_matcher_indices */ MatcherIndicesIndex(226),
+    /* return_matcher_indices */ MatcherIndicesIndex(246),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5061,7 +5109,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(32),
-    /* return_matcher_indices */ MatcherIndicesIndex(226),
+    /* return_matcher_indices */ MatcherIndicesIndex(246),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5070,9 +5118,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(345),
-    /* return_matcher_indices */ MatcherIndicesIndex(226),
+    /* return_matcher_indices */ MatcherIndicesIndex(246),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5083,7 +5131,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(171),
-    /* return_matcher_indices */ MatcherIndicesIndex(226),
+    /* return_matcher_indices */ MatcherIndicesIndex(246),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5092,9 +5140,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(347),
-    /* return_matcher_indices */ MatcherIndicesIndex(226),
+    /* return_matcher_indices */ MatcherIndicesIndex(246),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5105,7 +5153,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(94),
-    /* return_matcher_indices */ MatcherIndicesIndex(226),
+    /* return_matcher_indices */ MatcherIndicesIndex(246),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5114,9 +5162,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(349),
-    /* return_matcher_indices */ MatcherIndicesIndex(226),
+    /* return_matcher_indices */ MatcherIndicesIndex(246),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5127,7 +5175,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(303),
-    /* return_matcher_indices */ MatcherIndicesIndex(226),
+    /* return_matcher_indices */ MatcherIndicesIndex(246),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5136,8 +5184,8 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(59),
-    /* parameters */ ParameterIndex(415),
+    /* templates */ TemplateIndex(62),
+    /* parameters */ ParameterIndex(417),
     /* return_matcher_indices */ MatcherIndicesIndex(35),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5147,9 +5195,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(59),
-    /* parameters */ ParameterIndex(416),
-    /* return_matcher_indices */ MatcherIndicesIndex(226),
+    /* templates */ TemplateIndex(62),
+    /* parameters */ ParameterIndex(418),
+    /* return_matcher_indices */ MatcherIndicesIndex(246),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5158,9 +5206,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(59),
-    /* parameters */ ParameterIndex(417),
-    /* return_matcher_indices */ MatcherIndicesIndex(226),
+    /* templates */ TemplateIndex(62),
+    /* parameters */ ParameterIndex(419),
+    /* return_matcher_indices */ MatcherIndicesIndex(246),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5169,8 +5217,8 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(59),
-    /* parameters */ ParameterIndex(418),
+    /* templates */ TemplateIndex(62),
+    /* parameters */ ParameterIndex(420),
     /* return_matcher_indices */ MatcherIndicesIndex(34),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5182,7 +5230,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(258),
-    /* return_matcher_indices */ MatcherIndicesIndex(226),
+    /* return_matcher_indices */ MatcherIndicesIndex(246),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5191,9 +5239,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(26),
+    /* templates */ TemplateIndex(32),
     /* parameters */ ParameterIndex(288),
-    /* return_matcher_indices */ MatcherIndicesIndex(139),
+    /* return_matcher_indices */ MatcherIndicesIndex(159),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5202,9 +5250,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(26),
+    /* templates */ TemplateIndex(32),
     /* parameters */ ParameterIndex(291),
-    /* return_matcher_indices */ MatcherIndicesIndex(139),
+    /* return_matcher_indices */ MatcherIndicesIndex(159),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5213,9 +5261,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(6),
+    /* templates */ TemplateIndex(16),
     /* parameters */ ParameterIndex(207),
-    /* return_matcher_indices */ MatcherIndicesIndex(139),
+    /* return_matcher_indices */ MatcherIndicesIndex(159),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5224,9 +5272,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(26),
+    /* templates */ TemplateIndex(32),
     /* parameters */ ParameterIndex(294),
-    /* return_matcher_indices */ MatcherIndicesIndex(139),
+    /* return_matcher_indices */ MatcherIndicesIndex(159),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5235,9 +5283,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(29),
+    /* templates */ TemplateIndex(35),
     /* parameters */ ParameterIndex(297),
-    /* return_matcher_indices */ MatcherIndicesIndex(139),
+    /* return_matcher_indices */ MatcherIndicesIndex(159),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5246,7 +5294,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(27),
+    /* templates */ TemplateIndex(33),
     /* parameters */ ParameterIndex(300),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5257,7 +5305,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(7),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(211),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5268,7 +5316,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(30),
+    /* templates */ TemplateIndex(36),
     /* parameters */ ParameterIndex(303),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5279,7 +5327,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(7),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(351),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5290,7 +5338,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(7),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(353),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5301,7 +5349,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(7),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(355),
     /* return_matcher_indices */ MatcherIndicesIndex(40),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5312,9 +5360,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(7),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(357),
-    /* return_matcher_indices */ MatcherIndicesIndex(135),
+    /* return_matcher_indices */ MatcherIndicesIndex(155),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5323,7 +5371,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(7),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(359),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5334,7 +5382,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(7),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(361),
     /* return_matcher_indices */ MatcherIndicesIndex(40),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5345,9 +5393,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(7),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(363),
-    /* return_matcher_indices */ MatcherIndicesIndex(135),
+    /* return_matcher_indices */ MatcherIndicesIndex(155),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5356,7 +5404,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(7),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(306),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5367,7 +5415,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(7),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(309),
     /* return_matcher_indices */ MatcherIndicesIndex(40),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5378,9 +5426,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(7),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(312),
-    /* return_matcher_indices */ MatcherIndicesIndex(135),
+    /* return_matcher_indices */ MatcherIndicesIndex(155),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5389,7 +5437,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(7),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(365),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5400,7 +5448,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(7),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(367),
     /* return_matcher_indices */ MatcherIndicesIndex(40),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5411,9 +5459,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(7),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(369),
-    /* return_matcher_indices */ MatcherIndicesIndex(135),
+    /* return_matcher_indices */ MatcherIndicesIndex(155),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5455,7 +5503,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(8),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(19),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5466,7 +5514,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(8),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(99),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5510,7 +5558,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(8),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(56),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5543,7 +5591,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(8),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(68),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5554,7 +5602,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(8),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(84),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5576,7 +5624,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(8),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(144),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5587,9 +5635,9 @@
     /* num_parameters */ 0,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(/* invalid */),
-    /* return_matcher_indices */ MatcherIndicesIndex(139),
+    /* return_matcher_indices */ MatcherIndicesIndex(159),
     /* const_eval_fn */ ConstEvalFunctionIndex(105),
   },
   {
@@ -5598,9 +5646,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(235),
-    /* return_matcher_indices */ MatcherIndicesIndex(139),
+    /* return_matcher_indices */ MatcherIndicesIndex(159),
     /* const_eval_fn */ ConstEvalFunctionIndex(106),
   },
   {
@@ -5609,9 +5657,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(139),
+    /* return_matcher_indices */ MatcherIndicesIndex(159),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
   {
@@ -5620,9 +5668,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(223),
-    /* return_matcher_indices */ MatcherIndicesIndex(139),
+    /* return_matcher_indices */ MatcherIndicesIndex(159),
     /* const_eval_fn */ ConstEvalFunctionIndex(109),
   },
   {
@@ -5631,9 +5679,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(318),
-    /* return_matcher_indices */ MatcherIndicesIndex(139),
+    /* return_matcher_indices */ MatcherIndicesIndex(159),
     /* const_eval_fn */ ConstEvalFunctionIndex(110),
   },
   {
@@ -5642,9 +5690,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(321),
-    /* return_matcher_indices */ MatcherIndicesIndex(139),
+    /* return_matcher_indices */ MatcherIndicesIndex(159),
     /* const_eval_fn */ ConstEvalFunctionIndex(110),
   },
   {
@@ -5653,9 +5701,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(324),
-    /* return_matcher_indices */ MatcherIndicesIndex(139),
+    /* return_matcher_indices */ MatcherIndicesIndex(159),
     /* const_eval_fn */ ConstEvalFunctionIndex(110),
   },
   {
@@ -5664,9 +5712,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
-    /* parameters */ ParameterIndex(400),
-    /* return_matcher_indices */ MatcherIndicesIndex(139),
+    /* templates */ TemplateIndex(54),
+    /* parameters */ ParameterIndex(402),
+    /* return_matcher_indices */ MatcherIndicesIndex(159),
     /* const_eval_fn */ ConstEvalFunctionIndex(110),
   },
   {
@@ -5675,9 +5723,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
-    /* parameters */ ParameterIndex(402),
-    /* return_matcher_indices */ MatcherIndicesIndex(139),
+    /* templates */ TemplateIndex(54),
+    /* parameters */ ParameterIndex(404),
+    /* return_matcher_indices */ MatcherIndicesIndex(159),
     /* const_eval_fn */ ConstEvalFunctionIndex(110),
   },
   {
@@ -5686,9 +5734,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
-    /* parameters */ ParameterIndex(404),
-    /* return_matcher_indices */ MatcherIndicesIndex(139),
+    /* templates */ TemplateIndex(54),
+    /* parameters */ ParameterIndex(406),
+    /* return_matcher_indices */ MatcherIndicesIndex(159),
     /* const_eval_fn */ ConstEvalFunctionIndex(110),
   },
   {
@@ -5697,9 +5745,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(63),
-    /* parameters */ ParameterIndex(424),
-    /* return_matcher_indices */ MatcherIndicesIndex(139),
+    /* templates */ TemplateIndex(66),
+    /* parameters */ ParameterIndex(426),
+    /* return_matcher_indices */ MatcherIndicesIndex(159),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -5708,9 +5756,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(65),
-    /* parameters */ ParameterIndex(424),
-    /* return_matcher_indices */ MatcherIndicesIndex(139),
+    /* templates */ TemplateIndex(68),
+    /* parameters */ ParameterIndex(426),
+    /* return_matcher_indices */ MatcherIndicesIndex(159),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -5719,9 +5767,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(67),
-    /* parameters */ ParameterIndex(424),
-    /* return_matcher_indices */ MatcherIndicesIndex(139),
+    /* templates */ TemplateIndex(70),
+    /* parameters */ ParameterIndex(426),
+    /* return_matcher_indices */ MatcherIndicesIndex(159),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -5730,9 +5778,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(69),
-    /* parameters */ ParameterIndex(424),
-    /* return_matcher_indices */ MatcherIndicesIndex(139),
+    /* templates */ TemplateIndex(72),
+    /* parameters */ ParameterIndex(426),
+    /* return_matcher_indices */ MatcherIndicesIndex(159),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -5741,9 +5789,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(71),
-    /* parameters */ ParameterIndex(424),
-    /* return_matcher_indices */ MatcherIndicesIndex(139),
+    /* templates */ TemplateIndex(74),
+    /* parameters */ ParameterIndex(426),
+    /* return_matcher_indices */ MatcherIndicesIndex(159),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -5774,7 +5822,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(8),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(62),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5785,7 +5833,7 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(8),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(62),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5829,7 +5877,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(8),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(134),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5840,7 +5888,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(139),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5851,7 +5899,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(139),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5862,7 +5910,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(8),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(68),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5873,7 +5921,7 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(8),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(68),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5884,7 +5932,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(191),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5895,7 +5943,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(8),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(144),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5906,9 +5954,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(6),
+    /* templates */ TemplateIndex(16),
     /* parameters */ ParameterIndex(74),
-    /* return_matcher_indices */ MatcherIndicesIndex(139),
+    /* return_matcher_indices */ MatcherIndicesIndex(159),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5917,9 +5965,9 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(6),
+    /* templates */ TemplateIndex(16),
     /* parameters */ ParameterIndex(74),
-    /* return_matcher_indices */ MatcherIndicesIndex(139),
+    /* return_matcher_indices */ MatcherIndicesIndex(159),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5928,9 +5976,9 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(6),
+    /* templates */ TemplateIndex(16),
     /* parameters */ ParameterIndex(26),
-    /* return_matcher_indices */ MatcherIndicesIndex(139),
+    /* return_matcher_indices */ MatcherIndicesIndex(159),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5939,9 +5987,9 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(6),
+    /* templates */ TemplateIndex(16),
     /* parameters */ ParameterIndex(26),
-    /* return_matcher_indices */ MatcherIndicesIndex(139),
+    /* return_matcher_indices */ MatcherIndicesIndex(159),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5950,9 +5998,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(6),
+    /* templates */ TemplateIndex(16),
     /* parameters */ ParameterIndex(163),
-    /* return_matcher_indices */ MatcherIndicesIndex(139),
+    /* return_matcher_indices */ MatcherIndicesIndex(159),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5961,9 +6009,9 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(6),
+    /* templates */ TemplateIndex(16),
     /* parameters */ ParameterIndex(79),
-    /* return_matcher_indices */ MatcherIndicesIndex(139),
+    /* return_matcher_indices */ MatcherIndicesIndex(159),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5994,7 +6042,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(8),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(68),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6005,7 +6053,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(8),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(84),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6027,7 +6075,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(8),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(144),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6038,7 +6086,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(7),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(261),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6049,7 +6097,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(7),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(264),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6060,7 +6108,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(7),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(195),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6071,7 +6119,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(7),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(267),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6082,7 +6130,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(7),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(270),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6093,7 +6141,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(7),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(273),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6104,7 +6152,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(7),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(199),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6115,7 +6163,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(7),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(276),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6126,7 +6174,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(7),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(279),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6137,7 +6185,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(7),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(282),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6148,7 +6196,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(7),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(203),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6159,7 +6207,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(7),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(285),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6170,7 +6218,7 @@
     /* num_parameters */ 0,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(/* invalid */),
     /* return_matcher_indices */ MatcherIndicesIndex(5),
     /* const_eval_fn */ ConstEvalFunctionIndex(105),
@@ -6181,7 +6229,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(231),
     /* return_matcher_indices */ MatcherIndicesIndex(5),
     /* const_eval_fn */ ConstEvalFunctionIndex(106),
@@ -6192,7 +6240,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(5),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
@@ -6203,7 +6251,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(223),
     /* return_matcher_indices */ MatcherIndicesIndex(5),
     /* const_eval_fn */ ConstEvalFunctionIndex(109),
@@ -6214,7 +6262,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(318),
     /* return_matcher_indices */ MatcherIndicesIndex(5),
     /* const_eval_fn */ ConstEvalFunctionIndex(110),
@@ -6225,7 +6273,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(321),
     /* return_matcher_indices */ MatcherIndicesIndex(5),
     /* const_eval_fn */ ConstEvalFunctionIndex(110),
@@ -6236,8 +6284,8 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(63),
-    /* parameters */ ParameterIndex(423),
+    /* templates */ TemplateIndex(66),
+    /* parameters */ ParameterIndex(425),
     /* return_matcher_indices */ MatcherIndicesIndex(5),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
@@ -6247,8 +6295,8 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(65),
-    /* parameters */ ParameterIndex(423),
+    /* templates */ TemplateIndex(68),
+    /* parameters */ ParameterIndex(425),
     /* return_matcher_indices */ MatcherIndicesIndex(5),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
@@ -6258,8 +6306,8 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(67),
-    /* parameters */ ParameterIndex(423),
+    /* templates */ TemplateIndex(70),
+    /* parameters */ ParameterIndex(425),
     /* return_matcher_indices */ MatcherIndicesIndex(5),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
@@ -6269,8 +6317,8 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(69),
-    /* parameters */ ParameterIndex(423),
+    /* templates */ TemplateIndex(72),
+    /* parameters */ ParameterIndex(425),
     /* return_matcher_indices */ MatcherIndicesIndex(5),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
@@ -6280,8 +6328,8 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(71),
-    /* parameters */ ParameterIndex(423),
+    /* templates */ TemplateIndex(74),
+    /* parameters */ ParameterIndex(425),
     /* return_matcher_indices */ MatcherIndicesIndex(5),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
@@ -6291,7 +6339,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(6),
+    /* templates */ TemplateIndex(16),
     /* parameters */ ParameterIndex(288),
     /* return_matcher_indices */ MatcherIndicesIndex(35),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6302,7 +6350,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(6),
+    /* templates */ TemplateIndex(16),
     /* parameters */ ParameterIndex(75),
     /* return_matcher_indices */ MatcherIndicesIndex(35),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6313,7 +6361,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(6),
+    /* templates */ TemplateIndex(16),
     /* parameters */ ParameterIndex(27),
     /* return_matcher_indices */ MatcherIndicesIndex(35),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6324,7 +6372,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(6),
+    /* templates */ TemplateIndex(16),
     /* parameters */ ParameterIndex(294),
     /* return_matcher_indices */ MatcherIndicesIndex(35),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6335,7 +6383,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(6),
+    /* templates */ TemplateIndex(16),
     /* parameters */ ParameterIndex(164),
     /* return_matcher_indices */ MatcherIndicesIndex(35),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6346,7 +6394,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(6),
+    /* templates */ TemplateIndex(16),
     /* parameters */ ParameterIndex(80),
     /* return_matcher_indices */ MatcherIndicesIndex(35),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6401,7 +6449,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(45),
+    /* templates */ TemplateIndex(48),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(86),
@@ -6412,9 +6460,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(45),
+    /* templates */ TemplateIndex(48),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(106),
+    /* return_matcher_indices */ MatcherIndicesIndex(126),
     /* const_eval_fn */ ConstEvalFunctionIndex(86),
   },
   {
@@ -6423,9 +6471,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(45),
-    /* parameters */ ParameterIndex(387),
-    /* return_matcher_indices */ MatcherIndicesIndex(106),
+    /* templates */ TemplateIndex(48),
+    /* parameters */ ParameterIndex(389),
+    /* return_matcher_indices */ MatcherIndicesIndex(126),
     /* const_eval_fn */ ConstEvalFunctionIndex(86),
   },
   {
@@ -6434,9 +6482,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(45),
-    /* parameters */ ParameterIndex(388),
-    /* return_matcher_indices */ MatcherIndicesIndex(106),
+    /* templates */ TemplateIndex(48),
+    /* parameters */ ParameterIndex(390),
+    /* return_matcher_indices */ MatcherIndicesIndex(126),
     /* const_eval_fn */ ConstEvalFunctionIndex(86),
   },
   {
@@ -6445,9 +6493,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(23),
-    /* parameters */ ParameterIndex(393),
-    /* return_matcher_indices */ MatcherIndicesIndex(84),
+    /* templates */ TemplateIndex(29),
+    /* parameters */ ParameterIndex(395),
+    /* return_matcher_indices */ MatcherIndicesIndex(104),
     /* const_eval_fn */ ConstEvalFunctionIndex(86),
   },
   {
@@ -6456,9 +6504,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(23),
-    /* parameters */ ParameterIndex(392),
-    /* return_matcher_indices */ MatcherIndicesIndex(84),
+    /* templates */ TemplateIndex(29),
+    /* parameters */ ParameterIndex(394),
+    /* return_matcher_indices */ MatcherIndicesIndex(104),
     /* const_eval_fn */ ConstEvalFunctionIndex(86),
   },
   {
@@ -6467,9 +6515,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(32),
-    /* parameters */ ParameterIndex(394),
-    /* return_matcher_indices */ MatcherIndicesIndex(211),
+    /* templates */ TemplateIndex(38),
+    /* parameters */ ParameterIndex(396),
+    /* return_matcher_indices */ MatcherIndicesIndex(231),
     /* const_eval_fn */ ConstEvalFunctionIndex(87),
   },
   {
@@ -6478,9 +6526,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(32),
-    /* parameters */ ParameterIndex(396),
-    /* return_matcher_indices */ MatcherIndicesIndex(106),
+    /* templates */ TemplateIndex(38),
+    /* parameters */ ParameterIndex(398),
+    /* return_matcher_indices */ MatcherIndicesIndex(126),
     /* const_eval_fn */ ConstEvalFunctionIndex(88),
   },
   {
@@ -6489,9 +6537,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(14),
-    /* parameters */ ParameterIndex(398),
-    /* return_matcher_indices */ MatcherIndicesIndex(88),
+    /* templates */ TemplateIndex(20),
+    /* parameters */ ParameterIndex(400),
+    /* return_matcher_indices */ MatcherIndicesIndex(108),
     /* const_eval_fn */ ConstEvalFunctionIndex(89),
   },
   {
@@ -6500,9 +6548,9 @@
     /* num_parameters */ 0,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(/* invalid */),
-    /* return_matcher_indices */ MatcherIndicesIndex(254),
+    /* return_matcher_indices */ MatcherIndicesIndex(274),
     /* const_eval_fn */ ConstEvalFunctionIndex(105),
   },
   {
@@ -6511,9 +6559,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(227),
-    /* return_matcher_indices */ MatcherIndicesIndex(254),
+    /* return_matcher_indices */ MatcherIndicesIndex(274),
     /* const_eval_fn */ ConstEvalFunctionIndex(106),
   },
   {
@@ -6522,9 +6570,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(254),
+    /* return_matcher_indices */ MatcherIndicesIndex(274),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
   {
@@ -6533,9 +6581,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(223),
-    /* return_matcher_indices */ MatcherIndicesIndex(254),
+    /* return_matcher_indices */ MatcherIndicesIndex(274),
     /* const_eval_fn */ ConstEvalFunctionIndex(109),
   },
   {
@@ -6544,9 +6592,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(63),
-    /* parameters */ ParameterIndex(422),
-    /* return_matcher_indices */ MatcherIndicesIndex(254),
+    /* templates */ TemplateIndex(66),
+    /* parameters */ ParameterIndex(424),
+    /* return_matcher_indices */ MatcherIndicesIndex(274),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -6555,9 +6603,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(65),
-    /* parameters */ ParameterIndex(422),
-    /* return_matcher_indices */ MatcherIndicesIndex(254),
+    /* templates */ TemplateIndex(68),
+    /* parameters */ ParameterIndex(424),
+    /* return_matcher_indices */ MatcherIndicesIndex(274),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -6566,9 +6614,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(67),
-    /* parameters */ ParameterIndex(422),
-    /* return_matcher_indices */ MatcherIndicesIndex(254),
+    /* templates */ TemplateIndex(70),
+    /* parameters */ ParameterIndex(424),
+    /* return_matcher_indices */ MatcherIndicesIndex(274),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -6577,9 +6625,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(69),
-    /* parameters */ ParameterIndex(422),
-    /* return_matcher_indices */ MatcherIndicesIndex(254),
+    /* templates */ TemplateIndex(72),
+    /* parameters */ ParameterIndex(424),
+    /* return_matcher_indices */ MatcherIndicesIndex(274),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -6588,9 +6636,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(71),
-    /* parameters */ ParameterIndex(422),
-    /* return_matcher_indices */ MatcherIndicesIndex(254),
+    /* templates */ TemplateIndex(74),
+    /* parameters */ ParameterIndex(424),
+    /* return_matcher_indices */ MatcherIndicesIndex(274),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -6621,7 +6669,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(8),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(38),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6632,7 +6680,7 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(8),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(38),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6676,7 +6724,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(8),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(114),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6709,7 +6757,7 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(8),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(19),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6720,7 +6768,7 @@
     /* num_parameters */ 7,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(8),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(19),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6764,7 +6812,7 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(8),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(56),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6797,7 +6845,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(8),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(32),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6808,7 +6856,7 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(8),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(32),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6830,7 +6878,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(8),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(94),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6863,7 +6911,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(8),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(32),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6874,7 +6922,7 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(8),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(32),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6896,7 +6944,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(8),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(94),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6929,7 +6977,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(8),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(32),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6940,7 +6988,7 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(8),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(32),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6962,7 +7010,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(8),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(94),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6973,9 +7021,9 @@
     /* num_parameters */ 0,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(/* invalid */),
-    /* return_matcher_indices */ MatcherIndicesIndex(262),
+    /* return_matcher_indices */ MatcherIndicesIndex(282),
     /* const_eval_fn */ ConstEvalFunctionIndex(105),
   },
   {
@@ -6984,9 +7032,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
-    /* parameters */ ParameterIndex(425),
-    /* return_matcher_indices */ MatcherIndicesIndex(262),
+    /* templates */ TemplateIndex(20),
+    /* parameters */ ParameterIndex(427),
+    /* return_matcher_indices */ MatcherIndicesIndex(282),
     /* const_eval_fn */ ConstEvalFunctionIndex(106),
   },
   {
@@ -6995,9 +7043,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(262),
+    /* return_matcher_indices */ MatcherIndicesIndex(282),
     /* const_eval_fn */ ConstEvalFunctionIndex(111),
   },
   {
@@ -7006,9 +7054,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(227),
-    /* return_matcher_indices */ MatcherIndicesIndex(262),
+    /* return_matcher_indices */ MatcherIndicesIndex(282),
     /* const_eval_fn */ ConstEvalFunctionIndex(112),
   },
   {
@@ -7017,9 +7065,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(65),
-    /* parameters */ ParameterIndex(426),
-    /* return_matcher_indices */ MatcherIndicesIndex(262),
+    /* templates */ TemplateIndex(68),
+    /* parameters */ ParameterIndex(428),
+    /* return_matcher_indices */ MatcherIndicesIndex(282),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -7028,9 +7076,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(63),
-    /* parameters */ ParameterIndex(427),
-    /* return_matcher_indices */ MatcherIndicesIndex(262),
+    /* templates */ TemplateIndex(66),
+    /* parameters */ ParameterIndex(429),
+    /* return_matcher_indices */ MatcherIndicesIndex(282),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -7039,9 +7087,9 @@
     /* num_parameters */ 0,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(/* invalid */),
-    /* return_matcher_indices */ MatcherIndicesIndex(268),
+    /* return_matcher_indices */ MatcherIndicesIndex(288),
     /* const_eval_fn */ ConstEvalFunctionIndex(105),
   },
   {
@@ -7050,9 +7098,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
-    /* parameters */ ParameterIndex(428),
-    /* return_matcher_indices */ MatcherIndicesIndex(268),
+    /* templates */ TemplateIndex(20),
+    /* parameters */ ParameterIndex(430),
+    /* return_matcher_indices */ MatcherIndicesIndex(288),
     /* const_eval_fn */ ConstEvalFunctionIndex(106),
   },
   {
@@ -7061,9 +7109,9 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(268),
+    /* return_matcher_indices */ MatcherIndicesIndex(288),
     /* const_eval_fn */ ConstEvalFunctionIndex(111),
   },
   {
@@ -7072,9 +7120,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(231),
-    /* return_matcher_indices */ MatcherIndicesIndex(268),
+    /* return_matcher_indices */ MatcherIndicesIndex(288),
     /* const_eval_fn */ ConstEvalFunctionIndex(112),
   },
   {
@@ -7083,9 +7131,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(65),
-    /* parameters */ ParameterIndex(429),
-    /* return_matcher_indices */ MatcherIndicesIndex(268),
+    /* templates */ TemplateIndex(68),
+    /* parameters */ ParameterIndex(431),
+    /* return_matcher_indices */ MatcherIndicesIndex(288),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -7094,9 +7142,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(63),
-    /* parameters */ ParameterIndex(430),
-    /* return_matcher_indices */ MatcherIndicesIndex(268),
+    /* templates */ TemplateIndex(66),
+    /* parameters */ ParameterIndex(432),
+    /* return_matcher_indices */ MatcherIndicesIndex(288),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -7105,9 +7153,9 @@
     /* num_parameters */ 0,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(/* invalid */),
-    /* return_matcher_indices */ MatcherIndicesIndex(274),
+    /* return_matcher_indices */ MatcherIndicesIndex(294),
     /* const_eval_fn */ ConstEvalFunctionIndex(105),
   },
   {
@@ -7116,9 +7164,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
-    /* parameters */ ParameterIndex(431),
-    /* return_matcher_indices */ MatcherIndicesIndex(274),
+    /* templates */ TemplateIndex(20),
+    /* parameters */ ParameterIndex(433),
+    /* return_matcher_indices */ MatcherIndicesIndex(294),
     /* const_eval_fn */ ConstEvalFunctionIndex(106),
   },
   {
@@ -7127,9 +7175,9 @@
     /* num_parameters */ 8,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(274),
+    /* return_matcher_indices */ MatcherIndicesIndex(294),
     /* const_eval_fn */ ConstEvalFunctionIndex(111),
   },
   {
@@ -7138,9 +7186,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(235),
-    /* return_matcher_indices */ MatcherIndicesIndex(274),
+    /* return_matcher_indices */ MatcherIndicesIndex(294),
     /* const_eval_fn */ ConstEvalFunctionIndex(112),
   },
   {
@@ -7149,9 +7197,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(65),
-    /* parameters */ ParameterIndex(432),
-    /* return_matcher_indices */ MatcherIndicesIndex(274),
+    /* templates */ TemplateIndex(68),
+    /* parameters */ ParameterIndex(434),
+    /* return_matcher_indices */ MatcherIndicesIndex(294),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -7160,9 +7208,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(63),
-    /* parameters */ ParameterIndex(433),
-    /* return_matcher_indices */ MatcherIndicesIndex(274),
+    /* templates */ TemplateIndex(66),
+    /* parameters */ ParameterIndex(435),
+    /* return_matcher_indices */ MatcherIndicesIndex(294),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -7171,9 +7219,9 @@
     /* num_parameters */ 0,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(/* invalid */),
-    /* return_matcher_indices */ MatcherIndicesIndex(280),
+    /* return_matcher_indices */ MatcherIndicesIndex(300),
     /* const_eval_fn */ ConstEvalFunctionIndex(105),
   },
   {
@@ -7182,9 +7230,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
-    /* parameters */ ParameterIndex(434),
-    /* return_matcher_indices */ MatcherIndicesIndex(280),
+    /* templates */ TemplateIndex(20),
+    /* parameters */ ParameterIndex(436),
+    /* return_matcher_indices */ MatcherIndicesIndex(300),
     /* const_eval_fn */ ConstEvalFunctionIndex(106),
   },
   {
@@ -7193,9 +7241,9 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(280),
+    /* return_matcher_indices */ MatcherIndicesIndex(300),
     /* const_eval_fn */ ConstEvalFunctionIndex(111),
   },
   {
@@ -7204,9 +7252,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(227),
-    /* return_matcher_indices */ MatcherIndicesIndex(280),
+    /* return_matcher_indices */ MatcherIndicesIndex(300),
     /* const_eval_fn */ ConstEvalFunctionIndex(112),
   },
   {
@@ -7215,9 +7263,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(65),
-    /* parameters */ ParameterIndex(435),
-    /* return_matcher_indices */ MatcherIndicesIndex(280),
+    /* templates */ TemplateIndex(68),
+    /* parameters */ ParameterIndex(437),
+    /* return_matcher_indices */ MatcherIndicesIndex(300),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -7226,9 +7274,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(63),
-    /* parameters */ ParameterIndex(436),
-    /* return_matcher_indices */ MatcherIndicesIndex(280),
+    /* templates */ TemplateIndex(66),
+    /* parameters */ ParameterIndex(438),
+    /* return_matcher_indices */ MatcherIndicesIndex(300),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -7237,9 +7285,9 @@
     /* num_parameters */ 0,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(/* invalid */),
-    /* return_matcher_indices */ MatcherIndicesIndex(286),
+    /* return_matcher_indices */ MatcherIndicesIndex(306),
     /* const_eval_fn */ ConstEvalFunctionIndex(105),
   },
   {
@@ -7248,9 +7296,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
-    /* parameters */ ParameterIndex(437),
-    /* return_matcher_indices */ MatcherIndicesIndex(286),
+    /* templates */ TemplateIndex(20),
+    /* parameters */ ParameterIndex(439),
+    /* return_matcher_indices */ MatcherIndicesIndex(306),
     /* const_eval_fn */ ConstEvalFunctionIndex(106),
   },
   {
@@ -7259,9 +7307,9 @@
     /* num_parameters */ 9,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(286),
+    /* return_matcher_indices */ MatcherIndicesIndex(306),
     /* const_eval_fn */ ConstEvalFunctionIndex(111),
   },
   {
@@ -7270,9 +7318,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(231),
-    /* return_matcher_indices */ MatcherIndicesIndex(286),
+    /* return_matcher_indices */ MatcherIndicesIndex(306),
     /* const_eval_fn */ ConstEvalFunctionIndex(112),
   },
   {
@@ -7281,9 +7329,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(65),
-    /* parameters */ ParameterIndex(438),
-    /* return_matcher_indices */ MatcherIndicesIndex(286),
+    /* templates */ TemplateIndex(68),
+    /* parameters */ ParameterIndex(440),
+    /* return_matcher_indices */ MatcherIndicesIndex(306),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -7292,9 +7340,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(63),
-    /* parameters */ ParameterIndex(439),
-    /* return_matcher_indices */ MatcherIndicesIndex(286),
+    /* templates */ TemplateIndex(66),
+    /* parameters */ ParameterIndex(441),
+    /* return_matcher_indices */ MatcherIndicesIndex(306),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -7303,9 +7351,9 @@
     /* num_parameters */ 0,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(/* invalid */),
-    /* return_matcher_indices */ MatcherIndicesIndex(292),
+    /* return_matcher_indices */ MatcherIndicesIndex(312),
     /* const_eval_fn */ ConstEvalFunctionIndex(105),
   },
   {
@@ -7314,9 +7362,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
-    /* parameters */ ParameterIndex(440),
-    /* return_matcher_indices */ MatcherIndicesIndex(292),
+    /* templates */ TemplateIndex(20),
+    /* parameters */ ParameterIndex(442),
+    /* return_matcher_indices */ MatcherIndicesIndex(312),
     /* const_eval_fn */ ConstEvalFunctionIndex(106),
   },
   {
@@ -7325,9 +7373,9 @@
     /* num_parameters */ 12,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(292),
+    /* return_matcher_indices */ MatcherIndicesIndex(312),
     /* const_eval_fn */ ConstEvalFunctionIndex(111),
   },
   {
@@ -7336,9 +7384,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(235),
-    /* return_matcher_indices */ MatcherIndicesIndex(292),
+    /* return_matcher_indices */ MatcherIndicesIndex(312),
     /* const_eval_fn */ ConstEvalFunctionIndex(112),
   },
   {
@@ -7347,9 +7395,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(65),
-    /* parameters */ ParameterIndex(441),
-    /* return_matcher_indices */ MatcherIndicesIndex(292),
+    /* templates */ TemplateIndex(68),
+    /* parameters */ ParameterIndex(443),
+    /* return_matcher_indices */ MatcherIndicesIndex(312),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -7358,9 +7406,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(63),
-    /* parameters */ ParameterIndex(442),
-    /* return_matcher_indices */ MatcherIndicesIndex(292),
+    /* templates */ TemplateIndex(66),
+    /* parameters */ ParameterIndex(444),
+    /* return_matcher_indices */ MatcherIndicesIndex(312),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -7369,9 +7417,9 @@
     /* num_parameters */ 0,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(/* invalid */),
-    /* return_matcher_indices */ MatcherIndicesIndex(298),
+    /* return_matcher_indices */ MatcherIndicesIndex(318),
     /* const_eval_fn */ ConstEvalFunctionIndex(105),
   },
   {
@@ -7380,9 +7428,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
-    /* parameters */ ParameterIndex(443),
-    /* return_matcher_indices */ MatcherIndicesIndex(298),
+    /* templates */ TemplateIndex(20),
+    /* parameters */ ParameterIndex(445),
+    /* return_matcher_indices */ MatcherIndicesIndex(318),
     /* const_eval_fn */ ConstEvalFunctionIndex(106),
   },
   {
@@ -7391,9 +7439,9 @@
     /* num_parameters */ 8,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(298),
+    /* return_matcher_indices */ MatcherIndicesIndex(318),
     /* const_eval_fn */ ConstEvalFunctionIndex(111),
   },
   {
@@ -7402,9 +7450,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(227),
-    /* return_matcher_indices */ MatcherIndicesIndex(298),
+    /* return_matcher_indices */ MatcherIndicesIndex(318),
     /* const_eval_fn */ ConstEvalFunctionIndex(112),
   },
   {
@@ -7413,9 +7461,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(65),
-    /* parameters */ ParameterIndex(444),
-    /* return_matcher_indices */ MatcherIndicesIndex(298),
+    /* templates */ TemplateIndex(68),
+    /* parameters */ ParameterIndex(446),
+    /* return_matcher_indices */ MatcherIndicesIndex(318),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -7424,9 +7472,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(63),
-    /* parameters */ ParameterIndex(445),
-    /* return_matcher_indices */ MatcherIndicesIndex(298),
+    /* templates */ TemplateIndex(66),
+    /* parameters */ ParameterIndex(447),
+    /* return_matcher_indices */ MatcherIndicesIndex(318),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -7435,9 +7483,9 @@
     /* num_parameters */ 0,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(/* invalid */),
-    /* return_matcher_indices */ MatcherIndicesIndex(304),
+    /* return_matcher_indices */ MatcherIndicesIndex(324),
     /* const_eval_fn */ ConstEvalFunctionIndex(105),
   },
   {
@@ -7446,9 +7494,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
-    /* parameters */ ParameterIndex(446),
-    /* return_matcher_indices */ MatcherIndicesIndex(304),
+    /* templates */ TemplateIndex(20),
+    /* parameters */ ParameterIndex(448),
+    /* return_matcher_indices */ MatcherIndicesIndex(324),
     /* const_eval_fn */ ConstEvalFunctionIndex(106),
   },
   {
@@ -7457,9 +7505,9 @@
     /* num_parameters */ 12,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(304),
+    /* return_matcher_indices */ MatcherIndicesIndex(324),
     /* const_eval_fn */ ConstEvalFunctionIndex(111),
   },
   {
@@ -7468,9 +7516,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(231),
-    /* return_matcher_indices */ MatcherIndicesIndex(304),
+    /* return_matcher_indices */ MatcherIndicesIndex(324),
     /* const_eval_fn */ ConstEvalFunctionIndex(112),
   },
   {
@@ -7479,9 +7527,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(65),
-    /* parameters */ ParameterIndex(447),
-    /* return_matcher_indices */ MatcherIndicesIndex(304),
+    /* templates */ TemplateIndex(68),
+    /* parameters */ ParameterIndex(449),
+    /* return_matcher_indices */ MatcherIndicesIndex(324),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -7490,9 +7538,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(63),
-    /* parameters */ ParameterIndex(448),
-    /* return_matcher_indices */ MatcherIndicesIndex(304),
+    /* templates */ TemplateIndex(66),
+    /* parameters */ ParameterIndex(450),
+    /* return_matcher_indices */ MatcherIndicesIndex(324),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -7501,9 +7549,9 @@
     /* num_parameters */ 0,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(/* invalid */),
-    /* return_matcher_indices */ MatcherIndicesIndex(310),
+    /* return_matcher_indices */ MatcherIndicesIndex(330),
     /* const_eval_fn */ ConstEvalFunctionIndex(105),
   },
   {
@@ -7512,9 +7560,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
-    /* parameters */ ParameterIndex(449),
-    /* return_matcher_indices */ MatcherIndicesIndex(310),
+    /* templates */ TemplateIndex(20),
+    /* parameters */ ParameterIndex(451),
+    /* return_matcher_indices */ MatcherIndicesIndex(330),
     /* const_eval_fn */ ConstEvalFunctionIndex(106),
   },
   {
@@ -7523,9 +7571,9 @@
     /* num_parameters */ 16,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(310),
+    /* return_matcher_indices */ MatcherIndicesIndex(330),
     /* const_eval_fn */ ConstEvalFunctionIndex(111),
   },
   {
@@ -7534,9 +7582,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(235),
-    /* return_matcher_indices */ MatcherIndicesIndex(310),
+    /* return_matcher_indices */ MatcherIndicesIndex(330),
     /* const_eval_fn */ ConstEvalFunctionIndex(112),
   },
   {
@@ -7545,9 +7593,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(65),
-    /* parameters */ ParameterIndex(450),
-    /* return_matcher_indices */ MatcherIndicesIndex(310),
+    /* templates */ TemplateIndex(68),
+    /* parameters */ ParameterIndex(452),
+    /* return_matcher_indices */ MatcherIndicesIndex(330),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -7556,9 +7604,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(63),
-    /* parameters */ ParameterIndex(451),
-    /* return_matcher_indices */ MatcherIndicesIndex(310),
+    /* templates */ TemplateIndex(66),
+    /* parameters */ ParameterIndex(453),
+    /* return_matcher_indices */ MatcherIndicesIndex(330),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -7567,7 +7615,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(6),
+    /* templates */ TemplateIndex(16),
     /* parameters */ ParameterIndex(27),
     /* return_matcher_indices */ MatcherIndicesIndex(35),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -7578,7 +7626,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(6),
+    /* templates */ TemplateIndex(16),
     /* parameters */ ParameterIndex(80),
     /* return_matcher_indices */ MatcherIndicesIndex(35),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -7611,8 +7659,8 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(59),
-    /* parameters */ ParameterIndex(417),
+    /* templates */ TemplateIndex(62),
+    /* parameters */ ParameterIndex(419),
     /* return_matcher_indices */ MatcherIndicesIndex(35),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -7622,7 +7670,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(45),
+    /* templates */ TemplateIndex(48),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(84),
@@ -7633,9 +7681,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(45),
+    /* templates */ TemplateIndex(48),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(106),
+    /* return_matcher_indices */ MatcherIndicesIndex(126),
     /* const_eval_fn */ ConstEvalFunctionIndex(84),
   },
   {
@@ -7644,9 +7692,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(45),
-    /* parameters */ ParameterIndex(387),
-    /* return_matcher_indices */ MatcherIndicesIndex(106),
+    /* templates */ TemplateIndex(48),
+    /* parameters */ ParameterIndex(389),
+    /* return_matcher_indices */ MatcherIndicesIndex(126),
     /* const_eval_fn */ ConstEvalFunctionIndex(84),
   },
   {
@@ -7655,9 +7703,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(45),
-    /* parameters */ ParameterIndex(388),
-    /* return_matcher_indices */ MatcherIndicesIndex(106),
+    /* templates */ TemplateIndex(48),
+    /* parameters */ ParameterIndex(390),
+    /* return_matcher_indices */ MatcherIndicesIndex(126),
     /* const_eval_fn */ ConstEvalFunctionIndex(84),
   },
   {
@@ -7666,9 +7714,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(23),
-    /* parameters */ ParameterIndex(391),
-    /* return_matcher_indices */ MatcherIndicesIndex(84),
+    /* templates */ TemplateIndex(29),
+    /* parameters */ ParameterIndex(393),
+    /* return_matcher_indices */ MatcherIndicesIndex(104),
     /* const_eval_fn */ ConstEvalFunctionIndex(84),
   },
   {
@@ -7677,7 +7725,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(45),
+    /* templates */ TemplateIndex(48),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(85),
@@ -7688,9 +7736,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(45),
+    /* templates */ TemplateIndex(48),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(106),
+    /* return_matcher_indices */ MatcherIndicesIndex(126),
     /* const_eval_fn */ ConstEvalFunctionIndex(85),
   },
   {
@@ -7699,9 +7747,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(45),
-    /* parameters */ ParameterIndex(387),
-    /* return_matcher_indices */ MatcherIndicesIndex(106),
+    /* templates */ TemplateIndex(48),
+    /* parameters */ ParameterIndex(389),
+    /* return_matcher_indices */ MatcherIndicesIndex(126),
     /* const_eval_fn */ ConstEvalFunctionIndex(85),
   },
   {
@@ -7710,9 +7758,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(45),
-    /* parameters */ ParameterIndex(388),
-    /* return_matcher_indices */ MatcherIndicesIndex(106),
+    /* templates */ TemplateIndex(48),
+    /* parameters */ ParameterIndex(390),
+    /* return_matcher_indices */ MatcherIndicesIndex(126),
     /* const_eval_fn */ ConstEvalFunctionIndex(85),
   },
   {
@@ -7721,9 +7769,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(23),
-    /* parameters */ ParameterIndex(391),
-    /* return_matcher_indices */ MatcherIndicesIndex(84),
+    /* templates */ TemplateIndex(29),
+    /* parameters */ ParameterIndex(393),
+    /* return_matcher_indices */ MatcherIndicesIndex(104),
     /* const_eval_fn */ ConstEvalFunctionIndex(85),
   },
   {
@@ -7732,7 +7780,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(45),
+    /* templates */ TemplateIndex(48),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(90),
@@ -7743,9 +7791,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(45),
+    /* templates */ TemplateIndex(48),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(106),
+    /* return_matcher_indices */ MatcherIndicesIndex(126),
     /* const_eval_fn */ ConstEvalFunctionIndex(90),
   },
   {
@@ -7754,9 +7802,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(45),
-    /* parameters */ ParameterIndex(387),
-    /* return_matcher_indices */ MatcherIndicesIndex(106),
+    /* templates */ TemplateIndex(48),
+    /* parameters */ ParameterIndex(389),
+    /* return_matcher_indices */ MatcherIndicesIndex(126),
     /* const_eval_fn */ ConstEvalFunctionIndex(90),
   },
   {
@@ -7765,9 +7813,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(45),
-    /* parameters */ ParameterIndex(388),
-    /* return_matcher_indices */ MatcherIndicesIndex(106),
+    /* templates */ TemplateIndex(48),
+    /* parameters */ ParameterIndex(390),
+    /* return_matcher_indices */ MatcherIndicesIndex(126),
     /* const_eval_fn */ ConstEvalFunctionIndex(90),
   },
   {
@@ -7776,7 +7824,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(45),
+    /* templates */ TemplateIndex(48),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(91),
@@ -7787,9 +7835,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(45),
+    /* templates */ TemplateIndex(48),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(106),
+    /* return_matcher_indices */ MatcherIndicesIndex(126),
     /* const_eval_fn */ ConstEvalFunctionIndex(91),
   },
   {
@@ -7798,9 +7846,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(45),
-    /* parameters */ ParameterIndex(387),
-    /* return_matcher_indices */ MatcherIndicesIndex(106),
+    /* templates */ TemplateIndex(48),
+    /* parameters */ ParameterIndex(389),
+    /* return_matcher_indices */ MatcherIndicesIndex(126),
     /* const_eval_fn */ ConstEvalFunctionIndex(91),
   },
   {
@@ -7809,9 +7857,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(45),
-    /* parameters */ ParameterIndex(388),
-    /* return_matcher_indices */ MatcherIndicesIndex(106),
+    /* templates */ TemplateIndex(48),
+    /* parameters */ ParameterIndex(390),
+    /* return_matcher_indices */ MatcherIndicesIndex(126),
     /* const_eval_fn */ ConstEvalFunctionIndex(91),
   },
   {
@@ -7831,9 +7879,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(253),
-    /* return_matcher_indices */ MatcherIndicesIndex(103),
+    /* return_matcher_indices */ MatcherIndicesIndex(123),
     /* const_eval_fn */ ConstEvalFunctionIndex(93),
   },
   {
@@ -7842,7 +7890,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(47),
+    /* templates */ TemplateIndex(50),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(93),
@@ -7853,9 +7901,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(61),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(106),
+    /* return_matcher_indices */ MatcherIndicesIndex(126),
     /* const_eval_fn */ ConstEvalFunctionIndex(93),
   },
   {
@@ -7875,9 +7923,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(253),
-    /* return_matcher_indices */ MatcherIndicesIndex(103),
+    /* return_matcher_indices */ MatcherIndicesIndex(123),
     /* const_eval_fn */ ConstEvalFunctionIndex(94),
   },
   {
@@ -7886,7 +7934,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(47),
+    /* templates */ TemplateIndex(50),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(94),
@@ -7897,9 +7945,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(61),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(106),
+    /* return_matcher_indices */ MatcherIndicesIndex(126),
     /* const_eval_fn */ ConstEvalFunctionIndex(94),
   },
   {
@@ -7908,7 +7956,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(42),
@@ -7919,9 +7967,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(244),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(42),
   },
   {
@@ -7930,9 +7978,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(245),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(42),
   },
   {
@@ -7941,7 +7989,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(248),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(62),
@@ -7952,9 +8000,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(240),
-    /* return_matcher_indices */ MatcherIndicesIndex(106),
+    /* return_matcher_indices */ MatcherIndicesIndex(126),
     /* const_eval_fn */ ConstEvalFunctionIndex(62),
   },
   {
@@ -7963,9 +8011,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(52),
+    /* templates */ TemplateIndex(55),
     /* parameters */ ParameterIndex(251),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(63),
   },
   {
@@ -7986,7 +8034,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(420),
+    /* parameters */ ParameterIndex(422),
     /* return_matcher_indices */ MatcherIndicesIndex(41),
     /* const_eval_fn */ ConstEvalFunctionIndex(106),
   },
@@ -7996,7 +8044,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(73),
+    /* templates */ TemplateIndex(76),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(41),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
@@ -8029,7 +8077,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(74),
+    /* templates */ TemplateIndex(77),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(35),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
@@ -8052,7 +8100,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(408),
+    /* parameters */ ParameterIndex(410),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(106),
   },
@@ -8062,7 +8110,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(75),
+    /* templates */ TemplateIndex(78),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
@@ -8075,7 +8123,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(/* invalid */),
-    /* return_matcher_indices */ MatcherIndicesIndex(267),
+    /* return_matcher_indices */ MatcherIndicesIndex(287),
     /* const_eval_fn */ ConstEvalFunctionIndex(105),
   },
   {
@@ -8085,8 +8133,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(421),
-    /* return_matcher_indices */ MatcherIndicesIndex(267),
+    /* parameters */ ParameterIndex(423),
+    /* return_matcher_indices */ MatcherIndicesIndex(287),
     /* const_eval_fn */ ConstEvalFunctionIndex(106),
   },
   {
@@ -8095,9 +8143,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(76),
+    /* templates */ TemplateIndex(79),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(267),
+    /* return_matcher_indices */ MatcherIndicesIndex(287),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -8128,7 +8176,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(77),
+    /* templates */ TemplateIndex(80),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(53),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
@@ -8139,7 +8187,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(45),
+    /* templates */ TemplateIndex(48),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(0),
@@ -8150,9 +8198,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(44),
+    /* templates */ TemplateIndex(47),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(0),
   },
   {
@@ -8161,7 +8209,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(1),
@@ -8172,9 +8220,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(1),
   },
   {
@@ -8183,7 +8231,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(2),
@@ -8194,9 +8242,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(2),
   },
   {
@@ -8216,7 +8264,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(253),
     /* return_matcher_indices */ MatcherIndicesIndex(53),
     /* const_eval_fn */ ConstEvalFunctionIndex(3),
@@ -8238,7 +8286,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(253),
     /* return_matcher_indices */ MatcherIndicesIndex(53),
     /* const_eval_fn */ ConstEvalFunctionIndex(4),
@@ -8249,7 +8297,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(5),
@@ -8260,9 +8308,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(5),
   },
   {
@@ -8271,7 +8319,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(6),
@@ -8282,9 +8330,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(6),
   },
   {
@@ -8293,7 +8341,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(7),
@@ -8304,9 +8352,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(7),
   },
   {
@@ -8315,7 +8363,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(8),
@@ -8326,9 +8374,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(23),
+    /* templates */ TemplateIndex(29),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(106),
+    /* return_matcher_indices */ MatcherIndicesIndex(126),
     /* const_eval_fn */ ConstEvalFunctionIndex(8),
   },
   {
@@ -8337,7 +8385,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(9),
@@ -8348,9 +8396,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(9),
   },
   {
@@ -8359,7 +8407,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(10),
@@ -8370,9 +8418,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(10),
   },
   {
@@ -8381,7 +8429,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(45),
+    /* templates */ TemplateIndex(48),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(11),
@@ -8392,9 +8440,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(45),
+    /* templates */ TemplateIndex(48),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(106),
+    /* return_matcher_indices */ MatcherIndicesIndex(126),
     /* const_eval_fn */ ConstEvalFunctionIndex(11),
   },
   {
@@ -8403,7 +8451,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(12),
@@ -8414,9 +8462,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(12),
   },
   {
@@ -8425,7 +8473,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(13),
@@ -8436,9 +8484,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(13),
   },
   {
@@ -8447,7 +8495,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(47),
+    /* templates */ TemplateIndex(50),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(14),
@@ -8458,9 +8506,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(46),
+    /* templates */ TemplateIndex(49),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(14),
   },
   {
@@ -8469,7 +8517,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(47),
+    /* templates */ TemplateIndex(50),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(15),
@@ -8480,9 +8528,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(46),
+    /* templates */ TemplateIndex(49),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(15),
   },
   {
@@ -8491,7 +8539,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(47),
+    /* templates */ TemplateIndex(50),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(16),
@@ -8502,9 +8550,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(46),
+    /* templates */ TemplateIndex(49),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(16),
   },
   {
@@ -8513,7 +8561,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(18),
@@ -8524,9 +8572,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(18),
   },
   {
@@ -8535,7 +8583,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(20),
@@ -8546,7 +8594,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(159),
     /* return_matcher_indices */ MatcherIndicesIndex(10),
     /* const_eval_fn */ ConstEvalFunctionIndex(20),
@@ -8558,7 +8606,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(408),
+    /* parameters */ ParameterIndex(410),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -8568,9 +8616,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(18),
-    /* parameters */ ParameterIndex(409),
-    /* return_matcher_indices */ MatcherIndicesIndex(109),
+    /* templates */ TemplateIndex(24),
+    /* parameters */ ParameterIndex(411),
+    /* return_matcher_indices */ MatcherIndicesIndex(129),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8579,7 +8627,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(24),
@@ -8590,9 +8638,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(24),
   },
   {
@@ -8601,7 +8649,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(25),
@@ -8612,9 +8660,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(25),
   },
   {
@@ -8623,7 +8671,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(47),
+    /* templates */ TemplateIndex(50),
     /* parameters */ ParameterIndex(16),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(26),
@@ -8634,9 +8682,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(46),
+    /* templates */ TemplateIndex(49),
     /* parameters */ ParameterIndex(160),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(26),
   },
   {
@@ -8645,7 +8693,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(47),
+    /* templates */ TemplateIndex(50),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(28),
@@ -8656,9 +8704,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(46),
+    /* templates */ TemplateIndex(49),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(28),
   },
   {
@@ -8667,7 +8715,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(47),
+    /* templates */ TemplateIndex(50),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(29),
@@ -8678,9 +8726,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(46),
+    /* templates */ TemplateIndex(49),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(29),
   },
   {
@@ -8689,7 +8737,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(30),
@@ -8700,9 +8748,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(30),
   },
   {
@@ -8711,7 +8759,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(31),
@@ -8722,9 +8770,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(244),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(31),
   },
   {
@@ -8733,7 +8781,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(32),
@@ -8744,9 +8792,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(32),
   },
   {
@@ -8755,9 +8803,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(220),
+    /* return_matcher_indices */ MatcherIndicesIndex(240),
     /* const_eval_fn */ ConstEvalFunctionIndex(33),
   },
   {
@@ -8766,9 +8814,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(112),
+    /* return_matcher_indices */ MatcherIndicesIndex(132),
     /* const_eval_fn */ ConstEvalFunctionIndex(33),
   },
   {
@@ -8777,7 +8825,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(47),
+    /* templates */ TemplateIndex(50),
     /* parameters */ ParameterIndex(15),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(34),
@@ -8788,9 +8836,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(46),
+    /* templates */ TemplateIndex(49),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(34),
   },
   {
@@ -8799,7 +8847,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(35),
@@ -8810,9 +8858,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(35),
   },
   {
@@ -8821,7 +8869,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(25),
     /* parameters */ ParameterIndex(327),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(36),
@@ -8832,9 +8880,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(329),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(36),
   },
   {
@@ -8843,7 +8891,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(37),
@@ -8854,7 +8902,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(159),
     /* return_matcher_indices */ MatcherIndicesIndex(10),
     /* const_eval_fn */ ConstEvalFunctionIndex(37),
@@ -8865,7 +8913,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(38),
@@ -8876,9 +8924,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(38),
   },
   {
@@ -8887,7 +8935,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(39),
@@ -8898,9 +8946,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(39),
   },
   {
@@ -8909,7 +8957,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(45),
+    /* templates */ TemplateIndex(48),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(40),
@@ -8920,9 +8968,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(44),
+    /* templates */ TemplateIndex(47),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(40),
   },
   {
@@ -8931,7 +8979,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(45),
+    /* templates */ TemplateIndex(48),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(41),
@@ -8942,9 +8990,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(44),
+    /* templates */ TemplateIndex(47),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(41),
   },
   {
@@ -8953,9 +9001,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(222),
+    /* return_matcher_indices */ MatcherIndicesIndex(242),
     /* const_eval_fn */ ConstEvalFunctionIndex(43),
   },
   {
@@ -8964,9 +9012,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(118),
+    /* return_matcher_indices */ MatcherIndicesIndex(138),
     /* const_eval_fn */ ConstEvalFunctionIndex(43),
   },
   {
@@ -8975,7 +9023,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(54),
@@ -8986,9 +9034,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(54),
   },
   {
@@ -8998,7 +9046,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(408),
+    /* parameters */ ParameterIndex(410),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(55),
   },
@@ -9008,9 +9056,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(18),
-    /* parameters */ ParameterIndex(409),
-    /* return_matcher_indices */ MatcherIndicesIndex(109),
+    /* templates */ TemplateIndex(24),
+    /* parameters */ ParameterIndex(411),
+    /* return_matcher_indices */ MatcherIndicesIndex(129),
     /* const_eval_fn */ ConstEvalFunctionIndex(55),
   },
   {
@@ -9019,7 +9067,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(56),
@@ -9030,9 +9078,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(56),
   },
   {
@@ -9041,7 +9089,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(47),
+    /* templates */ TemplateIndex(50),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(59),
@@ -9052,9 +9100,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(46),
+    /* templates */ TemplateIndex(49),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(59),
   },
   {
@@ -9063,7 +9111,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(60),
@@ -9074,9 +9122,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(60),
   },
   {
@@ -9085,7 +9133,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(61),
@@ -9096,9 +9144,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(23),
+    /* templates */ TemplateIndex(29),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(106),
+    /* return_matcher_indices */ MatcherIndicesIndex(126),
     /* const_eval_fn */ ConstEvalFunctionIndex(61),
   },
   {
@@ -9107,7 +9155,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(55),
+    /* templates */ TemplateIndex(58),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(64),
@@ -9118,9 +9166,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(54),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(64),
   },
   {
@@ -9129,7 +9177,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(65),
@@ -9140,9 +9188,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(65),
   },
   {
@@ -9151,7 +9199,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(66),
@@ -9162,9 +9210,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(66),
   },
   {
@@ -9173,7 +9221,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(67),
@@ -9184,9 +9232,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(244),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(67),
   },
   {
@@ -9195,7 +9243,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(68),
@@ -9206,9 +9254,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(68),
   },
   {
@@ -9217,7 +9265,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(69),
@@ -9228,9 +9276,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(69),
   },
   {
@@ -9239,7 +9287,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(70),
@@ -9250,9 +9298,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(70),
   },
   {
@@ -9261,7 +9309,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(71),
@@ -9272,9 +9320,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(71),
   },
   {
@@ -9283,7 +9331,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(73),
@@ -9294,9 +9342,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(73),
   },
   {
@@ -9305,7 +9353,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(6),
+    /* templates */ TemplateIndex(16),
     /* parameters */ ParameterIndex(297),
     /* return_matcher_indices */ MatcherIndicesIndex(35),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -9349,7 +9397,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(45),
+    /* templates */ TemplateIndex(48),
     /* parameters */ ParameterIndex(371),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -9360,9 +9408,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(44),
+    /* templates */ TemplateIndex(47),
     /* parameters */ ParameterIndex(373),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -9371,7 +9419,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(45),
+    /* templates */ TemplateIndex(48),
     /* parameters */ ParameterIndex(371),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -9382,9 +9430,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(44),
+    /* templates */ TemplateIndex(47),
     /* parameters */ ParameterIndex(373),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -9393,7 +9441,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(45),
+    /* templates */ TemplateIndex(48),
     /* parameters */ ParameterIndex(375),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -9404,9 +9452,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(44),
+    /* templates */ TemplateIndex(47),
     /* parameters */ ParameterIndex(377),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -9415,7 +9463,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(45),
+    /* templates */ TemplateIndex(48),
     /* parameters */ ParameterIndex(379),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -9426,9 +9474,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(44),
+    /* templates */ TemplateIndex(47),
     /* parameters */ ParameterIndex(381),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -9437,7 +9485,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(47),
+    /* templates */ TemplateIndex(50),
     /* parameters */ ParameterIndex(371),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -9448,9 +9496,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(46),
+    /* templates */ TemplateIndex(49),
     /* parameters */ ParameterIndex(373),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -9459,7 +9507,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(45),
+    /* templates */ TemplateIndex(48),
     /* parameters */ ParameterIndex(383),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -9470,9 +9518,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(44),
+    /* templates */ TemplateIndex(47),
     /* parameters */ ParameterIndex(385),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -9481,7 +9529,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(45),
+    /* templates */ TemplateIndex(48),
     /* parameters */ ParameterIndex(383),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -9492,9 +9540,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(44),
+    /* templates */ TemplateIndex(47),
     /* parameters */ ParameterIndex(385),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -9558,9 +9606,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(253),
-    /* return_matcher_indices */ MatcherIndicesIndex(103),
+    /* return_matcher_indices */ MatcherIndicesIndex(123),
     /* const_eval_fn */ ConstEvalFunctionIndex(81),
   },
   {
@@ -9569,7 +9617,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(47),
+    /* templates */ TemplateIndex(50),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(82),
@@ -9580,9 +9628,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(61),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(106),
+    /* return_matcher_indices */ MatcherIndicesIndex(126),
     /* const_eval_fn */ ConstEvalFunctionIndex(82),
   },
   {
@@ -9591,7 +9639,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(55),
+    /* templates */ TemplateIndex(58),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(83),
@@ -9602,9 +9650,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(55),
+    /* templates */ TemplateIndex(58),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(106),
+    /* return_matcher_indices */ MatcherIndicesIndex(126),
     /* const_eval_fn */ ConstEvalFunctionIndex(83),
   },
   {
@@ -9613,7 +9661,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(47),
+    /* templates */ TemplateIndex(50),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(92),
@@ -9624,9 +9672,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(61),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(106),
+    /* return_matcher_indices */ MatcherIndicesIndex(126),
     /* const_eval_fn */ ConstEvalFunctionIndex(92),
   },
   {
@@ -9635,7 +9683,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(53),
     /* const_eval_fn */ ConstEvalFunctionIndex(97),
@@ -9646,9 +9694,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(214),
+    /* return_matcher_indices */ MatcherIndicesIndex(234),
     /* const_eval_fn */ ConstEvalFunctionIndex(97),
   },
   {
@@ -9657,7 +9705,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(53),
     /* const_eval_fn */ ConstEvalFunctionIndex(98),
@@ -9668,9 +9716,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(214),
+    /* return_matcher_indices */ MatcherIndicesIndex(234),
     /* const_eval_fn */ ConstEvalFunctionIndex(98),
   },
   {
@@ -9679,7 +9727,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(45),
+    /* templates */ TemplateIndex(48),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(53),
     /* const_eval_fn */ ConstEvalFunctionIndex(99),
@@ -9690,9 +9738,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(45),
+    /* templates */ TemplateIndex(48),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(214),
+    /* return_matcher_indices */ MatcherIndicesIndex(234),
     /* const_eval_fn */ ConstEvalFunctionIndex(99),
   },
   {
@@ -9701,7 +9749,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(45),
+    /* templates */ TemplateIndex(48),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(53),
     /* const_eval_fn */ ConstEvalFunctionIndex(100),
@@ -9712,9 +9760,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(45),
+    /* templates */ TemplateIndex(48),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(214),
+    /* return_matcher_indices */ MatcherIndicesIndex(234),
     /* const_eval_fn */ ConstEvalFunctionIndex(100),
   },
   {
@@ -9723,7 +9771,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(45),
+    /* templates */ TemplateIndex(48),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(53),
     /* const_eval_fn */ ConstEvalFunctionIndex(101),
@@ -9734,9 +9782,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(45),
+    /* templates */ TemplateIndex(48),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(214),
+    /* return_matcher_indices */ MatcherIndicesIndex(234),
     /* const_eval_fn */ ConstEvalFunctionIndex(101),
   },
   {
@@ -9745,7 +9793,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(45),
+    /* templates */ TemplateIndex(48),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(53),
     /* const_eval_fn */ ConstEvalFunctionIndex(102),
@@ -9756,9 +9804,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(45),
+    /* templates */ TemplateIndex(48),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(214),
+    /* return_matcher_indices */ MatcherIndicesIndex(234),
     /* const_eval_fn */ ConstEvalFunctionIndex(102),
   },
   {
@@ -9767,7 +9815,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(47),
+    /* templates */ TemplateIndex(50),
     /* parameters */ ParameterIndex(16),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(103),
@@ -9778,9 +9826,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(61),
-    /* parameters */ ParameterIndex(389),
-    /* return_matcher_indices */ MatcherIndicesIndex(106),
+    /* templates */ TemplateIndex(64),
+    /* parameters */ ParameterIndex(391),
+    /* return_matcher_indices */ MatcherIndicesIndex(126),
     /* const_eval_fn */ ConstEvalFunctionIndex(103),
   },
   {
@@ -9789,7 +9837,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(47),
+    /* templates */ TemplateIndex(50),
     /* parameters */ ParameterIndex(16),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(104),
@@ -9800,9 +9848,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(61),
-    /* parameters */ ParameterIndex(389),
-    /* return_matcher_indices */ MatcherIndicesIndex(106),
+    /* templates */ TemplateIndex(64),
+    /* parameters */ ParameterIndex(391),
+    /* return_matcher_indices */ MatcherIndicesIndex(126),
     /* const_eval_fn */ ConstEvalFunctionIndex(104),
   },
   {
@@ -9811,8 +9859,8 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(49),
-    /* parameters */ ParameterIndex(406),
+    /* templates */ TemplateIndex(52),
+    /* parameters */ ParameterIndex(408),
     /* return_matcher_indices */ MatcherIndicesIndex(35),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -9822,7 +9870,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(14),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(231),
     /* return_matcher_indices */ MatcherIndicesIndex(5),
     /* const_eval_fn */ ConstEvalFunctionIndex(17),
@@ -9833,8 +9881,8 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
-    /* parameters */ ParameterIndex(407),
+    /* templates */ TemplateIndex(24),
+    /* parameters */ ParameterIndex(409),
     /* return_matcher_indices */ MatcherIndicesIndex(10),
     /* const_eval_fn */ ConstEvalFunctionIndex(19),
   },
@@ -9844,7 +9892,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(44),
+    /* templates */ TemplateIndex(47),
     /* parameters */ ParameterIndex(159),
     /* return_matcher_indices */ MatcherIndicesIndex(10),
     /* const_eval_fn */ ConstEvalFunctionIndex(21),
@@ -9877,9 +9925,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(244),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(27),
   },
   {
@@ -9888,9 +9936,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(44),
   },
   {
@@ -9900,7 +9948,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(410),
+    /* parameters */ ParameterIndex(412),
     /* return_matcher_indices */ MatcherIndicesIndex(35),
     /* const_eval_fn */ ConstEvalFunctionIndex(45),
   },
@@ -9911,7 +9959,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(410),
+    /* parameters */ ParameterIndex(412),
     /* return_matcher_indices */ MatcherIndicesIndex(35),
     /* const_eval_fn */ ConstEvalFunctionIndex(46),
   },
@@ -9922,7 +9970,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(410),
+    /* parameters */ ParameterIndex(412),
     /* return_matcher_indices */ MatcherIndicesIndex(35),
     /* const_eval_fn */ ConstEvalFunctionIndex(47),
   },
@@ -9933,7 +9981,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(411),
+    /* parameters */ ParameterIndex(413),
     /* return_matcher_indices */ MatcherIndicesIndex(35),
     /* const_eval_fn */ ConstEvalFunctionIndex(48),
   },
@@ -9944,7 +9992,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(411),
+    /* parameters */ ParameterIndex(413),
     /* return_matcher_indices */ MatcherIndicesIndex(35),
     /* const_eval_fn */ ConstEvalFunctionIndex(49),
   },
@@ -9955,7 +10003,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(412),
+    /* parameters */ ParameterIndex(414),
     /* return_matcher_indices */ MatcherIndicesIndex(35),
     /* const_eval_fn */ ConstEvalFunctionIndex(50),
   },
@@ -9966,7 +10014,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(413),
+    /* parameters */ ParameterIndex(415),
     /* return_matcher_indices */ MatcherIndicesIndex(35),
     /* const_eval_fn */ ConstEvalFunctionIndex(51),
   },
@@ -9977,7 +10025,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(412),
+    /* parameters */ ParameterIndex(414),
     /* return_matcher_indices */ MatcherIndicesIndex(35),
     /* const_eval_fn */ ConstEvalFunctionIndex(52),
   },
@@ -9988,7 +10036,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(413),
+    /* parameters */ ParameterIndex(415),
     /* return_matcher_indices */ MatcherIndicesIndex(35),
     /* const_eval_fn */ ConstEvalFunctionIndex(53),
   },
@@ -9998,9 +10046,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(57),
   },
   {
@@ -10009,9 +10057,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(18),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(245),
-    /* return_matcher_indices */ MatcherIndicesIndex(100),
+    /* return_matcher_indices */ MatcherIndicesIndex(120),
     /* const_eval_fn */ ConstEvalFunctionIndex(58),
   },
   {
@@ -10031,9 +10079,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(21),
-    /* parameters */ ParameterIndex(414),
-    /* return_matcher_indices */ MatcherIndicesIndex(76),
+    /* templates */ TemplateIndex(27),
+    /* parameters */ ParameterIndex(416),
+    /* return_matcher_indices */ MatcherIndicesIndex(96),
     /* const_eval_fn */ ConstEvalFunctionIndex(72),
   },
   {
@@ -10110,7 +10158,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(17),
-    /* return_matcher_indices */ MatcherIndicesIndex(135),
+    /* return_matcher_indices */ MatcherIndicesIndex(155),
     /* const_eval_fn */ ConstEvalFunctionIndex(80),
   },
   {
@@ -10119,9 +10167,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(6),
-    /* parameters */ ParameterIndex(419),
-    /* return_matcher_indices */ MatcherIndicesIndex(139),
+    /* templates */ TemplateIndex(16),
+    /* parameters */ ParameterIndex(421),
+    /* return_matcher_indices */ MatcherIndicesIndex(159),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -10130,7 +10178,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(47),
+    /* templates */ TemplateIndex(50),
     /* parameters */ ParameterIndex(0),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -10141,7 +10189,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(47),
+    /* templates */ TemplateIndex(50),
     /* parameters */ ParameterIndex(0),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -10152,7 +10200,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(47),
+    /* templates */ TemplateIndex(50),
     /* parameters */ ParameterIndex(0),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -10163,9 +10211,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(47),
+    /* templates */ TemplateIndex(50),
     /* parameters */ ParameterIndex(0),
-    /* return_matcher_indices */ MatcherIndicesIndex(260),
+    /* return_matcher_indices */ MatcherIndicesIndex(280),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -10176,7 +10224,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(152),
-    /* return_matcher_indices */ MatcherIndicesIndex(135),
+    /* return_matcher_indices */ MatcherIndicesIndex(155),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -10205,10 +10253,10 @@
     /* [483] */
     /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
     /* num_parameters */ 2,
-    /* num_explicit_templates */ 0,
-    /* num_templates   */ 4,
-    /* templates */ TemplateIndex(10),
-    /* parameters */ ParameterIndex(315),
+    /* num_explicit_templates */ 1,
+    /* num_templates   */ 5,
+    /* templates */ TemplateIndex(6),
+    /* parameters */ ParameterIndex(387),
     /* return_matcher_indices */ MatcherIndicesIndex(47),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -10217,10 +10265,10 @@
     /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
-    /* num_templates   */ 4,
-    /* templates */ TemplateIndex(10),
+    /* num_templates   */ 5,
+    /* templates */ TemplateIndex(11),
     /* parameters */ ParameterIndex(315),
-    /* return_matcher_indices */ MatcherIndicesIndex(47),
+    /* return_matcher_indices */ MatcherIndicesIndex(62),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -10251,9 +10299,9 @@
     /* num_parameters */ 0,
     /* num_explicit_templates */ 3,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(35),
+    /* templates */ TemplateIndex(41),
     /* parameters */ ParameterIndex(/* invalid */),
-    /* return_matcher_indices */ MatcherIndicesIndex(62),
+    /* return_matcher_indices */ MatcherIndicesIndex(77),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -10262,9 +10310,9 @@
     /* num_parameters */ 0,
     /* num_explicit_templates */ 3,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(38),
+    /* templates */ TemplateIndex(44),
     /* parameters */ ParameterIndex(/* invalid */),
-    /* return_matcher_indices */ MatcherIndicesIndex(67),
+    /* return_matcher_indices */ MatcherIndicesIndex(82),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -10273,9 +10321,9 @@
     /* num_parameters */ 0,
     /* num_explicit_templates */ 3,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(41),
+    /* templates */ TemplateIndex(7),
     /* parameters */ ParameterIndex(/* invalid */),
-    /* return_matcher_indices */ MatcherIndicesIndex(47),
+    /* return_matcher_indices */ MatcherIndicesIndex(87),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
 };
@@ -11395,13 +11443,13 @@
   },
   {
     /* [147] */
-    /* fn subgroupMatrixMultiply[S : subgroup_matrix_elements, C : num, R : num, K : num](subgroup_matrix<subgroup_matrix_kind_left, S, K, R>, subgroup_matrix<subgroup_matrix_kind_right, S, C, K>) -> subgroup_matrix<subgroup_matrix_kind_result, S, C, R> */
+    /* fn subgroupMatrixMultiply<TR : subgroup_matrix_elements>[T : subgroup_matrix_elements, C : num, R : num, K : num](subgroup_matrix<subgroup_matrix_kind_left, T, K, R>, subgroup_matrix<subgroup_matrix_kind_right, T, C, K>) -> subgroup_matrix<subgroup_matrix_kind_result, TR, C, R> */
     /* num overloads */ 1,
     /* overloads */ OverloadIndex(483),
   },
   {
     /* [148] */
-    /* fn subgroupMatrixMultiplyAccumulate[S : subgroup_matrix_elements, C : num, R : num, K : num](subgroup_matrix<subgroup_matrix_kind_left, S, K, R>, subgroup_matrix<subgroup_matrix_kind_right, S, C, K>, subgroup_matrix<subgroup_matrix_kind_result, S, C, R>) -> subgroup_matrix<subgroup_matrix_kind_result, S, C, R> */
+    /* fn subgroupMatrixMultiplyAccumulate[T : subgroup_matrix_elements, TR : subgroup_matrix_elements, C : num, R : num, K : num](subgroup_matrix<subgroup_matrix_kind_left, T, K, R>, subgroup_matrix<subgroup_matrix_kind_right, T, C, K>, subgroup_matrix<subgroup_matrix_kind_result, TR, C, R>) -> subgroup_matrix<subgroup_matrix_kind_result, TR, C, R> */
     /* num overloads */ 1,
     /* overloads */ OverloadIndex(484),
   },
diff --git a/src/tint/lang/core/ir/builder.h b/src/tint/lang/core/ir/builder.h
index 0e078d4..650592b 100644
--- a/src/tint/lang/core/ir/builder.h
+++ b/src/tint/lang/core/ir/builder.h
@@ -1206,6 +1206,21 @@
                                              Values(std::forward<ARGS>(args)...));
     }
 
+    /// Creates a core builtin call instruction with explicit parameters
+    /// @param type the return type of the call
+    /// @param func the builtin function to call
+    /// @param explicit_params the explicit parameters
+    /// @param args the call arguments
+    /// @returns the instruction
+    template <typename... ARGS>
+    ir::CoreBuiltinCall* CallExplicit(const core::type::Type* type,
+                                      core::BuiltinFn func,
+                                      VectorRef<const core::type::Type*> explicit_params,
+                                      ARGS&&... args) {
+        return CallExplicitWithResult<core::ir::CoreBuiltinCall>(
+            InstructionResult(type), func, explicit_params, Values(std::forward<ARGS>(args)...));
+    }
+
     /// Creates a builtin call instruction
     /// @param type the return type of the call
     /// @param func the builtin function to call
diff --git a/src/tint/lang/msl/writer/raise/builtin_polyfill_test.cc b/src/tint/lang/msl/writer/raise/builtin_polyfill_test.cc
index 4e0bfe7..d005d2d 100644
--- a/src/tint/lang/msl/writer/raise/builtin_polyfill_test.cc
+++ b/src/tint/lang/msl/writer/raise/builtin_polyfill_test.cc
@@ -3320,8 +3320,8 @@
     auto* func = b.Function("foo", mat);
     func->SetParams({p});
     b.Append(func->Block(), [&] {
-        auto* call = b.Call(mat, core::BuiltinFn::kSubgroupMatrixLoad, p, 64_u, false, 32_u);
-        call->SetExplicitTemplateParams(Vector{mat});
+        auto* call = b.CallExplicit(mat, core::BuiltinFn::kSubgroupMatrixLoad, Vector{mat}, p, 64_u,
+                                    false, 32_u);
         b.Return(func, call);
     });
 
@@ -3361,8 +3361,8 @@
     auto* func = b.Function("foo", mat);
     func->SetParams({p});
     b.Append(func->Block(), [&] {
-        auto* call = b.Call(mat, core::BuiltinFn::kSubgroupMatrixLoad, p, 64_u, false, 32_u);
-        call->SetExplicitTemplateParams(Vector{mat});
+        auto* call = b.CallExplicit(mat, core::BuiltinFn::kSubgroupMatrixLoad, Vector{mat}, p, 64_u,
+                                    false, 32_u);
         b.Return(func, call);
     });
 
@@ -3477,14 +3477,15 @@
     auto* func = b.Function("foo", result);
     func->SetParams({left, right});
     b.Append(func->Block(), [&] {
-        auto* call = b.Call(result, core::BuiltinFn::kSubgroupMatrixMultiply, left, right);
+        auto* call = b.CallExplicit(result, core::BuiltinFn::kSubgroupMatrixMultiply,
+                                    Vector{ty.f32()}, left, right);
         b.Return(func, call);
     });
 
     auto* src = R"(
 %foo = func(%left:subgroup_matrix_left<f32, 4, 8>, %right:subgroup_matrix_right<f32, 8, 4>):subgroup_matrix_result<f32, 8, 8> {
   $B1: {
-    %4:subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply %left, %right
+    %4:subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply<f32> %left, %right
     ret %4
   }
 }
@@ -3515,14 +3516,15 @@
     auto* func = b.Function("foo", result);
     func->SetParams({left, right});
     b.Append(func->Block(), [&] {
-        auto* call = b.Call(result, core::BuiltinFn::kSubgroupMatrixMultiply, left, right);
+        auto* call = b.CallExplicit(result, core::BuiltinFn::kSubgroupMatrixMultiply,
+                                    Vector{ty.f16()}, left, right);
         b.Return(func, call);
     });
 
     auto* src = R"(
 %foo = func(%left:subgroup_matrix_left<f16, 8, 4>, %right:subgroup_matrix_right<f16, 2, 8>):subgroup_matrix_result<f16, 2, 4> {
   $B1: {
-    %4:subgroup_matrix_result<f16, 2, 4> = subgroupMatrixMultiply %left, %right
+    %4:subgroup_matrix_result<f16, 2, 4> = subgroupMatrixMultiply<f16> %left, %right
     ret %4
   }
 }
diff --git a/src/tint/lang/spirv/intrinsic/data.cc b/src/tint/lang/spirv/intrinsic/data.cc
index 19f1e90..06ab199 100644
--- a/src/tint/lang/spirv/intrinsic/data.cc
+++ b/src/tint/lang/spirv/intrinsic/data.cc
@@ -1376,19 +1376,19 @@
   /* [27] */ MatcherIndex(3),
   /* [28] */ MatcherIndex(47),
   /* [29] */ MatcherIndex(16),
-  /* [30] */ MatcherIndex(0),
-  /* [31] */ MatcherIndex(1),
-  /* [32] */ MatcherIndex(2),
+  /* [30] */ MatcherIndex(1),
+  /* [31] */ MatcherIndex(2),
+  /* [32] */ MatcherIndex(3),
   /* [33] */ MatcherIndex(47),
   /* [34] */ MatcherIndex(14),
   /* [35] */ MatcherIndex(0),
-  /* [36] */ MatcherIndex(3),
-  /* [37] */ MatcherIndex(2),
+  /* [36] */ MatcherIndex(4),
+  /* [37] */ MatcherIndex(3),
   /* [38] */ MatcherIndex(47),
   /* [39] */ MatcherIndex(15),
   /* [40] */ MatcherIndex(0),
-  /* [41] */ MatcherIndex(1),
-  /* [42] */ MatcherIndex(3),
+  /* [41] */ MatcherIndex(2),
+  /* [42] */ MatcherIndex(4),
   /* [43] */ MatcherIndex(43),
   /* [44] */ MatcherIndex(6),
   /* [45] */ MatcherIndex(45),
@@ -3486,419 +3486,425 @@
   {
     /* [12] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(227),
+    /* matcher_indices */ MatcherIndicesIndex(232),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [13] */
-    /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(225),
+    /* name */ "TR",
+    /* matcher_indices */ MatcherIndicesIndex(232),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [14] */
-    /* name */ "I",
-    /* matcher_indices */ MatcherIndicesIndex(225),
-    /* kind */ TemplateInfo::Kind::kType,
+    /* name */ "C",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [15] */
-    /* name */ "S",
-    /* matcher_indices */ MatcherIndicesIndex(225),
-    /* kind */ TemplateInfo::Kind::kType,
+    /* name */ "R",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [16] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(227),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [17] */
-    /* name */ "A",
-    /* matcher_indices */ MatcherIndicesIndex(225),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [18] */
-    /* name */ "B",
-    /* matcher_indices */ MatcherIndicesIndex(225),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [19] */
-    /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(225),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [20] */
-    /* name */ "D",
-    /* matcher_indices */ MatcherIndicesIndex(225),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [21] */
-    /* name */ "F",
-    /* matcher_indices */ MatcherIndicesIndex(114),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [22] */
-    /* name */ "A",
-    /* matcher_indices */ MatcherIndicesIndex(74),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [23] */
-    /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(225),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [24] */
-    /* name */ "S",
-    /* matcher_indices */ MatcherIndicesIndex(225),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [25] */
-    /* name */ "F",
-    /* matcher_indices */ MatcherIndicesIndex(117),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [26] */
-    /* name */ "A",
-    /* matcher_indices */ MatcherIndicesIndex(74),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [27] */
-    /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(225),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [28] */
-    /* name */ "S",
-    /* matcher_indices */ MatcherIndicesIndex(225),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [29] */
-    /* name */ "F",
-    /* matcher_indices */ MatcherIndicesIndex(120),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [30] */
-    /* name */ "A",
-    /* matcher_indices */ MatcherIndicesIndex(74),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [31] */
-    /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(225),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [32] */
-    /* name */ "S",
-    /* matcher_indices */ MatcherIndicesIndex(225),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [33] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(226),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [34] */
     /* name */ "K",
     /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
-    /* [35] */
+    /* [17] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(227),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [18] */
     /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* matcher_indices */ MatcherIndicesIndex(225),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [19] */
+    /* name */ "I",
+    /* matcher_indices */ MatcherIndicesIndex(225),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [20] */
+    /* name */ "S",
+    /* matcher_indices */ MatcherIndicesIndex(225),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [21] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(227),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [22] */
+    /* name */ "A",
+    /* matcher_indices */ MatcherIndicesIndex(225),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [23] */
+    /* name */ "B",
+    /* matcher_indices */ MatcherIndicesIndex(225),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [24] */
+    /* name */ "C",
+    /* matcher_indices */ MatcherIndicesIndex(225),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [25] */
+    /* name */ "D",
+    /* matcher_indices */ MatcherIndicesIndex(225),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [26] */
+    /* name */ "F",
+    /* matcher_indices */ MatcherIndicesIndex(114),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [27] */
+    /* name */ "A",
+    /* matcher_indices */ MatcherIndicesIndex(74),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [28] */
+    /* name */ "C",
+    /* matcher_indices */ MatcherIndicesIndex(225),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [29] */
+    /* name */ "S",
+    /* matcher_indices */ MatcherIndicesIndex(225),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [30] */
+    /* name */ "F",
+    /* matcher_indices */ MatcherIndicesIndex(117),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [31] */
+    /* name */ "A",
+    /* matcher_indices */ MatcherIndicesIndex(74),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [32] */
+    /* name */ "C",
+    /* matcher_indices */ MatcherIndicesIndex(225),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [33] */
+    /* name */ "S",
+    /* matcher_indices */ MatcherIndicesIndex(225),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [34] */
+    /* name */ "F",
+    /* matcher_indices */ MatcherIndicesIndex(120),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [35] */
+    /* name */ "A",
+    /* matcher_indices */ MatcherIndicesIndex(74),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [36] */
-    /* name */ "R",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
+    /* name */ "C",
+    /* matcher_indices */ MatcherIndicesIndex(225),
+    /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [37] */
-    /* name */ "R",
+    /* name */ "S",
     /* matcher_indices */ MatcherIndicesIndex(225),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [38] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(225),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [39] */
-    /* name */ "U",
-    /* matcher_indices */ MatcherIndicesIndex(225),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [40] */
-    /* name */ "N",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [41] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(230),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [42] */
-    /* name */ "T",
     /* matcher_indices */ MatcherIndicesIndex(226),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
-    /* [43] */
-    /* name */ "R",
-    /* matcher_indices */ MatcherIndicesIndex(225),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [44] */
-    /* name */ "N",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [45] */
-    /* name */ "S",
-    /* matcher_indices */ MatcherIndicesIndex(202),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [46] */
-    /* name */ "S",
-    /* matcher_indices */ MatcherIndicesIndex(232),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [47] */
-    /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [48] */
-    /* name */ "R",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [49] */
+    /* [39] */
     /* name */ "K",
     /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
-    /* [50] */
+    /* [40] */
+    /* name */ "C",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [41] */
+    /* name */ "R",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [42] */
+    /* name */ "R",
+    /* matcher_indices */ MatcherIndicesIndex(225),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [43] */
     /* name */ "T",
     /* matcher_indices */ MatcherIndicesIndex(225),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
+    /* [44] */
+    /* name */ "U",
+    /* matcher_indices */ MatcherIndicesIndex(225),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [45] */
+    /* name */ "N",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [46] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(230),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [47] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(226),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [48] */
+    /* name */ "R",
+    /* matcher_indices */ MatcherIndicesIndex(225),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [49] */
+    /* name */ "N",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [50] */
+    /* name */ "S",
+    /* matcher_indices */ MatcherIndicesIndex(202),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
     /* [51] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(225),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [52] */
     /* name */ "U",
     /* matcher_indices */ MatcherIndicesIndex(114),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
-    /* [52] */
+    /* [53] */
     /* name */ "S",
     /* matcher_indices */ MatcherIndicesIndex(72),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
-    /* [53] */
+    /* [54] */
     /* name */ "A",
     /* matcher_indices */ MatcherIndicesIndex(44),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
-    /* [54] */
+    /* [55] */
     /* name */ "B",
     /* matcher_indices */ MatcherIndicesIndex(225),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
-    /* [55] */
-    /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(225),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
     /* [56] */
-    /* name */ "I",
+    /* name */ "C",
     /* matcher_indices */ MatcherIndicesIndex(225),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [57] */
-    /* name */ "C",
+    /* name */ "I",
     /* matcher_indices */ MatcherIndicesIndex(225),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [58] */
-    /* name */ "S",
-    /* matcher_indices */ MatcherIndicesIndex(225),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [59] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(227),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [60] */
     /* name */ "C",
     /* matcher_indices */ MatcherIndicesIndex(225),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
-    /* [61] */
-    /* name */ "D",
-    /* matcher_indices */ MatcherIndicesIndex(225),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [62] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(226),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [63] */
-    /* name */ "N",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [64] */
-    /* name */ "M",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [65] */
-    /* name */ "R",
-    /* matcher_indices */ MatcherIndicesIndex(225),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [66] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(225),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [67] */
-    /* name */ "N",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [68] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(226),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [69] */
-    /* name */ "N",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [70] */
+    /* [59] */
     /* name */ "S",
-    /* matcher_indices */ MatcherIndicesIndex(202),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [71] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(226),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [72] */
-    /* name */ "R",
     /* matcher_indices */ MatcherIndicesIndex(225),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
-    /* [73] */
-    /* name */ "S",
-    /* matcher_indices */ MatcherIndicesIndex(202),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [74] */
-    /* name */ "I",
-    /* matcher_indices */ MatcherIndicesIndex(114),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [75] */
-    /* name */ "A",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [76] */
-    /* name */ "F",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [77] */
-    /* name */ "A",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [78] */
+    /* [60] */
     /* name */ "T",
     /* matcher_indices */ MatcherIndicesIndex(227),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
-    /* [79] */
-    /* name */ "S",
-    /* matcher_indices */ MatcherIndicesIndex(229),
+    /* [61] */
+    /* name */ "C",
+    /* matcher_indices */ MatcherIndicesIndex(225),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
-    /* [80] */
+    /* [62] */
+    /* name */ "D",
+    /* matcher_indices */ MatcherIndicesIndex(225),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [63] */
     /* name */ "T",
     /* matcher_indices */ MatcherIndicesIndex(226),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
+    /* [64] */
+    /* name */ "N",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [65] */
+    /* name */ "M",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [66] */
+    /* name */ "R",
+    /* matcher_indices */ MatcherIndicesIndex(225),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [67] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(225),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [68] */
+    /* name */ "N",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [69] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(226),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [70] */
+    /* name */ "N",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [71] */
+    /* name */ "S",
+    /* matcher_indices */ MatcherIndicesIndex(202),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [72] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(226),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [73] */
+    /* name */ "R",
+    /* matcher_indices */ MatcherIndicesIndex(225),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [74] */
+    /* name */ "S",
+    /* matcher_indices */ MatcherIndicesIndex(202),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [75] */
+    /* name */ "I",
+    /* matcher_indices */ MatcherIndicesIndex(114),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [76] */
+    /* name */ "A",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [77] */
+    /* name */ "F",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [78] */
+    /* name */ "A",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [79] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(227),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [80] */
+    /* name */ "S",
+    /* matcher_indices */ MatcherIndicesIndex(229),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
     /* [81] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(226),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [82] */
     /* name */ "S",
     /* matcher_indices */ MatcherIndicesIndex(202),
     /* kind */ TemplateInfo::Kind::kNumber,
@@ -3915,7 +3921,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(293),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -3926,7 +3932,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(10),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -3937,7 +3943,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(60),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -3948,7 +3954,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(59),
+    /* templates */ TemplateIndex(60),
     /* parameters */ ParameterIndex(60),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -3959,7 +3965,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(59),
+    /* templates */ TemplateIndex(60),
     /* parameters */ ParameterIndex(185),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -3970,7 +3976,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(16),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -3981,7 +3987,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(65),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -3992,7 +3998,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(59),
+    /* templates */ TemplateIndex(60),
     /* parameters */ ParameterIndex(189),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4003,7 +4009,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(59),
+    /* templates */ TemplateIndex(60),
     /* parameters */ ParameterIndex(65),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4014,7 +4020,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(22),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4025,7 +4031,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(70),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4036,7 +4042,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(59),
+    /* templates */ TemplateIndex(60),
     /* parameters */ ParameterIndex(70),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4047,7 +4053,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(59),
+    /* templates */ TemplateIndex(60),
     /* parameters */ ParameterIndex(193),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4058,7 +4064,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(80),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4069,7 +4075,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(197),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4080,7 +4086,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(85),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4091,7 +4097,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(201),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4102,7 +4108,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(13),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(40),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4113,7 +4119,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(205),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4124,7 +4130,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(13),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(129),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4135,7 +4141,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(13),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(45),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4146,7 +4152,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(209),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4157,7 +4163,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(13),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(133),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4168,7 +4174,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(60),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4179,7 +4185,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(10),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4190,7 +4196,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(59),
+    /* templates */ TemplateIndex(60),
     /* parameters */ ParameterIndex(60),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4201,7 +4207,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(59),
+    /* templates */ TemplateIndex(60),
     /* parameters */ ParameterIndex(75),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4212,7 +4218,7 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(59),
+    /* templates */ TemplateIndex(60),
     /* parameters */ ParameterIndex(10),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4223,7 +4229,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(65),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4234,7 +4240,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(16),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4245,7 +4251,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(59),
+    /* templates */ TemplateIndex(60),
     /* parameters */ ParameterIndex(65),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4256,7 +4262,7 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(59),
+    /* templates */ TemplateIndex(60),
     /* parameters */ ParameterIndex(16),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4267,7 +4273,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(70),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4278,7 +4284,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(22),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4289,7 +4295,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(59),
+    /* templates */ TemplateIndex(60),
     /* parameters */ ParameterIndex(70),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4300,7 +4306,7 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(59),
+    /* templates */ TemplateIndex(60),
     /* parameters */ ParameterIndex(22),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4311,7 +4317,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(197),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4322,7 +4328,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(80),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4333,7 +4339,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(201),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4344,7 +4350,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(85),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4355,7 +4361,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(13),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(90),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4366,7 +4372,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(90),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4377,7 +4383,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(13),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(95),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4388,7 +4394,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(95),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4399,7 +4405,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(13),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(213),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4410,7 +4416,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(13),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(217),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4421,7 +4427,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(137),
     /* return_matcher_indices */ MatcherIndicesIndex(114),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4432,7 +4438,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(141),
     /* return_matcher_indices */ MatcherIndicesIndex(205),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4443,7 +4449,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(145),
     /* return_matcher_indices */ MatcherIndicesIndex(207),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4454,7 +4460,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(149),
     /* return_matcher_indices */ MatcherIndicesIndex(207),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4465,7 +4471,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(330),
     /* return_matcher_indices */ MatcherIndicesIndex(205),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4476,7 +4482,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(332),
     /* return_matcher_indices */ MatcherIndicesIndex(207),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4487,7 +4493,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(153),
     /* return_matcher_indices */ MatcherIndicesIndex(205),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4553,7 +4559,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(76),
+    /* templates */ TemplateIndex(77),
     /* parameters */ ParameterIndex(281),
     /* return_matcher_indices */ MatcherIndicesIndex(114),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4564,7 +4570,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(76),
+    /* templates */ TemplateIndex(77),
     /* parameters */ ParameterIndex(284),
     /* return_matcher_indices */ MatcherIndicesIndex(205),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4575,7 +4581,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(76),
+    /* templates */ TemplateIndex(77),
     /* parameters */ ParameterIndex(287),
     /* return_matcher_indices */ MatcherIndicesIndex(207),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4586,7 +4592,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(76),
+    /* templates */ TemplateIndex(77),
     /* parameters */ ParameterIndex(290),
     /* return_matcher_indices */ MatcherIndicesIndex(207),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4597,7 +4603,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(16),
+    /* templates */ TemplateIndex(21),
     /* parameters */ ParameterIndex(169),
     /* return_matcher_indices */ MatcherIndicesIndex(193),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4608,7 +4614,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(16),
+    /* templates */ TemplateIndex(21),
     /* parameters */ ParameterIndex(50),
     /* return_matcher_indices */ MatcherIndicesIndex(193),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4619,7 +4625,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(16),
+    /* templates */ TemplateIndex(21),
     /* parameters */ ParameterIndex(50),
     /* return_matcher_indices */ MatcherIndicesIndex(193),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4630,7 +4636,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(16),
+    /* templates */ TemplateIndex(21),
     /* parameters */ ParameterIndex(55),
     /* return_matcher_indices */ MatcherIndicesIndex(193),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4641,7 +4647,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(16),
+    /* templates */ TemplateIndex(21),
     /* parameters */ ParameterIndex(55),
     /* return_matcher_indices */ MatcherIndicesIndex(193),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4652,7 +4658,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(16),
+    /* templates */ TemplateIndex(21),
     /* parameters */ ParameterIndex(173),
     /* return_matcher_indices */ MatcherIndicesIndex(193),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4663,7 +4669,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(16),
+    /* templates */ TemplateIndex(21),
     /* parameters */ ParameterIndex(177),
     /* return_matcher_indices */ MatcherIndicesIndex(193),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4674,7 +4680,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(16),
+    /* templates */ TemplateIndex(21),
     /* parameters */ ParameterIndex(181),
     /* return_matcher_indices */ MatcherIndicesIndex(193),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4685,7 +4691,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(17),
+    /* templates */ TemplateIndex(22),
     /* parameters */ ParameterIndex(40),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4696,7 +4702,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(17),
+    /* templates */ TemplateIndex(22),
     /* parameters */ ParameterIndex(40),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4707,7 +4713,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(17),
+    /* templates */ TemplateIndex(22),
     /* parameters */ ParameterIndex(45),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4718,7 +4724,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(17),
+    /* templates */ TemplateIndex(22),
     /* parameters */ ParameterIndex(45),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4729,7 +4735,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(17),
+    /* templates */ TemplateIndex(22),
     /* parameters */ ParameterIndex(129),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4740,7 +4746,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(17),
+    /* templates */ TemplateIndex(22),
     /* parameters */ ParameterIndex(133),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4751,7 +4757,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(21),
+    /* templates */ TemplateIndex(26),
     /* parameters */ ParameterIndex(281),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4762,7 +4768,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(25),
+    /* templates */ TemplateIndex(30),
     /* parameters */ ParameterIndex(281),
     /* return_matcher_indices */ MatcherIndicesIndex(209),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4773,7 +4779,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(29),
+    /* templates */ TemplateIndex(34),
     /* parameters */ ParameterIndex(281),
     /* return_matcher_indices */ MatcherIndicesIndex(211),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4784,7 +4790,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(21),
+    /* templates */ TemplateIndex(26),
     /* parameters */ ParameterIndex(284),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4795,7 +4801,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(25),
+    /* templates */ TemplateIndex(30),
     /* parameters */ ParameterIndex(284),
     /* return_matcher_indices */ MatcherIndicesIndex(209),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4806,7 +4812,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(29),
+    /* templates */ TemplateIndex(34),
     /* parameters */ ParameterIndex(284),
     /* return_matcher_indices */ MatcherIndicesIndex(211),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4817,7 +4823,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(21),
+    /* templates */ TemplateIndex(26),
     /* parameters */ ParameterIndex(287),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4828,7 +4834,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(25),
+    /* templates */ TemplateIndex(30),
     /* parameters */ ParameterIndex(287),
     /* return_matcher_indices */ MatcherIndicesIndex(209),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4839,7 +4845,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(29),
+    /* templates */ TemplateIndex(34),
     /* parameters */ ParameterIndex(287),
     /* return_matcher_indices */ MatcherIndicesIndex(211),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4850,7 +4856,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(21),
+    /* templates */ TemplateIndex(26),
     /* parameters */ ParameterIndex(290),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4861,7 +4867,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(25),
+    /* templates */ TemplateIndex(30),
     /* parameters */ ParameterIndex(290),
     /* return_matcher_indices */ MatcherIndicesIndex(209),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4872,7 +4878,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(29),
+    /* templates */ TemplateIndex(34),
     /* parameters */ ParameterIndex(290),
     /* return_matcher_indices */ MatcherIndicesIndex(211),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4883,7 +4889,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(342),
     /* return_matcher_indices */ MatcherIndicesIndex(193),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4894,7 +4900,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(221),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4905,7 +4911,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(225),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4916,7 +4922,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(229),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4927,7 +4933,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(233),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4938,7 +4944,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(237),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4949,7 +4955,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(241),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4960,7 +4966,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(245),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4971,7 +4977,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(249),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4982,7 +4988,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(253),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -4993,7 +4999,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(257),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5004,7 +5010,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(261),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5015,7 +5021,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(265),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5026,7 +5032,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(16),
+    /* templates */ TemplateIndex(21),
     /* parameters */ ParameterIndex(137),
     /* return_matcher_indices */ MatcherIndicesIndex(114),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5037,7 +5043,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(16),
+    /* templates */ TemplateIndex(21),
     /* parameters */ ParameterIndex(324),
     /* return_matcher_indices */ MatcherIndicesIndex(205),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5048,7 +5054,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(16),
+    /* templates */ TemplateIndex(21),
     /* parameters */ ParameterIndex(326),
     /* return_matcher_indices */ MatcherIndicesIndex(207),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5059,7 +5065,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(16),
+    /* templates */ TemplateIndex(21),
     /* parameters */ ParameterIndex(328),
     /* return_matcher_indices */ MatcherIndicesIndex(207),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5070,7 +5076,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(16),
+    /* templates */ TemplateIndex(21),
     /* parameters */ ParameterIndex(330),
     /* return_matcher_indices */ MatcherIndicesIndex(205),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5081,7 +5087,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(16),
+    /* templates */ TemplateIndex(21),
     /* parameters */ ParameterIndex(332),
     /* return_matcher_indices */ MatcherIndicesIndex(207),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5092,7 +5098,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(17),
+    /* templates */ TemplateIndex(22),
     /* parameters */ ParameterIndex(334),
     /* return_matcher_indices */ MatcherIndicesIndex(205),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5103,7 +5109,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(17),
+    /* templates */ TemplateIndex(22),
     /* parameters */ ParameterIndex(336),
     /* return_matcher_indices */ MatcherIndicesIndex(207),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5114,7 +5120,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(17),
+    /* templates */ TemplateIndex(22),
     /* parameters */ ParameterIndex(338),
     /* return_matcher_indices */ MatcherIndicesIndex(205),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5125,7 +5131,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(17),
+    /* templates */ TemplateIndex(22),
     /* parameters */ ParameterIndex(340),
     /* return_matcher_indices */ MatcherIndicesIndex(207),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5136,7 +5142,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(78),
+    /* templates */ TemplateIndex(79),
     /* parameters */ ParameterIndex(137),
     /* return_matcher_indices */ MatcherIndicesIndex(83),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5147,7 +5153,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(78),
+    /* templates */ TemplateIndex(79),
     /* parameters */ ParameterIndex(324),
     /* return_matcher_indices */ MatcherIndicesIndex(86),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5158,7 +5164,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(78),
+    /* templates */ TemplateIndex(79),
     /* parameters */ ParameterIndex(326),
     /* return_matcher_indices */ MatcherIndicesIndex(89),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5169,7 +5175,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(78),
+    /* templates */ TemplateIndex(79),
     /* parameters */ ParameterIndex(328),
     /* return_matcher_indices */ MatcherIndicesIndex(92),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5180,7 +5186,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(78),
+    /* templates */ TemplateIndex(79),
     /* parameters */ ParameterIndex(330),
     /* return_matcher_indices */ MatcherIndicesIndex(95),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5191,7 +5197,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(78),
+    /* templates */ TemplateIndex(79),
     /* parameters */ ParameterIndex(332),
     /* return_matcher_indices */ MatcherIndicesIndex(98),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5202,7 +5208,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(79),
+    /* templates */ TemplateIndex(80),
     /* parameters */ ParameterIndex(334),
     /* return_matcher_indices */ MatcherIndicesIndex(179),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5213,7 +5219,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(79),
+    /* templates */ TemplateIndex(80),
     /* parameters */ ParameterIndex(336),
     /* return_matcher_indices */ MatcherIndicesIndex(185),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5224,7 +5230,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(79),
+    /* templates */ TemplateIndex(80),
     /* parameters */ ParameterIndex(338),
     /* return_matcher_indices */ MatcherIndicesIndex(189),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5235,7 +5241,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(79),
+    /* templates */ TemplateIndex(80),
     /* parameters */ ParameterIndex(340),
     /* return_matcher_indices */ MatcherIndicesIndex(191),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5246,7 +5252,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(137),
     /* return_matcher_indices */ MatcherIndicesIndex(193),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5257,7 +5263,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(141),
     /* return_matcher_indices */ MatcherIndicesIndex(193),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5268,7 +5274,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(145),
     /* return_matcher_indices */ MatcherIndicesIndex(193),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5279,7 +5285,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(149),
     /* return_matcher_indices */ MatcherIndicesIndex(193),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5290,7 +5296,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(12),
+    /* templates */ TemplateIndex(17),
     /* parameters */ ParameterIndex(153),
     /* return_matcher_indices */ MatcherIndicesIndex(193),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5301,7 +5307,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(56),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(157),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5312,7 +5318,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(56),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(161),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5323,7 +5329,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(56),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(165),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5334,7 +5340,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(53),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(40),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5345,7 +5351,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(53),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(40),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5356,7 +5362,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(53),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(45),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5367,7 +5373,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(53),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(45),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5378,7 +5384,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(53),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(129),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5389,7 +5395,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(53),
+    /* templates */ TemplateIndex(54),
     /* parameters */ ParameterIndex(133),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5400,7 +5406,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(13),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(28),
     /* return_matcher_indices */ MatcherIndicesIndex(44),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5411,7 +5417,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(100),
     /* return_matcher_indices */ MatcherIndicesIndex(44),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5422,7 +5428,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(13),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(34),
     /* return_matcher_indices */ MatcherIndicesIndex(44),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5433,7 +5439,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(105),
     /* return_matcher_indices */ MatcherIndicesIndex(44),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5444,7 +5450,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(13),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(110),
     /* return_matcher_indices */ MatcherIndicesIndex(44),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5455,7 +5461,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(13),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(115),
     /* return_matcher_indices */ MatcherIndicesIndex(44),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5466,7 +5472,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(13),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(28),
     /* return_matcher_indices */ MatcherIndicesIndex(44),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5477,7 +5483,7 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(28),
     /* return_matcher_indices */ MatcherIndicesIndex(44),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5488,7 +5494,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(13),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(34),
     /* return_matcher_indices */ MatcherIndicesIndex(44),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5499,7 +5505,7 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(24),
     /* parameters */ ParameterIndex(34),
     /* return_matcher_indices */ MatcherIndicesIndex(44),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5510,7 +5516,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(13),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(110),
     /* return_matcher_indices */ MatcherIndicesIndex(44),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5521,7 +5527,7 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(13),
+    /* templates */ TemplateIndex(18),
     /* parameters */ ParameterIndex(115),
     /* return_matcher_indices */ MatcherIndicesIndex(44),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5565,7 +5571,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(41),
+    /* templates */ TemplateIndex(46),
     /* parameters */ ParameterIndex(296),
     /* return_matcher_indices */ MatcherIndicesIndex(4),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5576,7 +5582,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(40),
+    /* templates */ TemplateIndex(45),
     /* parameters */ ParameterIndex(299),
     /* return_matcher_indices */ MatcherIndicesIndex(80),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5620,7 +5626,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(65),
+    /* templates */ TemplateIndex(66),
     /* parameters */ ParameterIndex(363),
     /* return_matcher_indices */ MatcherIndicesIndex(149),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5642,7 +5648,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(37),
+    /* templates */ TemplateIndex(42),
     /* parameters */ ParameterIndex(350),
     /* return_matcher_indices */ MatcherIndicesIndex(155),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5686,7 +5692,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(62),
+    /* templates */ TemplateIndex(63),
     /* parameters */ ParameterIndex(306),
     /* return_matcher_indices */ MatcherIndicesIndex(2),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5708,7 +5714,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(62),
+    /* templates */ TemplateIndex(63),
     /* parameters */ ParameterIndex(306),
     /* return_matcher_indices */ MatcherIndicesIndex(2),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5730,7 +5736,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(62),
+    /* templates */ TemplateIndex(63),
     /* parameters */ ParameterIndex(309),
     /* return_matcher_indices */ MatcherIndicesIndex(2),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5763,7 +5769,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(80),
+    /* templates */ TemplateIndex(81),
     /* parameters */ ParameterIndex(352),
     /* return_matcher_indices */ MatcherIndicesIndex(4),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5774,7 +5780,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(68),
+    /* templates */ TemplateIndex(69),
     /* parameters */ ParameterIndex(354),
     /* return_matcher_indices */ MatcherIndicesIndex(2),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5785,7 +5791,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(71),
+    /* templates */ TemplateIndex(72),
     /* parameters */ ParameterIndex(356),
     /* return_matcher_indices */ MatcherIndicesIndex(4),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5796,7 +5802,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(42),
+    /* templates */ TemplateIndex(47),
     /* parameters */ ParameterIndex(358),
     /* return_matcher_indices */ MatcherIndicesIndex(149),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5818,7 +5824,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(66),
+    /* templates */ TemplateIndex(67),
     /* parameters */ ParameterIndex(273),
     /* return_matcher_indices */ MatcherIndicesIndex(2),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5840,7 +5846,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(66),
+    /* templates */ TemplateIndex(67),
     /* parameters */ ParameterIndex(316),
     /* return_matcher_indices */ MatcherIndicesIndex(2),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5851,7 +5857,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(74),
+    /* templates */ TemplateIndex(75),
     /* parameters */ ParameterIndex(322),
     /* return_matcher_indices */ MatcherIndicesIndex(114),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5862,7 +5868,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(50),
+    /* templates */ TemplateIndex(51),
     /* parameters */ ParameterIndex(125),
     /* return_matcher_indices */ MatcherIndicesIndex(4),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5873,7 +5879,7 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(50),
+    /* templates */ TemplateIndex(51),
     /* parameters */ ParameterIndex(0),
     /* return_matcher_indices */ MatcherIndicesIndex(4),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5884,7 +5890,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(50),
+    /* templates */ TemplateIndex(51),
     /* parameters */ ParameterIndex(0),
     /* return_matcher_indices */ MatcherIndicesIndex(4),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5895,7 +5901,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(50),
+    /* templates */ TemplateIndex(51),
     /* parameters */ ParameterIndex(125),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5917,7 +5923,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(33),
+    /* templates */ TemplateIndex(38),
     /* parameters */ ParameterIndex(344),
     /* return_matcher_indices */ MatcherIndicesIndex(47),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5928,7 +5934,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(62),
+    /* templates */ TemplateIndex(63),
     /* parameters */ ParameterIndex(346),
     /* return_matcher_indices */ MatcherIndicesIndex(59),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5939,7 +5945,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(62),
+    /* templates */ TemplateIndex(63),
     /* parameters */ ParameterIndex(348),
     /* return_matcher_indices */ MatcherIndicesIndex(149),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5950,7 +5956,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(62),
+    /* templates */ TemplateIndex(63),
     /* parameters */ ParameterIndex(311),
     /* return_matcher_indices */ MatcherIndicesIndex(149),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5961,7 +5967,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(62),
+    /* templates */ TemplateIndex(63),
     /* parameters */ ParameterIndex(307),
     /* return_matcher_indices */ MatcherIndicesIndex(2),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6015,8 +6021,8 @@
     /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
-    /* num_templates   */ 4,
-    /* templates */ TemplateIndex(46),
+    /* num_templates   */ 5,
+    /* templates */ TemplateIndex(12),
     /* parameters */ ParameterIndex(319),
     /* return_matcher_indices */ MatcherIndicesIndex(28),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -6549,7 +6555,7 @@
   },
   {
     /* [60] */
-    /* fn cooperative_matrix_mul_add[S : subgroup_matrix_elements, C : num, R : num, K : num](subgroup_matrix<subgroup_matrix_kind_left, S, K, R>, subgroup_matrix<subgroup_matrix_kind_right, S, C, K>, subgroup_matrix<subgroup_matrix_kind_result, S, C, R>) -> subgroup_matrix<subgroup_matrix_kind_result, S, C, R> */
+    /* fn cooperative_matrix_mul_add[T : subgroup_matrix_elements, TR : subgroup_matrix_elements, C : num, R : num, K : num](subgroup_matrix<subgroup_matrix_kind_left, T, K, R>, subgroup_matrix<subgroup_matrix_kind_right, T, C, K>, subgroup_matrix<subgroup_matrix_kind_result, TR, C, R>) -> subgroup_matrix<subgroup_matrix_kind_result, TR, C, R> */
     /* num overloads */ 1,
     /* overloads */ OverloadIndex(191),
   },
diff --git a/src/tint/lang/spirv/spirv.def b/src/tint/lang/spirv/spirv.def
index 3e20b16..df555c3 100644
--- a/src/tint/lang/spirv/spirv.def
+++ b/src/tint/lang/spirv/spirv.def
@@ -417,9 +417,9 @@
     ptr<workgroup_or_storage, S, readable>, u32, u32, u32) -> T
 @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)
-@must_use @stage("compute") implicit(S: subgroup_matrix_elements, C: num, R: num, K: num) fn cooperative_matrix_mul_add(
-  subgroup_matrix<subgroup_matrix_kind_left, S, K, R>,
-  subgroup_matrix<subgroup_matrix_kind_right, S, C, K>,
-  subgroup_matrix<subgroup_matrix_kind_result, S, C, R>)
-  -> subgroup_matrix<subgroup_matrix_kind_result, S, C, R>
+@must_use @stage("compute") implicit(T: subgroup_matrix_elements, TR: subgroup_matrix_elements, C: num, R: num, K: num) fn cooperative_matrix_mul_add(
+  subgroup_matrix<subgroup_matrix_kind_left, T, K, R>,
+  subgroup_matrix<subgroup_matrix_kind_right, T, C, K>,
+  subgroup_matrix<subgroup_matrix_kind_result, TR, C, R>)
+  -> subgroup_matrix<subgroup_matrix_kind_result, TR, C, R>
 
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 ebfc9d7..19ea802 100644
--- a/src/tint/lang/spirv/writer/raise/builtin_polyfill_test.cc
+++ b/src/tint/lang/spirv/writer/raise/builtin_polyfill_test.cc
@@ -3216,8 +3216,8 @@
     auto* func = b.Function("foo", mat);
     func->SetParams({p});
     b.Append(func->Block(), [&] {
-        auto* call = b.Call(mat, core::BuiltinFn::kSubgroupMatrixLoad, p, 64_u, true, 32_u);
-        call->SetExplicitTemplateParams(Vector{mat});
+        auto* call = b.CallExplicit(mat, core::BuiltinFn::kSubgroupMatrixLoad, Vector{mat}, p, 64_u,
+                                    true, 32_u);
         b.Return(func, call);
     });
 
@@ -3252,8 +3252,8 @@
     auto* func = b.Function("foo", mat);
     func->SetParams({p});
     b.Append(func->Block(), [&] {
-        auto* call = b.Call(mat, core::BuiltinFn::kSubgroupMatrixLoad, p, 64_u, false, 32_u);
-        call->SetExplicitTemplateParams(Vector{mat});
+        auto* call = b.CallExplicit(mat, core::BuiltinFn::kSubgroupMatrixLoad, Vector{mat}, p, 64_u,
+                                    false, 32_u);
         b.Return(func, call);
     });
 
@@ -3359,14 +3359,15 @@
     auto* func = b.Function("foo", result);
     func->SetParams({left, right});
     b.Append(func->Block(), [&] {
-        auto* call = b.Call(result, core::BuiltinFn::kSubgroupMatrixMultiply, left, right);
+        auto* call = b.CallExplicit(result, core::BuiltinFn::kSubgroupMatrixMultiply,
+                                    Vector{ty.f32()}, left, right);
         b.Return(func, call);
     });
 
     auto* src = R"(
 %foo = func(%left:subgroup_matrix_left<f32, 4, 8>, %right:subgroup_matrix_right<f32, 8, 4>):subgroup_matrix_result<f32, 8, 8> {
   $B1: {
-    %4:subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply %left, %right
+    %4:subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply<f32> %left, %right
     ret %4
   }
 }
@@ -3395,14 +3396,15 @@
     auto* func = b.Function("foo", result);
     func->SetParams({left, right});
     b.Append(func->Block(), [&] {
-        auto* call = b.Call(result, core::BuiltinFn::kSubgroupMatrixMultiply, left, right);
+        auto* call = b.CallExplicit(result, core::BuiltinFn::kSubgroupMatrixMultiply,
+                                    Vector{ty.u32()}, left, right);
         b.Return(func, call);
     });
 
     auto* src = R"(
 %foo = func(%left:subgroup_matrix_left<u32, 8, 4>, %right:subgroup_matrix_right<u32, 2, 8>):subgroup_matrix_result<u32, 2, 4> {
   $B1: {
-    %4:subgroup_matrix_result<u32, 2, 4> = subgroupMatrixMultiply %left, %right
+    %4:subgroup_matrix_result<u32, 2, 4> = subgroupMatrixMultiply<u32> %left, %right
     ret %4
   }
 }
diff --git a/src/tint/lang/wgsl/intrinsic/data.cc b/src/tint/lang/wgsl/intrinsic/data.cc
index 4aad2a9..c9d7ef9 100644
--- a/src/tint/lang/wgsl/intrinsic/data.cc
+++ b/src/tint/lang/wgsl/intrinsic/data.cc
@@ -2063,269 +2063,284 @@
   /* [46] */ MatcherIndex(59),
   /* [47] */ MatcherIndex(8),
   /* [48] */ MatcherIndex(0),
-  /* [49] */ MatcherIndex(1),
-  /* [50] */ MatcherIndex(2),
+  /* [49] */ MatcherIndex(2),
+  /* [50] */ MatcherIndex(3),
   /* [51] */ MatcherIndex(59),
   /* [52] */ MatcherIndex(6),
-  /* [53] */ MatcherIndex(0),
-  /* [54] */ MatcherIndex(3),
-  /* [55] */ MatcherIndex(2),
+  /* [53] */ MatcherIndex(1),
+  /* [54] */ MatcherIndex(4),
+  /* [55] */ MatcherIndex(3),
   /* [56] */ MatcherIndex(59),
   /* [57] */ MatcherIndex(7),
-  /* [58] */ MatcherIndex(0),
-  /* [59] */ MatcherIndex(1),
-  /* [60] */ MatcherIndex(3),
-  /* [61] */ MatcherIndex(28),
-  /* [62] */ MatcherIndex(0),
-  /* [63] */ MatcherIndex(0),
-  /* [64] */ MatcherIndex(1),
-  /* [65] */ MatcherIndex(28),
-  /* [66] */ MatcherIndex(1),
-  /* [67] */ MatcherIndex(0),
-  /* [68] */ MatcherIndex(2),
-  /* [69] */ MatcherIndex(28),
-  /* [70] */ MatcherIndex(0),
-  /* [71] */ MatcherIndex(1),
-  /* [72] */ MatcherIndex(2),
-  /* [73] */ MatcherIndex(29),
-  /* [74] */ MatcherIndex(20),
-  /* [75] */ MatcherIndex(0),
-  /* [76] */ MatcherIndex(14),
-  /* [77] */ MatcherIndex(29),
+  /* [58] */ MatcherIndex(1),
+  /* [59] */ MatcherIndex(2),
+  /* [60] */ MatcherIndex(4),
+  /* [61] */ MatcherIndex(59),
+  /* [62] */ MatcherIndex(8),
+  /* [63] */ MatcherIndex(1),
+  /* [64] */ MatcherIndex(2),
+  /* [65] */ MatcherIndex(3),
+  /* [66] */ MatcherIndex(59),
+  /* [67] */ MatcherIndex(6),
+  /* [68] */ MatcherIndex(0),
+  /* [69] */ MatcherIndex(4),
+  /* [70] */ MatcherIndex(3),
+  /* [71] */ MatcherIndex(59),
+  /* [72] */ MatcherIndex(7),
+  /* [73] */ MatcherIndex(0),
+  /* [74] */ MatcherIndex(2),
+  /* [75] */ MatcherIndex(4),
+  /* [76] */ MatcherIndex(28),
+  /* [77] */ MatcherIndex(0),
   /* [78] */ MatcherIndex(0),
   /* [79] */ MatcherIndex(1),
-  /* [80] */ MatcherIndex(2),
-  /* [81] */ MatcherIndex(30),
+  /* [80] */ MatcherIndex(28),
+  /* [81] */ MatcherIndex(1),
   /* [82] */ MatcherIndex(0),
-  /* [83] */ MatcherIndex(1),
-  /* [84] */ MatcherIndex(2),
-  /* [85] */ MatcherIndex(28),
+  /* [83] */ MatcherIndex(2),
+  /* [84] */ MatcherIndex(28),
+  /* [85] */ MatcherIndex(0),
   /* [86] */ MatcherIndex(1),
   /* [87] */ MatcherIndex(2),
-  /* [88] */ MatcherIndex(0),
-  /* [89] */ MatcherIndex(28),
-  /* [90] */ MatcherIndex(2),
-  /* [91] */ MatcherIndex(3),
-  /* [92] */ MatcherIndex(0),
-  /* [93] */ MatcherIndex(28),
+  /* [88] */ MatcherIndex(29),
+  /* [89] */ MatcherIndex(20),
+  /* [90] */ MatcherIndex(0),
+  /* [91] */ MatcherIndex(14),
+  /* [92] */ MatcherIndex(29),
+  /* [93] */ MatcherIndex(0),
   /* [94] */ MatcherIndex(1),
-  /* [95] */ MatcherIndex(3),
-  /* [96] */ MatcherIndex(0),
-  /* [97] */ MatcherIndex(28),
-  /* [98] */ MatcherIndex(2),
-  /* [99] */ MatcherIndex(1),
-  /* [100] */ MatcherIndex(0),
-  /* [101] */ MatcherIndex(27),
-  /* [102] */ MatcherIndex(0),
-  /* [103] */ MatcherIndex(1),
-  /* [104] */ MatcherIndex(27),
-  /* [105] */ MatcherIndex(0),
-  /* [106] */ MatcherIndex(6),
-  /* [107] */ MatcherIndex(27),
-  /* [108] */ MatcherIndex(1),
-  /* [109] */ MatcherIndex(0),
-  /* [110] */ MatcherIndex(27),
-  /* [111] */ MatcherIndex(1),
-  /* [112] */ MatcherIndex(75),
-  /* [113] */ MatcherIndex(27),
+  /* [95] */ MatcherIndex(2),
+  /* [96] */ MatcherIndex(30),
+  /* [97] */ MatcherIndex(0),
+  /* [98] */ MatcherIndex(1),
+  /* [99] */ MatcherIndex(2),
+  /* [100] */ MatcherIndex(28),
+  /* [101] */ MatcherIndex(1),
+  /* [102] */ MatcherIndex(2),
+  /* [103] */ MatcherIndex(0),
+  /* [104] */ MatcherIndex(28),
+  /* [105] */ MatcherIndex(2),
+  /* [106] */ MatcherIndex(3),
+  /* [107] */ MatcherIndex(0),
+  /* [108] */ MatcherIndex(28),
+  /* [109] */ MatcherIndex(1),
+  /* [110] */ MatcherIndex(3),
+  /* [111] */ MatcherIndex(0),
+  /* [112] */ MatcherIndex(28),
+  /* [113] */ MatcherIndex(2),
   /* [114] */ MatcherIndex(1),
-  /* [115] */ MatcherIndex(2),
+  /* [115] */ MatcherIndex(0),
   /* [116] */ MatcherIndex(27),
-  /* [117] */ MatcherIndex(1),
-  /* [118] */ MatcherIndex(14),
+  /* [117] */ MatcherIndex(0),
+  /* [118] */ MatcherIndex(1),
   /* [119] */ MatcherIndex(27),
-  /* [120] */ MatcherIndex(1),
-  /* [121] */ MatcherIndex(12),
+  /* [120] */ MatcherIndex(0),
+  /* [121] */ MatcherIndex(6),
   /* [122] */ MatcherIndex(27),
   /* [123] */ MatcherIndex(1),
-  /* [124] */ MatcherIndex(9),
+  /* [124] */ MatcherIndex(0),
   /* [125] */ MatcherIndex(27),
-  /* [126] */ MatcherIndex(0),
-  /* [127] */ MatcherIndex(13),
-  /* [128] */ MatcherIndex(57),
-  /* [129] */ MatcherIndex(0),
-  /* [130] */ MatcherIndex(1),
+  /* [126] */ MatcherIndex(1),
+  /* [127] */ MatcherIndex(75),
+  /* [128] */ MatcherIndex(27),
+  /* [129] */ MatcherIndex(1),
+  /* [130] */ MatcherIndex(2),
   /* [131] */ MatcherIndex(27),
-  /* [132] */ MatcherIndex(0),
-  /* [133] */ MatcherIndex(2),
-  /* [134] */ MatcherIndex(55),
-  /* [135] */ MatcherIndex(0),
-  /* [136] */ MatcherIndex(1),
-  /* [137] */ MatcherIndex(48),
-  /* [138] */ MatcherIndex(0),
-  /* [139] */ MatcherIndex(1),
-  /* [140] */ MatcherIndex(49),
+  /* [132] */ MatcherIndex(1),
+  /* [133] */ MatcherIndex(14),
+  /* [134] */ MatcherIndex(27),
+  /* [135] */ MatcherIndex(1),
+  /* [136] */ MatcherIndex(12),
+  /* [137] */ MatcherIndex(27),
+  /* [138] */ MatcherIndex(1),
+  /* [139] */ MatcherIndex(9),
+  /* [140] */ MatcherIndex(27),
   /* [141] */ MatcherIndex(0),
-  /* [142] */ MatcherIndex(1),
-  /* [143] */ MatcherIndex(50),
+  /* [142] */ MatcherIndex(13),
+  /* [143] */ MatcherIndex(57),
   /* [144] */ MatcherIndex(0),
   /* [145] */ MatcherIndex(1),
-  /* [146] */ MatcherIndex(51),
+  /* [146] */ MatcherIndex(27),
   /* [147] */ MatcherIndex(0),
-  /* [148] */ MatcherIndex(1),
-  /* [149] */ MatcherIndex(48),
-  /* [150] */ MatcherIndex(1),
-  /* [151] */ MatcherIndex(2),
-  /* [152] */ MatcherIndex(49),
-  /* [153] */ MatcherIndex(1),
-  /* [154] */ MatcherIndex(2),
-  /* [155] */ MatcherIndex(50),
-  /* [156] */ MatcherIndex(1),
-  /* [157] */ MatcherIndex(2),
-  /* [158] */ MatcherIndex(51),
-  /* [159] */ MatcherIndex(1),
-  /* [160] */ MatcherIndex(2),
-  /* [161] */ MatcherIndex(27),
-  /* [162] */ MatcherIndex(2),
-  /* [163] */ MatcherIndex(0),
-  /* [164] */ MatcherIndex(27),
+  /* [148] */ MatcherIndex(2),
+  /* [149] */ MatcherIndex(55),
+  /* [150] */ MatcherIndex(0),
+  /* [151] */ MatcherIndex(1),
+  /* [152] */ MatcherIndex(48),
+  /* [153] */ MatcherIndex(0),
+  /* [154] */ MatcherIndex(1),
+  /* [155] */ MatcherIndex(49),
+  /* [156] */ MatcherIndex(0),
+  /* [157] */ MatcherIndex(1),
+  /* [158] */ MatcherIndex(50),
+  /* [159] */ MatcherIndex(0),
+  /* [160] */ MatcherIndex(1),
+  /* [161] */ MatcherIndex(51),
+  /* [162] */ MatcherIndex(0),
+  /* [163] */ MatcherIndex(1),
+  /* [164] */ MatcherIndex(48),
   /* [165] */ MatcherIndex(1),
-  /* [166] */ MatcherIndex(6),
-  /* [167] */ MatcherIndex(17),
-  /* [168] */ MatcherIndex(14),
-  /* [169] */ MatcherIndex(15),
-  /* [170] */ MatcherIndex(1),
-  /* [171] */ MatcherIndex(56),
-  /* [172] */ MatcherIndex(0),
-  /* [173] */ MatcherIndex(54),
-  /* [174] */ MatcherIndex(0),
-  /* [175] */ MatcherIndex(15),
-  /* [176] */ MatcherIndex(13),
-  /* [177] */ MatcherIndex(17),
-  /* [178] */ MatcherIndex(13),
-  /* [179] */ MatcherIndex(17),
-  /* [180] */ MatcherIndex(11),
-  /* [181] */ MatcherIndex(17),
-  /* [182] */ MatcherIndex(12),
-  /* [183] */ MatcherIndex(36),
-  /* [184] */ MatcherIndex(0),
-  /* [185] */ MatcherIndex(15),
-  /* [186] */ MatcherIndex(12),
-  /* [187] */ MatcherIndex(37),
-  /* [188] */ MatcherIndex(0),
-  /* [189] */ MatcherIndex(38),
-  /* [190] */ MatcherIndex(0),
-  /* [191] */ MatcherIndex(39),
-  /* [192] */ MatcherIndex(0),
-  /* [193] */ MatcherIndex(40),
-  /* [194] */ MatcherIndex(0),
-  /* [195] */ MatcherIndex(41),
-  /* [196] */ MatcherIndex(0),
-  /* [197] */ MatcherIndex(42),
-  /* [198] */ MatcherIndex(0),
-  /* [199] */ MatcherIndex(17),
-  /* [200] */ MatcherIndex(0),
-  /* [201] */ MatcherIndex(15),
-  /* [202] */ MatcherIndex(11),
-  /* [203] */ MatcherIndex(16),
-  /* [204] */ MatcherIndex(13),
-  /* [205] */ MatcherIndex(36),
-  /* [206] */ MatcherIndex(13),
-  /* [207] */ MatcherIndex(37),
-  /* [208] */ MatcherIndex(13),
-  /* [209] */ MatcherIndex(38),
-  /* [210] */ MatcherIndex(13),
-  /* [211] */ MatcherIndex(39),
-  /* [212] */ MatcherIndex(13),
-  /* [213] */ MatcherIndex(16),
-  /* [214] */ MatcherIndex(11),
-  /* [215] */ MatcherIndex(40),
-  /* [216] */ MatcherIndex(13),
-  /* [217] */ MatcherIndex(41),
-  /* [218] */ MatcherIndex(13),
-  /* [219] */ MatcherIndex(15),
-  /* [220] */ MatcherIndex(0),
-  /* [221] */ MatcherIndex(16),
-  /* [222] */ MatcherIndex(1),
-  /* [223] */ MatcherIndex(53),
-  /* [224] */ MatcherIndex(0),
-  /* [225] */ MatcherIndex(58),
-  /* [226] */ MatcherIndex(0),
-  /* [227] */ MatcherIndex(15),
-  /* [228] */ MatcherIndex(9),
-  /* [229] */ MatcherIndex(16),
-  /* [230] */ MatcherIndex(9),
-  /* [231] */ MatcherIndex(17),
-  /* [232] */ MatcherIndex(9),
-  /* [233] */ MatcherIndex(17),
-  /* [234] */ MatcherIndex(1),
-  /* [235] */ MatcherIndex(18),
-  /* [236] */ MatcherIndex(0),
-  /* [237] */ MatcherIndex(18),
-  /* [238] */ MatcherIndex(13),
-  /* [239] */ MatcherIndex(18),
-  /* [240] */ MatcherIndex(14),
-  /* [241] */ MatcherIndex(19),
-  /* [242] */ MatcherIndex(0),
-  /* [243] */ MatcherIndex(19),
-  /* [244] */ MatcherIndex(13),
-  /* [245] */ MatcherIndex(19),
-  /* [246] */ MatcherIndex(14),
-  /* [247] */ MatcherIndex(20),
-  /* [248] */ MatcherIndex(13),
-  /* [249] */ MatcherIndex(20),
-  /* [250] */ MatcherIndex(14),
-  /* [251] */ MatcherIndex(21),
-  /* [252] */ MatcherIndex(0),
-  /* [253] */ MatcherIndex(21),
-  /* [254] */ MatcherIndex(13),
-  /* [255] */ MatcherIndex(21),
-  /* [256] */ MatcherIndex(14),
-  /* [257] */ MatcherIndex(22),
-  /* [258] */ MatcherIndex(0),
-  /* [259] */ MatcherIndex(22),
-  /* [260] */ MatcherIndex(13),
-  /* [261] */ MatcherIndex(22),
-  /* [262] */ MatcherIndex(14),
-  /* [263] */ MatcherIndex(23),
-  /* [264] */ MatcherIndex(0),
-  /* [265] */ MatcherIndex(23),
-  /* [266] */ MatcherIndex(13),
-  /* [267] */ MatcherIndex(23),
-  /* [268] */ MatcherIndex(14),
-  /* [269] */ MatcherIndex(24),
-  /* [270] */ MatcherIndex(0),
-  /* [271] */ MatcherIndex(24),
-  /* [272] */ MatcherIndex(13),
-  /* [273] */ MatcherIndex(24),
-  /* [274] */ MatcherIndex(14),
-  /* [275] */ MatcherIndex(25),
-  /* [276] */ MatcherIndex(0),
-  /* [277] */ MatcherIndex(25),
-  /* [278] */ MatcherIndex(13),
-  /* [279] */ MatcherIndex(25),
-  /* [280] */ MatcherIndex(14),
-  /* [281] */ MatcherIndex(26),
-  /* [282] */ MatcherIndex(0),
-  /* [283] */ MatcherIndex(26),
-  /* [284] */ MatcherIndex(13),
-  /* [285] */ MatcherIndex(26),
-  /* [286] */ MatcherIndex(14),
-  /* [287] */ MatcherIndex(67),
-  /* [288] */ MatcherIndex(71),
-  /* [289] */ MatcherIndex(79),
-  /* [290] */ MatcherIndex(73),
-  /* [291] */ MatcherIndex(60),
-  /* [292] */ MatcherIndex(68),
-  /* [293] */ MatcherIndex(43),
-  /* [294] */ MatcherIndex(44),
-  /* [295] */ MatcherIndex(45),
-  /* [296] */ MatcherIndex(46),
-  /* [297] */ MatcherIndex(47),
-  /* [298] */ MatcherIndex(52),
-  /* [299] */ MatcherIndex(34),
-  /* [300] */ MatcherIndex(35),
-  /* [301] */ MatcherIndex(10),
-  /* [302] */ MatcherIndex(74),
-  /* [303] */ MatcherIndex(80),
-  /* [304] */ MatcherIndex(72),
-  /* [305] */ MatcherIndex(64),
-  /* [306] */ MatcherIndex(65),
-  /* [307] */ MatcherIndex(62),
-  /* [308] */ MatcherIndex(63),
-  /* [309] */ MatcherIndex(66),
-  /* [310] */ MatcherIndex(61),
-  /* [311] */ MatcherIndex(78),
+  /* [166] */ MatcherIndex(2),
+  /* [167] */ MatcherIndex(49),
+  /* [168] */ MatcherIndex(1),
+  /* [169] */ MatcherIndex(2),
+  /* [170] */ MatcherIndex(50),
+  /* [171] */ MatcherIndex(1),
+  /* [172] */ MatcherIndex(2),
+  /* [173] */ MatcherIndex(51),
+  /* [174] */ MatcherIndex(1),
+  /* [175] */ MatcherIndex(2),
+  /* [176] */ MatcherIndex(27),
+  /* [177] */ MatcherIndex(2),
+  /* [178] */ MatcherIndex(0),
+  /* [179] */ MatcherIndex(27),
+  /* [180] */ MatcherIndex(1),
+  /* [181] */ MatcherIndex(6),
+  /* [182] */ MatcherIndex(17),
+  /* [183] */ MatcherIndex(14),
+  /* [184] */ MatcherIndex(15),
+  /* [185] */ MatcherIndex(1),
+  /* [186] */ MatcherIndex(56),
+  /* [187] */ MatcherIndex(0),
+  /* [188] */ MatcherIndex(54),
+  /* [189] */ MatcherIndex(0),
+  /* [190] */ MatcherIndex(15),
+  /* [191] */ MatcherIndex(13),
+  /* [192] */ MatcherIndex(17),
+  /* [193] */ MatcherIndex(13),
+  /* [194] */ MatcherIndex(17),
+  /* [195] */ MatcherIndex(11),
+  /* [196] */ MatcherIndex(17),
+  /* [197] */ MatcherIndex(12),
+  /* [198] */ MatcherIndex(36),
+  /* [199] */ MatcherIndex(0),
+  /* [200] */ MatcherIndex(15),
+  /* [201] */ MatcherIndex(12),
+  /* [202] */ MatcherIndex(37),
+  /* [203] */ MatcherIndex(0),
+  /* [204] */ MatcherIndex(38),
+  /* [205] */ MatcherIndex(0),
+  /* [206] */ MatcherIndex(39),
+  /* [207] */ MatcherIndex(0),
+  /* [208] */ MatcherIndex(40),
+  /* [209] */ MatcherIndex(0),
+  /* [210] */ MatcherIndex(41),
+  /* [211] */ MatcherIndex(0),
+  /* [212] */ MatcherIndex(42),
+  /* [213] */ MatcherIndex(0),
+  /* [214] */ MatcherIndex(17),
+  /* [215] */ MatcherIndex(0),
+  /* [216] */ MatcherIndex(15),
+  /* [217] */ MatcherIndex(11),
+  /* [218] */ MatcherIndex(16),
+  /* [219] */ MatcherIndex(13),
+  /* [220] */ MatcherIndex(36),
+  /* [221] */ MatcherIndex(13),
+  /* [222] */ MatcherIndex(37),
+  /* [223] */ MatcherIndex(13),
+  /* [224] */ MatcherIndex(38),
+  /* [225] */ MatcherIndex(13),
+  /* [226] */ MatcherIndex(39),
+  /* [227] */ MatcherIndex(13),
+  /* [228] */ MatcherIndex(16),
+  /* [229] */ MatcherIndex(11),
+  /* [230] */ MatcherIndex(40),
+  /* [231] */ MatcherIndex(13),
+  /* [232] */ MatcherIndex(41),
+  /* [233] */ MatcherIndex(13),
+  /* [234] */ MatcherIndex(15),
+  /* [235] */ MatcherIndex(0),
+  /* [236] */ MatcherIndex(16),
+  /* [237] */ MatcherIndex(1),
+  /* [238] */ MatcherIndex(53),
+  /* [239] */ MatcherIndex(0),
+  /* [240] */ MatcherIndex(58),
+  /* [241] */ MatcherIndex(0),
+  /* [242] */ MatcherIndex(15),
+  /* [243] */ MatcherIndex(9),
+  /* [244] */ MatcherIndex(16),
+  /* [245] */ MatcherIndex(9),
+  /* [246] */ MatcherIndex(17),
+  /* [247] */ MatcherIndex(9),
+  /* [248] */ MatcherIndex(17),
+  /* [249] */ MatcherIndex(1),
+  /* [250] */ MatcherIndex(18),
+  /* [251] */ MatcherIndex(0),
+  /* [252] */ MatcherIndex(18),
+  /* [253] */ MatcherIndex(13),
+  /* [254] */ MatcherIndex(18),
+  /* [255] */ MatcherIndex(14),
+  /* [256] */ MatcherIndex(19),
+  /* [257] */ MatcherIndex(0),
+  /* [258] */ MatcherIndex(19),
+  /* [259] */ MatcherIndex(13),
+  /* [260] */ MatcherIndex(19),
+  /* [261] */ MatcherIndex(14),
+  /* [262] */ MatcherIndex(20),
+  /* [263] */ MatcherIndex(13),
+  /* [264] */ MatcherIndex(20),
+  /* [265] */ MatcherIndex(14),
+  /* [266] */ MatcherIndex(21),
+  /* [267] */ MatcherIndex(0),
+  /* [268] */ MatcherIndex(21),
+  /* [269] */ MatcherIndex(13),
+  /* [270] */ MatcherIndex(21),
+  /* [271] */ MatcherIndex(14),
+  /* [272] */ MatcherIndex(22),
+  /* [273] */ MatcherIndex(0),
+  /* [274] */ MatcherIndex(22),
+  /* [275] */ MatcherIndex(13),
+  /* [276] */ MatcherIndex(22),
+  /* [277] */ MatcherIndex(14),
+  /* [278] */ MatcherIndex(23),
+  /* [279] */ MatcherIndex(0),
+  /* [280] */ MatcherIndex(23),
+  /* [281] */ MatcherIndex(13),
+  /* [282] */ MatcherIndex(23),
+  /* [283] */ MatcherIndex(14),
+  /* [284] */ MatcherIndex(24),
+  /* [285] */ MatcherIndex(0),
+  /* [286] */ MatcherIndex(24),
+  /* [287] */ MatcherIndex(13),
+  /* [288] */ MatcherIndex(24),
+  /* [289] */ MatcherIndex(14),
+  /* [290] */ MatcherIndex(25),
+  /* [291] */ MatcherIndex(0),
+  /* [292] */ MatcherIndex(25),
+  /* [293] */ MatcherIndex(13),
+  /* [294] */ MatcherIndex(25),
+  /* [295] */ MatcherIndex(14),
+  /* [296] */ MatcherIndex(26),
+  /* [297] */ MatcherIndex(0),
+  /* [298] */ MatcherIndex(26),
+  /* [299] */ MatcherIndex(13),
+  /* [300] */ MatcherIndex(26),
+  /* [301] */ MatcherIndex(14),
+  /* [302] */ MatcherIndex(67),
+  /* [303] */ MatcherIndex(71),
+  /* [304] */ MatcherIndex(79),
+  /* [305] */ MatcherIndex(73),
+  /* [306] */ MatcherIndex(60),
+  /* [307] */ MatcherIndex(68),
+  /* [308] */ MatcherIndex(43),
+  /* [309] */ MatcherIndex(44),
+  /* [310] */ MatcherIndex(45),
+  /* [311] */ MatcherIndex(46),
+  /* [312] */ MatcherIndex(47),
+  /* [313] */ MatcherIndex(52),
+  /* [314] */ MatcherIndex(34),
+  /* [315] */ MatcherIndex(35),
+  /* [316] */ MatcherIndex(10),
+  /* [317] */ MatcherIndex(74),
+  /* [318] */ MatcherIndex(80),
+  /* [319] */ MatcherIndex(72),
+  /* [320] */ MatcherIndex(64),
+  /* [321] */ MatcherIndex(65),
+  /* [322] */ MatcherIndex(62),
+  /* [323] */ MatcherIndex(63),
+  /* [324] */ MatcherIndex(66),
+  /* [325] */ MatcherIndex(61),
+  /* [326] */ MatcherIndex(78),
 };
 
 static_assert(MatcherIndicesIndex::CanIndex(kMatcherIndices),
@@ -2430,17 +2445,17 @@
   {
     /* [19] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(209),
+    /* matcher_indices */ MatcherIndicesIndex(224),
   },
   {
     /* [20] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(299),
+    /* matcher_indices */ MatcherIndicesIndex(314),
   },
   {
     /* [21] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(175),
+    /* matcher_indices */ MatcherIndicesIndex(190),
   },
   {
     /* [22] */
@@ -2450,17 +2465,17 @@
   {
     /* [23] */
     /* usage */ core::ParameterUsage::kDdx,
-    /* matcher_indices */ MatcherIndicesIndex(175),
+    /* matcher_indices */ MatcherIndicesIndex(190),
   },
   {
     /* [24] */
     /* usage */ core::ParameterUsage::kDdy,
-    /* matcher_indices */ MatcherIndicesIndex(175),
+    /* matcher_indices */ MatcherIndicesIndex(190),
   },
   {
     /* [25] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(201),
+    /* matcher_indices */ MatcherIndicesIndex(216),
   },
   {
     /* [26] */
@@ -2470,17 +2485,17 @@
   {
     /* [27] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(189),
+    /* matcher_indices */ MatcherIndicesIndex(204),
   },
   {
     /* [28] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(299),
+    /* matcher_indices */ MatcherIndicesIndex(314),
   },
   {
     /* [29] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(175),
+    /* matcher_indices */ MatcherIndicesIndex(190),
   },
   {
     /* [30] */
@@ -2490,22 +2505,22 @@
   {
     /* [31] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(201),
+    /* matcher_indices */ MatcherIndicesIndex(216),
   },
   {
     /* [32] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(294),
+    /* matcher_indices */ MatcherIndicesIndex(309),
   },
   {
     /* [33] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(300),
+    /* matcher_indices */ MatcherIndicesIndex(315),
   },
   {
     /* [34] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(175),
+    /* matcher_indices */ MatcherIndicesIndex(190),
   },
   {
     /* [35] */
@@ -2515,27 +2530,27 @@
   {
     /* [36] */
     /* usage */ core::ParameterUsage::kDepthRef,
-    /* matcher_indices */ MatcherIndicesIndex(127),
+    /* matcher_indices */ MatcherIndicesIndex(142),
   },
   {
     /* [37] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(201),
+    /* matcher_indices */ MatcherIndicesIndex(216),
   },
   {
     /* [38] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(209),
+    /* matcher_indices */ MatcherIndicesIndex(224),
   },
   {
     /* [39] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(299),
+    /* matcher_indices */ MatcherIndicesIndex(314),
   },
   {
     /* [40] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(175),
+    /* matcher_indices */ MatcherIndicesIndex(190),
   },
   {
     /* [41] */
@@ -2545,87 +2560,87 @@
   {
     /* [42] */
     /* usage */ core::ParameterUsage::kBias,
-    /* matcher_indices */ MatcherIndicesIndex(127),
+    /* matcher_indices */ MatcherIndicesIndex(142),
   },
   {
     /* [43] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(201),
+    /* matcher_indices */ MatcherIndicesIndex(216),
   },
   {
     /* [44] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(207),
+    /* matcher_indices */ MatcherIndicesIndex(222),
   },
   {
     /* [45] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(299),
+    /* matcher_indices */ MatcherIndicesIndex(314),
   },
   {
     /* [46] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(175),
+    /* matcher_indices */ MatcherIndicesIndex(190),
   },
   {
     /* [47] */
     /* usage */ core::ParameterUsage::kDdx,
-    /* matcher_indices */ MatcherIndicesIndex(175),
+    /* matcher_indices */ MatcherIndicesIndex(190),
   },
   {
     /* [48] */
     /* usage */ core::ParameterUsage::kDdy,
-    /* matcher_indices */ MatcherIndicesIndex(175),
+    /* matcher_indices */ MatcherIndicesIndex(190),
   },
   {
     /* [49] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(201),
+    /* matcher_indices */ MatcherIndicesIndex(216),
   },
   {
     /* [50] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(211),
+    /* matcher_indices */ MatcherIndicesIndex(226),
   },
   {
     /* [51] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(299),
+    /* matcher_indices */ MatcherIndicesIndex(314),
   },
   {
     /* [52] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(203),
+    /* matcher_indices */ MatcherIndicesIndex(218),
   },
   {
     /* [53] */
     /* usage */ core::ParameterUsage::kDdx,
-    /* matcher_indices */ MatcherIndicesIndex(203),
+    /* matcher_indices */ MatcherIndicesIndex(218),
   },
   {
     /* [54] */
     /* usage */ core::ParameterUsage::kDdy,
-    /* matcher_indices */ MatcherIndicesIndex(203),
+    /* matcher_indices */ MatcherIndicesIndex(218),
   },
   {
     /* [55] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(213),
+    /* matcher_indices */ MatcherIndicesIndex(228),
   },
   {
     /* [56] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(217),
+    /* matcher_indices */ MatcherIndicesIndex(232),
   },
   {
     /* [57] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(299),
+    /* matcher_indices */ MatcherIndicesIndex(314),
   },
   {
     /* [58] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(203),
+    /* matcher_indices */ MatcherIndicesIndex(218),
   },
   {
     /* [59] */
@@ -2635,27 +2650,27 @@
   {
     /* [60] */
     /* usage */ core::ParameterUsage::kDdx,
-    /* matcher_indices */ MatcherIndicesIndex(203),
+    /* matcher_indices */ MatcherIndicesIndex(218),
   },
   {
     /* [61] */
     /* usage */ core::ParameterUsage::kDdy,
-    /* matcher_indices */ MatcherIndicesIndex(203),
+    /* matcher_indices */ MatcherIndicesIndex(218),
   },
   {
     /* [62] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(209),
+    /* matcher_indices */ MatcherIndicesIndex(224),
   },
   {
     /* [63] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(299),
+    /* matcher_indices */ MatcherIndicesIndex(314),
   },
   {
     /* [64] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(175),
+    /* matcher_indices */ MatcherIndicesIndex(190),
   },
   {
     /* [65] */
@@ -2665,27 +2680,27 @@
   {
     /* [66] */
     /* usage */ core::ParameterUsage::kLevel,
-    /* matcher_indices */ MatcherIndicesIndex(127),
+    /* matcher_indices */ MatcherIndicesIndex(142),
   },
   {
     /* [67] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(201),
+    /* matcher_indices */ MatcherIndicesIndex(216),
   },
   {
     /* [68] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(294),
+    /* matcher_indices */ MatcherIndicesIndex(309),
   },
   {
     /* [69] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(299),
+    /* matcher_indices */ MatcherIndicesIndex(314),
   },
   {
     /* [70] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(175),
+    /* matcher_indices */ MatcherIndicesIndex(190),
   },
   {
     /* [71] */
@@ -2700,7 +2715,7 @@
   {
     /* [73] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(201),
+    /* matcher_indices */ MatcherIndicesIndex(216),
   },
   {
     /* [74] */
@@ -2710,22 +2725,22 @@
   {
     /* [75] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(187),
+    /* matcher_indices */ MatcherIndicesIndex(202),
   },
   {
     /* [76] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(299),
+    /* matcher_indices */ MatcherIndicesIndex(314),
   },
   {
     /* [77] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(175),
+    /* matcher_indices */ MatcherIndicesIndex(190),
   },
   {
     /* [78] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(201),
+    /* matcher_indices */ MatcherIndicesIndex(216),
   },
   {
     /* [79] */
@@ -2735,17 +2750,17 @@
   {
     /* [80] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(195),
+    /* matcher_indices */ MatcherIndicesIndex(210),
   },
   {
     /* [81] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(299),
+    /* matcher_indices */ MatcherIndicesIndex(314),
   },
   {
     /* [82] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(203),
+    /* matcher_indices */ MatcherIndicesIndex(218),
   },
   {
     /* [83] */
@@ -2755,17 +2770,17 @@
   {
     /* [84] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(294),
+    /* matcher_indices */ MatcherIndicesIndex(309),
   },
   {
     /* [85] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(299),
+    /* matcher_indices */ MatcherIndicesIndex(314),
   },
   {
     /* [86] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(175),
+    /* matcher_indices */ MatcherIndicesIndex(190),
   },
   {
     /* [87] */
@@ -2775,47 +2790,47 @@
   {
     /* [88] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(201),
+    /* matcher_indices */ MatcherIndicesIndex(216),
   },
   {
     /* [89] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(293),
+    /* matcher_indices */ MatcherIndicesIndex(308),
   },
   {
     /* [90] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(300),
+    /* matcher_indices */ MatcherIndicesIndex(315),
   },
   {
     /* [91] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(175),
+    /* matcher_indices */ MatcherIndicesIndex(190),
   },
   {
     /* [92] */
     /* usage */ core::ParameterUsage::kDepthRef,
-    /* matcher_indices */ MatcherIndicesIndex(127),
+    /* matcher_indices */ MatcherIndicesIndex(142),
   },
   {
     /* [93] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(201),
+    /* matcher_indices */ MatcherIndicesIndex(216),
   },
   {
     /* [94] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(296),
+    /* matcher_indices */ MatcherIndicesIndex(311),
   },
   {
     /* [95] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(300),
+    /* matcher_indices */ MatcherIndicesIndex(315),
   },
   {
     /* [96] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(203),
+    /* matcher_indices */ MatcherIndicesIndex(218),
   },
   {
     /* [97] */
@@ -2825,22 +2840,22 @@
   {
     /* [98] */
     /* usage */ core::ParameterUsage::kDepthRef,
-    /* matcher_indices */ MatcherIndicesIndex(127),
+    /* matcher_indices */ MatcherIndicesIndex(142),
   },
   {
     /* [99] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(209),
+    /* matcher_indices */ MatcherIndicesIndex(224),
   },
   {
     /* [100] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(299),
+    /* matcher_indices */ MatcherIndicesIndex(314),
   },
   {
     /* [101] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(175),
+    /* matcher_indices */ MatcherIndicesIndex(190),
   },
   {
     /* [102] */
@@ -2850,72 +2865,72 @@
   {
     /* [103] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(201),
+    /* matcher_indices */ MatcherIndicesIndex(216),
   },
   {
     /* [104] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(207),
+    /* matcher_indices */ MatcherIndicesIndex(222),
   },
   {
     /* [105] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(299),
+    /* matcher_indices */ MatcherIndicesIndex(314),
   },
   {
     /* [106] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(175),
+    /* matcher_indices */ MatcherIndicesIndex(190),
   },
   {
     /* [107] */
     /* usage */ core::ParameterUsage::kBias,
-    /* matcher_indices */ MatcherIndicesIndex(127),
+    /* matcher_indices */ MatcherIndicesIndex(142),
   },
   {
     /* [108] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(201),
+    /* matcher_indices */ MatcherIndicesIndex(216),
   },
   {
     /* [109] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(211),
+    /* matcher_indices */ MatcherIndicesIndex(226),
   },
   {
     /* [110] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(299),
+    /* matcher_indices */ MatcherIndicesIndex(314),
   },
   {
     /* [111] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(203),
+    /* matcher_indices */ MatcherIndicesIndex(218),
   },
   {
     /* [112] */
     /* usage */ core::ParameterUsage::kBias,
-    /* matcher_indices */ MatcherIndicesIndex(127),
+    /* matcher_indices */ MatcherIndicesIndex(142),
   },
   {
     /* [113] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(213),
+    /* matcher_indices */ MatcherIndicesIndex(228),
   },
   {
     /* [114] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(217),
+    /* matcher_indices */ MatcherIndicesIndex(232),
   },
   {
     /* [115] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(299),
+    /* matcher_indices */ MatcherIndicesIndex(314),
   },
   {
     /* [116] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(203),
+    /* matcher_indices */ MatcherIndicesIndex(218),
   },
   {
     /* [117] */
@@ -2925,97 +2940,97 @@
   {
     /* [118] */
     /* usage */ core::ParameterUsage::kBias,
-    /* matcher_indices */ MatcherIndicesIndex(127),
+    /* matcher_indices */ MatcherIndicesIndex(142),
   },
   {
     /* [119] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(215),
+    /* matcher_indices */ MatcherIndicesIndex(230),
   },
   {
     /* [120] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(299),
+    /* matcher_indices */ MatcherIndicesIndex(314),
   },
   {
     /* [121] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(203),
+    /* matcher_indices */ MatcherIndicesIndex(218),
   },
   {
     /* [122] */
     /* usage */ core::ParameterUsage::kDdx,
-    /* matcher_indices */ MatcherIndicesIndex(203),
+    /* matcher_indices */ MatcherIndicesIndex(218),
   },
   {
     /* [123] */
     /* usage */ core::ParameterUsage::kDdy,
-    /* matcher_indices */ MatcherIndicesIndex(203),
+    /* matcher_indices */ MatcherIndicesIndex(218),
   },
   {
     /* [124] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(207),
+    /* matcher_indices */ MatcherIndicesIndex(222),
   },
   {
     /* [125] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(299),
+    /* matcher_indices */ MatcherIndicesIndex(314),
   },
   {
     /* [126] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(175),
+    /* matcher_indices */ MatcherIndicesIndex(190),
   },
   {
     /* [127] */
     /* usage */ core::ParameterUsage::kLevel,
-    /* matcher_indices */ MatcherIndicesIndex(127),
+    /* matcher_indices */ MatcherIndicesIndex(142),
   },
   {
     /* [128] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(201),
+    /* matcher_indices */ MatcherIndicesIndex(216),
   },
   {
     /* [129] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(211),
+    /* matcher_indices */ MatcherIndicesIndex(226),
   },
   {
     /* [130] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(299),
+    /* matcher_indices */ MatcherIndicesIndex(314),
   },
   {
     /* [131] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(203),
+    /* matcher_indices */ MatcherIndicesIndex(218),
   },
   {
     /* [132] */
     /* usage */ core::ParameterUsage::kLevel,
-    /* matcher_indices */ MatcherIndicesIndex(127),
+    /* matcher_indices */ MatcherIndicesIndex(142),
   },
   {
     /* [133] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(213),
+    /* matcher_indices */ MatcherIndicesIndex(228),
   },
   {
     /* [134] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(217),
+    /* matcher_indices */ MatcherIndicesIndex(232),
   },
   {
     /* [135] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(299),
+    /* matcher_indices */ MatcherIndicesIndex(314),
   },
   {
     /* [136] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(203),
+    /* matcher_indices */ MatcherIndicesIndex(218),
   },
   {
     /* [137] */
@@ -3025,22 +3040,22 @@
   {
     /* [138] */
     /* usage */ core::ParameterUsage::kLevel,
-    /* matcher_indices */ MatcherIndicesIndex(127),
+    /* matcher_indices */ MatcherIndicesIndex(142),
   },
   {
     /* [139] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(293),
+    /* matcher_indices */ MatcherIndicesIndex(308),
   },
   {
     /* [140] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(299),
+    /* matcher_indices */ MatcherIndicesIndex(314),
   },
   {
     /* [141] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(175),
+    /* matcher_indices */ MatcherIndicesIndex(190),
   },
   {
     /* [142] */
@@ -3050,22 +3065,22 @@
   {
     /* [143] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(201),
+    /* matcher_indices */ MatcherIndicesIndex(216),
   },
   {
     /* [144] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(296),
+    /* matcher_indices */ MatcherIndicesIndex(311),
   },
   {
     /* [145] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(299),
+    /* matcher_indices */ MatcherIndicesIndex(314),
   },
   {
     /* [146] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(203),
+    /* matcher_indices */ MatcherIndicesIndex(218),
   },
   {
     /* [147] */
@@ -3130,12 +3145,12 @@
   {
     /* [159] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(101),
+    /* matcher_indices */ MatcherIndicesIndex(116),
   },
   {
     /* [160] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(101),
+    /* matcher_indices */ MatcherIndicesIndex(116),
   },
   {
     /* [161] */
@@ -3155,152 +3170,152 @@
   {
     /* [164] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* matcher_indices */ MatcherIndicesIndex(208),
   },
   {
     /* [165] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(299),
+    /* matcher_indices */ MatcherIndicesIndex(314),
   },
   {
     /* [166] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(203),
+    /* matcher_indices */ MatcherIndicesIndex(218),
   },
   {
     /* [167] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(293),
+    /* matcher_indices */ MatcherIndicesIndex(308),
   },
   {
     /* [168] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(299),
+    /* matcher_indices */ MatcherIndicesIndex(314),
   },
   {
     /* [169] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(175),
+    /* matcher_indices */ MatcherIndicesIndex(190),
   },
   {
     /* [170] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(201),
+    /* matcher_indices */ MatcherIndicesIndex(216),
   },
   {
     /* [171] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(295),
+    /* matcher_indices */ MatcherIndicesIndex(310),
   },
   {
     /* [172] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(300),
+    /* matcher_indices */ MatcherIndicesIndex(315),
   },
   {
     /* [173] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(203),
+    /* matcher_indices */ MatcherIndicesIndex(218),
   },
   {
     /* [174] */
     /* usage */ core::ParameterUsage::kDepthRef,
-    /* matcher_indices */ MatcherIndicesIndex(127),
+    /* matcher_indices */ MatcherIndicesIndex(142),
   },
   {
     /* [175] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(207),
+    /* matcher_indices */ MatcherIndicesIndex(222),
   },
   {
     /* [176] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(299),
+    /* matcher_indices */ MatcherIndicesIndex(314),
   },
   {
     /* [177] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(175),
+    /* matcher_indices */ MatcherIndicesIndex(190),
   },
   {
     /* [178] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(201),
+    /* matcher_indices */ MatcherIndicesIndex(216),
   },
   {
     /* [179] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(211),
+    /* matcher_indices */ MatcherIndicesIndex(226),
   },
   {
     /* [180] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(299),
+    /* matcher_indices */ MatcherIndicesIndex(314),
   },
   {
     /* [181] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(203),
+    /* matcher_indices */ MatcherIndicesIndex(218),
   },
   {
     /* [182] */
     /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(213),
+    /* matcher_indices */ MatcherIndicesIndex(228),
   },
   {
     /* [183] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(215),
+    /* matcher_indices */ MatcherIndicesIndex(230),
   },
   {
     /* [184] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(299),
+    /* matcher_indices */ MatcherIndicesIndex(314),
   },
   {
     /* [185] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(203),
+    /* matcher_indices */ MatcherIndicesIndex(218),
   },
   {
     /* [186] */
     /* usage */ core::ParameterUsage::kBias,
-    /* matcher_indices */ MatcherIndicesIndex(127),
+    /* matcher_indices */ MatcherIndicesIndex(142),
   },
   {
     /* [187] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(215),
+    /* matcher_indices */ MatcherIndicesIndex(230),
   },
   {
     /* [188] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(299),
+    /* matcher_indices */ MatcherIndicesIndex(314),
   },
   {
     /* [189] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(203),
+    /* matcher_indices */ MatcherIndicesIndex(218),
   },
   {
     /* [190] */
     /* usage */ core::ParameterUsage::kLevel,
-    /* matcher_indices */ MatcherIndicesIndex(127),
+    /* matcher_indices */ MatcherIndicesIndex(142),
   },
   {
     /* [191] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(295),
+    /* matcher_indices */ MatcherIndicesIndex(310),
   },
   {
     /* [192] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(299),
+    /* matcher_indices */ MatcherIndicesIndex(314),
   },
   {
     /* [193] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(203),
+    /* matcher_indices */ MatcherIndicesIndex(218),
   },
   {
     /* [194] */
@@ -3310,12 +3325,12 @@
   {
     /* [195] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(155),
+    /* matcher_indices */ MatcherIndicesIndex(170),
   },
   {
     /* [196] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(219),
+    /* matcher_indices */ MatcherIndicesIndex(234),
   },
   {
     /* [197] */
@@ -3325,17 +3340,17 @@
   {
     /* [198] */
     /* usage */ core::ParameterUsage::kValue,
-    /* matcher_indices */ MatcherIndicesIndex(177),
+    /* matcher_indices */ MatcherIndicesIndex(192),
   },
   {
     /* [199] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(155),
+    /* matcher_indices */ MatcherIndicesIndex(170),
   },
   {
     /* [200] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(219),
+    /* matcher_indices */ MatcherIndicesIndex(234),
   },
   {
     /* [201] */
@@ -3345,17 +3360,17 @@
   {
     /* [202] */
     /* usage */ core::ParameterUsage::kValue,
-    /* matcher_indices */ MatcherIndicesIndex(179),
+    /* matcher_indices */ MatcherIndicesIndex(194),
   },
   {
     /* [203] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(155),
+    /* matcher_indices */ MatcherIndicesIndex(170),
   },
   {
     /* [204] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(219),
+    /* matcher_indices */ MatcherIndicesIndex(234),
   },
   {
     /* [205] */
@@ -3365,17 +3380,17 @@
   {
     /* [206] */
     /* usage */ core::ParameterUsage::kValue,
-    /* matcher_indices */ MatcherIndicesIndex(181),
+    /* matcher_indices */ MatcherIndicesIndex(196),
   },
   {
     /* [207] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(189),
+    /* matcher_indices */ MatcherIndicesIndex(204),
   },
   {
     /* [208] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(169),
+    /* matcher_indices */ MatcherIndicesIndex(184),
   },
   {
     /* [209] */
@@ -3390,12 +3405,12 @@
   {
     /* [211] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(294),
+    /* matcher_indices */ MatcherIndicesIndex(309),
   },
   {
     /* [212] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(219),
+    /* matcher_indices */ MatcherIndicesIndex(234),
   },
   {
     /* [213] */
@@ -3470,22 +3485,22 @@
   {
     /* [227] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(219),
+    /* matcher_indices */ MatcherIndicesIndex(234),
   },
   {
     /* [228] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(219),
+    /* matcher_indices */ MatcherIndicesIndex(234),
   },
   {
     /* [229] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(219),
+    /* matcher_indices */ MatcherIndicesIndex(234),
   },
   {
     /* [230] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(219),
+    /* matcher_indices */ MatcherIndicesIndex(234),
   },
   {
     /* [231] */
@@ -3510,37 +3525,37 @@
   {
     /* [235] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(199),
+    /* matcher_indices */ MatcherIndicesIndex(214),
   },
   {
     /* [236] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(199),
+    /* matcher_indices */ MatcherIndicesIndex(214),
   },
   {
     /* [237] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(199),
+    /* matcher_indices */ MatcherIndicesIndex(214),
   },
   {
     /* [238] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(199),
+    /* matcher_indices */ MatcherIndicesIndex(214),
   },
   {
     /* [239] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(107),
+    /* matcher_indices */ MatcherIndicesIndex(122),
   },
   {
     /* [240] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(107),
+    /* matcher_indices */ MatcherIndicesIndex(122),
   },
   {
     /* [241] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(107),
+    /* matcher_indices */ MatcherIndicesIndex(122),
   },
   {
     /* [242] */
@@ -3555,17 +3570,17 @@
   {
     /* [244] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(101),
+    /* matcher_indices */ MatcherIndicesIndex(116),
   },
   {
     /* [245] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(101),
+    /* matcher_indices */ MatcherIndicesIndex(116),
   },
   {
     /* [246] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(101),
+    /* matcher_indices */ MatcherIndicesIndex(116),
   },
   {
     /* [247] */
@@ -3590,57 +3605,57 @@
   {
     /* [251] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(101),
+    /* matcher_indices */ MatcherIndicesIndex(116),
   },
   {
     /* [252] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(101),
+    /* matcher_indices */ MatcherIndicesIndex(116),
   },
   {
     /* [253] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(104),
+    /* matcher_indices */ MatcherIndicesIndex(119),
   },
   {
     /* [254] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(104),
+    /* matcher_indices */ MatcherIndicesIndex(119),
   },
   {
     /* [255] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(205),
+    /* matcher_indices */ MatcherIndicesIndex(220),
   },
   {
     /* [256] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(299),
+    /* matcher_indices */ MatcherIndicesIndex(314),
   },
   {
     /* [257] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(127),
+    /* matcher_indices */ MatcherIndicesIndex(142),
   },
   {
     /* [258] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(298),
+    /* matcher_indices */ MatcherIndicesIndex(313),
   },
   {
     /* [259] */
     /* usage */ core::ParameterUsage::kSampler,
-    /* matcher_indices */ MatcherIndicesIndex(299),
+    /* matcher_indices */ MatcherIndicesIndex(314),
   },
   {
     /* [260] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(175),
+    /* matcher_indices */ MatcherIndicesIndex(190),
   },
   {
     /* [261] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(149),
+    /* matcher_indices */ MatcherIndicesIndex(164),
   },
   {
     /* [262] */
@@ -3650,27 +3665,27 @@
   {
     /* [263] */
     /* usage */ core::ParameterUsage::kValue,
-    /* matcher_indices */ MatcherIndicesIndex(177),
+    /* matcher_indices */ MatcherIndicesIndex(192),
   },
   {
     /* [264] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(152),
+    /* matcher_indices */ MatcherIndicesIndex(167),
   },
   {
     /* [265] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(219),
+    /* matcher_indices */ MatcherIndicesIndex(234),
   },
   {
     /* [266] */
     /* usage */ core::ParameterUsage::kValue,
-    /* matcher_indices */ MatcherIndicesIndex(177),
+    /* matcher_indices */ MatcherIndicesIndex(192),
   },
   {
     /* [267] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(158),
+    /* matcher_indices */ MatcherIndicesIndex(173),
   },
   {
     /* [268] */
@@ -3680,12 +3695,12 @@
   {
     /* [269] */
     /* usage */ core::ParameterUsage::kValue,
-    /* matcher_indices */ MatcherIndicesIndex(177),
+    /* matcher_indices */ MatcherIndicesIndex(192),
   },
   {
     /* [270] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(149),
+    /* matcher_indices */ MatcherIndicesIndex(164),
   },
   {
     /* [271] */
@@ -3695,27 +3710,27 @@
   {
     /* [272] */
     /* usage */ core::ParameterUsage::kValue,
-    /* matcher_indices */ MatcherIndicesIndex(179),
+    /* matcher_indices */ MatcherIndicesIndex(194),
   },
   {
     /* [273] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(152),
+    /* matcher_indices */ MatcherIndicesIndex(167),
   },
   {
     /* [274] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(219),
+    /* matcher_indices */ MatcherIndicesIndex(234),
   },
   {
     /* [275] */
     /* usage */ core::ParameterUsage::kValue,
-    /* matcher_indices */ MatcherIndicesIndex(179),
+    /* matcher_indices */ MatcherIndicesIndex(194),
   },
   {
     /* [276] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(158),
+    /* matcher_indices */ MatcherIndicesIndex(173),
   },
   {
     /* [277] */
@@ -3725,12 +3740,12 @@
   {
     /* [278] */
     /* usage */ core::ParameterUsage::kValue,
-    /* matcher_indices */ MatcherIndicesIndex(179),
+    /* matcher_indices */ MatcherIndicesIndex(194),
   },
   {
     /* [279] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(149),
+    /* matcher_indices */ MatcherIndicesIndex(164),
   },
   {
     /* [280] */
@@ -3740,27 +3755,27 @@
   {
     /* [281] */
     /* usage */ core::ParameterUsage::kValue,
-    /* matcher_indices */ MatcherIndicesIndex(181),
+    /* matcher_indices */ MatcherIndicesIndex(196),
   },
   {
     /* [282] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(152),
+    /* matcher_indices */ MatcherIndicesIndex(167),
   },
   {
     /* [283] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(219),
+    /* matcher_indices */ MatcherIndicesIndex(234),
   },
   {
     /* [284] */
     /* usage */ core::ParameterUsage::kValue,
-    /* matcher_indices */ MatcherIndicesIndex(181),
+    /* matcher_indices */ MatcherIndicesIndex(196),
   },
   {
     /* [285] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(158),
+    /* matcher_indices */ MatcherIndicesIndex(173),
   },
   {
     /* [286] */
@@ -3770,12 +3785,12 @@
   {
     /* [287] */
     /* usage */ core::ParameterUsage::kValue,
-    /* matcher_indices */ MatcherIndicesIndex(181),
+    /* matcher_indices */ MatcherIndicesIndex(196),
   },
   {
     /* [288] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(183),
+    /* matcher_indices */ MatcherIndicesIndex(198),
   },
   {
     /* [289] */
@@ -3790,12 +3805,12 @@
   {
     /* [291] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(187),
+    /* matcher_indices */ MatcherIndicesIndex(202),
   },
   {
     /* [292] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(169),
+    /* matcher_indices */ MatcherIndicesIndex(184),
   },
   {
     /* [293] */
@@ -3805,12 +3820,12 @@
   {
     /* [294] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(191),
+    /* matcher_indices */ MatcherIndicesIndex(206),
   },
   {
     /* [295] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(221),
+    /* matcher_indices */ MatcherIndicesIndex(236),
   },
   {
     /* [296] */
@@ -3820,12 +3835,12 @@
   {
     /* [297] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(197),
+    /* matcher_indices */ MatcherIndicesIndex(212),
   },
   {
     /* [298] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(169),
+    /* matcher_indices */ MatcherIndicesIndex(184),
   },
   {
     /* [299] */
@@ -3835,12 +3850,12 @@
   {
     /* [300] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(293),
+    /* matcher_indices */ MatcherIndicesIndex(308),
   },
   {
     /* [301] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(219),
+    /* matcher_indices */ MatcherIndicesIndex(234),
   },
   {
     /* [302] */
@@ -3850,12 +3865,12 @@
   {
     /* [303] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(297),
+    /* matcher_indices */ MatcherIndicesIndex(312),
   },
   {
     /* [304] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(219),
+    /* matcher_indices */ MatcherIndicesIndex(234),
   },
   {
     /* [305] */
@@ -3865,22 +3880,22 @@
   {
     /* [306] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(51),
+    /* matcher_indices */ MatcherIndicesIndex(66),
   },
   {
     /* [307] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(56),
+    /* matcher_indices */ MatcherIndicesIndex(71),
   },
   {
     /* [308] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(46),
+    /* matcher_indices */ MatcherIndicesIndex(61),
   },
   {
     /* [309] */
     /* usage */ core::ParameterUsage::kXy,
-    /* matcher_indices */ MatcherIndicesIndex(219),
+    /* matcher_indices */ MatcherIndicesIndex(234),
   },
   {
     /* [310] */
@@ -3900,7 +3915,7 @@
   {
     /* [313] */
     /* usage */ core::ParameterUsage::kYz,
-    /* matcher_indices */ MatcherIndicesIndex(219),
+    /* matcher_indices */ MatcherIndicesIndex(234),
   },
   {
     /* [314] */
@@ -3920,7 +3935,7 @@
   {
     /* [317] */
     /* usage */ core::ParameterUsage::kZw,
-    /* matcher_indices */ MatcherIndicesIndex(219),
+    /* matcher_indices */ MatcherIndicesIndex(234),
   },
   {
     /* [318] */
@@ -3935,17 +3950,17 @@
   {
     /* [320] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(101),
+    /* matcher_indices */ MatcherIndicesIndex(116),
   },
   {
     /* [321] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(131),
+    /* matcher_indices */ MatcherIndicesIndex(146),
   },
   {
     /* [322] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(183),
+    /* matcher_indices */ MatcherIndicesIndex(198),
   },
   {
     /* [323] */
@@ -3955,7 +3970,7 @@
   {
     /* [324] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(187),
+    /* matcher_indices */ MatcherIndicesIndex(202),
   },
   {
     /* [325] */
@@ -3965,7 +3980,7 @@
   {
     /* [326] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(189),
+    /* matcher_indices */ MatcherIndicesIndex(204),
   },
   {
     /* [327] */
@@ -3975,7 +3990,7 @@
   {
     /* [328] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(191),
+    /* matcher_indices */ MatcherIndicesIndex(206),
   },
   {
     /* [329] */
@@ -3985,7 +4000,7 @@
   {
     /* [330] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(193),
+    /* matcher_indices */ MatcherIndicesIndex(208),
   },
   {
     /* [331] */
@@ -3995,7 +4010,7 @@
   {
     /* [332] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(195),
+    /* matcher_indices */ MatcherIndicesIndex(210),
   },
   {
     /* [333] */
@@ -4005,7 +4020,7 @@
   {
     /* [334] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(293),
+    /* matcher_indices */ MatcherIndicesIndex(308),
   },
   {
     /* [335] */
@@ -4015,7 +4030,7 @@
   {
     /* [336] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(294),
+    /* matcher_indices */ MatcherIndicesIndex(309),
   },
   {
     /* [337] */
@@ -4025,7 +4040,7 @@
   {
     /* [338] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(295),
+    /* matcher_indices */ MatcherIndicesIndex(310),
   },
   {
     /* [339] */
@@ -4035,7 +4050,7 @@
   {
     /* [340] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(296),
+    /* matcher_indices */ MatcherIndicesIndex(311),
   },
   {
     /* [341] */
@@ -4045,12 +4060,12 @@
   {
     /* [342] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(298),
+    /* matcher_indices */ MatcherIndicesIndex(313),
   },
   {
     /* [343] */
     /* usage */ core::ParameterUsage::kCoords,
-    /* matcher_indices */ MatcherIndicesIndex(219),
+    /* matcher_indices */ MatcherIndicesIndex(234),
   },
   {
     /* [344] */
@@ -4060,17 +4075,17 @@
   {
     /* [345] */
     /* usage */ core::ParameterUsage::kSourceLaneIndex,
-    /* matcher_indices */ MatcherIndicesIndex(289),
+    /* matcher_indices */ MatcherIndicesIndex(304),
   },
   {
     /* [346] */
     /* usage */ core::ParameterUsage::kValue,
-    /* matcher_indices */ MatcherIndicesIndex(101),
+    /* matcher_indices */ MatcherIndicesIndex(116),
   },
   {
     /* [347] */
     /* usage */ core::ParameterUsage::kSourceLaneIndex,
-    /* matcher_indices */ MatcherIndicesIndex(289),
+    /* matcher_indices */ MatcherIndicesIndex(304),
   },
   {
     /* [348] */
@@ -4085,7 +4100,7 @@
   {
     /* [350] */
     /* usage */ core::ParameterUsage::kValue,
-    /* matcher_indices */ MatcherIndicesIndex(101),
+    /* matcher_indices */ MatcherIndicesIndex(116),
   },
   {
     /* [351] */
@@ -4105,7 +4120,7 @@
   {
     /* [354] */
     /* usage */ core::ParameterUsage::kValue,
-    /* matcher_indices */ MatcherIndicesIndex(101),
+    /* matcher_indices */ MatcherIndicesIndex(116),
   },
   {
     /* [355] */
@@ -4120,387 +4135,397 @@
   {
     /* [357] */
     /* usage */ core::ParameterUsage::kId,
-    /* matcher_indices */ MatcherIndicesIndex(289),
+    /* matcher_indices */ MatcherIndicesIndex(304),
   },
   {
     /* [358] */
     /* usage */ core::ParameterUsage::kE,
-    /* matcher_indices */ MatcherIndicesIndex(101),
+    /* matcher_indices */ MatcherIndicesIndex(116),
   },
   {
     /* [359] */
     /* usage */ core::ParameterUsage::kId,
-    /* matcher_indices */ MatcherIndicesIndex(289),
+    /* matcher_indices */ MatcherIndicesIndex(304),
   },
   {
     /* [360] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(107),
+    /* matcher_indices */ MatcherIndicesIndex(51),
   },
   {
     /* [361] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(13),
+    /* matcher_indices */ MatcherIndicesIndex(56),
   },
   {
     /* [362] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(107),
+    /* matcher_indices */ MatcherIndicesIndex(122),
   },
   {
     /* [363] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(119),
+    /* matcher_indices */ MatcherIndicesIndex(13),
   },
   {
     /* [364] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(85),
+    /* matcher_indices */ MatcherIndicesIndex(122),
   },
   {
     /* [365] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(85),
+    /* matcher_indices */ MatcherIndicesIndex(134),
   },
   {
     /* [366] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(13),
+    /* matcher_indices */ MatcherIndicesIndex(100),
   },
   {
     /* [367] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(85),
+    /* matcher_indices */ MatcherIndicesIndex(100),
   },
   {
     /* [368] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(107),
+    /* matcher_indices */ MatcherIndicesIndex(13),
   },
   {
     /* [369] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(161),
+    /* matcher_indices */ MatcherIndicesIndex(100),
   },
   {
     /* [370] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(85),
+    /* matcher_indices */ MatcherIndicesIndex(122),
   },
   {
     /* [371] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(93),
+    /* matcher_indices */ MatcherIndicesIndex(176),
   },
   {
     /* [372] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(97),
+    /* matcher_indices */ MatcherIndicesIndex(100),
   },
   {
     /* [373] */
-    /* usage */ core::ParameterUsage::kXy,
-    /* matcher_indices */ MatcherIndicesIndex(219),
+    /* usage */ core::ParameterUsage::kNone,
+    /* matcher_indices */ MatcherIndicesIndex(108),
   },
   {
     /* [374] */
-    /* usage */ core::ParameterUsage::kZw,
-    /* matcher_indices */ MatcherIndicesIndex(219),
+    /* usage */ core::ParameterUsage::kNone,
+    /* matcher_indices */ MatcherIndicesIndex(112),
   },
   {
     /* [375] */
+    /* usage */ core::ParameterUsage::kXy,
+    /* matcher_indices */ MatcherIndicesIndex(234),
+  },
+  {
+    /* [376] */
+    /* usage */ core::ParameterUsage::kZw,
+    /* matcher_indices */ MatcherIndicesIndex(234),
+  },
+  {
+    /* [377] */
     /* usage */ core::ParameterUsage::kXyz,
     /* matcher_indices */ MatcherIndicesIndex(12),
   },
   {
-    /* [376] */
+    /* [378] */
     /* usage */ core::ParameterUsage::kW,
     /* matcher_indices */ MatcherIndicesIndex(13),
   },
   {
-    /* [377] */
+    /* [379] */
     /* usage */ core::ParameterUsage::kX,
     /* matcher_indices */ MatcherIndicesIndex(13),
   },
   {
-    /* [378] */
+    /* [380] */
     /* usage */ core::ParameterUsage::kZyw,
     /* matcher_indices */ MatcherIndicesIndex(12),
   },
   {
-    /* [379] */
+    /* [381] */
     /* usage */ core::ParameterUsage::kNone,
     /* matcher_indices */ MatcherIndicesIndex(14),
   },
   {
-    /* [380] */
+    /* [382] */
     /* usage */ core::ParameterUsage::kNone,
     /* matcher_indices */ MatcherIndicesIndex(6),
   },
   {
-    /* [381] */
-    /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(113),
-  },
-  {
-    /* [382] */
-    /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(116),
-  },
-  {
     /* [383] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(124),
+    /* matcher_indices */ MatcherIndicesIndex(128),
   },
   {
     /* [384] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(122),
+    /* matcher_indices */ MatcherIndicesIndex(131),
   },
   {
     /* [385] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(5),
+    /* matcher_indices */ MatcherIndicesIndex(139),
   },
   {
     /* [386] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(167),
+    /* matcher_indices */ MatcherIndicesIndex(137),
   },
   {
     /* [387] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(169),
+    /* matcher_indices */ MatcherIndicesIndex(5),
   },
   {
     /* [388] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(61),
+    /* matcher_indices */ MatcherIndicesIndex(182),
   },
   {
     /* [389] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(127),
+    /* matcher_indices */ MatcherIndicesIndex(184),
   },
   {
     /* [390] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(125),
+    /* matcher_indices */ MatcherIndicesIndex(76),
   },
   {
     /* [391] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(175),
+    /* matcher_indices */ MatcherIndicesIndex(142),
   },
   {
     /* [392] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(177),
+    /* matcher_indices */ MatcherIndicesIndex(140),
   },
   {
     /* [393] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(179),
+    /* matcher_indices */ MatcherIndicesIndex(190),
   },
   {
     /* [394] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(181),
+    /* matcher_indices */ MatcherIndicesIndex(192),
   },
   {
     /* [395] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(69),
+    /* matcher_indices */ MatcherIndicesIndex(194),
   },
   {
     /* [396] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(73),
+    /* matcher_indices */ MatcherIndicesIndex(196),
   },
   {
     /* [397] */
-    /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(137),
+    /* usage */ core::ParameterUsage::kNone,
+    /* matcher_indices */ MatcherIndicesIndex(84),
   },
   {
     /* [398] */
-    /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(140),
+    /* usage */ core::ParameterUsage::kNone,
+    /* matcher_indices */ MatcherIndicesIndex(88),
   },
   {
     /* [399] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(143),
+    /* matcher_indices */ MatcherIndicesIndex(152),
   },
   {
     /* [400] */
     /* usage */ core::ParameterUsage::kTexture,
-    /* matcher_indices */ MatcherIndicesIndex(146),
+    /* matcher_indices */ MatcherIndicesIndex(155),
   },
   {
     /* [401] */
-    /* usage */ core::ParameterUsage::kInputAttachment,
-    /* matcher_indices */ MatcherIndicesIndex(223),
+    /* usage */ core::ParameterUsage::kTexture,
+    /* matcher_indices */ MatcherIndicesIndex(158),
   },
   {
     /* [402] */
-    /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(81),
+    /* usage */ core::ParameterUsage::kTexture,
+    /* matcher_indices */ MatcherIndicesIndex(161),
   },
   {
     /* [403] */
-    /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(77),
+    /* usage */ core::ParameterUsage::kInputAttachment,
+    /* matcher_indices */ MatcherIndicesIndex(238),
   },
   {
     /* [404] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(180),
+    /* matcher_indices */ MatcherIndicesIndex(96),
   },
   {
     /* [405] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(221),
+    /* matcher_indices */ MatcherIndicesIndex(92),
   },
   {
     /* [406] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(233),
+    /* matcher_indices */ MatcherIndicesIndex(195),
   },
   {
     /* [407] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(235),
+    /* matcher_indices */ MatcherIndicesIndex(236),
   },
   {
     /* [408] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(237),
+    /* matcher_indices */ MatcherIndicesIndex(248),
   },
   {
     /* [409] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(239),
+    /* matcher_indices */ MatcherIndicesIndex(250),
   },
   {
     /* [410] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(241),
+    /* matcher_indices */ MatcherIndicesIndex(252),
   },
   {
     /* [411] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(243),
+    /* matcher_indices */ MatcherIndicesIndex(254),
   },
   {
     /* [412] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(245),
+    /* matcher_indices */ MatcherIndicesIndex(256),
   },
   {
     /* [413] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(74),
+    /* matcher_indices */ MatcherIndicesIndex(258),
   },
   {
     /* [414] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(247),
+    /* matcher_indices */ MatcherIndicesIndex(260),
   },
   {
     /* [415] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(249),
+    /* matcher_indices */ MatcherIndicesIndex(89),
   },
   {
     /* [416] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(251),
+    /* matcher_indices */ MatcherIndicesIndex(262),
   },
   {
     /* [417] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(253),
+    /* matcher_indices */ MatcherIndicesIndex(264),
   },
   {
     /* [418] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(255),
+    /* matcher_indices */ MatcherIndicesIndex(266),
   },
   {
     /* [419] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(257),
+    /* matcher_indices */ MatcherIndicesIndex(268),
   },
   {
     /* [420] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(259),
+    /* matcher_indices */ MatcherIndicesIndex(270),
   },
   {
     /* [421] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(261),
+    /* matcher_indices */ MatcherIndicesIndex(272),
   },
   {
     /* [422] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(263),
+    /* matcher_indices */ MatcherIndicesIndex(274),
   },
   {
     /* [423] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(265),
+    /* matcher_indices */ MatcherIndicesIndex(276),
   },
   {
     /* [424] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(267),
+    /* matcher_indices */ MatcherIndicesIndex(278),
   },
   {
     /* [425] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(269),
+    /* matcher_indices */ MatcherIndicesIndex(280),
   },
   {
     /* [426] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(271),
+    /* matcher_indices */ MatcherIndicesIndex(282),
   },
   {
     /* [427] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(273),
+    /* matcher_indices */ MatcherIndicesIndex(284),
   },
   {
     /* [428] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(275),
+    /* matcher_indices */ MatcherIndicesIndex(286),
   },
   {
     /* [429] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(277),
+    /* matcher_indices */ MatcherIndicesIndex(288),
   },
   {
     /* [430] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(279),
+    /* matcher_indices */ MatcherIndicesIndex(290),
   },
   {
     /* [431] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(281),
+    /* matcher_indices */ MatcherIndicesIndex(292),
   },
   {
     /* [432] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(283),
+    /* matcher_indices */ MatcherIndicesIndex(294),
   },
   {
     /* [433] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(285),
+    /* matcher_indices */ MatcherIndicesIndex(296),
+  },
+  {
+    /* [434] */
+    /* usage */ core::ParameterUsage::kNone,
+    /* matcher_indices */ MatcherIndicesIndex(298),
+  },
+  {
+    /* [435] */
+    /* usage */ core::ParameterUsage::kNone,
+    /* matcher_indices */ MatcherIndicesIndex(300),
   },
 };
 
@@ -4523,7 +4548,7 @@
   {
     /* [2] */
     /* name */ "S",
-    /* matcher_indices */ MatcherIndicesIndex(302),
+    /* matcher_indices */ MatcherIndicesIndex(317),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
@@ -4546,339 +4571,339 @@
   },
   {
     /* [6] */
-    /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(289),
+    /* name */ "TR",
+    /* matcher_indices */ MatcherIndicesIndex(318),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [7] */
-    /* name */ "F",
-    /* matcher_indices */ MatcherIndicesIndex(124),
-    /* kind */ TemplateInfo::Kind::kNumber,
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(318),
+    /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [8] */
-    /* name */ "W",
-    /* matcher_indices */ MatcherIndicesIndex(12),
+    /* name */ "C",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [9] */
-    /* name */ "A",
-    /* matcher_indices */ MatcherIndicesIndex(289),
-    /* kind */ TemplateInfo::Kind::kType,
+    /* name */ "R",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [10] */
-    /* name */ "L",
-    /* matcher_indices */ MatcherIndicesIndex(289),
-    /* kind */ TemplateInfo::Kind::kType,
+    /* name */ "K",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [11] */
-    /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(289),
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(318),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [12] */
-    /* name */ "F",
-    /* matcher_indices */ MatcherIndicesIndex(301),
-    /* kind */ TemplateInfo::Kind::kNumber,
+    /* name */ "TR",
+    /* matcher_indices */ MatcherIndicesIndex(318),
+    /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [13] */
-    /* name */ "W",
-    /* matcher_indices */ MatcherIndicesIndex(12),
+    /* name */ "C",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [14] */
-    /* name */ "A",
-    /* matcher_indices */ MatcherIndicesIndex(289),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [15] */
-    /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(289),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [16] */
-    /* name */ "F",
-    /* matcher_indices */ MatcherIndicesIndex(180),
+    /* name */ "R",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
+    /* [15] */
+    /* name */ "K",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [16] */
+    /* name */ "C",
+    /* matcher_indices */ MatcherIndicesIndex(304),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
     /* [17] */
+    /* name */ "F",
+    /* matcher_indices */ MatcherIndicesIndex(139),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [18] */
     /* name */ "W",
     /* matcher_indices */ MatcherIndicesIndex(12),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
-    /* [18] */
-    /* name */ "A",
-    /* matcher_indices */ MatcherIndicesIndex(289),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
     /* [19] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(34),
+    /* name */ "A",
+    /* matcher_indices */ MatcherIndicesIndex(304),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [20] */
-    /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(289),
+    /* name */ "L",
+    /* matcher_indices */ MatcherIndicesIndex(304),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [21] */
-    /* name */ "A",
-    /* matcher_indices */ MatcherIndicesIndex(289),
+    /* name */ "C",
+    /* matcher_indices */ MatcherIndicesIndex(304),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [22] */
-    /* name */ "L",
-    /* matcher_indices */ MatcherIndicesIndex(289),
-    /* kind */ TemplateInfo::Kind::kType,
+    /* name */ "F",
+    /* matcher_indices */ MatcherIndicesIndex(316),
+    /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [23] */
-    /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(289),
-    /* kind */ TemplateInfo::Kind::kType,
+    /* name */ "W",
+    /* matcher_indices */ MatcherIndicesIndex(12),
+    /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [24] */
-    /* name */ "F",
-    /* matcher_indices */ MatcherIndicesIndex(124),
-    /* kind */ TemplateInfo::Kind::kNumber,
+    /* name */ "A",
+    /* matcher_indices */ MatcherIndicesIndex(304),
+    /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [25] */
-    /* name */ "R",
-    /* matcher_indices */ MatcherIndicesIndex(40),
-    /* kind */ TemplateInfo::Kind::kNumber,
+    /* name */ "C",
+    /* matcher_indices */ MatcherIndicesIndex(304),
+    /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [26] */
-    /* name */ "A",
-    /* matcher_indices */ MatcherIndicesIndex(289),
-    /* kind */ TemplateInfo::Kind::kType,
+    /* name */ "F",
+    /* matcher_indices */ MatcherIndicesIndex(195),
+    /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [27] */
-    /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(289),
-    /* kind */ TemplateInfo::Kind::kType,
+    /* name */ "W",
+    /* matcher_indices */ MatcherIndicesIndex(12),
+    /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [28] */
-    /* name */ "F",
-    /* matcher_indices */ MatcherIndicesIndex(301),
-    /* kind */ TemplateInfo::Kind::kNumber,
+    /* name */ "A",
+    /* matcher_indices */ MatcherIndicesIndex(304),
+    /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [29] */
-    /* name */ "R",
-    /* matcher_indices */ MatcherIndicesIndex(40),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [30] */
-    /* name */ "A",
-    /* matcher_indices */ MatcherIndicesIndex(289),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [31] */
-    /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(289),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [32] */
-    /* name */ "F",
-    /* matcher_indices */ MatcherIndicesIndex(180),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [33] */
-    /* name */ "R",
-    /* matcher_indices */ MatcherIndicesIndex(40),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [34] */
-    /* name */ "A",
-    /* matcher_indices */ MatcherIndicesIndex(289),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [35] */
-    /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(289),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [36] */
-    /* name */ "F",
-    /* matcher_indices */ MatcherIndicesIndex(124),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [37] */
-    /* name */ "RW",
-    /* matcher_indices */ MatcherIndicesIndex(6),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [38] */
-    /* name */ "A",
-    /* matcher_indices */ MatcherIndicesIndex(289),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [39] */
-    /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(289),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [40] */
-    /* name */ "F",
-    /* matcher_indices */ MatcherIndicesIndex(301),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [41] */
-    /* name */ "RW",
-    /* matcher_indices */ MatcherIndicesIndex(6),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [42] */
-    /* name */ "A",
-    /* matcher_indices */ MatcherIndicesIndex(289),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [43] */
-    /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(289),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [44] */
-    /* name */ "F",
-    /* matcher_indices */ MatcherIndicesIndex(180),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [45] */
-    /* name */ "RW",
-    /* matcher_indices */ MatcherIndicesIndex(6),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [46] */
-    /* name */ "A",
-    /* matcher_indices */ MatcherIndicesIndex(289),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [47] */
-    /* name */ "S",
-    /* matcher_indices */ MatcherIndicesIndex(303),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [48] */
-    /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [49] */
-    /* name */ "R",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [50] */
-    /* name */ "K",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [51] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(288),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [52] */
-    /* name */ "K",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [53] */
-    /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [54] */
-    /* name */ "R",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [55] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(110),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [56] */
-    /* name */ "N",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [57] */
-    /* name */ "U",
     /* matcher_indices */ MatcherIndicesIndex(34),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
+    /* [30] */
+    /* name */ "C",
+    /* matcher_indices */ MatcherIndicesIndex(304),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [31] */
+    /* name */ "A",
+    /* matcher_indices */ MatcherIndicesIndex(304),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [32] */
+    /* name */ "L",
+    /* matcher_indices */ MatcherIndicesIndex(304),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [33] */
+    /* name */ "C",
+    /* matcher_indices */ MatcherIndicesIndex(304),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [34] */
+    /* name */ "F",
+    /* matcher_indices */ MatcherIndicesIndex(139),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [35] */
+    /* name */ "R",
+    /* matcher_indices */ MatcherIndicesIndex(40),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [36] */
+    /* name */ "A",
+    /* matcher_indices */ MatcherIndicesIndex(304),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [37] */
+    /* name */ "C",
+    /* matcher_indices */ MatcherIndicesIndex(304),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [38] */
+    /* name */ "F",
+    /* matcher_indices */ MatcherIndicesIndex(316),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [39] */
+    /* name */ "R",
+    /* matcher_indices */ MatcherIndicesIndex(40),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [40] */
+    /* name */ "A",
+    /* matcher_indices */ MatcherIndicesIndex(304),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [41] */
+    /* name */ "C",
+    /* matcher_indices */ MatcherIndicesIndex(304),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [42] */
+    /* name */ "F",
+    /* matcher_indices */ MatcherIndicesIndex(195),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [43] */
+    /* name */ "R",
+    /* matcher_indices */ MatcherIndicesIndex(40),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [44] */
+    /* name */ "A",
+    /* matcher_indices */ MatcherIndicesIndex(304),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [45] */
+    /* name */ "C",
+    /* matcher_indices */ MatcherIndicesIndex(304),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [46] */
+    /* name */ "F",
+    /* matcher_indices */ MatcherIndicesIndex(139),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [47] */
+    /* name */ "RW",
+    /* matcher_indices */ MatcherIndicesIndex(6),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [48] */
+    /* name */ "A",
+    /* matcher_indices */ MatcherIndicesIndex(304),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [49] */
+    /* name */ "C",
+    /* matcher_indices */ MatcherIndicesIndex(304),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [50] */
+    /* name */ "F",
+    /* matcher_indices */ MatcherIndicesIndex(316),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [51] */
+    /* name */ "RW",
+    /* matcher_indices */ MatcherIndicesIndex(6),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [52] */
+    /* name */ "A",
+    /* matcher_indices */ MatcherIndicesIndex(304),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [53] */
+    /* name */ "C",
+    /* matcher_indices */ MatcherIndicesIndex(304),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [54] */
+    /* name */ "F",
+    /* matcher_indices */ MatcherIndicesIndex(195),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [55] */
+    /* name */ "RW",
+    /* matcher_indices */ MatcherIndicesIndex(6),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [56] */
+    /* name */ "A",
+    /* matcher_indices */ MatcherIndicesIndex(304),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [57] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(303),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
     /* [58] */
-    /* name */ "N",
+    /* name */ "K",
     /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [59] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(288),
-    /* kind */ TemplateInfo::Kind::kType,
+    /* name */ "C",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [60] */
-    /* name */ "U",
-    /* matcher_indices */ MatcherIndicesIndex(290),
-    /* kind */ TemplateInfo::Kind::kType,
+    /* name */ "R",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [61] */
-    /* name */ "M",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(125),
+    /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [62] */
@@ -4888,8 +4913,8 @@
   },
   {
     /* [63] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(288),
+    /* name */ "U",
+    /* matcher_indices */ MatcherIndicesIndex(34),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
@@ -4900,380 +4925,416 @@
   },
   {
     /* [65] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(303),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [66] */
+    /* name */ "U",
+    /* matcher_indices */ MatcherIndicesIndex(305),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [67] */
     /* name */ "M",
     /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
-    /* [66] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(34),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [67] */
-    /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(289),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
     /* [68] */
-    /* name */ "L",
-    /* matcher_indices */ MatcherIndicesIndex(289),
-    /* kind */ TemplateInfo::Kind::kType,
+    /* name */ "N",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [69] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(34),
+    /* matcher_indices */ MatcherIndicesIndex(303),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [70] */
-    /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(289),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [71] */
-    /* name */ "S",
-    /* matcher_indices */ MatcherIndicesIndex(289),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [72] */
-    /* name */ "S",
+    /* name */ "N",
     /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
-    /* [73] */
-    /* name */ "T",
+    /* [71] */
+    /* name */ "M",
     /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [72] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(34),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [73] */
+    /* name */ "C",
+    /* matcher_indices */ MatcherIndicesIndex(304),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [74] */
-    /* name */ "A",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
+    /* name */ "L",
+    /* matcher_indices */ MatcherIndicesIndex(304),
+    /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [75] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(288),
+    /* matcher_indices */ MatcherIndicesIndex(34),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [76] */
     /* name */ "C",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
+    /* matcher_indices */ MatcherIndicesIndex(304),
+    /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [77] */
-    /* name */ "R",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
+    /* name */ "S",
+    /* matcher_indices */ MatcherIndicesIndex(304),
+    /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [78] */
-    /* name */ "N",
+    /* name */ "S",
     /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [79] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(287),
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [80] */
-    /* name */ "N",
+    /* name */ "A",
     /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [81] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(289),
+    /* matcher_indices */ MatcherIndicesIndex(303),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [82] */
-    /* name */ "S",
-    /* matcher_indices */ MatcherIndicesIndex(1),
+    /* name */ "C",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [83] */
-    /* name */ "T",
+    /* name */ "R",
     /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kType,
+    /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [84] */
-    /* name */ "R",
-    /* matcher_indices */ MatcherIndicesIndex(40),
+    /* name */ "N",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [85] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* matcher_indices */ MatcherIndicesIndex(302),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [86] */
-    /* name */ "W",
-    /* matcher_indices */ MatcherIndicesIndex(12),
+    /* name */ "N",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [87] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(34),
+    /* matcher_indices */ MatcherIndicesIndex(304),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [88] */
-    /* name */ "U",
-    /* matcher_indices */ MatcherIndicesIndex(34),
-    /* kind */ TemplateInfo::Kind::kType,
+    /* name */ "S",
+    /* matcher_indices */ MatcherIndicesIndex(1),
+    /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [89] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(116),
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [90] */
-    /* name */ "N",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [91] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(291),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [92] */
-    /* name */ "N",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [93] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(292),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [94] */
-    /* name */ "N",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [95] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(302),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [96] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(119),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [97] */
-    /* name */ "N",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [98] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(5),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [99] */
-    /* name */ "S",
-    /* matcher_indices */ MatcherIndicesIndex(34),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [100] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(167),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [101] */
-    /* name */ "S",
-    /* matcher_indices */ MatcherIndicesIndex(34),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [102] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(34),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [103] */
-    /* name */ "L",
-    /* matcher_indices */ MatcherIndicesIndex(289),
-    /* kind */ TemplateInfo::Kind::kType,
-  },
-  {
-    /* [104] */
-    /* name */ "F",
-    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
-  },
-  {
-    /* [105] */
     /* name */ "R",
     /* matcher_indices */ MatcherIndicesIndex(40),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
-    /* [106] */
-    /* name */ "F",
+    /* [91] */
+    /* name */ "T",
     /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
-    /* kind */ TemplateInfo::Kind::kNumber,
+    /* kind */ TemplateInfo::Kind::kType,
   },
   {
-    /* [107] */
+    /* [92] */
     /* name */ "W",
     /* matcher_indices */ MatcherIndicesIndex(12),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
-    /* [108] */
+    /* [93] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(304),
+    /* matcher_indices */ MatcherIndicesIndex(34),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
-    /* [109] */
+    /* [94] */
+    /* name */ "U",
+    /* matcher_indices */ MatcherIndicesIndex(34),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [95] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(131),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [96] */
     /* name */ "N",
     /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
-    /* [110] */
+    /* [97] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(127),
+    /* matcher_indices */ MatcherIndicesIndex(306),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
-    /* [111] */
-    /* name */ "U",
+    /* [98] */
+    /* name */ "N",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [99] */
+    /* name */ "T",
     /* matcher_indices */ MatcherIndicesIndex(307),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
-    /* [112] */
+    /* [100] */
+    /* name */ "N",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [101] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(6),
+    /* matcher_indices */ MatcherIndicesIndex(317),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
-    /* [113] */
-    /* name */ "U",
-    /* matcher_indices */ MatcherIndicesIndex(308),
+    /* [102] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(134),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
+    /* [103] */
+    /* name */ "N",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [104] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(5),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [105] */
+    /* name */ "S",
+    /* matcher_indices */ MatcherIndicesIndex(34),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [106] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(182),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [107] */
+    /* name */ "S",
+    /* matcher_indices */ MatcherIndicesIndex(34),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [108] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(34),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [109] */
+    /* name */ "L",
+    /* matcher_indices */ MatcherIndicesIndex(304),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [110] */
+    /* name */ "F",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [111] */
+    /* name */ "R",
+    /* matcher_indices */ MatcherIndicesIndex(40),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [112] */
+    /* name */ "F",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
+    /* [113] */
+    /* name */ "W",
+    /* matcher_indices */ MatcherIndicesIndex(12),
+    /* kind */ TemplateInfo::Kind::kNumber,
+  },
+  {
     /* [114] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(180),
+    /* matcher_indices */ MatcherIndicesIndex(319),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [115] */
-    /* name */ "U",
-    /* matcher_indices */ MatcherIndicesIndex(305),
-    /* kind */ TemplateInfo::Kind::kType,
+    /* name */ "N",
+    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+    /* kind */ TemplateInfo::Kind::kNumber,
   },
   {
     /* [116] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(40),
+    /* matcher_indices */ MatcherIndicesIndex(142),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [117] */
     /* name */ "U",
-    /* matcher_indices */ MatcherIndicesIndex(306),
+    /* matcher_indices */ MatcherIndicesIndex(322),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [118] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(52),
+    /* matcher_indices */ MatcherIndicesIndex(6),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [119] */
     /* name */ "U",
-    /* matcher_indices */ MatcherIndicesIndex(309),
+    /* matcher_indices */ MatcherIndicesIndex(323),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [120] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(33),
+    /* matcher_indices */ MatcherIndicesIndex(195),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [121] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(305),
+    /* name */ "U",
+    /* matcher_indices */ MatcherIndicesIndex(320),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [122] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(306),
+    /* matcher_indices */ MatcherIndicesIndex(40),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [123] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(307),
+    /* name */ "U",
+    /* matcher_indices */ MatcherIndicesIndex(321),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [124] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(308),
+    /* matcher_indices */ MatcherIndicesIndex(52),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [125] */
-    /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(309),
+    /* name */ "U",
+    /* matcher_indices */ MatcherIndicesIndex(324),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [126] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(310),
+    /* matcher_indices */ MatcherIndicesIndex(33),
     /* kind */ TemplateInfo::Kind::kType,
   },
   {
     /* [127] */
     /* name */ "T",
-    /* matcher_indices */ MatcherIndicesIndex(311),
+    /* matcher_indices */ MatcherIndicesIndex(320),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [128] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(321),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [129] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(322),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [130] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(323),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [131] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(324),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [132] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(325),
+    /* kind */ TemplateInfo::Kind::kType,
+  },
+  {
+    /* [133] */
+    /* name */ "T",
+    /* matcher_indices */ MatcherIndicesIndex(326),
     /* kind */ TemplateInfo::Kind::kType,
   },
 };
@@ -5408,9 +5469,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(66),
+    /* templates */ TemplateIndex(72),
     /* parameters */ ParameterIndex(288),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5419,9 +5480,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(66),
+    /* templates */ TemplateIndex(72),
     /* parameters */ ParameterIndex(291),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5430,9 +5491,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(29),
     /* parameters */ ParameterIndex(207),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5441,9 +5502,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(66),
+    /* templates */ TemplateIndex(72),
     /* parameters */ ParameterIndex(294),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5452,9 +5513,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(69),
+    /* templates */ TemplateIndex(75),
     /* parameters */ ParameterIndex(297),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5463,9 +5524,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(67),
+    /* templates */ TemplateIndex(73),
     /* parameters */ ParameterIndex(300),
-    /* return_matcher_indices */ MatcherIndicesIndex(127),
+    /* return_matcher_indices */ MatcherIndicesIndex(142),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5474,9 +5535,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(20),
+    /* templates */ TemplateIndex(30),
     /* parameters */ ParameterIndex(211),
-    /* return_matcher_indices */ MatcherIndicesIndex(127),
+    /* return_matcher_indices */ MatcherIndicesIndex(142),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5485,9 +5546,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(70),
+    /* templates */ TemplateIndex(76),
     /* parameters */ ParameterIndex(303),
-    /* return_matcher_indices */ MatcherIndicesIndex(127),
+    /* return_matcher_indices */ MatcherIndicesIndex(142),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5496,9 +5557,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(6),
+    /* templates */ TemplateIndex(16),
     /* parameters */ ParameterIndex(342),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5507,9 +5568,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(23),
+    /* templates */ TemplateIndex(33),
     /* parameters */ ParameterIndex(261),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5518,9 +5579,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(27),
+    /* templates */ TemplateIndex(37),
     /* parameters */ ParameterIndex(261),
-    /* return_matcher_indices */ MatcherIndicesIndex(179),
+    /* return_matcher_indices */ MatcherIndicesIndex(194),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5529,9 +5590,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(31),
+    /* templates */ TemplateIndex(41),
     /* parameters */ ParameterIndex(261),
-    /* return_matcher_indices */ MatcherIndicesIndex(181),
+    /* return_matcher_indices */ MatcherIndicesIndex(196),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5540,9 +5601,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(23),
+    /* templates */ TemplateIndex(33),
     /* parameters */ ParameterIndex(264),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5551,9 +5612,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(27),
+    /* templates */ TemplateIndex(37),
     /* parameters */ ParameterIndex(264),
-    /* return_matcher_indices */ MatcherIndicesIndex(179),
+    /* return_matcher_indices */ MatcherIndicesIndex(194),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5562,9 +5623,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(31),
+    /* templates */ TemplateIndex(41),
     /* parameters */ ParameterIndex(264),
-    /* return_matcher_indices */ MatcherIndicesIndex(181),
+    /* return_matcher_indices */ MatcherIndicesIndex(196),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5573,9 +5634,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(23),
+    /* templates */ TemplateIndex(33),
     /* parameters */ ParameterIndex(195),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5584,9 +5645,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(27),
+    /* templates */ TemplateIndex(37),
     /* parameters */ ParameterIndex(195),
-    /* return_matcher_indices */ MatcherIndicesIndex(179),
+    /* return_matcher_indices */ MatcherIndicesIndex(194),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5595,9 +5656,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(31),
+    /* templates */ TemplateIndex(41),
     /* parameters */ ParameterIndex(195),
-    /* return_matcher_indices */ MatcherIndicesIndex(181),
+    /* return_matcher_indices */ MatcherIndicesIndex(196),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5606,9 +5667,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(23),
+    /* templates */ TemplateIndex(33),
     /* parameters */ ParameterIndex(267),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5617,9 +5678,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(27),
+    /* templates */ TemplateIndex(37),
     /* parameters */ ParameterIndex(267),
-    /* return_matcher_indices */ MatcherIndicesIndex(179),
+    /* return_matcher_indices */ MatcherIndicesIndex(194),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5628,9 +5689,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(31),
+    /* templates */ TemplateIndex(41),
     /* parameters */ ParameterIndex(267),
-    /* return_matcher_indices */ MatcherIndicesIndex(181),
+    /* return_matcher_indices */ MatcherIndicesIndex(196),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5639,9 +5700,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(35),
+    /* templates */ TemplateIndex(45),
     /* parameters */ ParameterIndex(261),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5650,9 +5711,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(39),
+    /* templates */ TemplateIndex(49),
     /* parameters */ ParameterIndex(261),
-    /* return_matcher_indices */ MatcherIndicesIndex(179),
+    /* return_matcher_indices */ MatcherIndicesIndex(194),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5661,9 +5722,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(43),
+    /* templates */ TemplateIndex(53),
     /* parameters */ ParameterIndex(261),
-    /* return_matcher_indices */ MatcherIndicesIndex(181),
+    /* return_matcher_indices */ MatcherIndicesIndex(196),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5672,9 +5733,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(35),
+    /* templates */ TemplateIndex(45),
     /* parameters */ ParameterIndex(264),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5683,9 +5744,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(39),
+    /* templates */ TemplateIndex(49),
     /* parameters */ ParameterIndex(264),
-    /* return_matcher_indices */ MatcherIndicesIndex(179),
+    /* return_matcher_indices */ MatcherIndicesIndex(194),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5694,9 +5755,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(43),
+    /* templates */ TemplateIndex(53),
     /* parameters */ ParameterIndex(264),
-    /* return_matcher_indices */ MatcherIndicesIndex(181),
+    /* return_matcher_indices */ MatcherIndicesIndex(196),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5705,9 +5766,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(35),
+    /* templates */ TemplateIndex(45),
     /* parameters */ ParameterIndex(195),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5716,9 +5777,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(39),
+    /* templates */ TemplateIndex(49),
     /* parameters */ ParameterIndex(195),
-    /* return_matcher_indices */ MatcherIndicesIndex(179),
+    /* return_matcher_indices */ MatcherIndicesIndex(194),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5727,9 +5788,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(43),
+    /* templates */ TemplateIndex(53),
     /* parameters */ ParameterIndex(195),
-    /* return_matcher_indices */ MatcherIndicesIndex(181),
+    /* return_matcher_indices */ MatcherIndicesIndex(196),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5738,9 +5799,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(35),
+    /* templates */ TemplateIndex(45),
     /* parameters */ ParameterIndex(267),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5749,9 +5810,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(39),
+    /* templates */ TemplateIndex(49),
     /* parameters */ ParameterIndex(267),
-    /* return_matcher_indices */ MatcherIndicesIndex(179),
+    /* return_matcher_indices */ MatcherIndicesIndex(194),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5760,9 +5821,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(43),
+    /* templates */ TemplateIndex(53),
     /* parameters */ ParameterIndex(267),
-    /* return_matcher_indices */ MatcherIndicesIndex(181),
+    /* return_matcher_indices */ MatcherIndicesIndex(196),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5771,7 +5832,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(29),
     /* parameters */ ParameterIndex(288),
     /* return_matcher_indices */ MatcherIndicesIndex(40),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5782,7 +5843,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(102),
+    /* templates */ TemplateIndex(108),
     /* parameters */ ParameterIndex(322),
     /* return_matcher_indices */ MatcherIndicesIndex(40),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5793,9 +5854,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(29),
     /* parameters */ ParameterIndex(75),
-    /* return_matcher_indices */ MatcherIndicesIndex(185),
+    /* return_matcher_indices */ MatcherIndicesIndex(200),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5804,9 +5865,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(102),
+    /* templates */ TemplateIndex(108),
     /* parameters */ ParameterIndex(324),
-    /* return_matcher_indices */ MatcherIndicesIndex(185),
+    /* return_matcher_indices */ MatcherIndicesIndex(200),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5815,9 +5876,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(29),
     /* parameters */ ParameterIndex(27),
-    /* return_matcher_indices */ MatcherIndicesIndex(185),
+    /* return_matcher_indices */ MatcherIndicesIndex(200),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5826,9 +5887,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(102),
+    /* templates */ TemplateIndex(108),
     /* parameters */ ParameterIndex(326),
-    /* return_matcher_indices */ MatcherIndicesIndex(185),
+    /* return_matcher_indices */ MatcherIndicesIndex(200),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5837,7 +5898,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(29),
     /* parameters */ ParameterIndex(294),
     /* return_matcher_indices */ MatcherIndicesIndex(39),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5848,7 +5909,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(102),
+    /* templates */ TemplateIndex(108),
     /* parameters */ ParameterIndex(328),
     /* return_matcher_indices */ MatcherIndicesIndex(39),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -5859,9 +5920,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(29),
     /* parameters */ ParameterIndex(164),
-    /* return_matcher_indices */ MatcherIndicesIndex(185),
+    /* return_matcher_indices */ MatcherIndicesIndex(200),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5870,9 +5931,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(102),
+    /* templates */ TemplateIndex(108),
     /* parameters */ ParameterIndex(330),
-    /* return_matcher_indices */ MatcherIndicesIndex(185),
+    /* return_matcher_indices */ MatcherIndicesIndex(200),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5881,9 +5942,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(29),
     /* parameters */ ParameterIndex(80),
-    /* return_matcher_indices */ MatcherIndicesIndex(185),
+    /* return_matcher_indices */ MatcherIndicesIndex(200),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5892,9 +5953,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(102),
+    /* templates */ TemplateIndex(108),
     /* parameters */ ParameterIndex(332),
-    /* return_matcher_indices */ MatcherIndicesIndex(185),
+    /* return_matcher_indices */ MatcherIndicesIndex(200),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5903,9 +5964,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(29),
     /* parameters */ ParameterIndex(297),
-    /* return_matcher_indices */ MatcherIndicesIndex(185),
+    /* return_matcher_indices */ MatcherIndicesIndex(200),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5916,7 +5977,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(89),
-    /* return_matcher_indices */ MatcherIndicesIndex(185),
+    /* return_matcher_indices */ MatcherIndicesIndex(200),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5925,9 +5986,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(10),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(334),
-    /* return_matcher_indices */ MatcherIndicesIndex(185),
+    /* return_matcher_indices */ MatcherIndicesIndex(200),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5938,7 +5999,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(32),
-    /* return_matcher_indices */ MatcherIndicesIndex(185),
+    /* return_matcher_indices */ MatcherIndicesIndex(200),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5947,9 +6008,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(10),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(336),
-    /* return_matcher_indices */ MatcherIndicesIndex(185),
+    /* return_matcher_indices */ MatcherIndicesIndex(200),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5960,7 +6021,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(171),
-    /* return_matcher_indices */ MatcherIndicesIndex(185),
+    /* return_matcher_indices */ MatcherIndicesIndex(200),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5969,9 +6030,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(10),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(338),
-    /* return_matcher_indices */ MatcherIndicesIndex(185),
+    /* return_matcher_indices */ MatcherIndicesIndex(200),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5982,7 +6043,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(94),
-    /* return_matcher_indices */ MatcherIndicesIndex(185),
+    /* return_matcher_indices */ MatcherIndicesIndex(200),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -5991,9 +6052,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(10),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(340),
-    /* return_matcher_indices */ MatcherIndicesIndex(185),
+    /* return_matcher_indices */ MatcherIndicesIndex(200),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6004,7 +6065,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(303),
-    /* return_matcher_indices */ MatcherIndicesIndex(185),
+    /* return_matcher_indices */ MatcherIndicesIndex(200),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6013,8 +6074,8 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(104),
-    /* parameters */ ParameterIndex(397),
+    /* templates */ TemplateIndex(110),
+    /* parameters */ ParameterIndex(399),
     /* return_matcher_indices */ MatcherIndicesIndex(40),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -6024,9 +6085,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(104),
-    /* parameters */ ParameterIndex(398),
-    /* return_matcher_indices */ MatcherIndicesIndex(185),
+    /* templates */ TemplateIndex(110),
+    /* parameters */ ParameterIndex(400),
+    /* return_matcher_indices */ MatcherIndicesIndex(200),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6035,9 +6096,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(104),
-    /* parameters */ ParameterIndex(399),
-    /* return_matcher_indices */ MatcherIndicesIndex(185),
+    /* templates */ TemplateIndex(110),
+    /* parameters */ ParameterIndex(401),
+    /* return_matcher_indices */ MatcherIndicesIndex(200),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6046,8 +6107,8 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(104),
-    /* parameters */ ParameterIndex(400),
+    /* templates */ TemplateIndex(110),
+    /* parameters */ ParameterIndex(402),
     /* return_matcher_indices */ MatcherIndicesIndex(39),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -6057,8 +6118,8 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(106),
-    /* parameters */ ParameterIndex(397),
+    /* templates */ TemplateIndex(112),
+    /* parameters */ ParameterIndex(399),
     /* return_matcher_indices */ MatcherIndicesIndex(40),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -6068,9 +6129,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(106),
-    /* parameters */ ParameterIndex(398),
-    /* return_matcher_indices */ MatcherIndicesIndex(185),
+    /* templates */ TemplateIndex(112),
+    /* parameters */ ParameterIndex(400),
+    /* return_matcher_indices */ MatcherIndicesIndex(200),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6079,9 +6140,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(106),
-    /* parameters */ ParameterIndex(399),
-    /* return_matcher_indices */ MatcherIndicesIndex(185),
+    /* templates */ TemplateIndex(112),
+    /* parameters */ ParameterIndex(401),
+    /* return_matcher_indices */ MatcherIndicesIndex(200),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6090,8 +6151,8 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(106),
-    /* parameters */ ParameterIndex(400),
+    /* templates */ TemplateIndex(112),
+    /* parameters */ ParameterIndex(402),
     /* return_matcher_indices */ MatcherIndicesIndex(39),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -6103,7 +6164,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(258),
-    /* return_matcher_indices */ MatcherIndicesIndex(185),
+    /* return_matcher_indices */ MatcherIndicesIndex(200),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6114,7 +6175,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(/* invalid */),
-    /* return_matcher_indices */ MatcherIndicesIndex(231),
+    /* return_matcher_indices */ MatcherIndicesIndex(246),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -6123,9 +6184,9 @@
     /* num_parameters */ 0,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(126),
+    /* templates */ TemplateIndex(132),
     /* parameters */ ParameterIndex(/* invalid */),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -6134,9 +6195,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(126),
+    /* templates */ TemplateIndex(132),
     /* parameters */ ParameterIndex(235),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(82),
   },
   {
@@ -6145,9 +6206,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(91),
+    /* templates */ TemplateIndex(97),
     /* parameters */ ParameterIndex(235),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(82),
   },
   {
@@ -6156,9 +6217,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(126),
+    /* templates */ TemplateIndex(132),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(109),
   },
   {
@@ -6167,9 +6228,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(91),
+    /* templates */ TemplateIndex(97),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(109),
   },
   {
@@ -6178,9 +6239,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(126),
+    /* templates */ TemplateIndex(132),
     /* parameters */ ParameterIndex(223),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(110),
   },
   {
@@ -6189,9 +6250,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(91),
+    /* templates */ TemplateIndex(97),
     /* parameters */ ParameterIndex(223),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(110),
   },
   {
@@ -6200,9 +6261,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(126),
+    /* templates */ TemplateIndex(132),
     /* parameters */ ParameterIndex(309),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(111),
   },
   {
@@ -6211,9 +6272,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(91),
+    /* templates */ TemplateIndex(97),
     /* parameters */ ParameterIndex(309),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(111),
   },
   {
@@ -6222,9 +6283,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(126),
+    /* templates */ TemplateIndex(132),
     /* parameters */ ParameterIndex(312),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(111),
   },
   {
@@ -6233,9 +6294,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(91),
+    /* templates */ TemplateIndex(97),
     /* parameters */ ParameterIndex(312),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(111),
   },
   {
@@ -6244,9 +6305,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(126),
+    /* templates */ TemplateIndex(132),
     /* parameters */ ParameterIndex(315),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(111),
   },
   {
@@ -6255,9 +6316,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(91),
+    /* templates */ TemplateIndex(97),
     /* parameters */ ParameterIndex(315),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(111),
   },
   {
@@ -6266,9 +6327,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(126),
-    /* parameters */ ParameterIndex(373),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* templates */ TemplateIndex(132),
+    /* parameters */ ParameterIndex(375),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(111),
   },
   {
@@ -6277,9 +6338,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(91),
-    /* parameters */ ParameterIndex(373),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* templates */ TemplateIndex(97),
+    /* parameters */ ParameterIndex(375),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(111),
   },
   {
@@ -6288,9 +6349,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(126),
-    /* parameters */ ParameterIndex(375),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* templates */ TemplateIndex(132),
+    /* parameters */ ParameterIndex(377),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(111),
   },
   {
@@ -6299,9 +6360,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(91),
-    /* parameters */ ParameterIndex(375),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* templates */ TemplateIndex(97),
+    /* parameters */ ParameterIndex(377),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(111),
   },
   {
@@ -6310,9 +6371,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(126),
-    /* parameters */ ParameterIndex(377),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* templates */ TemplateIndex(132),
+    /* parameters */ ParameterIndex(379),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(111),
   },
   {
@@ -6321,9 +6382,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(91),
-    /* parameters */ ParameterIndex(377),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* templates */ TemplateIndex(97),
+    /* parameters */ ParameterIndex(379),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(111),
   },
   {
@@ -6332,9 +6393,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(110),
-    /* parameters */ ParameterIndex(406),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* templates */ TemplateIndex(116),
+    /* parameters */ ParameterIndex(408),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
   {
@@ -6343,9 +6404,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(112),
-    /* parameters */ ParameterIndex(406),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* templates */ TemplateIndex(118),
+    /* parameters */ ParameterIndex(408),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
   {
@@ -6354,9 +6415,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(114),
-    /* parameters */ ParameterIndex(406),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* templates */ TemplateIndex(120),
+    /* parameters */ ParameterIndex(408),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
   {
@@ -6365,9 +6426,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(116),
-    /* parameters */ ParameterIndex(406),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* templates */ TemplateIndex(122),
+    /* parameters */ ParameterIndex(408),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
   {
@@ -6376,9 +6437,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(118),
-    /* parameters */ ParameterIndex(406),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* templates */ TemplateIndex(124),
+    /* parameters */ ParameterIndex(408),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
   {
@@ -6389,7 +6450,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(/* invalid */),
-    /* return_matcher_indices */ MatcherIndicesIndex(229),
+    /* return_matcher_indices */ MatcherIndicesIndex(244),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -6398,7 +6459,7 @@
     /* num_parameters */ 0,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(126),
+    /* templates */ TemplateIndex(132),
     /* parameters */ ParameterIndex(/* invalid */),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
@@ -6409,7 +6470,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(126),
+    /* templates */ TemplateIndex(132),
     /* parameters */ ParameterIndex(231),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(82),
@@ -6420,7 +6481,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(91),
+    /* templates */ TemplateIndex(97),
     /* parameters */ ParameterIndex(231),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(82),
@@ -6431,7 +6492,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(126),
+    /* templates */ TemplateIndex(132),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(109),
@@ -6442,7 +6503,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(91),
+    /* templates */ TemplateIndex(97),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(109),
@@ -6453,7 +6514,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(126),
+    /* templates */ TemplateIndex(132),
     /* parameters */ ParameterIndex(223),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(110),
@@ -6464,7 +6525,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(91),
+    /* templates */ TemplateIndex(97),
     /* parameters */ ParameterIndex(223),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(110),
@@ -6475,7 +6536,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(126),
+    /* templates */ TemplateIndex(132),
     /* parameters */ ParameterIndex(309),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(111),
@@ -6486,7 +6547,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(91),
+    /* templates */ TemplateIndex(97),
     /* parameters */ ParameterIndex(309),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(111),
@@ -6497,7 +6558,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(126),
+    /* templates */ TemplateIndex(132),
     /* parameters */ ParameterIndex(312),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(111),
@@ -6508,7 +6569,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(91),
+    /* templates */ TemplateIndex(97),
     /* parameters */ ParameterIndex(312),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(111),
@@ -6519,8 +6580,8 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(110),
-    /* parameters */ ParameterIndex(405),
+    /* templates */ TemplateIndex(116),
+    /* parameters */ ParameterIndex(407),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
@@ -6530,8 +6591,8 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(112),
-    /* parameters */ ParameterIndex(405),
+    /* templates */ TemplateIndex(118),
+    /* parameters */ ParameterIndex(407),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
@@ -6541,8 +6602,8 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(114),
-    /* parameters */ ParameterIndex(405),
+    /* templates */ TemplateIndex(120),
+    /* parameters */ ParameterIndex(407),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
@@ -6552,8 +6613,8 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(116),
-    /* parameters */ ParameterIndex(405),
+    /* templates */ TemplateIndex(122),
+    /* parameters */ ParameterIndex(407),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
@@ -6563,8 +6624,8 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(118),
-    /* parameters */ ParameterIndex(405),
+    /* templates */ TemplateIndex(124),
+    /* parameters */ ParameterIndex(407),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
@@ -6576,7 +6637,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(255),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6587,7 +6648,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(44),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6598,7 +6659,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(175),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6607,9 +6668,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(19),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6618,9 +6679,9 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(99),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6631,7 +6692,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(50),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6642,7 +6703,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(179),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6653,7 +6714,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(119),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6662,9 +6723,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(56),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6675,7 +6736,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(139),
-    /* return_matcher_indices */ MatcherIndicesIndex(127),
+    /* return_matcher_indices */ MatcherIndicesIndex(142),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6686,7 +6747,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(167),
-    /* return_matcher_indices */ MatcherIndicesIndex(127),
+    /* return_matcher_indices */ MatcherIndicesIndex(142),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6695,9 +6756,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(68),
-    /* return_matcher_indices */ MatcherIndicesIndex(127),
+    /* return_matcher_indices */ MatcherIndicesIndex(142),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6706,9 +6767,9 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(84),
-    /* return_matcher_indices */ MatcherIndicesIndex(127),
+    /* return_matcher_indices */ MatcherIndicesIndex(142),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6719,7 +6780,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(191),
-    /* return_matcher_indices */ MatcherIndicesIndex(127),
+    /* return_matcher_indices */ MatcherIndicesIndex(142),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6728,9 +6789,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(144),
-    /* return_matcher_indices */ MatcherIndicesIndex(127),
+    /* return_matcher_indices */ MatcherIndicesIndex(142),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6741,7 +6802,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(124),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6752,7 +6813,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(124),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6761,9 +6822,9 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(62),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6772,9 +6833,9 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(62),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6785,7 +6846,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(129),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6796,7 +6857,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(129),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6807,7 +6868,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(187),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6816,9 +6877,9 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(134),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6827,9 +6888,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(10),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(139),
-    /* return_matcher_indices */ MatcherIndicesIndex(127),
+    /* return_matcher_indices */ MatcherIndicesIndex(142),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6838,9 +6899,9 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(10),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(139),
-    /* return_matcher_indices */ MatcherIndicesIndex(127),
+    /* return_matcher_indices */ MatcherIndicesIndex(142),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6849,9 +6910,9 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(68),
-    /* return_matcher_indices */ MatcherIndicesIndex(127),
+    /* return_matcher_indices */ MatcherIndicesIndex(142),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6860,9 +6921,9 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(68),
-    /* return_matcher_indices */ MatcherIndicesIndex(127),
+    /* return_matcher_indices */ MatcherIndicesIndex(142),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6871,9 +6932,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(10),
+    /* templates */ TemplateIndex(20),
     /* parameters */ ParameterIndex(191),
-    /* return_matcher_indices */ MatcherIndicesIndex(127),
+    /* return_matcher_indices */ MatcherIndicesIndex(142),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6882,9 +6943,9 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(144),
-    /* return_matcher_indices */ MatcherIndicesIndex(127),
+    /* return_matcher_indices */ MatcherIndicesIndex(142),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -6895,7 +6956,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(/* invalid */),
-    /* return_matcher_indices */ MatcherIndicesIndex(227),
+    /* return_matcher_indices */ MatcherIndicesIndex(242),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -6904,9 +6965,9 @@
     /* num_parameters */ 0,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(126),
+    /* templates */ TemplateIndex(132),
     /* parameters */ ParameterIndex(/* invalid */),
-    /* return_matcher_indices */ MatcherIndicesIndex(219),
+    /* return_matcher_indices */ MatcherIndicesIndex(234),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -6915,9 +6976,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(126),
+    /* templates */ TemplateIndex(132),
     /* parameters */ ParameterIndex(227),
-    /* return_matcher_indices */ MatcherIndicesIndex(219),
+    /* return_matcher_indices */ MatcherIndicesIndex(234),
     /* const_eval_fn */ ConstEvalFunctionIndex(82),
   },
   {
@@ -6926,9 +6987,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(91),
+    /* templates */ TemplateIndex(97),
     /* parameters */ ParameterIndex(227),
-    /* return_matcher_indices */ MatcherIndicesIndex(219),
+    /* return_matcher_indices */ MatcherIndicesIndex(234),
     /* const_eval_fn */ ConstEvalFunctionIndex(82),
   },
   {
@@ -6937,9 +6998,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(126),
+    /* templates */ TemplateIndex(132),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(219),
+    /* return_matcher_indices */ MatcherIndicesIndex(234),
     /* const_eval_fn */ ConstEvalFunctionIndex(109),
   },
   {
@@ -6948,9 +7009,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(91),
+    /* templates */ TemplateIndex(97),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(219),
+    /* return_matcher_indices */ MatcherIndicesIndex(234),
     /* const_eval_fn */ ConstEvalFunctionIndex(109),
   },
   {
@@ -6959,9 +7020,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(126),
+    /* templates */ TemplateIndex(132),
     /* parameters */ ParameterIndex(223),
-    /* return_matcher_indices */ MatcherIndicesIndex(219),
+    /* return_matcher_indices */ MatcherIndicesIndex(234),
     /* const_eval_fn */ ConstEvalFunctionIndex(110),
   },
   {
@@ -6970,9 +7031,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(91),
+    /* templates */ TemplateIndex(97),
     /* parameters */ ParameterIndex(223),
-    /* return_matcher_indices */ MatcherIndicesIndex(219),
+    /* return_matcher_indices */ MatcherIndicesIndex(234),
     /* const_eval_fn */ ConstEvalFunctionIndex(110),
   },
   {
@@ -6981,9 +7042,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(110),
-    /* parameters */ ParameterIndex(387),
-    /* return_matcher_indices */ MatcherIndicesIndex(219),
+    /* templates */ TemplateIndex(116),
+    /* parameters */ ParameterIndex(389),
+    /* return_matcher_indices */ MatcherIndicesIndex(234),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
   {
@@ -6992,9 +7053,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(112),
-    /* parameters */ ParameterIndex(387),
-    /* return_matcher_indices */ MatcherIndicesIndex(219),
+    /* templates */ TemplateIndex(118),
+    /* parameters */ ParameterIndex(389),
+    /* return_matcher_indices */ MatcherIndicesIndex(234),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
   {
@@ -7003,9 +7064,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(114),
-    /* parameters */ ParameterIndex(387),
-    /* return_matcher_indices */ MatcherIndicesIndex(219),
+    /* templates */ TemplateIndex(120),
+    /* parameters */ ParameterIndex(389),
+    /* return_matcher_indices */ MatcherIndicesIndex(234),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
   {
@@ -7014,9 +7075,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(116),
-    /* parameters */ ParameterIndex(387),
-    /* return_matcher_indices */ MatcherIndicesIndex(219),
+    /* templates */ TemplateIndex(122),
+    /* parameters */ ParameterIndex(389),
+    /* return_matcher_indices */ MatcherIndicesIndex(234),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
   {
@@ -7025,9 +7086,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(118),
-    /* parameters */ ParameterIndex(387),
-    /* return_matcher_indices */ MatcherIndicesIndex(219),
+    /* templates */ TemplateIndex(124),
+    /* parameters */ ParameterIndex(389),
+    /* return_matcher_indices */ MatcherIndicesIndex(234),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
   {
@@ -7036,9 +7097,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(29),
     /* parameters */ ParameterIndex(74),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -7047,9 +7108,9 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(29),
     /* parameters */ ParameterIndex(74),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -7058,9 +7119,9 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(29),
     /* parameters */ ParameterIndex(26),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -7069,9 +7130,9 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(29),
     /* parameters */ ParameterIndex(26),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -7080,9 +7141,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(29),
     /* parameters */ ParameterIndex(163),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -7091,9 +7152,9 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(29),
     /* parameters */ ParameterIndex(79),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -7104,7 +7165,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(139),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -7115,7 +7176,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(167),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -7124,9 +7185,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(68),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -7135,9 +7196,9 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(84),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -7148,7 +7209,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(191),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -7157,9 +7218,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(144),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -7168,7 +7229,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(6),
+    /* templates */ TemplateIndex(16),
     /* parameters */ ParameterIndex(261),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -7179,7 +7240,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(6),
+    /* templates */ TemplateIndex(16),
     /* parameters */ ParameterIndex(264),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -7190,7 +7251,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(6),
+    /* templates */ TemplateIndex(16),
     /* parameters */ ParameterIndex(195),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -7201,7 +7262,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(6),
+    /* templates */ TemplateIndex(16),
     /* parameters */ ParameterIndex(267),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -7212,7 +7273,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(11),
+    /* templates */ TemplateIndex(21),
     /* parameters */ ParameterIndex(270),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -7223,7 +7284,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(11),
+    /* templates */ TemplateIndex(21),
     /* parameters */ ParameterIndex(273),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -7234,7 +7295,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(11),
+    /* templates */ TemplateIndex(21),
     /* parameters */ ParameterIndex(199),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -7245,7 +7306,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(11),
+    /* templates */ TemplateIndex(21),
     /* parameters */ ParameterIndex(276),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -7256,7 +7317,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(15),
+    /* templates */ TemplateIndex(25),
     /* parameters */ ParameterIndex(279),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -7267,7 +7328,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(15),
+    /* templates */ TemplateIndex(25),
     /* parameters */ ParameterIndex(282),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -7278,7 +7339,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(15),
+    /* templates */ TemplateIndex(25),
     /* parameters */ ParameterIndex(203),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -7289,7 +7350,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(15),
+    /* templates */ TemplateIndex(25),
     /* parameters */ ParameterIndex(285),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -7300,7 +7361,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(87),
+    /* templates */ TemplateIndex(93),
     /* parameters */ ParameterIndex(247),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(10),
@@ -7311,8 +7372,8 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(112),
-    /* parameters */ ParameterIndex(380),
+    /* templates */ TemplateIndex(118),
+    /* parameters */ ParameterIndex(382),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(10),
   },
@@ -7322,8 +7383,8 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(55),
-    /* parameters */ ParameterIndex(381),
+    /* templates */ TemplateIndex(61),
+    /* parameters */ ParameterIndex(383),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(10),
   },
@@ -7333,8 +7394,8 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(89),
-    /* parameters */ ParameterIndex(382),
+    /* templates */ TemplateIndex(95),
+    /* parameters */ ParameterIndex(384),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(10),
   },
@@ -7344,8 +7405,8 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(116),
-    /* parameters */ ParameterIndex(383),
+    /* templates */ TemplateIndex(122),
+    /* parameters */ ParameterIndex(385),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(10),
   },
@@ -7355,8 +7416,8 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(96),
-    /* parameters */ ParameterIndex(384),
+    /* templates */ TemplateIndex(102),
+    /* parameters */ ParameterIndex(386),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(10),
   },
@@ -7366,8 +7427,8 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(19),
-    /* parameters */ ParameterIndex(385),
+    /* templates */ TemplateIndex(29),
+    /* parameters */ ParameterIndex(387),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(10),
   },
@@ -7377,8 +7438,8 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(120),
-    /* parameters */ ParameterIndex(386),
+    /* templates */ TemplateIndex(126),
+    /* parameters */ ParameterIndex(388),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(10),
   },
@@ -7388,7 +7449,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(98),
+    /* templates */ TemplateIndex(104),
     /* parameters */ ParameterIndex(247),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(10),
@@ -7399,8 +7460,8 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(100),
-    /* parameters */ ParameterIndex(387),
+    /* templates */ TemplateIndex(106),
+    /* parameters */ ParameterIndex(389),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(10),
   },
@@ -7410,7 +7471,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(29),
     /* parameters */ ParameterIndex(288),
     /* return_matcher_indices */ MatcherIndicesIndex(40),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -7421,7 +7482,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(29),
     /* parameters */ ParameterIndex(75),
     /* return_matcher_indices */ MatcherIndicesIndex(40),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -7432,7 +7493,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(29),
     /* parameters */ ParameterIndex(27),
     /* return_matcher_indices */ MatcherIndicesIndex(40),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -7443,7 +7504,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(29),
     /* parameters */ ParameterIndex(294),
     /* return_matcher_indices */ MatcherIndicesIndex(40),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -7454,7 +7515,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(29),
     /* parameters */ ParameterIndex(164),
     /* return_matcher_indices */ MatcherIndicesIndex(40),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -7465,7 +7526,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(29),
     /* parameters */ ParameterIndex(80),
     /* return_matcher_indices */ MatcherIndicesIndex(40),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -7520,7 +7581,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(79),
+    /* templates */ TemplateIndex(85),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(88),
@@ -7531,9 +7592,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(79),
+    /* templates */ TemplateIndex(85),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(107),
+    /* return_matcher_indices */ MatcherIndicesIndex(122),
     /* const_eval_fn */ ConstEvalFunctionIndex(88),
   },
   {
@@ -7542,9 +7603,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(79),
-    /* parameters */ ParameterIndex(360),
-    /* return_matcher_indices */ MatcherIndicesIndex(107),
+    /* templates */ TemplateIndex(85),
+    /* parameters */ ParameterIndex(362),
+    /* return_matcher_indices */ MatcherIndicesIndex(122),
     /* const_eval_fn */ ConstEvalFunctionIndex(88),
   },
   {
@@ -7553,9 +7614,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(79),
-    /* parameters */ ParameterIndex(361),
-    /* return_matcher_indices */ MatcherIndicesIndex(107),
+    /* templates */ TemplateIndex(85),
+    /* parameters */ ParameterIndex(363),
+    /* return_matcher_indices */ MatcherIndicesIndex(122),
     /* const_eval_fn */ ConstEvalFunctionIndex(88),
   },
   {
@@ -7564,9 +7625,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(63),
-    /* parameters */ ParameterIndex(366),
-    /* return_matcher_indices */ MatcherIndicesIndex(85),
+    /* templates */ TemplateIndex(69),
+    /* parameters */ ParameterIndex(368),
+    /* return_matcher_indices */ MatcherIndicesIndex(100),
     /* const_eval_fn */ ConstEvalFunctionIndex(88),
   },
   {
@@ -7575,9 +7636,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(63),
-    /* parameters */ ParameterIndex(365),
-    /* return_matcher_indices */ MatcherIndicesIndex(85),
+    /* templates */ TemplateIndex(69),
+    /* parameters */ ParameterIndex(367),
+    /* return_matcher_indices */ MatcherIndicesIndex(100),
     /* const_eval_fn */ ConstEvalFunctionIndex(88),
   },
   {
@@ -7586,9 +7647,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(75),
-    /* parameters */ ParameterIndex(367),
-    /* return_matcher_indices */ MatcherIndicesIndex(161),
+    /* templates */ TemplateIndex(81),
+    /* parameters */ ParameterIndex(369),
+    /* return_matcher_indices */ MatcherIndicesIndex(176),
     /* const_eval_fn */ ConstEvalFunctionIndex(89),
   },
   {
@@ -7597,9 +7658,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(75),
-    /* parameters */ ParameterIndex(369),
-    /* return_matcher_indices */ MatcherIndicesIndex(107),
+    /* templates */ TemplateIndex(81),
+    /* parameters */ ParameterIndex(371),
+    /* return_matcher_indices */ MatcherIndicesIndex(122),
     /* const_eval_fn */ ConstEvalFunctionIndex(90),
   },
   {
@@ -7608,9 +7669,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
-    /* templates */ TemplateIndex(51),
-    /* parameters */ ParameterIndex(371),
-    /* return_matcher_indices */ MatcherIndicesIndex(89),
+    /* templates */ TemplateIndex(57),
+    /* parameters */ ParameterIndex(373),
+    /* return_matcher_indices */ MatcherIndicesIndex(104),
     /* const_eval_fn */ ConstEvalFunctionIndex(91),
   },
   {
@@ -7619,9 +7680,9 @@
     /* num_parameters */ 0,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(127),
+    /* templates */ TemplateIndex(133),
     /* parameters */ ParameterIndex(/* invalid */),
-    /* return_matcher_indices */ MatcherIndicesIndex(235),
+    /* return_matcher_indices */ MatcherIndicesIndex(250),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -7630,9 +7691,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(127),
-    /* parameters */ ParameterIndex(407),
-    /* return_matcher_indices */ MatcherIndicesIndex(235),
+    /* templates */ TemplateIndex(133),
+    /* parameters */ ParameterIndex(409),
+    /* return_matcher_indices */ MatcherIndicesIndex(250),
     /* const_eval_fn */ ConstEvalFunctionIndex(82),
   },
   {
@@ -7641,9 +7702,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
-    /* parameters */ ParameterIndex(407),
-    /* return_matcher_indices */ MatcherIndicesIndex(235),
+    /* templates */ TemplateIndex(57),
+    /* parameters */ ParameterIndex(409),
+    /* return_matcher_indices */ MatcherIndicesIndex(250),
     /* const_eval_fn */ ConstEvalFunctionIndex(82),
   },
   {
@@ -7652,9 +7713,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(235),
+    /* return_matcher_indices */ MatcherIndicesIndex(250),
     /* const_eval_fn */ ConstEvalFunctionIndex(112),
   },
   {
@@ -7663,9 +7724,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(235),
+    /* return_matcher_indices */ MatcherIndicesIndex(250),
     /* const_eval_fn */ ConstEvalFunctionIndex(112),
   },
   {
@@ -7674,9 +7735,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(227),
-    /* return_matcher_indices */ MatcherIndicesIndex(235),
+    /* return_matcher_indices */ MatcherIndicesIndex(250),
     /* const_eval_fn */ ConstEvalFunctionIndex(113),
   },
   {
@@ -7685,9 +7746,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(227),
-    /* return_matcher_indices */ MatcherIndicesIndex(235),
+    /* return_matcher_indices */ MatcherIndicesIndex(250),
     /* const_eval_fn */ ConstEvalFunctionIndex(113),
   },
   {
@@ -7696,9 +7757,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(112),
-    /* parameters */ ParameterIndex(408),
-    /* return_matcher_indices */ MatcherIndicesIndex(235),
+    /* templates */ TemplateIndex(118),
+    /* parameters */ ParameterIndex(410),
+    /* return_matcher_indices */ MatcherIndicesIndex(250),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
   {
@@ -7707,9 +7768,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(110),
-    /* parameters */ ParameterIndex(409),
-    /* return_matcher_indices */ MatcherIndicesIndex(235),
+    /* templates */ TemplateIndex(116),
+    /* parameters */ ParameterIndex(411),
+    /* return_matcher_indices */ MatcherIndicesIndex(250),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
   {
@@ -7718,9 +7779,9 @@
     /* num_parameters */ 0,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(127),
+    /* templates */ TemplateIndex(133),
     /* parameters */ ParameterIndex(/* invalid */),
-    /* return_matcher_indices */ MatcherIndicesIndex(241),
+    /* return_matcher_indices */ MatcherIndicesIndex(256),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -7729,9 +7790,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(127),
-    /* parameters */ ParameterIndex(410),
-    /* return_matcher_indices */ MatcherIndicesIndex(241),
+    /* templates */ TemplateIndex(133),
+    /* parameters */ ParameterIndex(412),
+    /* return_matcher_indices */ MatcherIndicesIndex(256),
     /* const_eval_fn */ ConstEvalFunctionIndex(82),
   },
   {
@@ -7740,9 +7801,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
-    /* parameters */ ParameterIndex(410),
-    /* return_matcher_indices */ MatcherIndicesIndex(241),
+    /* templates */ TemplateIndex(57),
+    /* parameters */ ParameterIndex(412),
+    /* return_matcher_indices */ MatcherIndicesIndex(256),
     /* const_eval_fn */ ConstEvalFunctionIndex(82),
   },
   {
@@ -7751,9 +7812,9 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(241),
+    /* return_matcher_indices */ MatcherIndicesIndex(256),
     /* const_eval_fn */ ConstEvalFunctionIndex(112),
   },
   {
@@ -7762,9 +7823,9 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(241),
+    /* return_matcher_indices */ MatcherIndicesIndex(256),
     /* const_eval_fn */ ConstEvalFunctionIndex(112),
   },
   {
@@ -7773,9 +7834,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(231),
-    /* return_matcher_indices */ MatcherIndicesIndex(241),
+    /* return_matcher_indices */ MatcherIndicesIndex(256),
     /* const_eval_fn */ ConstEvalFunctionIndex(113),
   },
   {
@@ -7784,9 +7845,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(231),
-    /* return_matcher_indices */ MatcherIndicesIndex(241),
+    /* return_matcher_indices */ MatcherIndicesIndex(256),
     /* const_eval_fn */ ConstEvalFunctionIndex(113),
   },
   {
@@ -7795,9 +7856,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(112),
-    /* parameters */ ParameterIndex(411),
-    /* return_matcher_indices */ MatcherIndicesIndex(241),
+    /* templates */ TemplateIndex(118),
+    /* parameters */ ParameterIndex(413),
+    /* return_matcher_indices */ MatcherIndicesIndex(256),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
   {
@@ -7806,9 +7867,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(110),
-    /* parameters */ ParameterIndex(412),
-    /* return_matcher_indices */ MatcherIndicesIndex(241),
+    /* templates */ TemplateIndex(116),
+    /* parameters */ ParameterIndex(414),
+    /* return_matcher_indices */ MatcherIndicesIndex(256),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
   {
@@ -7817,9 +7878,9 @@
     /* num_parameters */ 0,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(127),
+    /* templates */ TemplateIndex(133),
     /* parameters */ ParameterIndex(/* invalid */),
-    /* return_matcher_indices */ MatcherIndicesIndex(74),
+    /* return_matcher_indices */ MatcherIndicesIndex(89),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -7828,9 +7889,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(127),
-    /* parameters */ ParameterIndex(413),
-    /* return_matcher_indices */ MatcherIndicesIndex(74),
+    /* templates */ TemplateIndex(133),
+    /* parameters */ ParameterIndex(415),
+    /* return_matcher_indices */ MatcherIndicesIndex(89),
     /* const_eval_fn */ ConstEvalFunctionIndex(82),
   },
   {
@@ -7839,9 +7900,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
-    /* parameters */ ParameterIndex(413),
-    /* return_matcher_indices */ MatcherIndicesIndex(74),
+    /* templates */ TemplateIndex(57),
+    /* parameters */ ParameterIndex(415),
+    /* return_matcher_indices */ MatcherIndicesIndex(89),
     /* const_eval_fn */ ConstEvalFunctionIndex(82),
   },
   {
@@ -7850,9 +7911,9 @@
     /* num_parameters */ 8,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(74),
+    /* return_matcher_indices */ MatcherIndicesIndex(89),
     /* const_eval_fn */ ConstEvalFunctionIndex(112),
   },
   {
@@ -7861,9 +7922,9 @@
     /* num_parameters */ 8,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(74),
+    /* return_matcher_indices */ MatcherIndicesIndex(89),
     /* const_eval_fn */ ConstEvalFunctionIndex(112),
   },
   {
@@ -7872,9 +7933,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(235),
-    /* return_matcher_indices */ MatcherIndicesIndex(74),
+    /* return_matcher_indices */ MatcherIndicesIndex(89),
     /* const_eval_fn */ ConstEvalFunctionIndex(113),
   },
   {
@@ -7883,9 +7944,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(235),
-    /* return_matcher_indices */ MatcherIndicesIndex(74),
+    /* return_matcher_indices */ MatcherIndicesIndex(89),
     /* const_eval_fn */ ConstEvalFunctionIndex(113),
   },
   {
@@ -7894,9 +7955,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(112),
-    /* parameters */ ParameterIndex(414),
-    /* return_matcher_indices */ MatcherIndicesIndex(74),
+    /* templates */ TemplateIndex(118),
+    /* parameters */ ParameterIndex(416),
+    /* return_matcher_indices */ MatcherIndicesIndex(89),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
   {
@@ -7905,9 +7966,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(110),
-    /* parameters */ ParameterIndex(415),
-    /* return_matcher_indices */ MatcherIndicesIndex(74),
+    /* templates */ TemplateIndex(116),
+    /* parameters */ ParameterIndex(417),
+    /* return_matcher_indices */ MatcherIndicesIndex(89),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
   {
@@ -7916,9 +7977,9 @@
     /* num_parameters */ 0,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(127),
+    /* templates */ TemplateIndex(133),
     /* parameters */ ParameterIndex(/* invalid */),
-    /* return_matcher_indices */ MatcherIndicesIndex(251),
+    /* return_matcher_indices */ MatcherIndicesIndex(266),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -7927,9 +7988,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(127),
-    /* parameters */ ParameterIndex(416),
-    /* return_matcher_indices */ MatcherIndicesIndex(251),
+    /* templates */ TemplateIndex(133),
+    /* parameters */ ParameterIndex(418),
+    /* return_matcher_indices */ MatcherIndicesIndex(266),
     /* const_eval_fn */ ConstEvalFunctionIndex(82),
   },
   {
@@ -7938,9 +7999,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
-    /* parameters */ ParameterIndex(416),
-    /* return_matcher_indices */ MatcherIndicesIndex(251),
+    /* templates */ TemplateIndex(57),
+    /* parameters */ ParameterIndex(418),
+    /* return_matcher_indices */ MatcherIndicesIndex(266),
     /* const_eval_fn */ ConstEvalFunctionIndex(82),
   },
   {
@@ -7949,9 +8010,9 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(251),
+    /* return_matcher_indices */ MatcherIndicesIndex(266),
     /* const_eval_fn */ ConstEvalFunctionIndex(112),
   },
   {
@@ -7960,9 +8021,9 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(251),
+    /* return_matcher_indices */ MatcherIndicesIndex(266),
     /* const_eval_fn */ ConstEvalFunctionIndex(112),
   },
   {
@@ -7971,9 +8032,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(227),
-    /* return_matcher_indices */ MatcherIndicesIndex(251),
+    /* return_matcher_indices */ MatcherIndicesIndex(266),
     /* const_eval_fn */ ConstEvalFunctionIndex(113),
   },
   {
@@ -7982,9 +8043,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(227),
-    /* return_matcher_indices */ MatcherIndicesIndex(251),
+    /* return_matcher_indices */ MatcherIndicesIndex(266),
     /* const_eval_fn */ ConstEvalFunctionIndex(113),
   },
   {
@@ -7993,9 +8054,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(112),
-    /* parameters */ ParameterIndex(417),
-    /* return_matcher_indices */ MatcherIndicesIndex(251),
+    /* templates */ TemplateIndex(118),
+    /* parameters */ ParameterIndex(419),
+    /* return_matcher_indices */ MatcherIndicesIndex(266),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
   {
@@ -8004,9 +8065,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(110),
-    /* parameters */ ParameterIndex(418),
-    /* return_matcher_indices */ MatcherIndicesIndex(251),
+    /* templates */ TemplateIndex(116),
+    /* parameters */ ParameterIndex(420),
+    /* return_matcher_indices */ MatcherIndicesIndex(266),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
   {
@@ -8015,9 +8076,9 @@
     /* num_parameters */ 0,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(127),
+    /* templates */ TemplateIndex(133),
     /* parameters */ ParameterIndex(/* invalid */),
-    /* return_matcher_indices */ MatcherIndicesIndex(257),
+    /* return_matcher_indices */ MatcherIndicesIndex(272),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -8026,9 +8087,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(127),
-    /* parameters */ ParameterIndex(419),
-    /* return_matcher_indices */ MatcherIndicesIndex(257),
+    /* templates */ TemplateIndex(133),
+    /* parameters */ ParameterIndex(421),
+    /* return_matcher_indices */ MatcherIndicesIndex(272),
     /* const_eval_fn */ ConstEvalFunctionIndex(82),
   },
   {
@@ -8037,9 +8098,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
-    /* parameters */ ParameterIndex(419),
-    /* return_matcher_indices */ MatcherIndicesIndex(257),
+    /* templates */ TemplateIndex(57),
+    /* parameters */ ParameterIndex(421),
+    /* return_matcher_indices */ MatcherIndicesIndex(272),
     /* const_eval_fn */ ConstEvalFunctionIndex(82),
   },
   {
@@ -8048,9 +8109,9 @@
     /* num_parameters */ 9,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(257),
+    /* return_matcher_indices */ MatcherIndicesIndex(272),
     /* const_eval_fn */ ConstEvalFunctionIndex(112),
   },
   {
@@ -8059,9 +8120,9 @@
     /* num_parameters */ 9,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(257),
+    /* return_matcher_indices */ MatcherIndicesIndex(272),
     /* const_eval_fn */ ConstEvalFunctionIndex(112),
   },
   {
@@ -8070,9 +8131,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(231),
-    /* return_matcher_indices */ MatcherIndicesIndex(257),
+    /* return_matcher_indices */ MatcherIndicesIndex(272),
     /* const_eval_fn */ ConstEvalFunctionIndex(113),
   },
   {
@@ -8081,9 +8142,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(231),
-    /* return_matcher_indices */ MatcherIndicesIndex(257),
+    /* return_matcher_indices */ MatcherIndicesIndex(272),
     /* const_eval_fn */ ConstEvalFunctionIndex(113),
   },
   {
@@ -8092,9 +8153,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(112),
-    /* parameters */ ParameterIndex(420),
-    /* return_matcher_indices */ MatcherIndicesIndex(257),
+    /* templates */ TemplateIndex(118),
+    /* parameters */ ParameterIndex(422),
+    /* return_matcher_indices */ MatcherIndicesIndex(272),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
   {
@@ -8103,9 +8164,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(110),
-    /* parameters */ ParameterIndex(421),
-    /* return_matcher_indices */ MatcherIndicesIndex(257),
+    /* templates */ TemplateIndex(116),
+    /* parameters */ ParameterIndex(423),
+    /* return_matcher_indices */ MatcherIndicesIndex(272),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
   {
@@ -8114,9 +8175,9 @@
     /* num_parameters */ 0,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(127),
+    /* templates */ TemplateIndex(133),
     /* parameters */ ParameterIndex(/* invalid */),
-    /* return_matcher_indices */ MatcherIndicesIndex(263),
+    /* return_matcher_indices */ MatcherIndicesIndex(278),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -8125,9 +8186,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(127),
-    /* parameters */ ParameterIndex(422),
-    /* return_matcher_indices */ MatcherIndicesIndex(263),
+    /* templates */ TemplateIndex(133),
+    /* parameters */ ParameterIndex(424),
+    /* return_matcher_indices */ MatcherIndicesIndex(278),
     /* const_eval_fn */ ConstEvalFunctionIndex(82),
   },
   {
@@ -8136,9 +8197,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
-    /* parameters */ ParameterIndex(422),
-    /* return_matcher_indices */ MatcherIndicesIndex(263),
+    /* templates */ TemplateIndex(57),
+    /* parameters */ ParameterIndex(424),
+    /* return_matcher_indices */ MatcherIndicesIndex(278),
     /* const_eval_fn */ ConstEvalFunctionIndex(82),
   },
   {
@@ -8147,9 +8208,9 @@
     /* num_parameters */ 12,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(263),
+    /* return_matcher_indices */ MatcherIndicesIndex(278),
     /* const_eval_fn */ ConstEvalFunctionIndex(112),
   },
   {
@@ -8158,9 +8219,9 @@
     /* num_parameters */ 12,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(263),
+    /* return_matcher_indices */ MatcherIndicesIndex(278),
     /* const_eval_fn */ ConstEvalFunctionIndex(112),
   },
   {
@@ -8169,9 +8230,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(235),
-    /* return_matcher_indices */ MatcherIndicesIndex(263),
+    /* return_matcher_indices */ MatcherIndicesIndex(278),
     /* const_eval_fn */ ConstEvalFunctionIndex(113),
   },
   {
@@ -8180,9 +8241,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(235),
-    /* return_matcher_indices */ MatcherIndicesIndex(263),
+    /* return_matcher_indices */ MatcherIndicesIndex(278),
     /* const_eval_fn */ ConstEvalFunctionIndex(113),
   },
   {
@@ -8191,9 +8252,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(112),
-    /* parameters */ ParameterIndex(423),
-    /* return_matcher_indices */ MatcherIndicesIndex(263),
+    /* templates */ TemplateIndex(118),
+    /* parameters */ ParameterIndex(425),
+    /* return_matcher_indices */ MatcherIndicesIndex(278),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
   {
@@ -8202,9 +8263,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(110),
-    /* parameters */ ParameterIndex(424),
-    /* return_matcher_indices */ MatcherIndicesIndex(263),
+    /* templates */ TemplateIndex(116),
+    /* parameters */ ParameterIndex(426),
+    /* return_matcher_indices */ MatcherIndicesIndex(278),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
   {
@@ -8213,9 +8274,9 @@
     /* num_parameters */ 0,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(127),
+    /* templates */ TemplateIndex(133),
     /* parameters */ ParameterIndex(/* invalid */),
-    /* return_matcher_indices */ MatcherIndicesIndex(269),
+    /* return_matcher_indices */ MatcherIndicesIndex(284),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -8224,9 +8285,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(127),
-    /* parameters */ ParameterIndex(425),
-    /* return_matcher_indices */ MatcherIndicesIndex(269),
+    /* templates */ TemplateIndex(133),
+    /* parameters */ ParameterIndex(427),
+    /* return_matcher_indices */ MatcherIndicesIndex(284),
     /* const_eval_fn */ ConstEvalFunctionIndex(82),
   },
   {
@@ -8235,9 +8296,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
-    /* parameters */ ParameterIndex(425),
-    /* return_matcher_indices */ MatcherIndicesIndex(269),
+    /* templates */ TemplateIndex(57),
+    /* parameters */ ParameterIndex(427),
+    /* return_matcher_indices */ MatcherIndicesIndex(284),
     /* const_eval_fn */ ConstEvalFunctionIndex(82),
   },
   {
@@ -8246,9 +8307,9 @@
     /* num_parameters */ 8,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(269),
+    /* return_matcher_indices */ MatcherIndicesIndex(284),
     /* const_eval_fn */ ConstEvalFunctionIndex(112),
   },
   {
@@ -8257,9 +8318,9 @@
     /* num_parameters */ 8,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(269),
+    /* return_matcher_indices */ MatcherIndicesIndex(284),
     /* const_eval_fn */ ConstEvalFunctionIndex(112),
   },
   {
@@ -8268,9 +8329,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(227),
-    /* return_matcher_indices */ MatcherIndicesIndex(269),
+    /* return_matcher_indices */ MatcherIndicesIndex(284),
     /* const_eval_fn */ ConstEvalFunctionIndex(113),
   },
   {
@@ -8279,9 +8340,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(227),
-    /* return_matcher_indices */ MatcherIndicesIndex(269),
+    /* return_matcher_indices */ MatcherIndicesIndex(284),
     /* const_eval_fn */ ConstEvalFunctionIndex(113),
   },
   {
@@ -8290,9 +8351,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(112),
-    /* parameters */ ParameterIndex(426),
-    /* return_matcher_indices */ MatcherIndicesIndex(269),
+    /* templates */ TemplateIndex(118),
+    /* parameters */ ParameterIndex(428),
+    /* return_matcher_indices */ MatcherIndicesIndex(284),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
   {
@@ -8301,9 +8362,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(110),
-    /* parameters */ ParameterIndex(427),
-    /* return_matcher_indices */ MatcherIndicesIndex(269),
+    /* templates */ TemplateIndex(116),
+    /* parameters */ ParameterIndex(429),
+    /* return_matcher_indices */ MatcherIndicesIndex(284),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
   {
@@ -8312,9 +8373,9 @@
     /* num_parameters */ 0,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(127),
+    /* templates */ TemplateIndex(133),
     /* parameters */ ParameterIndex(/* invalid */),
-    /* return_matcher_indices */ MatcherIndicesIndex(275),
+    /* return_matcher_indices */ MatcherIndicesIndex(290),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -8323,9 +8384,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(127),
-    /* parameters */ ParameterIndex(428),
-    /* return_matcher_indices */ MatcherIndicesIndex(275),
+    /* templates */ TemplateIndex(133),
+    /* parameters */ ParameterIndex(430),
+    /* return_matcher_indices */ MatcherIndicesIndex(290),
     /* const_eval_fn */ ConstEvalFunctionIndex(82),
   },
   {
@@ -8334,9 +8395,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
-    /* parameters */ ParameterIndex(428),
-    /* return_matcher_indices */ MatcherIndicesIndex(275),
+    /* templates */ TemplateIndex(57),
+    /* parameters */ ParameterIndex(430),
+    /* return_matcher_indices */ MatcherIndicesIndex(290),
     /* const_eval_fn */ ConstEvalFunctionIndex(82),
   },
   {
@@ -8345,9 +8406,9 @@
     /* num_parameters */ 12,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(275),
+    /* return_matcher_indices */ MatcherIndicesIndex(290),
     /* const_eval_fn */ ConstEvalFunctionIndex(112),
   },
   {
@@ -8356,9 +8417,9 @@
     /* num_parameters */ 12,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(275),
+    /* return_matcher_indices */ MatcherIndicesIndex(290),
     /* const_eval_fn */ ConstEvalFunctionIndex(112),
   },
   {
@@ -8367,9 +8428,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(231),
-    /* return_matcher_indices */ MatcherIndicesIndex(275),
+    /* return_matcher_indices */ MatcherIndicesIndex(290),
     /* const_eval_fn */ ConstEvalFunctionIndex(113),
   },
   {
@@ -8378,9 +8439,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(231),
-    /* return_matcher_indices */ MatcherIndicesIndex(275),
+    /* return_matcher_indices */ MatcherIndicesIndex(290),
     /* const_eval_fn */ ConstEvalFunctionIndex(113),
   },
   {
@@ -8389,9 +8450,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(112),
-    /* parameters */ ParameterIndex(429),
-    /* return_matcher_indices */ MatcherIndicesIndex(275),
+    /* templates */ TemplateIndex(118),
+    /* parameters */ ParameterIndex(431),
+    /* return_matcher_indices */ MatcherIndicesIndex(290),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
   {
@@ -8400,9 +8461,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(110),
-    /* parameters */ ParameterIndex(430),
-    /* return_matcher_indices */ MatcherIndicesIndex(275),
+    /* templates */ TemplateIndex(116),
+    /* parameters */ ParameterIndex(432),
+    /* return_matcher_indices */ MatcherIndicesIndex(290),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
   {
@@ -8411,9 +8472,9 @@
     /* num_parameters */ 0,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(127),
+    /* templates */ TemplateIndex(133),
     /* parameters */ ParameterIndex(/* invalid */),
-    /* return_matcher_indices */ MatcherIndicesIndex(281),
+    /* return_matcher_indices */ MatcherIndicesIndex(296),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -8422,9 +8483,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(127),
-    /* parameters */ ParameterIndex(431),
-    /* return_matcher_indices */ MatcherIndicesIndex(281),
+    /* templates */ TemplateIndex(133),
+    /* parameters */ ParameterIndex(433),
+    /* return_matcher_indices */ MatcherIndicesIndex(296),
     /* const_eval_fn */ ConstEvalFunctionIndex(82),
   },
   {
@@ -8433,9 +8494,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
-    /* parameters */ ParameterIndex(431),
-    /* return_matcher_indices */ MatcherIndicesIndex(281),
+    /* templates */ TemplateIndex(57),
+    /* parameters */ ParameterIndex(433),
+    /* return_matcher_indices */ MatcherIndicesIndex(296),
     /* const_eval_fn */ ConstEvalFunctionIndex(82),
   },
   {
@@ -8444,9 +8505,9 @@
     /* num_parameters */ 16,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(281),
+    /* return_matcher_indices */ MatcherIndicesIndex(296),
     /* const_eval_fn */ ConstEvalFunctionIndex(112),
   },
   {
@@ -8455,9 +8516,9 @@
     /* num_parameters */ 16,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(281),
+    /* return_matcher_indices */ MatcherIndicesIndex(296),
     /* const_eval_fn */ ConstEvalFunctionIndex(112),
   },
   {
@@ -8466,9 +8527,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(235),
-    /* return_matcher_indices */ MatcherIndicesIndex(281),
+    /* return_matcher_indices */ MatcherIndicesIndex(296),
     /* const_eval_fn */ ConstEvalFunctionIndex(113),
   },
   {
@@ -8477,9 +8538,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(235),
-    /* return_matcher_indices */ MatcherIndicesIndex(281),
+    /* return_matcher_indices */ MatcherIndicesIndex(296),
     /* const_eval_fn */ ConstEvalFunctionIndex(113),
   },
   {
@@ -8488,9 +8549,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(112),
-    /* parameters */ ParameterIndex(432),
-    /* return_matcher_indices */ MatcherIndicesIndex(281),
+    /* templates */ TemplateIndex(118),
+    /* parameters */ ParameterIndex(434),
+    /* return_matcher_indices */ MatcherIndicesIndex(296),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
   {
@@ -8499,9 +8560,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 1,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(110),
-    /* parameters */ ParameterIndex(433),
-    /* return_matcher_indices */ MatcherIndicesIndex(281),
+    /* templates */ TemplateIndex(116),
+    /* parameters */ ParameterIndex(435),
+    /* return_matcher_indices */ MatcherIndicesIndex(296),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
   {
@@ -8512,7 +8573,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(104),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8523,7 +8584,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(104),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8532,9 +8593,9 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(38),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8543,9 +8604,9 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(38),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8556,7 +8617,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(109),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8567,7 +8628,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(109),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8578,7 +8639,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(183),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8587,9 +8648,9 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(114),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8600,7 +8661,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(44),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8611,7 +8672,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(44),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8620,9 +8681,9 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(19),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8631,9 +8692,9 @@
     /* num_parameters */ 7,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(19),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8644,7 +8705,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(50),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8655,7 +8716,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(50),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8666,7 +8727,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(119),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8675,9 +8736,9 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(56),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8688,7 +8749,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(89),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8699,7 +8760,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(89),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8708,9 +8769,9 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(32),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8719,9 +8780,9 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(32),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8732,7 +8793,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(171),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8741,9 +8802,9 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(94),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8752,7 +8813,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(29),
     /* parameters */ ParameterIndex(27),
     /* return_matcher_indices */ MatcherIndicesIndex(40),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -8763,7 +8824,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(29),
     /* parameters */ ParameterIndex(80),
     /* return_matcher_indices */ MatcherIndicesIndex(40),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -8796,8 +8857,8 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(104),
-    /* parameters */ ParameterIndex(399),
+    /* templates */ TemplateIndex(110),
+    /* parameters */ ParameterIndex(401),
     /* return_matcher_indices */ MatcherIndicesIndex(40),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -8807,8 +8868,8 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(106),
-    /* parameters */ ParameterIndex(399),
+    /* templates */ TemplateIndex(112),
+    /* parameters */ ParameterIndex(401),
     /* return_matcher_indices */ MatcherIndicesIndex(40),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -8820,7 +8881,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(89),
-    /* return_matcher_indices */ MatcherIndicesIndex(127),
+    /* return_matcher_indices */ MatcherIndicesIndex(142),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8831,7 +8892,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(89),
-    /* return_matcher_indices */ MatcherIndicesIndex(127),
+    /* return_matcher_indices */ MatcherIndicesIndex(142),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8840,9 +8901,9 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(32),
-    /* return_matcher_indices */ MatcherIndicesIndex(127),
+    /* return_matcher_indices */ MatcherIndicesIndex(142),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8851,9 +8912,9 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(32),
-    /* return_matcher_indices */ MatcherIndicesIndex(127),
+    /* return_matcher_indices */ MatcherIndicesIndex(142),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8864,7 +8925,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(171),
-    /* return_matcher_indices */ MatcherIndicesIndex(127),
+    /* return_matcher_indices */ MatcherIndicesIndex(142),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8873,9 +8934,9 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(94),
-    /* return_matcher_indices */ MatcherIndicesIndex(127),
+    /* return_matcher_indices */ MatcherIndicesIndex(142),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8886,7 +8947,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(89),
-    /* return_matcher_indices */ MatcherIndicesIndex(127),
+    /* return_matcher_indices */ MatcherIndicesIndex(142),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8897,7 +8958,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(89),
-    /* return_matcher_indices */ MatcherIndicesIndex(127),
+    /* return_matcher_indices */ MatcherIndicesIndex(142),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8906,9 +8967,9 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(32),
-    /* return_matcher_indices */ MatcherIndicesIndex(127),
+    /* return_matcher_indices */ MatcherIndicesIndex(142),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8917,9 +8978,9 @@
     /* num_parameters */ 6,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(32),
-    /* return_matcher_indices */ MatcherIndicesIndex(127),
+    /* return_matcher_indices */ MatcherIndicesIndex(142),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8930,7 +8991,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(171),
-    /* return_matcher_indices */ MatcherIndicesIndex(127),
+    /* return_matcher_indices */ MatcherIndicesIndex(142),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8939,9 +9000,9 @@
     /* num_parameters */ 5,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(9),
+    /* templates */ TemplateIndex(19),
     /* parameters */ ParameterIndex(94),
-    /* return_matcher_indices */ MatcherIndicesIndex(127),
+    /* return_matcher_indices */ MatcherIndicesIndex(142),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -8950,7 +9011,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(79),
+    /* templates */ TemplateIndex(85),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(86),
@@ -8961,9 +9022,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(79),
+    /* templates */ TemplateIndex(85),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(107),
+    /* return_matcher_indices */ MatcherIndicesIndex(122),
     /* const_eval_fn */ ConstEvalFunctionIndex(86),
   },
   {
@@ -8972,9 +9033,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(79),
-    /* parameters */ ParameterIndex(360),
-    /* return_matcher_indices */ MatcherIndicesIndex(107),
+    /* templates */ TemplateIndex(85),
+    /* parameters */ ParameterIndex(362),
+    /* return_matcher_indices */ MatcherIndicesIndex(122),
     /* const_eval_fn */ ConstEvalFunctionIndex(86),
   },
   {
@@ -8983,9 +9044,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(79),
-    /* parameters */ ParameterIndex(361),
-    /* return_matcher_indices */ MatcherIndicesIndex(107),
+    /* templates */ TemplateIndex(85),
+    /* parameters */ ParameterIndex(363),
+    /* return_matcher_indices */ MatcherIndicesIndex(122),
     /* const_eval_fn */ ConstEvalFunctionIndex(86),
   },
   {
@@ -8994,9 +9055,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(63),
-    /* parameters */ ParameterIndex(364),
-    /* return_matcher_indices */ MatcherIndicesIndex(85),
+    /* templates */ TemplateIndex(69),
+    /* parameters */ ParameterIndex(366),
+    /* return_matcher_indices */ MatcherIndicesIndex(100),
     /* const_eval_fn */ ConstEvalFunctionIndex(86),
   },
   {
@@ -9005,7 +9066,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(79),
+    /* templates */ TemplateIndex(85),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(87),
@@ -9016,9 +9077,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(79),
+    /* templates */ TemplateIndex(85),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(107),
+    /* return_matcher_indices */ MatcherIndicesIndex(122),
     /* const_eval_fn */ ConstEvalFunctionIndex(87),
   },
   {
@@ -9027,9 +9088,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(79),
-    /* parameters */ ParameterIndex(360),
-    /* return_matcher_indices */ MatcherIndicesIndex(107),
+    /* templates */ TemplateIndex(85),
+    /* parameters */ ParameterIndex(362),
+    /* return_matcher_indices */ MatcherIndicesIndex(122),
     /* const_eval_fn */ ConstEvalFunctionIndex(87),
   },
   {
@@ -9038,9 +9099,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(79),
-    /* parameters */ ParameterIndex(361),
-    /* return_matcher_indices */ MatcherIndicesIndex(107),
+    /* templates */ TemplateIndex(85),
+    /* parameters */ ParameterIndex(363),
+    /* return_matcher_indices */ MatcherIndicesIndex(122),
     /* const_eval_fn */ ConstEvalFunctionIndex(87),
   },
   {
@@ -9049,9 +9110,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(63),
-    /* parameters */ ParameterIndex(364),
-    /* return_matcher_indices */ MatcherIndicesIndex(85),
+    /* templates */ TemplateIndex(69),
+    /* parameters */ ParameterIndex(366),
+    /* return_matcher_indices */ MatcherIndicesIndex(100),
     /* const_eval_fn */ ConstEvalFunctionIndex(87),
   },
   {
@@ -9060,7 +9121,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(79),
+    /* templates */ TemplateIndex(85),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(92),
@@ -9071,9 +9132,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(79),
+    /* templates */ TemplateIndex(85),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(107),
+    /* return_matcher_indices */ MatcherIndicesIndex(122),
     /* const_eval_fn */ ConstEvalFunctionIndex(92),
   },
   {
@@ -9082,9 +9143,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(79),
-    /* parameters */ ParameterIndex(360),
-    /* return_matcher_indices */ MatcherIndicesIndex(107),
+    /* templates */ TemplateIndex(85),
+    /* parameters */ ParameterIndex(362),
+    /* return_matcher_indices */ MatcherIndicesIndex(122),
     /* const_eval_fn */ ConstEvalFunctionIndex(92),
   },
   {
@@ -9093,9 +9154,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(79),
-    /* parameters */ ParameterIndex(361),
-    /* return_matcher_indices */ MatcherIndicesIndex(107),
+    /* templates */ TemplateIndex(85),
+    /* parameters */ ParameterIndex(363),
+    /* return_matcher_indices */ MatcherIndicesIndex(122),
     /* const_eval_fn */ ConstEvalFunctionIndex(92),
   },
   {
@@ -9104,7 +9165,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(79),
+    /* templates */ TemplateIndex(85),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(93),
@@ -9115,9 +9176,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(79),
+    /* templates */ TemplateIndex(85),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(107),
+    /* return_matcher_indices */ MatcherIndicesIndex(122),
     /* const_eval_fn */ ConstEvalFunctionIndex(93),
   },
   {
@@ -9126,9 +9187,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(79),
-    /* parameters */ ParameterIndex(360),
-    /* return_matcher_indices */ MatcherIndicesIndex(107),
+    /* templates */ TemplateIndex(85),
+    /* parameters */ ParameterIndex(362),
+    /* return_matcher_indices */ MatcherIndicesIndex(122),
     /* const_eval_fn */ ConstEvalFunctionIndex(93),
   },
   {
@@ -9137,9 +9198,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(79),
-    /* parameters */ ParameterIndex(361),
-    /* return_matcher_indices */ MatcherIndicesIndex(107),
+    /* templates */ TemplateIndex(85),
+    /* parameters */ ParameterIndex(363),
+    /* return_matcher_indices */ MatcherIndicesIndex(122),
     /* const_eval_fn */ ConstEvalFunctionIndex(93),
   },
   {
@@ -9159,9 +9220,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(56),
+    /* templates */ TemplateIndex(62),
     /* parameters */ ParameterIndex(253),
-    /* return_matcher_indices */ MatcherIndicesIndex(104),
+    /* return_matcher_indices */ MatcherIndicesIndex(119),
     /* const_eval_fn */ ConstEvalFunctionIndex(95),
   },
   {
@@ -9170,7 +9231,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(108),
+    /* templates */ TemplateIndex(114),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(95),
@@ -9181,9 +9242,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(108),
+    /* templates */ TemplateIndex(114),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(107),
+    /* return_matcher_indices */ MatcherIndicesIndex(122),
     /* const_eval_fn */ ConstEvalFunctionIndex(95),
   },
   {
@@ -9203,9 +9264,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(56),
+    /* templates */ TemplateIndex(62),
     /* parameters */ ParameterIndex(253),
-    /* return_matcher_indices */ MatcherIndicesIndex(104),
+    /* return_matcher_indices */ MatcherIndicesIndex(119),
     /* const_eval_fn */ ConstEvalFunctionIndex(96),
   },
   {
@@ -9214,7 +9275,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(108),
+    /* templates */ TemplateIndex(114),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(96),
@@ -9225,9 +9286,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(108),
+    /* templates */ TemplateIndex(114),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(107),
+    /* return_matcher_indices */ MatcherIndicesIndex(122),
     /* const_eval_fn */ ConstEvalFunctionIndex(96),
   },
   {
@@ -9236,7 +9297,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(43),
@@ -9247,9 +9308,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(244),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(43),
   },
   {
@@ -9258,9 +9319,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(245),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(43),
   },
   {
@@ -9269,7 +9330,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(91),
+    /* templates */ TemplateIndex(97),
     /* parameters */ ParameterIndex(248),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(63),
@@ -9280,9 +9341,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(91),
+    /* templates */ TemplateIndex(97),
     /* parameters */ ParameterIndex(240),
-    /* return_matcher_indices */ MatcherIndicesIndex(107),
+    /* return_matcher_indices */ MatcherIndicesIndex(122),
     /* const_eval_fn */ ConstEvalFunctionIndex(63),
   },
   {
@@ -9291,9 +9352,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(90),
+    /* templates */ TemplateIndex(96),
     /* parameters */ ParameterIndex(251),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(64),
   },
   {
@@ -9304,7 +9365,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(/* invalid */),
-    /* return_matcher_indices */ MatcherIndicesIndex(180),
+    /* return_matcher_indices */ MatcherIndicesIndex(195),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -9314,8 +9375,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(404),
-    /* return_matcher_indices */ MatcherIndicesIndex(180),
+    /* parameters */ ParameterIndex(406),
+    /* return_matcher_indices */ MatcherIndicesIndex(195),
     /* const_eval_fn */ ConstEvalFunctionIndex(82),
   },
   {
@@ -9324,9 +9385,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(121),
+    /* templates */ TemplateIndex(127),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(180),
+    /* return_matcher_indices */ MatcherIndicesIndex(195),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
   {
@@ -9357,7 +9418,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(122),
+    /* templates */ TemplateIndex(128),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(40),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
@@ -9370,7 +9431,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(/* invalid */),
-    /* return_matcher_indices */ MatcherIndicesIndex(127),
+    /* return_matcher_indices */ MatcherIndicesIndex(142),
     /* const_eval_fn */ ConstEvalFunctionIndex(107),
   },
   {
@@ -9380,8 +9441,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(389),
-    /* return_matcher_indices */ MatcherIndicesIndex(127),
+    /* parameters */ ParameterIndex(391),
+    /* return_matcher_indices */ MatcherIndicesIndex(142),
     /* const_eval_fn */ ConstEvalFunctionIndex(82),
   },
   {
@@ -9390,9 +9451,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(123),
+    /* templates */ TemplateIndex(129),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(127),
+    /* return_matcher_indices */ MatcherIndicesIndex(142),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
   },
   {
@@ -9413,7 +9474,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(380),
+    /* parameters */ ParameterIndex(382),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(82),
   },
@@ -9423,7 +9484,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(124),
+    /* templates */ TemplateIndex(130),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(6),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
@@ -9456,7 +9517,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(125),
+    /* templates */ TemplateIndex(131),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(52),
     /* const_eval_fn */ ConstEvalFunctionIndex(108),
@@ -9467,7 +9528,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(79),
+    /* templates */ TemplateIndex(85),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(0),
@@ -9478,9 +9539,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(78),
+    /* templates */ TemplateIndex(84),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(0),
   },
   {
@@ -9489,7 +9550,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(1),
@@ -9500,9 +9561,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(1),
   },
   {
@@ -9511,7 +9572,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(2),
@@ -9522,9 +9583,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(2),
   },
   {
@@ -9544,7 +9605,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(56),
+    /* templates */ TemplateIndex(62),
     /* parameters */ ParameterIndex(253),
     /* return_matcher_indices */ MatcherIndicesIndex(52),
     /* const_eval_fn */ ConstEvalFunctionIndex(3),
@@ -9566,7 +9627,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(56),
+    /* templates */ TemplateIndex(62),
     /* parameters */ ParameterIndex(253),
     /* return_matcher_indices */ MatcherIndicesIndex(52),
     /* const_eval_fn */ ConstEvalFunctionIndex(4),
@@ -9577,8 +9638,8 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(83),
-    /* parameters */ ParameterIndex(379),
+    /* templates */ TemplateIndex(89),
+    /* parameters */ ParameterIndex(381),
     /* return_matcher_indices */ MatcherIndicesIndex(40),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -9588,8 +9649,8 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(85),
-    /* parameters */ ParameterIndex(379),
+    /* templates */ TemplateIndex(91),
+    /* parameters */ ParameterIndex(381),
     /* return_matcher_indices */ MatcherIndicesIndex(40),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -9599,7 +9660,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(5),
@@ -9610,9 +9671,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(5),
   },
   {
@@ -9621,7 +9682,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(6),
@@ -9632,9 +9693,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(6),
   },
   {
@@ -9643,7 +9704,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(7),
@@ -9654,9 +9715,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(7),
   },
   {
@@ -9665,7 +9726,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(8),
@@ -9676,9 +9737,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(63),
+    /* templates */ TemplateIndex(69),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(107),
+    /* return_matcher_indices */ MatcherIndicesIndex(122),
     /* const_eval_fn */ ConstEvalFunctionIndex(8),
   },
   {
@@ -9687,7 +9748,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(9),
@@ -9698,9 +9759,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(9),
   },
   {
@@ -9709,7 +9770,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(11),
@@ -9720,9 +9781,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(11),
   },
   {
@@ -9731,7 +9792,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(79),
+    /* templates */ TemplateIndex(85),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(12),
@@ -9742,9 +9803,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(79),
+    /* templates */ TemplateIndex(85),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(107),
+    /* return_matcher_indices */ MatcherIndicesIndex(122),
     /* const_eval_fn */ ConstEvalFunctionIndex(12),
   },
   {
@@ -9753,7 +9814,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(13),
@@ -9764,9 +9825,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(13),
   },
   {
@@ -9775,7 +9836,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(14),
@@ -9786,9 +9847,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(14),
   },
   {
@@ -9797,7 +9858,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(81),
+    /* templates */ TemplateIndex(87),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(15),
@@ -9808,9 +9869,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(80),
+    /* templates */ TemplateIndex(86),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(15),
   },
   {
@@ -9819,7 +9880,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(81),
+    /* templates */ TemplateIndex(87),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(16),
@@ -9830,9 +9891,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(80),
+    /* templates */ TemplateIndex(86),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(16),
   },
   {
@@ -9841,7 +9902,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(81),
+    /* templates */ TemplateIndex(87),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(17),
@@ -9852,9 +9913,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(80),
+    /* templates */ TemplateIndex(86),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(17),
   },
   {
@@ -9863,7 +9924,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(19),
@@ -9874,9 +9935,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(19),
   },
   {
@@ -9885,7 +9946,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(21),
@@ -9896,7 +9957,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(159),
     /* return_matcher_indices */ MatcherIndicesIndex(10),
     /* const_eval_fn */ ConstEvalFunctionIndex(21),
@@ -9908,8 +9969,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(389),
-    /* return_matcher_indices */ MatcherIndicesIndex(127),
+    /* parameters */ ParameterIndex(391),
+    /* return_matcher_indices */ MatcherIndicesIndex(142),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -9918,9 +9979,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(56),
-    /* parameters */ ParameterIndex(390),
-    /* return_matcher_indices */ MatcherIndicesIndex(125),
+    /* templates */ TemplateIndex(62),
+    /* parameters */ ParameterIndex(392),
+    /* return_matcher_indices */ MatcherIndicesIndex(140),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -9929,7 +9990,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(25),
@@ -9940,9 +10001,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(25),
   },
   {
@@ -9951,7 +10012,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(26),
@@ -9962,9 +10023,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(26),
   },
   {
@@ -9973,7 +10034,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(81),
+    /* templates */ TemplateIndex(87),
     /* parameters */ ParameterIndex(16),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(27),
@@ -9984,9 +10045,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(80),
+    /* templates */ TemplateIndex(86),
     /* parameters */ ParameterIndex(160),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(27),
   },
   {
@@ -9995,7 +10056,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(81),
+    /* templates */ TemplateIndex(87),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(29),
@@ -10006,9 +10067,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(80),
+    /* templates */ TemplateIndex(86),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(29),
   },
   {
@@ -10017,7 +10078,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(81),
+    /* templates */ TemplateIndex(87),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(30),
@@ -10028,9 +10089,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(80),
+    /* templates */ TemplateIndex(86),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(30),
   },
   {
@@ -10039,7 +10100,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(31),
@@ -10050,9 +10111,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(31),
   },
   {
@@ -10061,7 +10122,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(32),
@@ -10072,9 +10133,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(244),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(32),
   },
   {
@@ -10083,7 +10144,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(33),
@@ -10094,9 +10155,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(33),
   },
   {
@@ -10105,9 +10166,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(171),
+    /* return_matcher_indices */ MatcherIndicesIndex(186),
     /* const_eval_fn */ ConstEvalFunctionIndex(34),
   },
   {
@@ -10116,9 +10177,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(128),
+    /* return_matcher_indices */ MatcherIndicesIndex(143),
     /* const_eval_fn */ ConstEvalFunctionIndex(34),
   },
   {
@@ -10127,7 +10188,7 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(81),
+    /* templates */ TemplateIndex(87),
     /* parameters */ ParameterIndex(15),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(35),
@@ -10138,9 +10199,9 @@
     /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(80),
+    /* templates */ TemplateIndex(86),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(35),
   },
   {
@@ -10149,7 +10210,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(36),
@@ -10160,9 +10221,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(36),
   },
   {
@@ -10171,7 +10232,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(59),
+    /* templates */ TemplateIndex(65),
     /* parameters */ ParameterIndex(318),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(37),
@@ -10182,9 +10243,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(320),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(37),
   },
   {
@@ -10193,7 +10254,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(38),
@@ -10204,7 +10265,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(159),
     /* return_matcher_indices */ MatcherIndicesIndex(10),
     /* const_eval_fn */ ConstEvalFunctionIndex(38),
@@ -10215,7 +10276,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(39),
@@ -10226,9 +10287,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(39),
   },
   {
@@ -10237,7 +10298,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(40),
@@ -10248,9 +10309,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(40),
   },
   {
@@ -10259,7 +10320,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(79),
+    /* templates */ TemplateIndex(85),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(41),
@@ -10270,9 +10331,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(78),
+    /* templates */ TemplateIndex(84),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(41),
   },
   {
@@ -10281,7 +10342,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(79),
+    /* templates */ TemplateIndex(85),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(42),
@@ -10292,9 +10353,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(78),
+    /* templates */ TemplateIndex(84),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(42),
   },
   {
@@ -10303,9 +10364,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
-    /* return_matcher_indices */ MatcherIndicesIndex(173),
+    /* return_matcher_indices */ MatcherIndicesIndex(188),
     /* const_eval_fn */ ConstEvalFunctionIndex(44),
   },
   {
@@ -10314,9 +10375,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(134),
+    /* return_matcher_indices */ MatcherIndicesIndex(149),
     /* const_eval_fn */ ConstEvalFunctionIndex(44),
   },
   {
@@ -10325,7 +10386,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(55),
@@ -10336,9 +10397,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(55),
   },
   {
@@ -10348,8 +10409,8 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(389),
-    /* return_matcher_indices */ MatcherIndicesIndex(127),
+    /* parameters */ ParameterIndex(391),
+    /* return_matcher_indices */ MatcherIndicesIndex(142),
     /* const_eval_fn */ ConstEvalFunctionIndex(56),
   },
   {
@@ -10358,9 +10419,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(56),
-    /* parameters */ ParameterIndex(390),
-    /* return_matcher_indices */ MatcherIndicesIndex(125),
+    /* templates */ TemplateIndex(62),
+    /* parameters */ ParameterIndex(392),
+    /* return_matcher_indices */ MatcherIndicesIndex(140),
     /* const_eval_fn */ ConstEvalFunctionIndex(56),
   },
   {
@@ -10369,7 +10430,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(57),
@@ -10380,9 +10441,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(57),
   },
   {
@@ -10391,7 +10452,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(81),
+    /* templates */ TemplateIndex(87),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(60),
@@ -10402,9 +10463,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(80),
+    /* templates */ TemplateIndex(86),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(60),
   },
   {
@@ -10413,7 +10474,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(61),
@@ -10424,9 +10485,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(61),
   },
   {
@@ -10435,7 +10496,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(62),
@@ -10446,9 +10507,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(63),
+    /* templates */ TemplateIndex(69),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(107),
+    /* return_matcher_indices */ MatcherIndicesIndex(122),
     /* const_eval_fn */ ConstEvalFunctionIndex(62),
   },
   {
@@ -10457,7 +10518,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(93),
+    /* templates */ TemplateIndex(99),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(65),
@@ -10468,9 +10529,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(92),
+    /* templates */ TemplateIndex(98),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(65),
   },
   {
@@ -10479,7 +10540,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(66),
@@ -10490,9 +10551,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(66),
   },
   {
@@ -10501,7 +10562,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(67),
@@ -10512,9 +10573,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(67),
   },
   {
@@ -10523,7 +10584,7 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(68),
@@ -10534,9 +10595,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(244),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(68),
   },
   {
@@ -10545,7 +10606,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(69),
@@ -10556,9 +10617,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(69),
   },
   {
@@ -10567,7 +10628,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(70),
@@ -10578,9 +10639,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(70),
   },
   {
@@ -10589,7 +10650,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(71),
@@ -10600,9 +10661,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(71),
   },
   {
@@ -10611,7 +10672,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(72),
@@ -10622,9 +10683,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(72),
   },
   {
@@ -10633,7 +10694,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(74),
@@ -10644,9 +10705,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(74),
   },
   {
@@ -10655,7 +10716,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(19),
+    /* templates */ TemplateIndex(29),
     /* parameters */ ParameterIndex(297),
     /* return_matcher_indices */ MatcherIndicesIndex(40),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -10679,7 +10740,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(44),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -10690,7 +10751,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(258),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -10699,7 +10760,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(95),
+    /* templates */ TemplateIndex(101),
     /* parameters */ ParameterIndex(344),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -10710,9 +10771,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(94),
+    /* templates */ TemplateIndex(100),
     /* parameters */ ParameterIndex(346),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -10721,7 +10782,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(95),
+    /* templates */ TemplateIndex(101),
     /* parameters */ ParameterIndex(344),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -10732,9 +10793,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(94),
+    /* templates */ TemplateIndex(100),
     /* parameters */ ParameterIndex(346),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -10743,7 +10804,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(95),
+    /* templates */ TemplateIndex(101),
     /* parameters */ ParameterIndex(348),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -10754,9 +10815,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(94),
+    /* templates */ TemplateIndex(100),
     /* parameters */ ParameterIndex(350),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -10765,7 +10826,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(95),
+    /* templates */ TemplateIndex(101),
     /* parameters */ ParameterIndex(352),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -10776,9 +10837,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(94),
+    /* templates */ TemplateIndex(100),
     /* parameters */ ParameterIndex(354),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -10787,7 +10848,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(81),
+    /* templates */ TemplateIndex(87),
     /* parameters */ ParameterIndex(344),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -10798,9 +10859,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(80),
+    /* templates */ TemplateIndex(86),
     /* parameters */ ParameterIndex(346),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -10809,7 +10870,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(95),
+    /* templates */ TemplateIndex(101),
     /* parameters */ ParameterIndex(356),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -10820,9 +10881,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(94),
+    /* templates */ TemplateIndex(100),
     /* parameters */ ParameterIndex(358),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -10831,7 +10892,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(95),
+    /* templates */ TemplateIndex(101),
     /* parameters */ ParameterIndex(356),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -10842,9 +10903,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(94),
+    /* templates */ TemplateIndex(100),
     /* parameters */ ParameterIndex(358),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -10908,9 +10969,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(56),
+    /* templates */ TemplateIndex(62),
     /* parameters */ ParameterIndex(253),
-    /* return_matcher_indices */ MatcherIndicesIndex(104),
+    /* return_matcher_indices */ MatcherIndicesIndex(119),
     /* const_eval_fn */ ConstEvalFunctionIndex(83),
   },
   {
@@ -10919,7 +10980,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(108),
+    /* templates */ TemplateIndex(114),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(84),
@@ -10930,9 +10991,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(108),
+    /* templates */ TemplateIndex(114),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(107),
+    /* return_matcher_indices */ MatcherIndicesIndex(122),
     /* const_eval_fn */ ConstEvalFunctionIndex(84),
   },
   {
@@ -10941,7 +11002,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(93),
+    /* templates */ TemplateIndex(99),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(85),
@@ -10952,9 +11013,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(93),
+    /* templates */ TemplateIndex(99),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(107),
+    /* return_matcher_indices */ MatcherIndicesIndex(122),
     /* const_eval_fn */ ConstEvalFunctionIndex(85),
   },
   {
@@ -10963,7 +11024,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(108),
+    /* templates */ TemplateIndex(114),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(94),
@@ -10974,9 +11035,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(108),
+    /* templates */ TemplateIndex(114),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(107),
+    /* return_matcher_indices */ MatcherIndicesIndex(122),
     /* const_eval_fn */ ConstEvalFunctionIndex(94),
   },
   {
@@ -10985,7 +11046,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(91),
+    /* templates */ TemplateIndex(97),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(52),
     /* const_eval_fn */ ConstEvalFunctionIndex(99),
@@ -10996,9 +11057,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(91),
+    /* templates */ TemplateIndex(97),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(164),
+    /* return_matcher_indices */ MatcherIndicesIndex(179),
     /* const_eval_fn */ ConstEvalFunctionIndex(99),
   },
   {
@@ -11007,7 +11068,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(91),
+    /* templates */ TemplateIndex(97),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(52),
     /* const_eval_fn */ ConstEvalFunctionIndex(100),
@@ -11018,9 +11079,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(91),
+    /* templates */ TemplateIndex(97),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(164),
+    /* return_matcher_indices */ MatcherIndicesIndex(179),
     /* const_eval_fn */ ConstEvalFunctionIndex(100),
   },
   {
@@ -11029,7 +11090,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(79),
+    /* templates */ TemplateIndex(85),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(52),
     /* const_eval_fn */ ConstEvalFunctionIndex(101),
@@ -11040,9 +11101,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(79),
+    /* templates */ TemplateIndex(85),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(164),
+    /* return_matcher_indices */ MatcherIndicesIndex(179),
     /* const_eval_fn */ ConstEvalFunctionIndex(101),
   },
   {
@@ -11051,7 +11112,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(79),
+    /* templates */ TemplateIndex(85),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(52),
     /* const_eval_fn */ ConstEvalFunctionIndex(102),
@@ -11062,9 +11123,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(79),
+    /* templates */ TemplateIndex(85),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(164),
+    /* return_matcher_indices */ MatcherIndicesIndex(179),
     /* const_eval_fn */ ConstEvalFunctionIndex(102),
   },
   {
@@ -11073,7 +11134,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(79),
+    /* templates */ TemplateIndex(85),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(52),
     /* const_eval_fn */ ConstEvalFunctionIndex(103),
@@ -11084,9 +11145,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(79),
+    /* templates */ TemplateIndex(85),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(164),
+    /* return_matcher_indices */ MatcherIndicesIndex(179),
     /* const_eval_fn */ ConstEvalFunctionIndex(103),
   },
   {
@@ -11095,7 +11156,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(79),
+    /* templates */ TemplateIndex(85),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(52),
     /* const_eval_fn */ ConstEvalFunctionIndex(104),
@@ -11106,9 +11167,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(79),
+    /* templates */ TemplateIndex(85),
     /* parameters */ ParameterIndex(239),
-    /* return_matcher_indices */ MatcherIndicesIndex(164),
+    /* return_matcher_indices */ MatcherIndicesIndex(179),
     /* const_eval_fn */ ConstEvalFunctionIndex(104),
   },
   {
@@ -11117,7 +11178,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(108),
+    /* templates */ TemplateIndex(114),
     /* parameters */ ParameterIndex(16),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(105),
@@ -11128,9 +11189,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(108),
-    /* parameters */ ParameterIndex(362),
-    /* return_matcher_indices */ MatcherIndicesIndex(107),
+    /* templates */ TemplateIndex(114),
+    /* parameters */ ParameterIndex(364),
+    /* return_matcher_indices */ MatcherIndicesIndex(122),
     /* const_eval_fn */ ConstEvalFunctionIndex(105),
   },
   {
@@ -11139,7 +11200,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(108),
+    /* templates */ TemplateIndex(114),
     /* parameters */ ParameterIndex(16),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(106),
@@ -11150,9 +11211,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(108),
-    /* parameters */ ParameterIndex(362),
-    /* return_matcher_indices */ MatcherIndicesIndex(107),
+    /* templates */ TemplateIndex(114),
+    /* parameters */ ParameterIndex(364),
+    /* return_matcher_indices */ MatcherIndicesIndex(122),
     /* const_eval_fn */ ConstEvalFunctionIndex(106),
   },
   {
@@ -11161,7 +11222,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(51),
+    /* templates */ TemplateIndex(57),
     /* parameters */ ParameterIndex(231),
     /* return_matcher_indices */ MatcherIndicesIndex(12),
     /* const_eval_fn */ ConstEvalFunctionIndex(18),
@@ -11172,8 +11233,8 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
-    /* parameters */ ParameterIndex(388),
+    /* templates */ TemplateIndex(64),
+    /* parameters */ ParameterIndex(390),
     /* return_matcher_indices */ MatcherIndicesIndex(10),
     /* const_eval_fn */ ConstEvalFunctionIndex(20),
   },
@@ -11183,7 +11244,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(78),
+    /* templates */ TemplateIndex(84),
     /* parameters */ ParameterIndex(159),
     /* return_matcher_indices */ MatcherIndicesIndex(10),
     /* const_eval_fn */ ConstEvalFunctionIndex(22),
@@ -11196,7 +11257,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(17),
-    /* return_matcher_indices */ MatcherIndicesIndex(180),
+    /* return_matcher_indices */ MatcherIndicesIndex(195),
     /* const_eval_fn */ ConstEvalFunctionIndex(23),
   },
   {
@@ -11216,9 +11277,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(244),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(28),
   },
   {
@@ -11227,9 +11288,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(45),
   },
   {
@@ -11239,7 +11300,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(391),
+    /* parameters */ ParameterIndex(393),
     /* return_matcher_indices */ MatcherIndicesIndex(40),
     /* const_eval_fn */ ConstEvalFunctionIndex(46),
   },
@@ -11250,7 +11311,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(391),
+    /* parameters */ ParameterIndex(393),
     /* return_matcher_indices */ MatcherIndicesIndex(40),
     /* const_eval_fn */ ConstEvalFunctionIndex(47),
   },
@@ -11261,7 +11322,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(391),
+    /* parameters */ ParameterIndex(393),
     /* return_matcher_indices */ MatcherIndicesIndex(40),
     /* const_eval_fn */ ConstEvalFunctionIndex(48),
   },
@@ -11272,7 +11333,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(392),
+    /* parameters */ ParameterIndex(394),
     /* return_matcher_indices */ MatcherIndicesIndex(40),
     /* const_eval_fn */ ConstEvalFunctionIndex(49),
   },
@@ -11283,7 +11344,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(392),
+    /* parameters */ ParameterIndex(394),
     /* return_matcher_indices */ MatcherIndicesIndex(40),
     /* const_eval_fn */ ConstEvalFunctionIndex(50),
   },
@@ -11294,7 +11355,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(393),
+    /* parameters */ ParameterIndex(395),
     /* return_matcher_indices */ MatcherIndicesIndex(40),
     /* const_eval_fn */ ConstEvalFunctionIndex(51),
   },
@@ -11305,7 +11366,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(394),
+    /* parameters */ ParameterIndex(396),
     /* return_matcher_indices */ MatcherIndicesIndex(40),
     /* const_eval_fn */ ConstEvalFunctionIndex(52),
   },
@@ -11316,7 +11377,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(393),
+    /* parameters */ ParameterIndex(395),
     /* return_matcher_indices */ MatcherIndicesIndex(40),
     /* const_eval_fn */ ConstEvalFunctionIndex(53),
   },
@@ -11327,7 +11388,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(394),
+    /* parameters */ ParameterIndex(396),
     /* return_matcher_indices */ MatcherIndicesIndex(40),
     /* const_eval_fn */ ConstEvalFunctionIndex(54),
   },
@@ -11337,9 +11398,9 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(159),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(58),
   },
   {
@@ -11348,9 +11409,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(58),
+    /* templates */ TemplateIndex(64),
     /* parameters */ ParameterIndex(245),
-    /* return_matcher_indices */ MatcherIndicesIndex(101),
+    /* return_matcher_indices */ MatcherIndicesIndex(116),
     /* const_eval_fn */ ConstEvalFunctionIndex(59),
   },
   {
@@ -11370,9 +11431,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(61),
-    /* parameters */ ParameterIndex(395),
-    /* return_matcher_indices */ MatcherIndicesIndex(65),
+    /* templates */ TemplateIndex(67),
+    /* parameters */ ParameterIndex(397),
+    /* return_matcher_indices */ MatcherIndicesIndex(80),
     /* const_eval_fn */ ConstEvalFunctionIndex(73),
   },
   {
@@ -11383,7 +11444,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(17),
-    /* return_matcher_indices */ MatcherIndicesIndex(175),
+    /* return_matcher_indices */ MatcherIndicesIndex(190),
     /* const_eval_fn */ ConstEvalFunctionIndex(75),
   },
   {
@@ -11394,7 +11455,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(17),
-    /* return_matcher_indices */ MatcherIndicesIndex(175),
+    /* return_matcher_indices */ MatcherIndicesIndex(190),
     /* const_eval_fn */ ConstEvalFunctionIndex(76),
   },
   {
@@ -11405,7 +11466,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(17),
-    /* return_matcher_indices */ MatcherIndicesIndex(175),
+    /* return_matcher_indices */ MatcherIndicesIndex(190),
     /* const_eval_fn */ ConstEvalFunctionIndex(77),
   },
   {
@@ -11416,7 +11477,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(17),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(78),
   },
   {
@@ -11427,7 +11488,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(17),
-    /* return_matcher_indices */ MatcherIndicesIndex(177),
+    /* return_matcher_indices */ MatcherIndicesIndex(192),
     /* const_eval_fn */ ConstEvalFunctionIndex(79),
   },
   {
@@ -11438,7 +11499,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(17),
-    /* return_matcher_indices */ MatcherIndicesIndex(179),
+    /* return_matcher_indices */ MatcherIndicesIndex(194),
     /* const_eval_fn */ ConstEvalFunctionIndex(80),
   },
   {
@@ -11449,7 +11510,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(17),
-    /* return_matcher_indices */ MatcherIndicesIndex(181),
+    /* return_matcher_indices */ MatcherIndicesIndex(196),
     /* const_eval_fn */ ConstEvalFunctionIndex(81),
   },
   {
@@ -11458,8 +11519,8 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(73),
-    /* parameters */ ParameterIndex(396),
+    /* templates */ TemplateIndex(79),
+    /* parameters */ ParameterIndex(398),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -11469,9 +11530,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(19),
-    /* parameters */ ParameterIndex(401),
-    /* return_matcher_indices */ MatcherIndicesIndex(199),
+    /* templates */ TemplateIndex(29),
+    /* parameters */ ParameterIndex(403),
+    /* return_matcher_indices */ MatcherIndicesIndex(214),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -11480,7 +11541,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(81),
+    /* templates */ TemplateIndex(87),
     /* parameters */ ParameterIndex(0),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -11491,7 +11552,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(81),
+    /* templates */ TemplateIndex(87),
     /* parameters */ ParameterIndex(0),
     /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -11502,7 +11563,7 @@
     /* num_parameters */ 2,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(81),
+    /* templates */ TemplateIndex(87),
     /* parameters */ ParameterIndex(0),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -11513,9 +11574,9 @@
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
-    /* templates */ TemplateIndex(81),
+    /* templates */ TemplateIndex(87),
     /* parameters */ ParameterIndex(0),
-    /* return_matcher_indices */ MatcherIndicesIndex(225),
+    /* return_matcher_indices */ MatcherIndicesIndex(240),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -11526,7 +11587,7 @@
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
     /* parameters */ ParameterIndex(152),
-    /* return_matcher_indices */ MatcherIndicesIndex(181),
+    /* return_matcher_indices */ MatcherIndicesIndex(196),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -11555,10 +11616,10 @@
     /* [559] */
     /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
     /* num_parameters */ 2,
-    /* num_explicit_templates */ 0,
-    /* num_templates   */ 4,
-    /* templates */ TemplateIndex(47),
-    /* parameters */ ParameterIndex(306),
+    /* num_explicit_templates */ 1,
+    /* num_templates   */ 5,
+    /* templates */ TemplateIndex(6),
+    /* parameters */ ParameterIndex(360),
     /* return_matcher_indices */ MatcherIndicesIndex(46),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -11567,10 +11628,10 @@
     /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
     /* num_parameters */ 3,
     /* num_explicit_templates */ 0,
-    /* num_templates   */ 4,
-    /* templates */ TemplateIndex(47),
+    /* num_templates   */ 5,
+    /* templates */ TemplateIndex(11),
     /* parameters */ ParameterIndex(306),
-    /* return_matcher_indices */ MatcherIndicesIndex(46),
+    /* return_matcher_indices */ MatcherIndicesIndex(61),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -11579,7 +11640,7 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
-    /* templates */ TemplateIndex(73),
+    /* templates */ TemplateIndex(79),
     /* parameters */ ParameterIndex(1),
     /* return_matcher_indices */ MatcherIndicesIndex(13),
     /* const_eval_fn */ ConstEvalFunctionIndex(82),
@@ -11590,9 +11651,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(72),
-    /* parameters */ ParameterIndex(402),
-    /* return_matcher_indices */ MatcherIndicesIndex(77),
+    /* templates */ TemplateIndex(78),
+    /* parameters */ ParameterIndex(404),
+    /* return_matcher_indices */ MatcherIndicesIndex(92),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -11601,9 +11662,9 @@
     /* num_parameters */ 1,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
-    /* templates */ TemplateIndex(72),
-    /* parameters */ ParameterIndex(403),
-    /* return_matcher_indices */ MatcherIndicesIndex(81),
+    /* templates */ TemplateIndex(78),
+    /* parameters */ ParameterIndex(405),
+    /* return_matcher_indices */ MatcherIndicesIndex(96),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
   {
@@ -12784,13 +12845,13 @@
   },
   {
     /* [149] */
-    /* fn subgroupMatrixMultiply[S : subgroup_matrix_elements, C : num, R : num, K : num](subgroup_matrix<subgroup_matrix_kind_left, S, K, R>, subgroup_matrix<subgroup_matrix_kind_right, S, C, K>) -> subgroup_matrix<subgroup_matrix_kind_result, S, C, R> */
+    /* fn subgroupMatrixMultiply<TR : subgroup_matrix_elements>[T : subgroup_matrix_elements, C : num, R : num, K : num](subgroup_matrix<subgroup_matrix_kind_left, T, K, R>, subgroup_matrix<subgroup_matrix_kind_right, T, C, K>) -> subgroup_matrix<subgroup_matrix_kind_result, TR, C, R> */
     /* num overloads */ 1,
     /* overloads */ OverloadIndex(559),
   },
   {
     /* [150] */
-    /* fn subgroupMatrixMultiplyAccumulate[S : subgroup_matrix_elements, C : num, R : num, K : num](subgroup_matrix<subgroup_matrix_kind_left, S, K, R>, subgroup_matrix<subgroup_matrix_kind_right, S, C, K>, subgroup_matrix<subgroup_matrix_kind_result, S, C, R>) -> subgroup_matrix<subgroup_matrix_kind_result, S, C, R> */
+    /* fn subgroupMatrixMultiplyAccumulate[T : subgroup_matrix_elements, TR : subgroup_matrix_elements, C : num, R : num, K : num](subgroup_matrix<subgroup_matrix_kind_left, T, K, R>, subgroup_matrix<subgroup_matrix_kind_right, T, C, K>, subgroup_matrix<subgroup_matrix_kind_result, TR, C, R>) -> subgroup_matrix<subgroup_matrix_kind_result, TR, C, R> */
     /* num overloads */ 1,
     /* overloads */ OverloadIndex(560),
   },
diff --git a/src/tint/lang/wgsl/resolver/subgroup_matrix_test.cc b/src/tint/lang/wgsl/resolver/subgroup_matrix_test.cc
index 4eaf387..dc6c5fe 100644
--- a/src/tint/lang/wgsl/resolver/subgroup_matrix_test.cc
+++ b/src/tint/lang/wgsl/resolver/subgroup_matrix_test.cc
@@ -383,7 +383,7 @@
     Enable(wgsl::Extension::kChromiumExperimentalSubgroupMatrix);
     auto* left = GlobalVar("left", private_, ty("subgroup_matrix_left", ty.f32(), 2_u, 4_u));
     auto* right = GlobalVar("right", private_, ty("subgroup_matrix_right", ty.f32(), 8_u, 2_u));
-    auto* call = Call(wgsl::BuiltinFn::kSubgroupMatrixMultiply, left, right);
+    auto* call = Call(Ident(wgsl::BuiltinFn::kSubgroupMatrixMultiply, ty.f32()), left, right);
     Func("foo", Empty, ty.void_(),
          Vector{
              Assign(Phony(), call),
@@ -403,11 +403,26 @@
     EXPECT_EQ(result->Rows(), 4u);
 }
 
+TEST_F(ResolverSubgroupMatrixTest, SubgroupMatrixMultiply_MissingTemplateArg) {
+    Enable(wgsl::Extension::kChromiumExperimentalSubgroupMatrix);
+    auto* left = GlobalVar("left", private_, ty("subgroup_matrix_left", ty.f32(), 2_u, 4_u));
+    auto* right = GlobalVar("right", private_, ty("subgroup_matrix_right", ty.f32(), 8_u, 2_u));
+    auto* call = Call(wgsl::BuiltinFn::kSubgroupMatrixMultiply, left, right);
+    Func("foo", Empty, ty.void_(),
+         Vector{
+             Assign(Phony(), call),
+         });
+
+    EXPECT_FALSE(r()->Resolve());
+    EXPECT_THAT(r()->error(),
+                testing::HasSubstr(R"(error: no matching call to 'subgroupMatrixMultiply)"));
+}
+
 TEST_F(ResolverSubgroupMatrixTest, SubgroupMatrixMultiply_MismatchDimensions) {
     Enable(wgsl::Extension::kChromiumExperimentalSubgroupMatrix);
     auto* left = GlobalVar("left", private_, ty("subgroup_matrix_left", ty.f32(), 4_u, 2_u));
     auto* right = GlobalVar("right", private_, ty("subgroup_matrix_right", ty.f32(), 2_u, 8_u));
-    auto* call = Call(wgsl::BuiltinFn::kSubgroupMatrixMultiply, left, right);
+    auto* call = Call(Ident(wgsl::BuiltinFn::kSubgroupMatrixMultiply, ty.f32()), left, right);
     Func("foo", Empty, ty.void_(),
          Vector{
              Assign(Phony(), call),
@@ -422,7 +437,7 @@
     Enable(wgsl::Extension::kChromiumExperimentalSubgroupMatrix);
     auto* left = GlobalVar("left", private_, ty("subgroup_matrix_left", ty.u32(), 8_u, 8_u));
     auto* right = GlobalVar("right", private_, ty("subgroup_matrix_right", ty.i32(), 8_u, 8_u));
-    auto* call = Call(wgsl::BuiltinFn::kSubgroupMatrixMultiply, left, right);
+    auto* call = Call(Ident(wgsl::BuiltinFn::kSubgroupMatrixMultiply, ty.f32()), left, right);
     Func("foo", Empty, ty.void_(),
          Vector{
              Assign(Phony(), call),
@@ -437,7 +452,7 @@
     Enable(wgsl::Extension::kChromiumExperimentalSubgroupMatrix);
     auto* left = GlobalVar("left", private_, ty("subgroup_matrix_left", ty.f32(), 8_u, 8_u));
     auto* right = GlobalVar("right", private_, ty("subgroup_matrix_right", ty.f32(), 8_u, 8_u));
-    auto* call = Call(wgsl::BuiltinFn::kSubgroupMatrixMultiply, right, left);
+    auto* call = Call(Ident(wgsl::BuiltinFn::kSubgroupMatrixMultiply, ty.f32()), right, left);
     Func("foo", Empty, ty.void_(),
          Vector{
              Assign(Phony(), call),
diff --git a/src/tint/lang/wgsl/wgsl.def b/src/tint/lang/wgsl/wgsl.def
index 2e68663..6338902 100644
--- a/src/tint/lang/wgsl/wgsl.def
+++ b/src/tint/lang/wgsl/wgsl.def
@@ -684,15 +684,15 @@
 @must_use @stage("compute") implicit(K: subgroup_matrix_kind, S: fiu32_f16, C: num, R: num, AC: num) fn subgroupMatrixLoad<T: subgroup_matrix<K, S, C, R> >(ptr<workgroup_or_storage, array<S, AC>, readable>, u32, @const bool, u32) -> T
 @stage("compute") implicit(K: subgroup_matrix_kind, S: fiu32_f16, C: num, R: num) fn subgroupMatrixStore(ptr<storage, runtime_array<S>, writable>, u32, subgroup_matrix<K, S, C, R>, @const bool, u32)
 @stage("compute") implicit(K: subgroup_matrix_kind, S: fiu32_f16, C: num, R: num, AC: num) fn subgroupMatrixStore(ptr<workgroup_or_storage, array<S, AC>, writable>, u32, subgroup_matrix<K, S, C, R>, @const bool, u32)
-@must_use @stage("compute") implicit(S: subgroup_matrix_elements, C: num, R: num, K: num) fn subgroupMatrixMultiply(
-  subgroup_matrix<subgroup_matrix_kind_left, S, K, R>,
-  subgroup_matrix<subgroup_matrix_kind_right, S, C, K>)
-  -> subgroup_matrix<subgroup_matrix_kind_result, S, C, R>
-@must_use @stage("compute") implicit(S: subgroup_matrix_elements, C: num, R: num, K: num) fn subgroupMatrixMultiplyAccumulate(
-  subgroup_matrix<subgroup_matrix_kind_left, S, K, R>,
-  subgroup_matrix<subgroup_matrix_kind_right, S, C, K>,
-  subgroup_matrix<subgroup_matrix_kind_result, S, C, R>)
-  -> subgroup_matrix<subgroup_matrix_kind_result, S, C, R>
+@must_use @stage("compute") implicit(T: subgroup_matrix_elements, C: num, R: num, K: num) fn subgroupMatrixMultiply<TR: subgroup_matrix_elements>(
+  subgroup_matrix<subgroup_matrix_kind_left, T, K, R>,
+  subgroup_matrix<subgroup_matrix_kind_right, T, C, K>)
+  -> subgroup_matrix<subgroup_matrix_kind_result, TR, C, R>
+@must_use @stage("compute") implicit(T: subgroup_matrix_elements, TR: subgroup_matrix_elements, C: num, R: num, K: num) fn subgroupMatrixMultiplyAccumulate(
+  subgroup_matrix<subgroup_matrix_kind_left, T, K, R>,
+  subgroup_matrix<subgroup_matrix_kind_right, T, C, K>,
+  subgroup_matrix<subgroup_matrix_kind_result, TR, C, R>)
+  -> subgroup_matrix<subgroup_matrix_kind_result, TR, C, R>
 
 ////////////////////////////////////////////////////////////////////////////////
 // Value constructors                                                         //
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2969da.wgsl
similarity index 85%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/2969da.wgsl
index b529f72..99d886e 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2969da.wgsl
@@ -42,12 +42,12 @@
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, i32, 8, 8>, subgroup_matrix<right, i32, 8, 8>) -> subgroup_matrix<result, i32, 8, 8>
-fn subgroupMatrixMultiply_fd0481() -> subgroup_matrix_result<i32, 8, 8>{
-  var res: subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<i32, 8, 8>(), subgroup_matrix_right<i32, 8, 8>());
+// fn subgroupMatrixMultiply<TR: i32>(subgroup_matrix<left, i32, 8, 8>, subgroup_matrix<right, i32, 8, 8>) -> subgroup_matrix<result, i32, 8, 8>
+fn subgroupMatrixMultiply_2969da() -> subgroup_matrix_result<i32, 8, 8>{
+  var res: subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply<i32>(subgroup_matrix_left<i32, 8, 8>(), subgroup_matrix_right<i32, 8, 8>());
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_fd0481(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_2969da(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2969da.wgsl.expected.dxc.hlsl
similarity index 89%
rename from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
rename to test/tint/builtins/gen/literal/subgroupMatrixMultiply/2969da.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2969da.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2969da.wgsl.expected.fxc.hlsl
similarity index 89%
rename from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
rename to test/tint/builtins/gen/literal/subgroupMatrixMultiply/2969da.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2969da.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2969da.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/2969da.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2969da.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/2969da.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2969da.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/2969da.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2969da.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/2969da.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2969da.wgsl.expected.spvasm
similarity index 93%
rename from test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm
rename to test/tint/builtins/gen/literal/subgroupMatrixMultiply/2969da.wgsl.expected.spvasm
index 4f290ad..3bac40a 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2969da.wgsl.expected.spvasm
@@ -14,7 +14,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_fd0481 "subgroupMatrixMultiply_fd0481"
+               OpName %subgroupMatrixMultiply_2969da "subgroupMatrixMultiply_2969da"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_int_uint_1024 ArrayStride 4
@@ -47,7 +47,7 @@
 %_ptr_StorageBuffer__arr_int_uint_1024 = OpTypePointer StorageBuffer %_arr_int_uint_1024
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_fd0481 = OpFunction %9 None %13
+%subgroupMatrixMultiply_2969da = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
          %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21
@@ -57,7 +57,7 @@
                OpFunctionEnd
 %compute_main = OpFunction %void None %28
          %29 = OpLabel
-         %30 = OpFunctionCall %9 %subgroupMatrixMultiply_fd0481
+         %30 = OpFunctionCall %9 %subgroupMatrixMultiply_2969da
          %31 = OpAccessChain %_ptr_StorageBuffer__arr_int_uint_1024 %1 %uint_0
          %33 = OpAccessChain %_ptr_StorageBuffer_int %31 %uint_0
                OpCooperativeMatrixStoreKHR %33 %30 %uint_0 %uint_64 NonPrivatePointer
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2969da.wgsl.expected.wgsl
similarity index 66%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/2969da.wgsl.expected.wgsl
index ff6d387..2a3b988 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2969da.wgsl.expected.wgsl
@@ -2,12 +2,12 @@
 
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
 
-fn subgroupMatrixMultiply_fd0481() -> subgroup_matrix_result<i32, 8, 8> {
-  var res : subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<i32, 8, 8>(), subgroup_matrix_right<i32, 8, 8>());
+fn subgroupMatrixMultiply_2969da() -> subgroup_matrix_result<i32, 8, 8> {
+  var res : subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply<i32>(subgroup_matrix_left<i32, 8, 8>(), subgroup_matrix_right<i32, 8, 8>());
   return res;
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_fd0481(), false, 64);
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_2969da(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2c905b.wgsl
similarity index 85%
rename from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl
rename to test/tint/builtins/gen/literal/subgroupMatrixMultiply/2c905b.wgsl
index 9c040d0..642a324 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2c905b.wgsl
@@ -42,12 +42,12 @@
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, f32, 8, 8>, subgroup_matrix<right, f32, 8, 8>) -> subgroup_matrix<result, f32, 8, 8>
-fn subgroupMatrixMultiply_077fe6() -> subgroup_matrix_result<f32, 8, 8>{
-  var res: subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<f32, 8, 8>(), subgroup_matrix_right<f32, 8, 8>());
+// fn subgroupMatrixMultiply<TR: f32>(subgroup_matrix<left, f32, 8, 8>, subgroup_matrix<right, f32, 8, 8>) -> subgroup_matrix<result, f32, 8, 8>
+fn subgroupMatrixMultiply_2c905b() -> subgroup_matrix_result<f32, 8, 8>{
+  var res: subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply<f32>(subgroup_matrix_left<f32, 8, 8>(), subgroup_matrix_right<f32, 8, 8>());
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_077fe6(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_2c905b(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2c905b.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/2c905b.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2c905b.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2c905b.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/2c905b.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2c905b.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2c905b.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/2c905b.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2c905b.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/2c905b.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2c905b.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/2c905b.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2c905b.wgsl.expected.msl
similarity index 91%
rename from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.msl
rename to test/tint/builtins/gen/literal/subgroupMatrixMultiply/2c905b.wgsl.expected.msl
index 22ae7fc..636779c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2c905b.wgsl.expected.msl
@@ -17,7 +17,7 @@
   device tint_array<float, 1024>* prevent_dce;
 };
 
-simdgroup_float8x8 subgroupMatrixMultiply_077fe6() {
+simdgroup_float8x8 subgroupMatrixMultiply_2c905b() {
   simdgroup_float8x8 const v = simdgroup_float8x8();
   simdgroup_float8x8 const v_1 = simdgroup_float8x8();
   simdgroup_float8x8 v_2 = make_filled_simdgroup_matrix<float, 8, 8>(0.0f);
@@ -28,5 +28,5 @@
 
 kernel void compute_main(device tint_array<float, 1024>* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  simdgroup_store(subgroupMatrixMultiply_077fe6(), (&(*tint_module_vars.prevent_dce)[0u]), ulong(64u), ulong2(0ul), false);
+  simdgroup_store(subgroupMatrixMultiply_2c905b(), (&(*tint_module_vars.prevent_dce)[0u]), ulong(64u), ulong2(0ul), false);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2c905b.wgsl.expected.spvasm
similarity index 93%
rename from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm
rename to test/tint/builtins/gen/literal/subgroupMatrixMultiply/2c905b.wgsl.expected.spvasm
index a52ca13..726b6fc 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2c905b.wgsl.expected.spvasm
@@ -14,7 +14,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_077fe6 "subgroupMatrixMultiply_077fe6"
+               OpName %subgroupMatrixMultiply_2c905b "subgroupMatrixMultiply_2c905b"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_float_uint_1024 ArrayStride 4
@@ -47,7 +47,7 @@
 %_ptr_StorageBuffer__arr_float_uint_1024 = OpTypePointer StorageBuffer %_arr_float_uint_1024
 %_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_077fe6 = OpFunction %9 None %13
+%subgroupMatrixMultiply_2c905b = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
          %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21
@@ -57,7 +57,7 @@
                OpFunctionEnd
 %compute_main = OpFunction %void None %28
          %29 = OpLabel
-         %30 = OpFunctionCall %9 %subgroupMatrixMultiply_077fe6
+         %30 = OpFunctionCall %9 %subgroupMatrixMultiply_2c905b
          %31 = OpAccessChain %_ptr_StorageBuffer__arr_float_uint_1024 %1 %uint_0
          %33 = OpAccessChain %_ptr_StorageBuffer_float %31 %uint_0
                OpCooperativeMatrixStoreKHR %33 %30 %uint_0 %uint_64 NonPrivatePointer
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2c905b.wgsl.expected.wgsl
similarity index 66%
rename from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.wgsl
rename to test/tint/builtins/gen/literal/subgroupMatrixMultiply/2c905b.wgsl.expected.wgsl
index 1aa48db..3549804 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2c905b.wgsl.expected.wgsl
@@ -2,12 +2,12 @@
 
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
 
-fn subgroupMatrixMultiply_077fe6() -> subgroup_matrix_result<f32, 8, 8> {
-  var res : subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<f32, 8, 8>(), subgroup_matrix_right<f32, 8, 8>());
+fn subgroupMatrixMultiply_2c905b() -> subgroup_matrix_result<f32, 8, 8> {
+  var res : subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply<f32>(subgroup_matrix_left<f32, 8, 8>(), subgroup_matrix_right<f32, 8, 8>());
   return res;
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_077fe6(), false, 64);
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_2c905b(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/3e9b04.wgsl
similarity index 85%
rename from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl
rename to test/tint/builtins/gen/literal/subgroupMatrixMultiply/3e9b04.wgsl
index ebad2a1..87452a7 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/3e9b04.wgsl
@@ -42,12 +42,12 @@
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<u32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, u32, 8, 8>, subgroup_matrix<right, u32, 8, 8>) -> subgroup_matrix<result, u32, 8, 8>
-fn subgroupMatrixMultiply_837e77() -> subgroup_matrix_result<u32, 8, 8>{
-  var res: subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<u32, 8, 8>(), subgroup_matrix_right<u32, 8, 8>());
+// fn subgroupMatrixMultiply<TR: u32>(subgroup_matrix<left, i32, 8, 8>, subgroup_matrix<right, i32, 8, 8>) -> subgroup_matrix<result, u32, 8, 8>
+fn subgroupMatrixMultiply_3e9b04() -> subgroup_matrix_result<u32, 8, 8>{
+  var res: subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply<u32>(subgroup_matrix_left<i32, 8, 8>(), subgroup_matrix_right<i32, 8, 8>());
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_837e77(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_3e9b04(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/3e9b04.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/3e9b04.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/3e9b04.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/3e9b04.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/3e9b04.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/3e9b04.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/3e9b04.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/3e9b04.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/3e9b04.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/3e9b04.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/3e9b04.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/3e9b04.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/3e9b04.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/3e9b04.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/3e9b04.wgsl.expected.spvasm
similarity index 69%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/3e9b04.wgsl.expected.spvasm
index 593db93..accce49 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/3e9b04.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 36
+; Bound: 37
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
@@ -14,7 +14,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_837e77 "subgroupMatrixMultiply_837e77"
+               OpName %subgroupMatrixMultiply_3e9b04 "subgroupMatrixMultiply_3e9b04"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_uint_uint_1024 ArrayStride 4
@@ -33,32 +33,33 @@
      %uint_2 = OpConstant %uint 2
           %8 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_2
          %12 = OpTypeFunction %8
+        %int = OpTypeInt 32 1
      %uint_0 = OpConstant %uint 0
-         %15 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_0
+         %15 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_0
          %14 = OpConstantNull %15
      %uint_1 = OpConstant %uint 1
-         %18 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_1
-         %17 = OpConstantNull %18
-         %20 = OpConstantNull %8
+         %19 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_1
+         %18 = OpConstantNull %19
+         %21 = OpConstantNull %8
 %_ptr_Function_8 = OpTypePointer Function %8
        %void = OpTypeVoid
-         %27 = OpTypeFunction %void
+         %28 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_uint_uint_1024 = OpTypePointer StorageBuffer %_arr_uint_uint_1024
 %_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_837e77 = OpFunction %8 None %12
+%subgroupMatrixMultiply_3e9b04 = OpFunction %8 None %12
          %13 = OpLabel
         %res = OpVariable %_ptr_Function_8 Function
-         %21 = OpCooperativeMatrixMulAddKHR %8 %14 %17 %20
-               OpStore %res %21
-         %24 = OpLoad %8 %res None
-               OpReturnValue %24
+         %22 = OpCooperativeMatrixMulAddKHR %8 %14 %18 %21
+               OpStore %res %22
+         %25 = OpLoad %8 %res None
+               OpReturnValue %25
                OpFunctionEnd
-%compute_main = OpFunction %void None %27
-         %28 = OpLabel
-         %29 = OpFunctionCall %8 %subgroupMatrixMultiply_837e77
-         %30 = OpAccessChain %_ptr_StorageBuffer__arr_uint_uint_1024 %1 %uint_0
-         %32 = OpAccessChain %_ptr_StorageBuffer_uint %30 %uint_0
-               OpCooperativeMatrixStoreKHR %32 %29 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %8 %subgroupMatrixMultiply_3e9b04
+         %31 = OpAccessChain %_ptr_StorageBuffer__arr_uint_uint_1024 %1 %uint_0
+         %33 = OpAccessChain %_ptr_StorageBuffer_uint %31 %uint_0
+               OpCooperativeMatrixStoreKHR %33 %30 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/3e9b04.wgsl.expected.wgsl
similarity index 66%
rename from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.wgsl
rename to test/tint/builtins/gen/literal/subgroupMatrixMultiply/3e9b04.wgsl.expected.wgsl
index bb5d1bb..d1d105c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/3e9b04.wgsl.expected.wgsl
@@ -2,12 +2,12 @@
 
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<u32, 1024>;
 
-fn subgroupMatrixMultiply_837e77() -> subgroup_matrix_result<u32, 8, 8> {
-  var res : subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<u32, 8, 8>(), subgroup_matrix_right<u32, 8, 8>());
+fn subgroupMatrixMultiply_3e9b04() -> subgroup_matrix_result<u32, 8, 8> {
+  var res : subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply<u32>(subgroup_matrix_left<i32, 8, 8>(), subgroup_matrix_right<i32, 8, 8>());
   return res;
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_837e77(), false, 64);
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_3e9b04(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/42abed.wgsl
similarity index 85%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/42abed.wgsl
index 01f8196..30769d9 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/42abed.wgsl
@@ -44,12 +44,12 @@
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, f16, 8, 8>, subgroup_matrix<right, f16, 8, 8>) -> subgroup_matrix<result, f16, 8, 8>
-fn subgroupMatrixMultiply_c75357() -> subgroup_matrix_result<f16, 8, 8>{
-  var res: subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<f16, 8, 8>(), subgroup_matrix_right<f16, 8, 8>());
+// fn subgroupMatrixMultiply<TR: f16>(subgroup_matrix<left, f16, 8, 8>, subgroup_matrix<right, f16, 8, 8>) -> subgroup_matrix<result, f16, 8, 8>
+fn subgroupMatrixMultiply_42abed() -> subgroup_matrix_result<f16, 8, 8>{
+  var res: subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply<f16>(subgroup_matrix_left<f16, 8, 8>(), subgroup_matrix_right<f16, 8, 8>());
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_c75357(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_42abed(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/42abed.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/42abed.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/42abed.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/42abed.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/42abed.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/42abed.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/42abed.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/42abed.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/42abed.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/42abed.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/42abed.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/42abed.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/42abed.wgsl.expected.msl
similarity index 91%
rename from test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.msl
rename to test/tint/builtins/gen/literal/subgroupMatrixMultiply/42abed.wgsl.expected.msl
index d8f4e0a..db101c7 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/42abed.wgsl.expected.msl
@@ -17,7 +17,7 @@
   device tint_array<half, 1024>* prevent_dce;
 };
 
-simdgroup_half8x8 subgroupMatrixMultiply_c75357() {
+simdgroup_half8x8 subgroupMatrixMultiply_42abed() {
   simdgroup_half8x8 const v = simdgroup_half8x8();
   simdgroup_half8x8 const v_1 = simdgroup_half8x8();
   simdgroup_half8x8 v_2 = make_filled_simdgroup_matrix<half, 8, 8>(0.0h);
@@ -28,5 +28,5 @@
 
 kernel void compute_main(device tint_array<half, 1024>* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  simdgroup_store(subgroupMatrixMultiply_c75357(), (&(*tint_module_vars.prevent_dce)[0u]), ulong(64u), ulong2(0ul), false);
+  simdgroup_store(subgroupMatrixMultiply_42abed(), (&(*tint_module_vars.prevent_dce)[0u]), ulong(64u), ulong2(0ul), false);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/42abed.wgsl.expected.spvasm
similarity index 93%
rename from test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm
rename to test/tint/builtins/gen/literal/subgroupMatrixMultiply/42abed.wgsl.expected.spvasm
index c126b53..dfe9544 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/42abed.wgsl.expected.spvasm
@@ -17,7 +17,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_c75357 "subgroupMatrixMultiply_c75357"
+               OpName %subgroupMatrixMultiply_42abed "subgroupMatrixMultiply_42abed"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_half_uint_1024 ArrayStride 2
@@ -50,7 +50,7 @@
 %_ptr_StorageBuffer__arr_half_uint_1024 = OpTypePointer StorageBuffer %_arr_half_uint_1024
 %_ptr_StorageBuffer_half = OpTypePointer StorageBuffer %half
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_c75357 = OpFunction %9 None %13
+%subgroupMatrixMultiply_42abed = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
          %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21
@@ -60,7 +60,7 @@
                OpFunctionEnd
 %compute_main = OpFunction %void None %28
          %29 = OpLabel
-         %30 = OpFunctionCall %9 %subgroupMatrixMultiply_c75357
+         %30 = OpFunctionCall %9 %subgroupMatrixMultiply_42abed
          %31 = OpAccessChain %_ptr_StorageBuffer__arr_half_uint_1024 %1 %uint_0
          %33 = OpAccessChain %_ptr_StorageBuffer_half %31 %uint_0
                OpCooperativeMatrixStoreKHR %33 %30 %uint_0 %uint_64 NonPrivatePointer
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/42abed.wgsl.expected.wgsl
similarity index 67%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/42abed.wgsl.expected.wgsl
index 8b49321..182bba8 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/42abed.wgsl.expected.wgsl
@@ -3,12 +3,12 @@
 
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
 
-fn subgroupMatrixMultiply_c75357() -> subgroup_matrix_result<f16, 8, 8> {
-  var res : subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<f16, 8, 8>(), subgroup_matrix_right<f16, 8, 8>());
+fn subgroupMatrixMultiply_42abed() -> subgroup_matrix_result<f16, 8, 8> {
+  var res : subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply<f16>(subgroup_matrix_left<f16, 8, 8>(), subgroup_matrix_right<f16, 8, 8>());
   return res;
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_c75357(), false, 64);
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_42abed(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/5677fc.wgsl
similarity index 83%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/5677fc.wgsl
index 9c040d0..215e203 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/5677fc.wgsl
@@ -35,19 +35,21 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 
-// [hlsl-dxc] flags: --hlsl-shader-model 60
+// flags: --hlsl-shader-model 62
 
 
 enable chromium_experimental_subgroup_matrix;
+
+enable f16;
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, f32, 8, 8>, subgroup_matrix<right, f32, 8, 8>) -> subgroup_matrix<result, f32, 8, 8>
-fn subgroupMatrixMultiply_077fe6() -> subgroup_matrix_result<f32, 8, 8>{
-  var res: subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<f32, 8, 8>(), subgroup_matrix_right<f32, 8, 8>());
+// fn subgroupMatrixMultiply<TR: f32>(subgroup_matrix<left, f16, 8, 8>, subgroup_matrix<right, f16, 8, 8>) -> subgroup_matrix<result, f32, 8, 8>
+fn subgroupMatrixMultiply_5677fc() -> subgroup_matrix_result<f32, 8, 8>{
+  var res: subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply<f32>(subgroup_matrix_left<f16, 8, 8>(), subgroup_matrix_right<f16, 8, 8>());
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_077fe6(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_5677fc(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/5677fc.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/5677fc.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/5677fc.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/5677fc.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/5677fc.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/5677fc.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/5677fc.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/5677fc.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/5677fc.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/5677fc.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/5677fc.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/5677fc.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/5677fc.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/5677fc.wgsl.expected.msl
new file mode 100644
index 0000000..cbfd782
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/5677fc.wgsl.expected.msl
@@ -0,0 +1,64 @@
+SKIP: FAILED
+
+
+enable chromium_experimental_subgroup_matrix;
+enable f16;
+
+@internal(disable_validation__binding_point_collision) @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
+
+fn subgroupMatrixMultiply_5677fc() -> subgroup_matrix_result<f32, 8, 8> {
+  var res : subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply<f32>(subgroup_matrix_left<f16, 8, 8>(), subgroup_matrix_right<f16, 8, 8>());
+  return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_5677fc(), false, 64);
+}
+
+Failed to generate: :11:15 error: msl.simdgroup_multiply: no matching call to 'msl.simdgroup_multiply(subgroup_matrix_result<f32, 8, 8>, subgroup_matrix_left<f16, 8, 8>, subgroup_matrix_right<f16, 8, 8>)'
+
+1 candidate function:
+ • 'msl.simdgroup_multiply(subgroup_matrix<result, S, C, R>  ✓ , subgroup_matrix<left, S, K, R>  ✗ , subgroup_matrix<right, S, C, K>  ✗ )' where:
+      ✓  'S' is 'f32' or 'f16'
+
+    %6:void = msl.simdgroup_multiply %5, %2, %3
+              ^^^^^^^^^^^^^^^^^^^^^^
+
+:6:3 note: in block
+  $B1: {
+  ^^^
+
+note: # Disassembly
+tint_module_vars_struct = struct @align(1) {
+  prevent_dce:ptr<storage, array<f32, 1024>, read_write> @offset(0)
+}
+
+%subgroupMatrixMultiply_5677fc = func():subgroup_matrix_result<f32, 8, 8> {
+  $B1: {
+    %2:subgroup_matrix_left<f16, 8, 8> = construct
+    %3:subgroup_matrix_right<f16, 8, 8> = construct
+    %4:ptr<function, subgroup_matrix_result<f32, 8, 8>, read_write> = var
+    %5:subgroup_matrix_result<f32, 8, 8> = load %4
+    %6:void = msl.simdgroup_multiply %5, %2, %3
+    %7:subgroup_matrix_result<f32, 8, 8> = load %4
+    %res:ptr<function, subgroup_matrix_result<f32, 8, 8>, read_write> = var, %7
+    %9:subgroup_matrix_result<f32, 8, 8> = load %res
+    ret %9
+  }
+}
+%compute_main = @compute @workgroup_size(1u, 1u, 1u) func(%prevent_dce:ptr<storage, array<f32, 1024>, read_write> [@binding_point(0, 0)]):void {
+  $B2: {
+    %12:tint_module_vars_struct = construct %prevent_dce
+    %tint_module_vars:tint_module_vars_struct = let %12
+    %14:subgroup_matrix_result<f32, 8, 8> = call %subgroupMatrixMultiply_5677fc
+    %15:ptr<storage, array<f32, 1024>, read_write> = access %tint_module_vars, 0u
+    %16:ptr<storage, f32, read_write> = access %15, 0u
+    %17:u64 = msl.convert 64u
+    %18:void = msl.simdgroup_store %14, %16, %17, vec2<u64>(0u64), false
+    ret
+  }
+}
+
+
+tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/5677fc.wgsl.expected.spvasm
similarity index 66%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/5677fc.wgsl.expected.spvasm
index a52ca13..3cabffc 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/5677fc.wgsl.expected.spvasm
@@ -1,12 +1,15 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 37
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
                OpCapability VulkanMemoryModelDeviceScope
                OpCapability CooperativeMatrixKHR
+               OpCapability Float16
+               OpCapability UniformAndStorageBuffer16BitAccess
+               OpCapability StorageBuffer16BitAccess
                OpExtension "SPV_KHR_vulkan_memory_model"
                OpExtension "SPV_KHR_cooperative_matrix"
                OpMemoryModel Logical Vulkan
@@ -14,7 +17,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_077fe6 "subgroupMatrixMultiply_077fe6"
+               OpName %subgroupMatrixMultiply_5677fc "subgroupMatrixMultiply_5677fc"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_float_uint_1024 ArrayStride 4
@@ -34,32 +37,33 @@
      %uint_2 = OpConstant %uint 2
           %9 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
+       %half = OpTypeFloat 16
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
      %uint_1 = OpConstant %uint 1
-         %19 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_1
-         %18 = OpConstantNull %19
-         %21 = OpConstantNull %9
+         %20 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_1
+         %19 = OpConstantNull %20
+         %22 = OpConstantNull %9
 %_ptr_Function_9 = OpTypePointer Function %9
        %void = OpTypeVoid
-         %28 = OpTypeFunction %void
+         %29 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_float_uint_1024 = OpTypePointer StorageBuffer %_arr_float_uint_1024
 %_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_077fe6 = OpFunction %9 None %13
+%subgroupMatrixMultiply_5677fc = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21
-               OpStore %res %22
-         %25 = OpLoad %9 %res None
-               OpReturnValue %25
+         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22
+               OpStore %res %23
+         %26 = OpLoad %9 %res None
+               OpReturnValue %26
                OpFunctionEnd
-%compute_main = OpFunction %void None %28
-         %29 = OpLabel
-         %30 = OpFunctionCall %9 %subgroupMatrixMultiply_077fe6
-         %31 = OpAccessChain %_ptr_StorageBuffer__arr_float_uint_1024 %1 %uint_0
-         %33 = OpAccessChain %_ptr_StorageBuffer_float %31 %uint_0
-               OpCooperativeMatrixStoreKHR %33 %30 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %29
+         %30 = OpLabel
+         %31 = OpFunctionCall %9 %subgroupMatrixMultiply_5677fc
+         %32 = OpAccessChain %_ptr_StorageBuffer__arr_float_uint_1024 %1 %uint_0
+         %34 = OpAccessChain %_ptr_StorageBuffer_float %32 %uint_0
+               OpCooperativeMatrixStoreKHR %34 %31 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/5677fc.wgsl.expected.wgsl
similarity index 64%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/5677fc.wgsl.expected.wgsl
index 1aa48db..b69967c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/5677fc.wgsl.expected.wgsl
@@ -1,13 +1,14 @@
 enable chromium_experimental_subgroup_matrix;
+enable f16;
 
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
 
-fn subgroupMatrixMultiply_077fe6() -> subgroup_matrix_result<f32, 8, 8> {
-  var res : subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<f32, 8, 8>(), subgroup_matrix_right<f32, 8, 8>());
+fn subgroupMatrixMultiply_5677fc() -> subgroup_matrix_result<f32, 8, 8> {
+  var res : subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply<f32>(subgroup_matrix_left<f16, 8, 8>(), subgroup_matrix_right<f16, 8, 8>());
   return res;
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_077fe6(), false, 64);
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_5677fc(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/704b4d.wgsl
similarity index 83%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/704b4d.wgsl
index b529f72..bfe5fa2 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/704b4d.wgsl
@@ -35,19 +35,21 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 
-// [hlsl-dxc] flags: --hlsl-shader-model 60
+// flags: --hlsl-shader-model 62
 
 
 enable chromium_experimental_subgroup_matrix;
+
+enable f16;
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, i32, 8, 8>, subgroup_matrix<right, i32, 8, 8>) -> subgroup_matrix<result, i32, 8, 8>
-fn subgroupMatrixMultiply_fd0481() -> subgroup_matrix_result<i32, 8, 8>{
-  var res: subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<i32, 8, 8>(), subgroup_matrix_right<i32, 8, 8>());
+// fn subgroupMatrixMultiply<TR: i32>(subgroup_matrix<left, f16, 8, 8>, subgroup_matrix<right, f16, 8, 8>) -> subgroup_matrix<result, i32, 8, 8>
+fn subgroupMatrixMultiply_704b4d() -> subgroup_matrix_result<i32, 8, 8>{
+  var res: subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply<i32>(subgroup_matrix_left<f16, 8, 8>(), subgroup_matrix_right<f16, 8, 8>());
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_fd0481(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_704b4d(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/704b4d.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/704b4d.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/704b4d.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/704b4d.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/704b4d.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/704b4d.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/704b4d.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/704b4d.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/704b4d.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/704b4d.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/704b4d.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/704b4d.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/704b4d.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/704b4d.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/704b4d.wgsl.expected.spvasm
similarity index 66%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/704b4d.wgsl.expected.spvasm
index 4f290ad..89e1190 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/704b4d.wgsl.expected.spvasm
@@ -1,12 +1,15 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 37
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
                OpCapability VulkanMemoryModelDeviceScope
                OpCapability CooperativeMatrixKHR
+               OpCapability Float16
+               OpCapability UniformAndStorageBuffer16BitAccess
+               OpCapability StorageBuffer16BitAccess
                OpExtension "SPV_KHR_vulkan_memory_model"
                OpExtension "SPV_KHR_cooperative_matrix"
                OpMemoryModel Logical Vulkan
@@ -14,7 +17,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_fd0481 "subgroupMatrixMultiply_fd0481"
+               OpName %subgroupMatrixMultiply_704b4d "subgroupMatrixMultiply_704b4d"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_int_uint_1024 ArrayStride 4
@@ -34,32 +37,33 @@
      %uint_2 = OpConstant %uint 2
           %9 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
+       %half = OpTypeFloat 16
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
      %uint_1 = OpConstant %uint 1
-         %19 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_1
-         %18 = OpConstantNull %19
-         %21 = OpConstantNull %9
+         %20 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_1
+         %19 = OpConstantNull %20
+         %22 = OpConstantNull %9
 %_ptr_Function_9 = OpTypePointer Function %9
        %void = OpTypeVoid
-         %28 = OpTypeFunction %void
+         %29 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_int_uint_1024 = OpTypePointer StorageBuffer %_arr_int_uint_1024
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_fd0481 = OpFunction %9 None %13
+%subgroupMatrixMultiply_704b4d = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21
-               OpStore %res %22
-         %25 = OpLoad %9 %res None
-               OpReturnValue %25
+         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22
+               OpStore %res %23
+         %26 = OpLoad %9 %res None
+               OpReturnValue %26
                OpFunctionEnd
-%compute_main = OpFunction %void None %28
-         %29 = OpLabel
-         %30 = OpFunctionCall %9 %subgroupMatrixMultiply_fd0481
-         %31 = OpAccessChain %_ptr_StorageBuffer__arr_int_uint_1024 %1 %uint_0
-         %33 = OpAccessChain %_ptr_StorageBuffer_int %31 %uint_0
-               OpCooperativeMatrixStoreKHR %33 %30 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %29
+         %30 = OpLabel
+         %31 = OpFunctionCall %9 %subgroupMatrixMultiply_704b4d
+         %32 = OpAccessChain %_ptr_StorageBuffer__arr_int_uint_1024 %1 %uint_0
+         %34 = OpAccessChain %_ptr_StorageBuffer_int %32 %uint_0
+               OpCooperativeMatrixStoreKHR %34 %31 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/704b4d.wgsl.expected.wgsl
similarity index 64%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/704b4d.wgsl.expected.wgsl
index ff6d387..d8de825 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/704b4d.wgsl.expected.wgsl
@@ -1,13 +1,14 @@
 enable chromium_experimental_subgroup_matrix;
+enable f16;
 
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
 
-fn subgroupMatrixMultiply_fd0481() -> subgroup_matrix_result<i32, 8, 8> {
-  var res : subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<i32, 8, 8>(), subgroup_matrix_right<i32, 8, 8>());
+fn subgroupMatrixMultiply_704b4d() -> subgroup_matrix_result<i32, 8, 8> {
+  var res : subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply<i32>(subgroup_matrix_left<f16, 8, 8>(), subgroup_matrix_right<f16, 8, 8>());
   return res;
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_fd0481(), false, 64);
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_704b4d(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.dxc.hlsl
deleted file mode 100644
index 5664c5f..0000000
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.dxc.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: trace/BPT trap
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.fxc.hlsl
deleted file mode 100644
index e202956..0000000
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.fxc.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: INVALID
-
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: trace/BPT trap
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8648ad.wgsl
similarity index 85%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/8648ad.wgsl
index 9c040d0..1c8f222 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8648ad.wgsl
@@ -42,12 +42,12 @@
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, f32, 8, 8>, subgroup_matrix<right, f32, 8, 8>) -> subgroup_matrix<result, f32, 8, 8>
-fn subgroupMatrixMultiply_077fe6() -> subgroup_matrix_result<f32, 8, 8>{
-  var res: subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<f32, 8, 8>(), subgroup_matrix_right<f32, 8, 8>());
+// fn subgroupMatrixMultiply<TR: f32>(subgroup_matrix<left, i32, 8, 8>, subgroup_matrix<right, i32, 8, 8>) -> subgroup_matrix<result, f32, 8, 8>
+fn subgroupMatrixMultiply_8648ad() -> subgroup_matrix_result<f32, 8, 8>{
+  var res: subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply<f32>(subgroup_matrix_left<i32, 8, 8>(), subgroup_matrix_right<i32, 8, 8>());
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_077fe6(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_8648ad(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8648ad.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/8648ad.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8648ad.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8648ad.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/8648ad.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8648ad.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8648ad.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/8648ad.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8648ad.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/8648ad.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8648ad.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/8648ad.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8648ad.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/8648ad.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8648ad.wgsl.expected.spvasm
similarity index 70%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/8648ad.wgsl.expected.spvasm
index a52ca13..34db8c6 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8648ad.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 37
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
@@ -14,7 +14,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_077fe6 "subgroupMatrixMultiply_077fe6"
+               OpName %subgroupMatrixMultiply_8648ad "subgroupMatrixMultiply_8648ad"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_float_uint_1024 ArrayStride 4
@@ -34,32 +34,33 @@
      %uint_2 = OpConstant %uint 2
           %9 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
+        %int = OpTypeInt 32 1
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
      %uint_1 = OpConstant %uint 1
-         %19 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_1
-         %18 = OpConstantNull %19
-         %21 = OpConstantNull %9
+         %20 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_1
+         %19 = OpConstantNull %20
+         %22 = OpConstantNull %9
 %_ptr_Function_9 = OpTypePointer Function %9
        %void = OpTypeVoid
-         %28 = OpTypeFunction %void
+         %29 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_float_uint_1024 = OpTypePointer StorageBuffer %_arr_float_uint_1024
 %_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_077fe6 = OpFunction %9 None %13
+%subgroupMatrixMultiply_8648ad = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21
-               OpStore %res %22
-         %25 = OpLoad %9 %res None
-               OpReturnValue %25
+         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22
+               OpStore %res %23
+         %26 = OpLoad %9 %res None
+               OpReturnValue %26
                OpFunctionEnd
-%compute_main = OpFunction %void None %28
-         %29 = OpLabel
-         %30 = OpFunctionCall %9 %subgroupMatrixMultiply_077fe6
-         %31 = OpAccessChain %_ptr_StorageBuffer__arr_float_uint_1024 %1 %uint_0
-         %33 = OpAccessChain %_ptr_StorageBuffer_float %31 %uint_0
-               OpCooperativeMatrixStoreKHR %33 %30 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %29
+         %30 = OpLabel
+         %31 = OpFunctionCall %9 %subgroupMatrixMultiply_8648ad
+         %32 = OpAccessChain %_ptr_StorageBuffer__arr_float_uint_1024 %1 %uint_0
+         %34 = OpAccessChain %_ptr_StorageBuffer_float %32 %uint_0
+               OpCooperativeMatrixStoreKHR %34 %31 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8648ad.wgsl.expected.wgsl
similarity index 66%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/8648ad.wgsl.expected.wgsl
index 1aa48db..42b3b5a 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8648ad.wgsl.expected.wgsl
@@ -2,12 +2,12 @@
 
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
 
-fn subgroupMatrixMultiply_077fe6() -> subgroup_matrix_result<f32, 8, 8> {
-  var res : subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<f32, 8, 8>(), subgroup_matrix_right<f32, 8, 8>());
+fn subgroupMatrixMultiply_8648ad() -> subgroup_matrix_result<f32, 8, 8> {
+  var res : subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply<f32>(subgroup_matrix_left<i32, 8, 8>(), subgroup_matrix_right<i32, 8, 8>());
   return res;
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_077fe6(), false, 64);
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_8648ad(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8744bd.wgsl
similarity index 85%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/8744bd.wgsl
index 01f8196..ae8f4b0 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8744bd.wgsl
@@ -44,12 +44,12 @@
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, f16, 8, 8>, subgroup_matrix<right, f16, 8, 8>) -> subgroup_matrix<result, f16, 8, 8>
-fn subgroupMatrixMultiply_c75357() -> subgroup_matrix_result<f16, 8, 8>{
-  var res: subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<f16, 8, 8>(), subgroup_matrix_right<f16, 8, 8>());
+// fn subgroupMatrixMultiply<TR: f16>(subgroup_matrix<left, f32, 8, 8>, subgroup_matrix<right, f32, 8, 8>) -> subgroup_matrix<result, f16, 8, 8>
+fn subgroupMatrixMultiply_8744bd() -> subgroup_matrix_result<f16, 8, 8>{
+  var res: subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply<f16>(subgroup_matrix_left<f32, 8, 8>(), subgroup_matrix_right<f32, 8, 8>());
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_c75357(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_8744bd(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8744bd.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/8744bd.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8744bd.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8744bd.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/8744bd.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8744bd.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8744bd.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/8744bd.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8744bd.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/8744bd.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8744bd.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/8744bd.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8744bd.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8744bd.wgsl.expected.msl
new file mode 100644
index 0000000..73cdd5a
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8744bd.wgsl.expected.msl
@@ -0,0 +1,64 @@
+SKIP: FAILED
+
+
+enable chromium_experimental_subgroup_matrix;
+enable f16;
+
+@internal(disable_validation__binding_point_collision) @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
+
+fn subgroupMatrixMultiply_8744bd() -> subgroup_matrix_result<f16, 8, 8> {
+  var res : subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply<f16>(subgroup_matrix_left<f32, 8, 8>(), subgroup_matrix_right<f32, 8, 8>());
+  return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_8744bd(), false, 64);
+}
+
+Failed to generate: :11:15 error: msl.simdgroup_multiply: no matching call to 'msl.simdgroup_multiply(subgroup_matrix_result<f16, 8, 8>, subgroup_matrix_left<f32, 8, 8>, subgroup_matrix_right<f32, 8, 8>)'
+
+1 candidate function:
+ • 'msl.simdgroup_multiply(subgroup_matrix<result, S, C, R>  ✓ , subgroup_matrix<left, S, K, R>  ✗ , subgroup_matrix<right, S, C, K>  ✗ )' where:
+      ✓  'S' is 'f32' or 'f16'
+
+    %6:void = msl.simdgroup_multiply %5, %2, %3
+              ^^^^^^^^^^^^^^^^^^^^^^
+
+:6:3 note: in block
+  $B1: {
+  ^^^
+
+note: # Disassembly
+tint_module_vars_struct = struct @align(1) {
+  prevent_dce:ptr<storage, array<f16, 1024>, read_write> @offset(0)
+}
+
+%subgroupMatrixMultiply_8744bd = func():subgroup_matrix_result<f16, 8, 8> {
+  $B1: {
+    %2:subgroup_matrix_left<f32, 8, 8> = construct
+    %3:subgroup_matrix_right<f32, 8, 8> = construct
+    %4:ptr<function, subgroup_matrix_result<f16, 8, 8>, read_write> = var
+    %5:subgroup_matrix_result<f16, 8, 8> = load %4
+    %6:void = msl.simdgroup_multiply %5, %2, %3
+    %7:subgroup_matrix_result<f16, 8, 8> = load %4
+    %res:ptr<function, subgroup_matrix_result<f16, 8, 8>, read_write> = var, %7
+    %9:subgroup_matrix_result<f16, 8, 8> = load %res
+    ret %9
+  }
+}
+%compute_main = @compute @workgroup_size(1u, 1u, 1u) func(%prevent_dce:ptr<storage, array<f16, 1024>, read_write> [@binding_point(0, 0)]):void {
+  $B2: {
+    %12:tint_module_vars_struct = construct %prevent_dce
+    %tint_module_vars:tint_module_vars_struct = let %12
+    %14:subgroup_matrix_result<f16, 8, 8> = call %subgroupMatrixMultiply_8744bd
+    %15:ptr<storage, array<f16, 1024>, read_write> = access %tint_module_vars, 0u
+    %16:ptr<storage, f16, read_write> = access %15, 0u
+    %17:u64 = msl.convert 64u
+    %18:void = msl.simdgroup_store %14, %16, %17, vec2<u64>(0u64), false
+    ret
+  }
+}
+
+
+tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8744bd.wgsl.expected.spvasm
similarity index 71%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/8744bd.wgsl.expected.spvasm
index c126b53..e12f925 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8744bd.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 37
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
@@ -17,7 +17,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_c75357 "subgroupMatrixMultiply_c75357"
+               OpName %subgroupMatrixMultiply_8744bd "subgroupMatrixMultiply_8744bd"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_half_uint_1024 ArrayStride 2
@@ -37,32 +37,33 @@
      %uint_2 = OpConstant %uint 2
           %9 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
+      %float = OpTypeFloat 32
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
      %uint_1 = OpConstant %uint 1
-         %19 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_1
-         %18 = OpConstantNull %19
-         %21 = OpConstantNull %9
+         %20 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_1
+         %19 = OpConstantNull %20
+         %22 = OpConstantNull %9
 %_ptr_Function_9 = OpTypePointer Function %9
        %void = OpTypeVoid
-         %28 = OpTypeFunction %void
+         %29 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_half_uint_1024 = OpTypePointer StorageBuffer %_arr_half_uint_1024
 %_ptr_StorageBuffer_half = OpTypePointer StorageBuffer %half
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_c75357 = OpFunction %9 None %13
+%subgroupMatrixMultiply_8744bd = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21
-               OpStore %res %22
-         %25 = OpLoad %9 %res None
-               OpReturnValue %25
+         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22
+               OpStore %res %23
+         %26 = OpLoad %9 %res None
+               OpReturnValue %26
                OpFunctionEnd
-%compute_main = OpFunction %void None %28
-         %29 = OpLabel
-         %30 = OpFunctionCall %9 %subgroupMatrixMultiply_c75357
-         %31 = OpAccessChain %_ptr_StorageBuffer__arr_half_uint_1024 %1 %uint_0
-         %33 = OpAccessChain %_ptr_StorageBuffer_half %31 %uint_0
-               OpCooperativeMatrixStoreKHR %33 %30 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %29
+         %30 = OpLabel
+         %31 = OpFunctionCall %9 %subgroupMatrixMultiply_8744bd
+         %32 = OpAccessChain %_ptr_StorageBuffer__arr_half_uint_1024 %1 %uint_0
+         %34 = OpAccessChain %_ptr_StorageBuffer_half %32 %uint_0
+               OpCooperativeMatrixStoreKHR %34 %31 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8744bd.wgsl.expected.wgsl
similarity index 67%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/8744bd.wgsl.expected.wgsl
index 8b49321..979fa87 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8744bd.wgsl.expected.wgsl
@@ -3,12 +3,12 @@
 
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
 
-fn subgroupMatrixMultiply_c75357() -> subgroup_matrix_result<f16, 8, 8> {
-  var res : subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<f16, 8, 8>(), subgroup_matrix_right<f16, 8, 8>());
+fn subgroupMatrixMultiply_8744bd() -> subgroup_matrix_result<f16, 8, 8> {
+  var res : subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply<f16>(subgroup_matrix_left<f32, 8, 8>(), subgroup_matrix_right<f32, 8, 8>());
   return res;
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_c75357(), false, 64);
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_8744bd(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8c3aac.wgsl
similarity index 85%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/8c3aac.wgsl
index ebad2a1..4c67368 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8c3aac.wgsl
@@ -42,12 +42,12 @@
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<u32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, u32, 8, 8>, subgroup_matrix<right, u32, 8, 8>) -> subgroup_matrix<result, u32, 8, 8>
-fn subgroupMatrixMultiply_837e77() -> subgroup_matrix_result<u32, 8, 8>{
-  var res: subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<u32, 8, 8>(), subgroup_matrix_right<u32, 8, 8>());
+// fn subgroupMatrixMultiply<TR: u32>(subgroup_matrix<left, f32, 8, 8>, subgroup_matrix<right, f32, 8, 8>) -> subgroup_matrix<result, u32, 8, 8>
+fn subgroupMatrixMultiply_8c3aac() -> subgroup_matrix_result<u32, 8, 8>{
+  var res: subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply<u32>(subgroup_matrix_left<f32, 8, 8>(), subgroup_matrix_right<f32, 8, 8>());
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_837e77(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_8c3aac(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8c3aac.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/8c3aac.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8c3aac.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8c3aac.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/8c3aac.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8c3aac.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8c3aac.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/8c3aac.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8c3aac.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/8c3aac.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8c3aac.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/8c3aac.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8c3aac.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/8c3aac.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8c3aac.wgsl.expected.spvasm
similarity index 69%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/8c3aac.wgsl.expected.spvasm
index 593db93..52370c9 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8c3aac.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 36
+; Bound: 37
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
@@ -14,7 +14,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_837e77 "subgroupMatrixMultiply_837e77"
+               OpName %subgroupMatrixMultiply_8c3aac "subgroupMatrixMultiply_8c3aac"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_uint_uint_1024 ArrayStride 4
@@ -33,32 +33,33 @@
      %uint_2 = OpConstant %uint 2
           %8 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_2
          %12 = OpTypeFunction %8
+      %float = OpTypeFloat 32
      %uint_0 = OpConstant %uint 0
-         %15 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_0
+         %15 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_0
          %14 = OpConstantNull %15
      %uint_1 = OpConstant %uint 1
-         %18 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_1
-         %17 = OpConstantNull %18
-         %20 = OpConstantNull %8
+         %19 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_1
+         %18 = OpConstantNull %19
+         %21 = OpConstantNull %8
 %_ptr_Function_8 = OpTypePointer Function %8
        %void = OpTypeVoid
-         %27 = OpTypeFunction %void
+         %28 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_uint_uint_1024 = OpTypePointer StorageBuffer %_arr_uint_uint_1024
 %_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_837e77 = OpFunction %8 None %12
+%subgroupMatrixMultiply_8c3aac = OpFunction %8 None %12
          %13 = OpLabel
         %res = OpVariable %_ptr_Function_8 Function
-         %21 = OpCooperativeMatrixMulAddKHR %8 %14 %17 %20
-               OpStore %res %21
-         %24 = OpLoad %8 %res None
-               OpReturnValue %24
+         %22 = OpCooperativeMatrixMulAddKHR %8 %14 %18 %21
+               OpStore %res %22
+         %25 = OpLoad %8 %res None
+               OpReturnValue %25
                OpFunctionEnd
-%compute_main = OpFunction %void None %27
-         %28 = OpLabel
-         %29 = OpFunctionCall %8 %subgroupMatrixMultiply_837e77
-         %30 = OpAccessChain %_ptr_StorageBuffer__arr_uint_uint_1024 %1 %uint_0
-         %32 = OpAccessChain %_ptr_StorageBuffer_uint %30 %uint_0
-               OpCooperativeMatrixStoreKHR %32 %29 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %8 %subgroupMatrixMultiply_8c3aac
+         %31 = OpAccessChain %_ptr_StorageBuffer__arr_uint_uint_1024 %1 %uint_0
+         %33 = OpAccessChain %_ptr_StorageBuffer_uint %31 %uint_0
+               OpCooperativeMatrixStoreKHR %33 %30 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8c3aac.wgsl.expected.wgsl
similarity index 66%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/8c3aac.wgsl.expected.wgsl
index bb5d1bb..45959a0 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8c3aac.wgsl.expected.wgsl
@@ -2,12 +2,12 @@
 
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<u32, 1024>;
 
-fn subgroupMatrixMultiply_837e77() -> subgroup_matrix_result<u32, 8, 8> {
-  var res : subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<u32, 8, 8>(), subgroup_matrix_right<u32, 8, 8>());
+fn subgroupMatrixMultiply_8c3aac() -> subgroup_matrix_result<u32, 8, 8> {
+  var res : subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply<u32>(subgroup_matrix_left<f32, 8, 8>(), subgroup_matrix_right<f32, 8, 8>());
   return res;
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_837e77(), false, 64);
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_8c3aac(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/957137.wgsl
similarity index 83%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/957137.wgsl
index ebad2a1..8b5a981 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/957137.wgsl
@@ -35,19 +35,21 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 
-// [hlsl-dxc] flags: --hlsl-shader-model 60
+// flags: --hlsl-shader-model 62
 
 
 enable chromium_experimental_subgroup_matrix;
+
+enable f16;
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<u32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, u32, 8, 8>, subgroup_matrix<right, u32, 8, 8>) -> subgroup_matrix<result, u32, 8, 8>
-fn subgroupMatrixMultiply_837e77() -> subgroup_matrix_result<u32, 8, 8>{
-  var res: subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<u32, 8, 8>(), subgroup_matrix_right<u32, 8, 8>());
+// fn subgroupMatrixMultiply<TR: u32>(subgroup_matrix<left, f16, 8, 8>, subgroup_matrix<right, f16, 8, 8>) -> subgroup_matrix<result, u32, 8, 8>
+fn subgroupMatrixMultiply_957137() -> subgroup_matrix_result<u32, 8, 8>{
+  var res: subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply<u32>(subgroup_matrix_left<f16, 8, 8>(), subgroup_matrix_right<f16, 8, 8>());
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_837e77(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_957137(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/957137.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/957137.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/957137.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/957137.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/957137.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/957137.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/957137.wgsl.expected.glsl
similarity index 100%
rename from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.glsl
rename to test/tint/builtins/gen/literal/subgroupMatrixMultiply/957137.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/957137.wgsl.expected.ir.dxc.hlsl
similarity index 100%
rename from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.ir.dxc.hlsl
rename to test/tint/builtins/gen/literal/subgroupMatrixMultiply/957137.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/957137.wgsl.expected.ir.fxc.hlsl
similarity index 100%
rename from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.ir.fxc.hlsl
rename to test/tint/builtins/gen/literal/subgroupMatrixMultiply/957137.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/957137.wgsl.expected.msl
similarity index 100%
rename from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl
rename to test/tint/builtins/gen/literal/subgroupMatrixMultiply/957137.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/957137.wgsl.expected.spvasm
similarity index 67%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/957137.wgsl.expected.spvasm
index 593db93..33e1dca 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/957137.wgsl.expected.spvasm
@@ -1,12 +1,15 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 36
+; Bound: 37
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
                OpCapability VulkanMemoryModelDeviceScope
                OpCapability CooperativeMatrixKHR
+               OpCapability Float16
+               OpCapability UniformAndStorageBuffer16BitAccess
+               OpCapability StorageBuffer16BitAccess
                OpExtension "SPV_KHR_vulkan_memory_model"
                OpExtension "SPV_KHR_cooperative_matrix"
                OpMemoryModel Logical Vulkan
@@ -14,7 +17,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_837e77 "subgroupMatrixMultiply_837e77"
+               OpName %subgroupMatrixMultiply_957137 "subgroupMatrixMultiply_957137"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_uint_uint_1024 ArrayStride 4
@@ -33,32 +36,33 @@
      %uint_2 = OpConstant %uint 2
           %8 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_2
          %12 = OpTypeFunction %8
+       %half = OpTypeFloat 16
      %uint_0 = OpConstant %uint 0
-         %15 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_0
+         %15 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_0
          %14 = OpConstantNull %15
      %uint_1 = OpConstant %uint 1
-         %18 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_1
-         %17 = OpConstantNull %18
-         %20 = OpConstantNull %8
+         %19 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_1
+         %18 = OpConstantNull %19
+         %21 = OpConstantNull %8
 %_ptr_Function_8 = OpTypePointer Function %8
        %void = OpTypeVoid
-         %27 = OpTypeFunction %void
+         %28 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_uint_uint_1024 = OpTypePointer StorageBuffer %_arr_uint_uint_1024
 %_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_837e77 = OpFunction %8 None %12
+%subgroupMatrixMultiply_957137 = OpFunction %8 None %12
          %13 = OpLabel
         %res = OpVariable %_ptr_Function_8 Function
-         %21 = OpCooperativeMatrixMulAddKHR %8 %14 %17 %20
-               OpStore %res %21
-         %24 = OpLoad %8 %res None
-               OpReturnValue %24
+         %22 = OpCooperativeMatrixMulAddKHR %8 %14 %18 %21
+               OpStore %res %22
+         %25 = OpLoad %8 %res None
+               OpReturnValue %25
                OpFunctionEnd
-%compute_main = OpFunction %void None %27
-         %28 = OpLabel
-         %29 = OpFunctionCall %8 %subgroupMatrixMultiply_837e77
-         %30 = OpAccessChain %_ptr_StorageBuffer__arr_uint_uint_1024 %1 %uint_0
-         %32 = OpAccessChain %_ptr_StorageBuffer_uint %30 %uint_0
-               OpCooperativeMatrixStoreKHR %32 %29 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %8 %subgroupMatrixMultiply_957137
+         %31 = OpAccessChain %_ptr_StorageBuffer__arr_uint_uint_1024 %1 %uint_0
+         %33 = OpAccessChain %_ptr_StorageBuffer_uint %31 %uint_0
+               OpCooperativeMatrixStoreKHR %33 %30 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/957137.wgsl.expected.wgsl
similarity index 64%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/957137.wgsl.expected.wgsl
index bb5d1bb..7b9dd2c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/957137.wgsl.expected.wgsl
@@ -1,13 +1,14 @@
 enable chromium_experimental_subgroup_matrix;
+enable f16;
 
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<u32, 1024>;
 
-fn subgroupMatrixMultiply_837e77() -> subgroup_matrix_result<u32, 8, 8> {
-  var res : subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<u32, 8, 8>(), subgroup_matrix_right<u32, 8, 8>());
+fn subgroupMatrixMultiply_957137() -> subgroup_matrix_result<u32, 8, 8> {
+  var res : subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply<u32>(subgroup_matrix_left<f16, 8, 8>(), subgroup_matrix_right<f16, 8, 8>());
   return res;
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_837e77(), false, 64);
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_957137(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/bf2e54.wgsl
similarity index 85%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/bf2e54.wgsl
index 01f8196..b263a9f 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/bf2e54.wgsl
@@ -44,12 +44,12 @@
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, f16, 8, 8>, subgroup_matrix<right, f16, 8, 8>) -> subgroup_matrix<result, f16, 8, 8>
-fn subgroupMatrixMultiply_c75357() -> subgroup_matrix_result<f16, 8, 8>{
-  var res: subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<f16, 8, 8>(), subgroup_matrix_right<f16, 8, 8>());
+// fn subgroupMatrixMultiply<TR: f16>(subgroup_matrix<left, i32, 8, 8>, subgroup_matrix<right, i32, 8, 8>) -> subgroup_matrix<result, f16, 8, 8>
+fn subgroupMatrixMultiply_bf2e54() -> subgroup_matrix_result<f16, 8, 8>{
+  var res: subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply<f16>(subgroup_matrix_left<i32, 8, 8>(), subgroup_matrix_right<i32, 8, 8>());
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_c75357(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_bf2e54(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/bf2e54.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/bf2e54.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/bf2e54.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/bf2e54.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/bf2e54.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/bf2e54.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/bf2e54.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/bf2e54.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/bf2e54.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/bf2e54.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/bf2e54.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/bf2e54.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/bf2e54.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/bf2e54.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/bf2e54.wgsl.expected.spvasm
similarity index 71%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/bf2e54.wgsl.expected.spvasm
index c126b53..9e42e3e 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/bf2e54.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 37
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
@@ -17,7 +17,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_c75357 "subgroupMatrixMultiply_c75357"
+               OpName %subgroupMatrixMultiply_bf2e54 "subgroupMatrixMultiply_bf2e54"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_half_uint_1024 ArrayStride 2
@@ -37,32 +37,33 @@
      %uint_2 = OpConstant %uint 2
           %9 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
+        %int = OpTypeInt 32 1
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
      %uint_1 = OpConstant %uint 1
-         %19 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_1
-         %18 = OpConstantNull %19
-         %21 = OpConstantNull %9
+         %20 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_1
+         %19 = OpConstantNull %20
+         %22 = OpConstantNull %9
 %_ptr_Function_9 = OpTypePointer Function %9
        %void = OpTypeVoid
-         %28 = OpTypeFunction %void
+         %29 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_half_uint_1024 = OpTypePointer StorageBuffer %_arr_half_uint_1024
 %_ptr_StorageBuffer_half = OpTypePointer StorageBuffer %half
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_c75357 = OpFunction %9 None %13
+%subgroupMatrixMultiply_bf2e54 = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21
-               OpStore %res %22
-         %25 = OpLoad %9 %res None
-               OpReturnValue %25
+         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22
+               OpStore %res %23
+         %26 = OpLoad %9 %res None
+               OpReturnValue %26
                OpFunctionEnd
-%compute_main = OpFunction %void None %28
-         %29 = OpLabel
-         %30 = OpFunctionCall %9 %subgroupMatrixMultiply_c75357
-         %31 = OpAccessChain %_ptr_StorageBuffer__arr_half_uint_1024 %1 %uint_0
-         %33 = OpAccessChain %_ptr_StorageBuffer_half %31 %uint_0
-               OpCooperativeMatrixStoreKHR %33 %30 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %29
+         %30 = OpLabel
+         %31 = OpFunctionCall %9 %subgroupMatrixMultiply_bf2e54
+         %32 = OpAccessChain %_ptr_StorageBuffer__arr_half_uint_1024 %1 %uint_0
+         %34 = OpAccessChain %_ptr_StorageBuffer_half %32 %uint_0
+               OpCooperativeMatrixStoreKHR %34 %31 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/bf2e54.wgsl.expected.wgsl
similarity index 67%
rename from test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.wgsl
rename to test/tint/builtins/gen/literal/subgroupMatrixMultiply/bf2e54.wgsl.expected.wgsl
index 8b49321..8619be3 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/bf2e54.wgsl.expected.wgsl
@@ -3,12 +3,12 @@
 
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
 
-fn subgroupMatrixMultiply_c75357() -> subgroup_matrix_result<f16, 8, 8> {
-  var res : subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<f16, 8, 8>(), subgroup_matrix_right<f16, 8, 8>());
+fn subgroupMatrixMultiply_bf2e54() -> subgroup_matrix_result<f16, 8, 8> {
+  var res : subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply<f16>(subgroup_matrix_left<i32, 8, 8>(), subgroup_matrix_right<i32, 8, 8>());
   return res;
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_c75357(), false, 64);
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_bf2e54(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c26fb9.wgsl
similarity index 85%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/c26fb9.wgsl
index 9c040d0..3ca2b21 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c26fb9.wgsl
@@ -42,12 +42,12 @@
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, f32, 8, 8>, subgroup_matrix<right, f32, 8, 8>) -> subgroup_matrix<result, f32, 8, 8>
-fn subgroupMatrixMultiply_077fe6() -> subgroup_matrix_result<f32, 8, 8>{
-  var res: subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<f32, 8, 8>(), subgroup_matrix_right<f32, 8, 8>());
+// fn subgroupMatrixMultiply<TR: f32>(subgroup_matrix<left, u32, 8, 8>, subgroup_matrix<right, u32, 8, 8>) -> subgroup_matrix<result, f32, 8, 8>
+fn subgroupMatrixMultiply_c26fb9() -> subgroup_matrix_result<f32, 8, 8>{
+  var res: subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply<f32>(subgroup_matrix_left<u32, 8, 8>(), subgroup_matrix_right<u32, 8, 8>());
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_077fe6(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_c26fb9(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c26fb9.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/c26fb9.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c26fb9.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c26fb9.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/c26fb9.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c26fb9.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c26fb9.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/c26fb9.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c26fb9.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/c26fb9.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c26fb9.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/c26fb9.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c26fb9.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/c26fb9.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c26fb9.wgsl.expected.spvasm
similarity index 87%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/c26fb9.wgsl.expected.spvasm
index a52ca13..5fa43ed 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c26fb9.wgsl.expected.spvasm
@@ -14,7 +14,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_077fe6 "subgroupMatrixMultiply_077fe6"
+               OpName %subgroupMatrixMultiply_c26fb9 "subgroupMatrixMultiply_c26fb9"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_float_uint_1024 ArrayStride 4
@@ -35,10 +35,10 @@
           %9 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
      %uint_1 = OpConstant %uint 1
-         %19 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_1
+         %19 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_1
          %18 = OpConstantNull %19
          %21 = OpConstantNull %9
 %_ptr_Function_9 = OpTypePointer Function %9
@@ -47,7 +47,7 @@
 %_ptr_StorageBuffer__arr_float_uint_1024 = OpTypePointer StorageBuffer %_arr_float_uint_1024
 %_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_077fe6 = OpFunction %9 None %13
+%subgroupMatrixMultiply_c26fb9 = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
          %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21
@@ -57,7 +57,7 @@
                OpFunctionEnd
 %compute_main = OpFunction %void None %28
          %29 = OpLabel
-         %30 = OpFunctionCall %9 %subgroupMatrixMultiply_077fe6
+         %30 = OpFunctionCall %9 %subgroupMatrixMultiply_c26fb9
          %31 = OpAccessChain %_ptr_StorageBuffer__arr_float_uint_1024 %1 %uint_0
          %33 = OpAccessChain %_ptr_StorageBuffer_float %31 %uint_0
                OpCooperativeMatrixStoreKHR %33 %30 %uint_0 %uint_64 NonPrivatePointer
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c26fb9.wgsl.expected.wgsl
similarity index 66%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/c26fb9.wgsl.expected.wgsl
index 1aa48db..c8753b9 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c26fb9.wgsl.expected.wgsl
@@ -2,12 +2,12 @@
 
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
 
-fn subgroupMatrixMultiply_077fe6() -> subgroup_matrix_result<f32, 8, 8> {
-  var res : subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<f32, 8, 8>(), subgroup_matrix_right<f32, 8, 8>());
+fn subgroupMatrixMultiply_c26fb9() -> subgroup_matrix_result<f32, 8, 8> {
+  var res : subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply<f32>(subgroup_matrix_left<u32, 8, 8>(), subgroup_matrix_right<u32, 8, 8>());
   return res;
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_077fe6(), false, 64);
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_c26fb9(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.dxc.hlsl
deleted file mode 100644
index 5664c5f..0000000
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.dxc.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: trace/BPT trap
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.fxc.hlsl
deleted file mode 100644
index e202956..0000000
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.fxc.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: INVALID
-
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: trace/BPT trap
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.glsl
deleted file mode 100644
index cc19bf0..0000000
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.glsl
+++ /dev/null
@@ -1,5 +0,0 @@
-SKIP: INVALID
-
-error: subgroup matrices are not supported by the GLSL backend
-
-tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.ir.dxc.hlsl
deleted file mode 100644
index dda740a..0000000
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.ir.dxc.hlsl
+++ /dev/null
@@ -1,5 +0,0 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the HLSL backend
-
-tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.ir.fxc.hlsl
deleted file mode 100644
index 4709805..0000000
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.ir.fxc.hlsl
+++ /dev/null
@@ -1,5 +0,0 @@
-SKIP: INVALID
-
-error: subgroup matrices are not supported by the HLSL backend
-
-tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/da556f.wgsl
similarity index 85%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/da556f.wgsl
index ebad2a1..ab8ceac 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/da556f.wgsl
@@ -42,12 +42,12 @@
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<u32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, u32, 8, 8>, subgroup_matrix<right, u32, 8, 8>) -> subgroup_matrix<result, u32, 8, 8>
-fn subgroupMatrixMultiply_837e77() -> subgroup_matrix_result<u32, 8, 8>{
-  var res: subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<u32, 8, 8>(), subgroup_matrix_right<u32, 8, 8>());
+// fn subgroupMatrixMultiply<TR: u32>(subgroup_matrix<left, u32, 8, 8>, subgroup_matrix<right, u32, 8, 8>) -> subgroup_matrix<result, u32, 8, 8>
+fn subgroupMatrixMultiply_da556f() -> subgroup_matrix_result<u32, 8, 8>{
+  var res: subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply<u32>(subgroup_matrix_left<u32, 8, 8>(), subgroup_matrix_right<u32, 8, 8>());
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_837e77(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_da556f(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/da556f.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/da556f.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/da556f.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/da556f.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/da556f.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/da556f.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/da556f.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/da556f.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/da556f.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/da556f.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/da556f.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/da556f.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/da556f.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/da556f.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/da556f.wgsl.expected.spvasm
similarity index 93%
rename from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm
rename to test/tint/builtins/gen/literal/subgroupMatrixMultiply/da556f.wgsl.expected.spvasm
index 593db93..8ce7b4d 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/da556f.wgsl.expected.spvasm
@@ -14,7 +14,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_837e77 "subgroupMatrixMultiply_837e77"
+               OpName %subgroupMatrixMultiply_da556f "subgroupMatrixMultiply_da556f"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_uint_uint_1024 ArrayStride 4
@@ -46,7 +46,7 @@
 %_ptr_StorageBuffer__arr_uint_uint_1024 = OpTypePointer StorageBuffer %_arr_uint_uint_1024
 %_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_837e77 = OpFunction %8 None %12
+%subgroupMatrixMultiply_da556f = OpFunction %8 None %12
          %13 = OpLabel
         %res = OpVariable %_ptr_Function_8 Function
          %21 = OpCooperativeMatrixMulAddKHR %8 %14 %17 %20
@@ -56,7 +56,7 @@
                OpFunctionEnd
 %compute_main = OpFunction %void None %27
          %28 = OpLabel
-         %29 = OpFunctionCall %8 %subgroupMatrixMultiply_837e77
+         %29 = OpFunctionCall %8 %subgroupMatrixMultiply_da556f
          %30 = OpAccessChain %_ptr_StorageBuffer__arr_uint_uint_1024 %1 %uint_0
          %32 = OpAccessChain %_ptr_StorageBuffer_uint %30 %uint_0
                OpCooperativeMatrixStoreKHR %32 %29 %uint_0 %uint_64 NonPrivatePointer
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/da556f.wgsl.expected.wgsl
similarity index 66%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/da556f.wgsl.expected.wgsl
index bb5d1bb..dd96f3b 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/da556f.wgsl.expected.wgsl
@@ -2,12 +2,12 @@
 
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<u32, 1024>;
 
-fn subgroupMatrixMultiply_837e77() -> subgroup_matrix_result<u32, 8, 8> {
-  var res : subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<u32, 8, 8>(), subgroup_matrix_right<u32, 8, 8>());
+fn subgroupMatrixMultiply_da556f() -> subgroup_matrix_result<u32, 8, 8> {
+  var res : subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply<u32>(subgroup_matrix_left<u32, 8, 8>(), subgroup_matrix_right<u32, 8, 8>());
   return res;
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_837e77(), false, 64);
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_da556f(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/db4ee8.wgsl
similarity index 85%
rename from test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl
rename to test/tint/builtins/gen/literal/subgroupMatrixMultiply/db4ee8.wgsl
index 01f8196..4c9b668 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/db4ee8.wgsl
@@ -44,12 +44,12 @@
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, f16, 8, 8>, subgroup_matrix<right, f16, 8, 8>) -> subgroup_matrix<result, f16, 8, 8>
-fn subgroupMatrixMultiply_c75357() -> subgroup_matrix_result<f16, 8, 8>{
-  var res: subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<f16, 8, 8>(), subgroup_matrix_right<f16, 8, 8>());
+// fn subgroupMatrixMultiply<TR: f16>(subgroup_matrix<left, u32, 8, 8>, subgroup_matrix<right, u32, 8, 8>) -> subgroup_matrix<result, f16, 8, 8>
+fn subgroupMatrixMultiply_db4ee8() -> subgroup_matrix_result<f16, 8, 8>{
+  var res: subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply<f16>(subgroup_matrix_left<u32, 8, 8>(), subgroup_matrix_right<u32, 8, 8>());
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_c75357(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_db4ee8(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/db4ee8.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/db4ee8.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/db4ee8.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/db4ee8.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/db4ee8.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/db4ee8.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/db4ee8.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/db4ee8.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/db4ee8.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/db4ee8.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/db4ee8.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/db4ee8.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/db4ee8.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/db4ee8.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/db4ee8.wgsl.expected.spvasm
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/db4ee8.wgsl.expected.spvasm
index c126b53..db9a415 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/db4ee8.wgsl.expected.spvasm
@@ -17,7 +17,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_c75357 "subgroupMatrixMultiply_c75357"
+               OpName %subgroupMatrixMultiply_db4ee8 "subgroupMatrixMultiply_db4ee8"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_half_uint_1024 ArrayStride 2
@@ -38,10 +38,10 @@
           %9 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
      %uint_1 = OpConstant %uint 1
-         %19 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_1
+         %19 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_1
          %18 = OpConstantNull %19
          %21 = OpConstantNull %9
 %_ptr_Function_9 = OpTypePointer Function %9
@@ -50,7 +50,7 @@
 %_ptr_StorageBuffer__arr_half_uint_1024 = OpTypePointer StorageBuffer %_arr_half_uint_1024
 %_ptr_StorageBuffer_half = OpTypePointer StorageBuffer %half
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_c75357 = OpFunction %9 None %13
+%subgroupMatrixMultiply_db4ee8 = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
          %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21
@@ -60,7 +60,7 @@
                OpFunctionEnd
 %compute_main = OpFunction %void None %28
          %29 = OpLabel
-         %30 = OpFunctionCall %9 %subgroupMatrixMultiply_c75357
+         %30 = OpFunctionCall %9 %subgroupMatrixMultiply_db4ee8
          %31 = OpAccessChain %_ptr_StorageBuffer__arr_half_uint_1024 %1 %uint_0
          %33 = OpAccessChain %_ptr_StorageBuffer_half %31 %uint_0
                OpCooperativeMatrixStoreKHR %33 %30 %uint_0 %uint_64 NonPrivatePointer
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/db4ee8.wgsl.expected.wgsl
similarity index 67%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/db4ee8.wgsl.expected.wgsl
index 8b49321..566c2df 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/db4ee8.wgsl.expected.wgsl
@@ -3,12 +3,12 @@
 
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
 
-fn subgroupMatrixMultiply_c75357() -> subgroup_matrix_result<f16, 8, 8> {
-  var res : subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<f16, 8, 8>(), subgroup_matrix_right<f16, 8, 8>());
+fn subgroupMatrixMultiply_db4ee8() -> subgroup_matrix_result<f16, 8, 8> {
+  var res : subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply<f16>(subgroup_matrix_left<u32, 8, 8>(), subgroup_matrix_right<u32, 8, 8>());
   return res;
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_c75357(), false, 64);
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_db4ee8(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/f51206.wgsl
similarity index 85%
rename from test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl
rename to test/tint/builtins/gen/literal/subgroupMatrixMultiply/f51206.wgsl
index b529f72..c9b2829 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/f51206.wgsl
@@ -42,12 +42,12 @@
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, i32, 8, 8>, subgroup_matrix<right, i32, 8, 8>) -> subgroup_matrix<result, i32, 8, 8>
-fn subgroupMatrixMultiply_fd0481() -> subgroup_matrix_result<i32, 8, 8>{
-  var res: subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<i32, 8, 8>(), subgroup_matrix_right<i32, 8, 8>());
+// fn subgroupMatrixMultiply<TR: i32>(subgroup_matrix<left, u32, 8, 8>, subgroup_matrix<right, u32, 8, 8>) -> subgroup_matrix<result, i32, 8, 8>
+fn subgroupMatrixMultiply_f51206() -> subgroup_matrix_result<i32, 8, 8>{
+  var res: subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply<i32>(subgroup_matrix_left<u32, 8, 8>(), subgroup_matrix_right<u32, 8, 8>());
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_fd0481(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_f51206(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/f51206.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/f51206.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/f51206.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/f51206.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/f51206.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/f51206.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/f51206.wgsl.expected.glsl
similarity index 100%
rename from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
rename to test/tint/builtins/gen/literal/subgroupMatrixMultiply/f51206.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/f51206.wgsl.expected.ir.dxc.hlsl
similarity index 100%
rename from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
rename to test/tint/builtins/gen/literal/subgroupMatrixMultiply/f51206.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/f51206.wgsl.expected.ir.fxc.hlsl
similarity index 100%
rename from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
rename to test/tint/builtins/gen/literal/subgroupMatrixMultiply/f51206.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/f51206.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/f51206.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/f51206.wgsl.expected.spvasm
similarity index 87%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/f51206.wgsl.expected.spvasm
index 4f290ad..f21c6a0 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/f51206.wgsl.expected.spvasm
@@ -14,7 +14,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_fd0481 "subgroupMatrixMultiply_fd0481"
+               OpName %subgroupMatrixMultiply_f51206 "subgroupMatrixMultiply_f51206"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_int_uint_1024 ArrayStride 4
@@ -35,10 +35,10 @@
           %9 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
      %uint_1 = OpConstant %uint 1
-         %19 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_1
+         %19 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_1
          %18 = OpConstantNull %19
          %21 = OpConstantNull %9
 %_ptr_Function_9 = OpTypePointer Function %9
@@ -47,7 +47,7 @@
 %_ptr_StorageBuffer__arr_int_uint_1024 = OpTypePointer StorageBuffer %_arr_int_uint_1024
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_fd0481 = OpFunction %9 None %13
+%subgroupMatrixMultiply_f51206 = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
          %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21
@@ -57,7 +57,7 @@
                OpFunctionEnd
 %compute_main = OpFunction %void None %28
          %29 = OpLabel
-         %30 = OpFunctionCall %9 %subgroupMatrixMultiply_fd0481
+         %30 = OpFunctionCall %9 %subgroupMatrixMultiply_f51206
          %31 = OpAccessChain %_ptr_StorageBuffer__arr_int_uint_1024 %1 %uint_0
          %33 = OpAccessChain %_ptr_StorageBuffer_int %31 %uint_0
                OpCooperativeMatrixStoreKHR %33 %30 %uint_0 %uint_64 NonPrivatePointer
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/f51206.wgsl.expected.wgsl
similarity index 66%
rename from test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.wgsl
rename to test/tint/builtins/gen/literal/subgroupMatrixMultiply/f51206.wgsl.expected.wgsl
index ff6d387..b1ce169 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/f51206.wgsl.expected.wgsl
@@ -2,12 +2,12 @@
 
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
 
-fn subgroupMatrixMultiply_fd0481() -> subgroup_matrix_result<i32, 8, 8> {
-  var res : subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<i32, 8, 8>(), subgroup_matrix_right<i32, 8, 8>());
+fn subgroupMatrixMultiply_f51206() -> subgroup_matrix_result<i32, 8, 8> {
+  var res : subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply<i32>(subgroup_matrix_left<u32, 8, 8>(), subgroup_matrix_right<u32, 8, 8>());
   return res;
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_fd0481(), false, 64);
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_f51206(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fa5318.wgsl
similarity index 85%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/fa5318.wgsl
index b529f72..7433547 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fa5318.wgsl
@@ -42,12 +42,12 @@
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, i32, 8, 8>, subgroup_matrix<right, i32, 8, 8>) -> subgroup_matrix<result, i32, 8, 8>
-fn subgroupMatrixMultiply_fd0481() -> subgroup_matrix_result<i32, 8, 8>{
-  var res: subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<i32, 8, 8>(), subgroup_matrix_right<i32, 8, 8>());
+// fn subgroupMatrixMultiply<TR: i32>(subgroup_matrix<left, f32, 8, 8>, subgroup_matrix<right, f32, 8, 8>) -> subgroup_matrix<result, i32, 8, 8>
+fn subgroupMatrixMultiply_fa5318() -> subgroup_matrix_result<i32, 8, 8>{
+  var res: subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply<i32>(subgroup_matrix_left<f32, 8, 8>(), subgroup_matrix_right<f32, 8, 8>());
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_fd0481(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_fa5318(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fa5318.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/fa5318.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fa5318.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fa5318.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/fa5318.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fa5318.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fa5318.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/fa5318.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fa5318.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/fa5318.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fa5318.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/fa5318.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fa5318.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/fa5318.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fa5318.wgsl.expected.spvasm
similarity index 69%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/fa5318.wgsl.expected.spvasm
index 4f290ad..dac5dea 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fa5318.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 37
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
@@ -14,7 +14,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_fd0481 "subgroupMatrixMultiply_fd0481"
+               OpName %subgroupMatrixMultiply_fa5318 "subgroupMatrixMultiply_fa5318"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_int_uint_1024 ArrayStride 4
@@ -34,32 +34,33 @@
      %uint_2 = OpConstant %uint 2
           %9 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
+      %float = OpTypeFloat 32
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
      %uint_1 = OpConstant %uint 1
-         %19 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_1
-         %18 = OpConstantNull %19
-         %21 = OpConstantNull %9
+         %20 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_1
+         %19 = OpConstantNull %20
+         %22 = OpConstantNull %9
 %_ptr_Function_9 = OpTypePointer Function %9
        %void = OpTypeVoid
-         %28 = OpTypeFunction %void
+         %29 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_int_uint_1024 = OpTypePointer StorageBuffer %_arr_int_uint_1024
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_fd0481 = OpFunction %9 None %13
+%subgroupMatrixMultiply_fa5318 = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21
-               OpStore %res %22
-         %25 = OpLoad %9 %res None
-               OpReturnValue %25
+         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22
+               OpStore %res %23
+         %26 = OpLoad %9 %res None
+               OpReturnValue %26
                OpFunctionEnd
-%compute_main = OpFunction %void None %28
-         %29 = OpLabel
-         %30 = OpFunctionCall %9 %subgroupMatrixMultiply_fd0481
-         %31 = OpAccessChain %_ptr_StorageBuffer__arr_int_uint_1024 %1 %uint_0
-         %33 = OpAccessChain %_ptr_StorageBuffer_int %31 %uint_0
-               OpCooperativeMatrixStoreKHR %33 %30 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %29
+         %30 = OpLabel
+         %31 = OpFunctionCall %9 %subgroupMatrixMultiply_fa5318
+         %32 = OpAccessChain %_ptr_StorageBuffer__arr_int_uint_1024 %1 %uint_0
+         %34 = OpAccessChain %_ptr_StorageBuffer_int %32 %uint_0
+               OpCooperativeMatrixStoreKHR %34 %31 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fa5318.wgsl.expected.wgsl
similarity index 66%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiply/fa5318.wgsl.expected.wgsl
index ff6d387..5a70b18 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fa5318.wgsl.expected.wgsl
@@ -2,12 +2,12 @@
 
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
 
-fn subgroupMatrixMultiply_fd0481() -> subgroup_matrix_result<i32, 8, 8> {
-  var res : subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<i32, 8, 8>(), subgroup_matrix_right<i32, 8, 8>());
+fn subgroupMatrixMultiply_fa5318() -> subgroup_matrix_result<i32, 8, 8> {
+  var res : subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply<i32>(subgroup_matrix_left<f32, 8, 8>(), subgroup_matrix_right<f32, 8, 8>());
   return res;
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_fd0481(), false, 64);
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_fa5318(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.dxc.hlsl
deleted file mode 100644
index 5664c5f..0000000
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.dxc.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: trace/BPT trap
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.fxc.hlsl
deleted file mode 100644
index e202956..0000000
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.fxc.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: INVALID
-
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: trace/BPT trap
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.glsl
deleted file mode 100644
index cc19bf0..0000000
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.glsl
+++ /dev/null
@@ -1,5 +0,0 @@
-SKIP: INVALID
-
-error: subgroup matrices are not supported by the GLSL backend
-
-tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.ir.dxc.hlsl
deleted file mode 100644
index dda740a..0000000
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.ir.dxc.hlsl
+++ /dev/null
@@ -1,5 +0,0 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the HLSL backend
-
-tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.ir.fxc.hlsl
deleted file mode 100644
index 4709805..0000000
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.ir.fxc.hlsl
+++ /dev/null
@@ -1,5 +0,0 @@
-SKIP: INVALID
-
-error: subgroup matrices are not supported by the HLSL backend
-
-tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.msl
deleted file mode 100644
index 5dba48c..0000000
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.msl
+++ /dev/null
@@ -1,5 +0,0 @@
-SKIP: INVALID
-
-error: non-float subgroup matrices are not supported by the MSL backend
-
-tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/071472.wgsl
similarity index 80%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/071472.wgsl
index 9c040d0..07889f3 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/071472.wgsl
@@ -35,19 +35,21 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 
-// [hlsl-dxc] flags: --hlsl-shader-model 60
+// flags: --hlsl-shader-model 62
 
 
 enable chromium_experimental_subgroup_matrix;
+
+enable f16;
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, f32, 8, 8>, subgroup_matrix<right, f32, 8, 8>) -> subgroup_matrix<result, f32, 8, 8>
-fn subgroupMatrixMultiply_077fe6() -> subgroup_matrix_result<f32, 8, 8>{
-  var res: subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<f32, 8, 8>(), subgroup_matrix_right<f32, 8, 8>());
+// fn subgroupMatrixMultiplyAccumulate(subgroup_matrix<left, f16, 8, 8>, subgroup_matrix<right, f16, 8, 8>, subgroup_matrix<result, f32, 8, 8>) -> subgroup_matrix<result, f32, 8, 8>
+fn subgroupMatrixMultiplyAccumulate_071472() -> subgroup_matrix_result<f32, 8, 8>{
+  var res: subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiplyAccumulate(subgroup_matrix_left<f16, 8, 8>(), subgroup_matrix_right<f16, 8, 8>(), subgroup_matrix_result<f32, 8, 8>());
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_077fe6(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiplyAccumulate_071472(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.msl
new file mode 100644
index 0000000..a1dfab6
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.msl
@@ -0,0 +1,65 @@
+SKIP: FAILED
+
+
+enable chromium_experimental_subgroup_matrix;
+enable f16;
+
+@internal(disable_validation__binding_point_collision) @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
+
+fn subgroupMatrixMultiplyAccumulate_071472() -> subgroup_matrix_result<f32, 8, 8> {
+  var res : subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiplyAccumulate(subgroup_matrix_left<f16, 8, 8>(), subgroup_matrix_right<f16, 8, 8>(), subgroup_matrix_result<f32, 8, 8>());
+  return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiplyAccumulate_071472(), false, 64);
+}
+
+Failed to generate: :12:15 error: msl.simdgroup_multiply_accumulate: no matching call to 'msl.simdgroup_multiply_accumulate(subgroup_matrix_result<f32, 8, 8>, subgroup_matrix_left<f16, 8, 8>, subgroup_matrix_right<f16, 8, 8>, subgroup_matrix_result<f32, 8, 8>)'
+
+1 candidate function:
+ • 'msl.simdgroup_multiply_accumulate(subgroup_matrix<result, S, C, R>  ✓ , subgroup_matrix<left, S, K, R>  ✗ , subgroup_matrix<right, S, C, K>  ✗ , subgroup_matrix<result, S, C, R>  ✓ )' where:
+      ✓  'S' is 'f32' or 'f16'
+
+    %7:void = msl.simdgroup_multiply_accumulate %6, %2, %3, %4
+              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+:6:3 note: in block
+  $B1: {
+  ^^^
+
+note: # Disassembly
+tint_module_vars_struct = struct @align(1) {
+  prevent_dce:ptr<storage, array<f32, 1024>, read_write> @offset(0)
+}
+
+%subgroupMatrixMultiplyAccumulate_071472 = func():subgroup_matrix_result<f32, 8, 8> {
+  $B1: {
+    %2:subgroup_matrix_left<f16, 8, 8> = construct
+    %3:subgroup_matrix_right<f16, 8, 8> = construct
+    %4:subgroup_matrix_result<f32, 8, 8> = construct
+    %5:ptr<function, subgroup_matrix_result<f32, 8, 8>, read_write> = var
+    %6:subgroup_matrix_result<f32, 8, 8> = load %5
+    %7:void = msl.simdgroup_multiply_accumulate %6, %2, %3, %4
+    %8:subgroup_matrix_result<f32, 8, 8> = load %5
+    %res:ptr<function, subgroup_matrix_result<f32, 8, 8>, read_write> = var, %8
+    %10:subgroup_matrix_result<f32, 8, 8> = load %res
+    ret %10
+  }
+}
+%compute_main = @compute @workgroup_size(1u, 1u, 1u) func(%prevent_dce:ptr<storage, array<f32, 1024>, read_write> [@binding_point(0, 0)]):void {
+  $B2: {
+    %13:tint_module_vars_struct = construct %prevent_dce
+    %tint_module_vars:tint_module_vars_struct = let %13
+    %15:subgroup_matrix_result<f32, 8, 8> = call %subgroupMatrixMultiplyAccumulate_071472
+    %16:ptr<storage, array<f32, 1024>, read_write> = access %tint_module_vars, 0u
+    %17:ptr<storage, f32, read_write> = access %16, 0u
+    %18:u64 = msl.convert 64u
+    %19:void = msl.simdgroup_store %15, %17, %18, vec2<u64>(0u64), false
+    ret
+  }
+}
+
+
+tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.spvasm
similarity index 65%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.spvasm
index a52ca13..b9c3183 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.spvasm
@@ -1,12 +1,15 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 37
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
                OpCapability VulkanMemoryModelDeviceScope
                OpCapability CooperativeMatrixKHR
+               OpCapability Float16
+               OpCapability UniformAndStorageBuffer16BitAccess
+               OpCapability StorageBuffer16BitAccess
                OpExtension "SPV_KHR_vulkan_memory_model"
                OpExtension "SPV_KHR_cooperative_matrix"
                OpMemoryModel Logical Vulkan
@@ -14,7 +17,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_077fe6 "subgroupMatrixMultiply_077fe6"
+               OpName %subgroupMatrixMultiplyAccumulate_071472 "subgroupMatrixMultiplyAccumulate_071472"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_float_uint_1024 ArrayStride 4
@@ -34,32 +37,33 @@
      %uint_2 = OpConstant %uint 2
           %9 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
+       %half = OpTypeFloat 16
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
      %uint_1 = OpConstant %uint 1
-         %19 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_1
-         %18 = OpConstantNull %19
-         %21 = OpConstantNull %9
+         %20 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_1
+         %19 = OpConstantNull %20
+         %22 = OpConstantNull %9
 %_ptr_Function_9 = OpTypePointer Function %9
        %void = OpTypeVoid
-         %28 = OpTypeFunction %void
+         %29 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_float_uint_1024 = OpTypePointer StorageBuffer %_arr_float_uint_1024
 %_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_077fe6 = OpFunction %9 None %13
+%subgroupMatrixMultiplyAccumulate_071472 = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21
-               OpStore %res %22
-         %25 = OpLoad %9 %res None
-               OpReturnValue %25
+         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22
+               OpStore %res %23
+         %26 = OpLoad %9 %res None
+               OpReturnValue %26
                OpFunctionEnd
-%compute_main = OpFunction %void None %28
-         %29 = OpLabel
-         %30 = OpFunctionCall %9 %subgroupMatrixMultiply_077fe6
-         %31 = OpAccessChain %_ptr_StorageBuffer__arr_float_uint_1024 %1 %uint_0
-         %33 = OpAccessChain %_ptr_StorageBuffer_float %31 %uint_0
-               OpCooperativeMatrixStoreKHR %33 %30 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %29
+         %30 = OpLabel
+         %31 = OpFunctionCall %9 %subgroupMatrixMultiplyAccumulate_071472
+         %32 = OpAccessChain %_ptr_StorageBuffer__arr_float_uint_1024 %1 %uint_0
+         %34 = OpAccessChain %_ptr_StorageBuffer_float %32 %uint_0
+               OpCooperativeMatrixStoreKHR %34 %31 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.wgsl
new file mode 100644
index 0000000..7d33a0e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable chromium_experimental_subgroup_matrix;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
+
+fn subgroupMatrixMultiplyAccumulate_071472() -> subgroup_matrix_result<f32, 8, 8> {
+  var res : subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiplyAccumulate(subgroup_matrix_left<f16, 8, 8>(), subgroup_matrix_right<f16, 8, 8>(), subgroup_matrix_result<f32, 8, 8>());
+  return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiplyAccumulate_071472(), false, 64);
+}
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/075302.wgsl
similarity index 81%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/075302.wgsl
index e2f0f13..387a58a 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/075302.wgsl
@@ -44,14 +44,12 @@
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, f16, 8, 8>, subgroup_matrix<right, f16, 8, 8>) -> subgroup_matrix<result, f16, 8, 8>
-fn subgroupMatrixMultiply_c75357() -> subgroup_matrix_result<f16, 8, 8>{
-  var arg_0 = subgroup_matrix_left<f16, 8, 8>();
-  var arg_1 = subgroup_matrix_right<f16, 8, 8>();
-  var res: subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+// fn subgroupMatrixMultiplyAccumulate(subgroup_matrix<left, u32, 8, 8>, subgroup_matrix<right, u32, 8, 8>, subgroup_matrix<result, f16, 8, 8>) -> subgroup_matrix<result, f16, 8, 8>
+fn subgroupMatrixMultiplyAccumulate_075302() -> subgroup_matrix_result<f16, 8, 8>{
+  var res: subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiplyAccumulate(subgroup_matrix_left<u32, 8, 8>(), subgroup_matrix_right<u32, 8, 8>(), subgroup_matrix_result<f16, 8, 8>());
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_c75357(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiplyAccumulate_075302(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.spvasm
similarity index 88%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.spvasm
index c126b53..abbfe4e 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.spvasm
@@ -17,7 +17,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_c75357 "subgroupMatrixMultiply_c75357"
+               OpName %subgroupMatrixMultiplyAccumulate_075302 "subgroupMatrixMultiplyAccumulate_075302"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_half_uint_1024 ArrayStride 2
@@ -38,10 +38,10 @@
           %9 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
      %uint_1 = OpConstant %uint 1
-         %19 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_1
+         %19 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_1
          %18 = OpConstantNull %19
          %21 = OpConstantNull %9
 %_ptr_Function_9 = OpTypePointer Function %9
@@ -50,7 +50,7 @@
 %_ptr_StorageBuffer__arr_half_uint_1024 = OpTypePointer StorageBuffer %_arr_half_uint_1024
 %_ptr_StorageBuffer_half = OpTypePointer StorageBuffer %half
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_c75357 = OpFunction %9 None %13
+%subgroupMatrixMultiplyAccumulate_075302 = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
          %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21
@@ -60,7 +60,7 @@
                OpFunctionEnd
 %compute_main = OpFunction %void None %28
          %29 = OpLabel
-         %30 = OpFunctionCall %9 %subgroupMatrixMultiply_c75357
+         %30 = OpFunctionCall %9 %subgroupMatrixMultiplyAccumulate_075302
          %31 = OpAccessChain %_ptr_StorageBuffer__arr_half_uint_1024 %1 %uint_0
          %33 = OpAccessChain %_ptr_StorageBuffer_half %31 %uint_0
                OpCooperativeMatrixStoreKHR %33 %30 %uint_0 %uint_64 NonPrivatePointer
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.wgsl
new file mode 100644
index 0000000..c5c6fe2
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable chromium_experimental_subgroup_matrix;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
+
+fn subgroupMatrixMultiplyAccumulate_075302() -> subgroup_matrix_result<f16, 8, 8> {
+  var res : subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiplyAccumulate(subgroup_matrix_left<u32, 8, 8>(), subgroup_matrix_right<u32, 8, 8>(), subgroup_matrix_result<f16, 8, 8>());
+  return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiplyAccumulate_075302(), false, 64);
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/12354d.wgsl
similarity index 80%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/12354d.wgsl
index ebad2a1..32ee1aa 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/12354d.wgsl
@@ -35,19 +35,21 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 
-// [hlsl-dxc] flags: --hlsl-shader-model 60
+// flags: --hlsl-shader-model 62
 
 
 enable chromium_experimental_subgroup_matrix;
+
+enable f16;
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<u32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, u32, 8, 8>, subgroup_matrix<right, u32, 8, 8>) -> subgroup_matrix<result, u32, 8, 8>
-fn subgroupMatrixMultiply_837e77() -> subgroup_matrix_result<u32, 8, 8>{
-  var res: subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<u32, 8, 8>(), subgroup_matrix_right<u32, 8, 8>());
+// fn subgroupMatrixMultiplyAccumulate(subgroup_matrix<left, f16, 8, 8>, subgroup_matrix<right, f16, 8, 8>, subgroup_matrix<result, u32, 8, 8>) -> subgroup_matrix<result, u32, 8, 8>
+fn subgroupMatrixMultiplyAccumulate_12354d() -> subgroup_matrix_result<u32, 8, 8>{
+  var res: subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiplyAccumulate(subgroup_matrix_left<f16, 8, 8>(), subgroup_matrix_right<f16, 8, 8>(), subgroup_matrix_result<u32, 8, 8>());
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_837e77(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiplyAccumulate_12354d(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.spvasm
similarity index 66%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.spvasm
index 593db93..110cd14 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.spvasm
@@ -1,12 +1,15 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 36
+; Bound: 37
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
                OpCapability VulkanMemoryModelDeviceScope
                OpCapability CooperativeMatrixKHR
+               OpCapability Float16
+               OpCapability UniformAndStorageBuffer16BitAccess
+               OpCapability StorageBuffer16BitAccess
                OpExtension "SPV_KHR_vulkan_memory_model"
                OpExtension "SPV_KHR_cooperative_matrix"
                OpMemoryModel Logical Vulkan
@@ -14,7 +17,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_837e77 "subgroupMatrixMultiply_837e77"
+               OpName %subgroupMatrixMultiplyAccumulate_12354d "subgroupMatrixMultiplyAccumulate_12354d"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_uint_uint_1024 ArrayStride 4
@@ -33,32 +36,33 @@
      %uint_2 = OpConstant %uint 2
           %8 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_2
          %12 = OpTypeFunction %8
+       %half = OpTypeFloat 16
      %uint_0 = OpConstant %uint 0
-         %15 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_0
+         %15 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_0
          %14 = OpConstantNull %15
      %uint_1 = OpConstant %uint 1
-         %18 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_1
-         %17 = OpConstantNull %18
-         %20 = OpConstantNull %8
+         %19 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_1
+         %18 = OpConstantNull %19
+         %21 = OpConstantNull %8
 %_ptr_Function_8 = OpTypePointer Function %8
        %void = OpTypeVoid
-         %27 = OpTypeFunction %void
+         %28 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_uint_uint_1024 = OpTypePointer StorageBuffer %_arr_uint_uint_1024
 %_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_837e77 = OpFunction %8 None %12
+%subgroupMatrixMultiplyAccumulate_12354d = OpFunction %8 None %12
          %13 = OpLabel
         %res = OpVariable %_ptr_Function_8 Function
-         %21 = OpCooperativeMatrixMulAddKHR %8 %14 %17 %20
-               OpStore %res %21
-         %24 = OpLoad %8 %res None
-               OpReturnValue %24
+         %22 = OpCooperativeMatrixMulAddKHR %8 %14 %18 %21
+               OpStore %res %22
+         %25 = OpLoad %8 %res None
+               OpReturnValue %25
                OpFunctionEnd
-%compute_main = OpFunction %void None %27
-         %28 = OpLabel
-         %29 = OpFunctionCall %8 %subgroupMatrixMultiply_837e77
-         %30 = OpAccessChain %_ptr_StorageBuffer__arr_uint_uint_1024 %1 %uint_0
-         %32 = OpAccessChain %_ptr_StorageBuffer_uint %30 %uint_0
-               OpCooperativeMatrixStoreKHR %32 %29 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %8 %subgroupMatrixMultiplyAccumulate_12354d
+         %31 = OpAccessChain %_ptr_StorageBuffer__arr_uint_uint_1024 %1 %uint_0
+         %33 = OpAccessChain %_ptr_StorageBuffer_uint %31 %uint_0
+               OpCooperativeMatrixStoreKHR %33 %30 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.wgsl
new file mode 100644
index 0000000..32e13a1
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable chromium_experimental_subgroup_matrix;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<u32, 1024>;
+
+fn subgroupMatrixMultiplyAccumulate_12354d() -> subgroup_matrix_result<u32, 8, 8> {
+  var res : subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiplyAccumulate(subgroup_matrix_left<f16, 8, 8>(), subgroup_matrix_right<f16, 8, 8>(), subgroup_matrix_result<u32, 8, 8>());
+  return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiplyAccumulate_12354d(), false, 64);
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/163ab5.wgsl
similarity index 81%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/163ab5.wgsl
index 9c040d0..a44d8bb 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/163ab5.wgsl
@@ -42,12 +42,12 @@
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, f32, 8, 8>, subgroup_matrix<right, f32, 8, 8>) -> subgroup_matrix<result, f32, 8, 8>
-fn subgroupMatrixMultiply_077fe6() -> subgroup_matrix_result<f32, 8, 8>{
-  var res: subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<f32, 8, 8>(), subgroup_matrix_right<f32, 8, 8>());
+// fn subgroupMatrixMultiplyAccumulate(subgroup_matrix<left, i32, 8, 8>, subgroup_matrix<right, i32, 8, 8>, subgroup_matrix<result, f32, 8, 8>) -> subgroup_matrix<result, f32, 8, 8>
+fn subgroupMatrixMultiplyAccumulate_163ab5() -> subgroup_matrix_result<f32, 8, 8>{
+  var res: subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiplyAccumulate(subgroup_matrix_left<i32, 8, 8>(), subgroup_matrix_right<i32, 8, 8>(), subgroup_matrix_result<f32, 8, 8>());
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_077fe6(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiplyAccumulate_163ab5(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.spvasm
similarity index 69%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.spvasm
index a52ca13..f2e8886 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 37
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
@@ -14,7 +14,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_077fe6 "subgroupMatrixMultiply_077fe6"
+               OpName %subgroupMatrixMultiplyAccumulate_163ab5 "subgroupMatrixMultiplyAccumulate_163ab5"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_float_uint_1024 ArrayStride 4
@@ -34,32 +34,33 @@
      %uint_2 = OpConstant %uint 2
           %9 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
+        %int = OpTypeInt 32 1
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
      %uint_1 = OpConstant %uint 1
-         %19 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_1
-         %18 = OpConstantNull %19
-         %21 = OpConstantNull %9
+         %20 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_1
+         %19 = OpConstantNull %20
+         %22 = OpConstantNull %9
 %_ptr_Function_9 = OpTypePointer Function %9
        %void = OpTypeVoid
-         %28 = OpTypeFunction %void
+         %29 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_float_uint_1024 = OpTypePointer StorageBuffer %_arr_float_uint_1024
 %_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_077fe6 = OpFunction %9 None %13
+%subgroupMatrixMultiplyAccumulate_163ab5 = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21
-               OpStore %res %22
-         %25 = OpLoad %9 %res None
-               OpReturnValue %25
+         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22
+               OpStore %res %23
+         %26 = OpLoad %9 %res None
+               OpReturnValue %26
                OpFunctionEnd
-%compute_main = OpFunction %void None %28
-         %29 = OpLabel
-         %30 = OpFunctionCall %9 %subgroupMatrixMultiply_077fe6
-         %31 = OpAccessChain %_ptr_StorageBuffer__arr_float_uint_1024 %1 %uint_0
-         %33 = OpAccessChain %_ptr_StorageBuffer_float %31 %uint_0
-               OpCooperativeMatrixStoreKHR %33 %30 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %29
+         %30 = OpLabel
+         %31 = OpFunctionCall %9 %subgroupMatrixMultiplyAccumulate_163ab5
+         %32 = OpAccessChain %_ptr_StorageBuffer__arr_float_uint_1024 %1 %uint_0
+         %34 = OpAccessChain %_ptr_StorageBuffer_float %32 %uint_0
+               OpCooperativeMatrixStoreKHR %34 %31 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.wgsl
new file mode 100644
index 0000000..7f95b10
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable chromium_experimental_subgroup_matrix;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
+
+fn subgroupMatrixMultiplyAccumulate_163ab5() -> subgroup_matrix_result<f32, 8, 8> {
+  var res : subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiplyAccumulate(subgroup_matrix_left<i32, 8, 8>(), subgroup_matrix_right<i32, 8, 8>(), subgroup_matrix_result<f32, 8, 8>());
+  return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiplyAccumulate_163ab5(), false, 64);
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl
similarity index 80%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl
index b529f72..e732fcf 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl
@@ -35,19 +35,21 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 
-// [hlsl-dxc] flags: --hlsl-shader-model 60
+// flags: --hlsl-shader-model 62
 
 
 enable chromium_experimental_subgroup_matrix;
+
+enable f16;
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, i32, 8, 8>, subgroup_matrix<right, i32, 8, 8>) -> subgroup_matrix<result, i32, 8, 8>
-fn subgroupMatrixMultiply_fd0481() -> subgroup_matrix_result<i32, 8, 8>{
-  var res: subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<i32, 8, 8>(), subgroup_matrix_right<i32, 8, 8>());
+// fn subgroupMatrixMultiplyAccumulate(subgroup_matrix<left, f16, 8, 8>, subgroup_matrix<right, f16, 8, 8>, subgroup_matrix<result, i32, 8, 8>) -> subgroup_matrix<result, i32, 8, 8>
+fn subgroupMatrixMultiplyAccumulate_3ea7db() -> subgroup_matrix_result<i32, 8, 8>{
+  var res: subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiplyAccumulate(subgroup_matrix_left<f16, 8, 8>(), subgroup_matrix_right<f16, 8, 8>(), subgroup_matrix_result<i32, 8, 8>());
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_fd0481(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiplyAccumulate_3ea7db(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.spvasm
similarity index 65%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.spvasm
index 4f290ad..3acef939 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.spvasm
@@ -1,12 +1,15 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 37
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
                OpCapability VulkanMemoryModelDeviceScope
                OpCapability CooperativeMatrixKHR
+               OpCapability Float16
+               OpCapability UniformAndStorageBuffer16BitAccess
+               OpCapability StorageBuffer16BitAccess
                OpExtension "SPV_KHR_vulkan_memory_model"
                OpExtension "SPV_KHR_cooperative_matrix"
                OpMemoryModel Logical Vulkan
@@ -14,7 +17,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_fd0481 "subgroupMatrixMultiply_fd0481"
+               OpName %subgroupMatrixMultiplyAccumulate_3ea7db "subgroupMatrixMultiplyAccumulate_3ea7db"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_int_uint_1024 ArrayStride 4
@@ -34,32 +37,33 @@
      %uint_2 = OpConstant %uint 2
           %9 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
+       %half = OpTypeFloat 16
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
      %uint_1 = OpConstant %uint 1
-         %19 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_1
-         %18 = OpConstantNull %19
-         %21 = OpConstantNull %9
+         %20 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_1
+         %19 = OpConstantNull %20
+         %22 = OpConstantNull %9
 %_ptr_Function_9 = OpTypePointer Function %9
        %void = OpTypeVoid
-         %28 = OpTypeFunction %void
+         %29 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_int_uint_1024 = OpTypePointer StorageBuffer %_arr_int_uint_1024
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_fd0481 = OpFunction %9 None %13
+%subgroupMatrixMultiplyAccumulate_3ea7db = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21
-               OpStore %res %22
-         %25 = OpLoad %9 %res None
-               OpReturnValue %25
+         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22
+               OpStore %res %23
+         %26 = OpLoad %9 %res None
+               OpReturnValue %26
                OpFunctionEnd
-%compute_main = OpFunction %void None %28
-         %29 = OpLabel
-         %30 = OpFunctionCall %9 %subgroupMatrixMultiply_fd0481
-         %31 = OpAccessChain %_ptr_StorageBuffer__arr_int_uint_1024 %1 %uint_0
-         %33 = OpAccessChain %_ptr_StorageBuffer_int %31 %uint_0
-               OpCooperativeMatrixStoreKHR %33 %30 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %29
+         %30 = OpLabel
+         %31 = OpFunctionCall %9 %subgroupMatrixMultiplyAccumulate_3ea7db
+         %32 = OpAccessChain %_ptr_StorageBuffer__arr_int_uint_1024 %1 %uint_0
+         %34 = OpAccessChain %_ptr_StorageBuffer_int %32 %uint_0
+               OpCooperativeMatrixStoreKHR %34 %31 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.wgsl
new file mode 100644
index 0000000..84269d4
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable chromium_experimental_subgroup_matrix;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
+
+fn subgroupMatrixMultiplyAccumulate_3ea7db() -> subgroup_matrix_result<i32, 8, 8> {
+  var res : subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiplyAccumulate(subgroup_matrix_left<f16, 8, 8>(), subgroup_matrix_right<f16, 8, 8>(), subgroup_matrix_result<i32, 8, 8>());
+  return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiplyAccumulate_3ea7db(), false, 64);
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/676ca8.wgsl
similarity index 81%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/676ca8.wgsl
index b529f72..3c409ad 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/676ca8.wgsl
@@ -42,12 +42,12 @@
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, i32, 8, 8>, subgroup_matrix<right, i32, 8, 8>) -> subgroup_matrix<result, i32, 8, 8>
-fn subgroupMatrixMultiply_fd0481() -> subgroup_matrix_result<i32, 8, 8>{
-  var res: subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<i32, 8, 8>(), subgroup_matrix_right<i32, 8, 8>());
+// fn subgroupMatrixMultiplyAccumulate(subgroup_matrix<left, u32, 8, 8>, subgroup_matrix<right, u32, 8, 8>, subgroup_matrix<result, i32, 8, 8>) -> subgroup_matrix<result, i32, 8, 8>
+fn subgroupMatrixMultiplyAccumulate_676ca8() -> subgroup_matrix_result<i32, 8, 8>{
+  var res: subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiplyAccumulate(subgroup_matrix_left<u32, 8, 8>(), subgroup_matrix_right<u32, 8, 8>(), subgroup_matrix_result<i32, 8, 8>());
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_fd0481(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiplyAccumulate_676ca8(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.spvasm
similarity index 86%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.spvasm
index 4f290ad..1532dac 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.spvasm
@@ -14,7 +14,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_fd0481 "subgroupMatrixMultiply_fd0481"
+               OpName %subgroupMatrixMultiplyAccumulate_676ca8 "subgroupMatrixMultiplyAccumulate_676ca8"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_int_uint_1024 ArrayStride 4
@@ -35,10 +35,10 @@
           %9 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
      %uint_1 = OpConstant %uint 1
-         %19 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_1
+         %19 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_1
          %18 = OpConstantNull %19
          %21 = OpConstantNull %9
 %_ptr_Function_9 = OpTypePointer Function %9
@@ -47,7 +47,7 @@
 %_ptr_StorageBuffer__arr_int_uint_1024 = OpTypePointer StorageBuffer %_arr_int_uint_1024
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_fd0481 = OpFunction %9 None %13
+%subgroupMatrixMultiplyAccumulate_676ca8 = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
          %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21
@@ -57,7 +57,7 @@
                OpFunctionEnd
 %compute_main = OpFunction %void None %28
          %29 = OpLabel
-         %30 = OpFunctionCall %9 %subgroupMatrixMultiply_fd0481
+         %30 = OpFunctionCall %9 %subgroupMatrixMultiplyAccumulate_676ca8
          %31 = OpAccessChain %_ptr_StorageBuffer__arr_int_uint_1024 %1 %uint_0
          %33 = OpAccessChain %_ptr_StorageBuffer_int %31 %uint_0
                OpCooperativeMatrixStoreKHR %33 %30 %uint_0 %uint_64 NonPrivatePointer
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.wgsl
new file mode 100644
index 0000000..7ce5c91
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable chromium_experimental_subgroup_matrix;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
+
+fn subgroupMatrixMultiplyAccumulate_676ca8() -> subgroup_matrix_result<i32, 8, 8> {
+  var res : subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiplyAccumulate(subgroup_matrix_left<u32, 8, 8>(), subgroup_matrix_right<u32, 8, 8>(), subgroup_matrix_result<i32, 8, 8>());
+  return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiplyAccumulate_676ca8(), false, 64);
+}
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl
similarity index 81%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl
index e2f0f13..65de5f2 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl
@@ -44,14 +44,12 @@
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, f16, 8, 8>, subgroup_matrix<right, f16, 8, 8>) -> subgroup_matrix<result, f16, 8, 8>
-fn subgroupMatrixMultiply_c75357() -> subgroup_matrix_result<f16, 8, 8>{
-  var arg_0 = subgroup_matrix_left<f16, 8, 8>();
-  var arg_1 = subgroup_matrix_right<f16, 8, 8>();
-  var res: subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+// fn subgroupMatrixMultiplyAccumulate(subgroup_matrix<left, i32, 8, 8>, subgroup_matrix<right, i32, 8, 8>, subgroup_matrix<result, f16, 8, 8>) -> subgroup_matrix<result, f16, 8, 8>
+fn subgroupMatrixMultiplyAccumulate_7ceae2() -> subgroup_matrix_result<f16, 8, 8>{
+  var res: subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiplyAccumulate(subgroup_matrix_left<i32, 8, 8>(), subgroup_matrix_right<i32, 8, 8>(), subgroup_matrix_result<f16, 8, 8>());
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_c75357(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiplyAccumulate_7ceae2(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.spvasm
similarity index 70%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.spvasm
index c126b53..7fc8265 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 37
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
@@ -17,7 +17,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_c75357 "subgroupMatrixMultiply_c75357"
+               OpName %subgroupMatrixMultiplyAccumulate_7ceae2 "subgroupMatrixMultiplyAccumulate_7ceae2"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_half_uint_1024 ArrayStride 2
@@ -37,32 +37,33 @@
      %uint_2 = OpConstant %uint 2
           %9 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
+        %int = OpTypeInt 32 1
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
      %uint_1 = OpConstant %uint 1
-         %19 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_1
-         %18 = OpConstantNull %19
-         %21 = OpConstantNull %9
+         %20 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_1
+         %19 = OpConstantNull %20
+         %22 = OpConstantNull %9
 %_ptr_Function_9 = OpTypePointer Function %9
        %void = OpTypeVoid
-         %28 = OpTypeFunction %void
+         %29 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_half_uint_1024 = OpTypePointer StorageBuffer %_arr_half_uint_1024
 %_ptr_StorageBuffer_half = OpTypePointer StorageBuffer %half
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_c75357 = OpFunction %9 None %13
+%subgroupMatrixMultiplyAccumulate_7ceae2 = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21
-               OpStore %res %22
-         %25 = OpLoad %9 %res None
-               OpReturnValue %25
+         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22
+               OpStore %res %23
+         %26 = OpLoad %9 %res None
+               OpReturnValue %26
                OpFunctionEnd
-%compute_main = OpFunction %void None %28
-         %29 = OpLabel
-         %30 = OpFunctionCall %9 %subgroupMatrixMultiply_c75357
-         %31 = OpAccessChain %_ptr_StorageBuffer__arr_half_uint_1024 %1 %uint_0
-         %33 = OpAccessChain %_ptr_StorageBuffer_half %31 %uint_0
-               OpCooperativeMatrixStoreKHR %33 %30 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %29
+         %30 = OpLabel
+         %31 = OpFunctionCall %9 %subgroupMatrixMultiplyAccumulate_7ceae2
+         %32 = OpAccessChain %_ptr_StorageBuffer__arr_half_uint_1024 %1 %uint_0
+         %34 = OpAccessChain %_ptr_StorageBuffer_half %32 %uint_0
+               OpCooperativeMatrixStoreKHR %34 %31 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.wgsl
new file mode 100644
index 0000000..c9734e4
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable chromium_experimental_subgroup_matrix;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
+
+fn subgroupMatrixMultiplyAccumulate_7ceae2() -> subgroup_matrix_result<f16, 8, 8> {
+  var res : subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiplyAccumulate(subgroup_matrix_left<i32, 8, 8>(), subgroup_matrix_right<i32, 8, 8>(), subgroup_matrix_result<f16, 8, 8>());
+  return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiplyAccumulate_7ceae2(), false, 64);
+}
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/877989.wgsl
similarity index 81%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/877989.wgsl
index 75a2603..2d80e9e 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/877989.wgsl
@@ -42,14 +42,12 @@
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<u32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, u32, 8, 8>, subgroup_matrix<right, u32, 8, 8>) -> subgroup_matrix<result, u32, 8, 8>
-fn subgroupMatrixMultiply_837e77() -> subgroup_matrix_result<u32, 8, 8>{
-  var arg_0 = subgroup_matrix_left<u32, 8, 8>();
-  var arg_1 = subgroup_matrix_right<u32, 8, 8>();
-  var res: subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+// fn subgroupMatrixMultiplyAccumulate(subgroup_matrix<left, i32, 8, 8>, subgroup_matrix<right, i32, 8, 8>, subgroup_matrix<result, u32, 8, 8>) -> subgroup_matrix<result, u32, 8, 8>
+fn subgroupMatrixMultiplyAccumulate_877989() -> subgroup_matrix_result<u32, 8, 8>{
+  var res: subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiplyAccumulate(subgroup_matrix_left<i32, 8, 8>(), subgroup_matrix_right<i32, 8, 8>(), subgroup_matrix_result<u32, 8, 8>());
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_837e77(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiplyAccumulate_877989(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.spvasm
similarity index 68%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.spvasm
index 593db93..3890cc6 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 36
+; Bound: 37
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
@@ -14,7 +14,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_837e77 "subgroupMatrixMultiply_837e77"
+               OpName %subgroupMatrixMultiplyAccumulate_877989 "subgroupMatrixMultiplyAccumulate_877989"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_uint_uint_1024 ArrayStride 4
@@ -33,32 +33,33 @@
      %uint_2 = OpConstant %uint 2
           %8 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_2
          %12 = OpTypeFunction %8
+        %int = OpTypeInt 32 1
      %uint_0 = OpConstant %uint 0
-         %15 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_0
+         %15 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_0
          %14 = OpConstantNull %15
      %uint_1 = OpConstant %uint 1
-         %18 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_1
-         %17 = OpConstantNull %18
-         %20 = OpConstantNull %8
+         %19 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_1
+         %18 = OpConstantNull %19
+         %21 = OpConstantNull %8
 %_ptr_Function_8 = OpTypePointer Function %8
        %void = OpTypeVoid
-         %27 = OpTypeFunction %void
+         %28 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_uint_uint_1024 = OpTypePointer StorageBuffer %_arr_uint_uint_1024
 %_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_837e77 = OpFunction %8 None %12
+%subgroupMatrixMultiplyAccumulate_877989 = OpFunction %8 None %12
          %13 = OpLabel
         %res = OpVariable %_ptr_Function_8 Function
-         %21 = OpCooperativeMatrixMulAddKHR %8 %14 %17 %20
-               OpStore %res %21
-         %24 = OpLoad %8 %res None
-               OpReturnValue %24
+         %22 = OpCooperativeMatrixMulAddKHR %8 %14 %18 %21
+               OpStore %res %22
+         %25 = OpLoad %8 %res None
+               OpReturnValue %25
                OpFunctionEnd
-%compute_main = OpFunction %void None %27
-         %28 = OpLabel
-         %29 = OpFunctionCall %8 %subgroupMatrixMultiply_837e77
-         %30 = OpAccessChain %_ptr_StorageBuffer__arr_uint_uint_1024 %1 %uint_0
-         %32 = OpAccessChain %_ptr_StorageBuffer_uint %30 %uint_0
-               OpCooperativeMatrixStoreKHR %32 %29 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %8 %subgroupMatrixMultiplyAccumulate_877989
+         %31 = OpAccessChain %_ptr_StorageBuffer__arr_uint_uint_1024 %1 %uint_0
+         %33 = OpAccessChain %_ptr_StorageBuffer_uint %31 %uint_0
+               OpCooperativeMatrixStoreKHR %33 %30 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.wgsl
new file mode 100644
index 0000000..9f63a4f
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable chromium_experimental_subgroup_matrix;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<u32, 1024>;
+
+fn subgroupMatrixMultiplyAccumulate_877989() -> subgroup_matrix_result<u32, 8, 8> {
+  var res : subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiplyAccumulate(subgroup_matrix_left<i32, 8, 8>(), subgroup_matrix_right<i32, 8, 8>(), subgroup_matrix_result<u32, 8, 8>());
+  return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiplyAccumulate_877989(), false, 64);
+}
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/c4062a.wgsl
similarity index 81%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/c4062a.wgsl
index e2f0f13..9b69de0 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/c4062a.wgsl
@@ -44,14 +44,12 @@
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, f16, 8, 8>, subgroup_matrix<right, f16, 8, 8>) -> subgroup_matrix<result, f16, 8, 8>
-fn subgroupMatrixMultiply_c75357() -> subgroup_matrix_result<f16, 8, 8>{
-  var arg_0 = subgroup_matrix_left<f16, 8, 8>();
-  var arg_1 = subgroup_matrix_right<f16, 8, 8>();
-  var res: subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+// fn subgroupMatrixMultiplyAccumulate(subgroup_matrix<left, f32, 8, 8>, subgroup_matrix<right, f32, 8, 8>, subgroup_matrix<result, f16, 8, 8>) -> subgroup_matrix<result, f16, 8, 8>
+fn subgroupMatrixMultiplyAccumulate_c4062a() -> subgroup_matrix_result<f16, 8, 8>{
+  var res: subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiplyAccumulate(subgroup_matrix_left<f32, 8, 8>(), subgroup_matrix_right<f32, 8, 8>(), subgroup_matrix_result<f16, 8, 8>());
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_c75357(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiplyAccumulate_c4062a(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.msl
new file mode 100644
index 0000000..d955d95
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.msl
@@ -0,0 +1,65 @@
+SKIP: FAILED
+
+
+enable chromium_experimental_subgroup_matrix;
+enable f16;
+
+@internal(disable_validation__binding_point_collision) @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
+
+fn subgroupMatrixMultiplyAccumulate_c4062a() -> subgroup_matrix_result<f16, 8, 8> {
+  var res : subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiplyAccumulate(subgroup_matrix_left<f32, 8, 8>(), subgroup_matrix_right<f32, 8, 8>(), subgroup_matrix_result<f16, 8, 8>());
+  return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiplyAccumulate_c4062a(), false, 64);
+}
+
+Failed to generate: :12:15 error: msl.simdgroup_multiply_accumulate: no matching call to 'msl.simdgroup_multiply_accumulate(subgroup_matrix_result<f16, 8, 8>, subgroup_matrix_left<f32, 8, 8>, subgroup_matrix_right<f32, 8, 8>, subgroup_matrix_result<f16, 8, 8>)'
+
+1 candidate function:
+ • 'msl.simdgroup_multiply_accumulate(subgroup_matrix<result, S, C, R>  ✓ , subgroup_matrix<left, S, K, R>  ✗ , subgroup_matrix<right, S, C, K>  ✗ , subgroup_matrix<result, S, C, R>  ✓ )' where:
+      ✓  'S' is 'f32' or 'f16'
+
+    %7:void = msl.simdgroup_multiply_accumulate %6, %2, %3, %4
+              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+:6:3 note: in block
+  $B1: {
+  ^^^
+
+note: # Disassembly
+tint_module_vars_struct = struct @align(1) {
+  prevent_dce:ptr<storage, array<f16, 1024>, read_write> @offset(0)
+}
+
+%subgroupMatrixMultiplyAccumulate_c4062a = func():subgroup_matrix_result<f16, 8, 8> {
+  $B1: {
+    %2:subgroup_matrix_left<f32, 8, 8> = construct
+    %3:subgroup_matrix_right<f32, 8, 8> = construct
+    %4:subgroup_matrix_result<f16, 8, 8> = construct
+    %5:ptr<function, subgroup_matrix_result<f16, 8, 8>, read_write> = var
+    %6:subgroup_matrix_result<f16, 8, 8> = load %5
+    %7:void = msl.simdgroup_multiply_accumulate %6, %2, %3, %4
+    %8:subgroup_matrix_result<f16, 8, 8> = load %5
+    %res:ptr<function, subgroup_matrix_result<f16, 8, 8>, read_write> = var, %8
+    %10:subgroup_matrix_result<f16, 8, 8> = load %res
+    ret %10
+  }
+}
+%compute_main = @compute @workgroup_size(1u, 1u, 1u) func(%prevent_dce:ptr<storage, array<f16, 1024>, read_write> [@binding_point(0, 0)]):void {
+  $B2: {
+    %13:tint_module_vars_struct = construct %prevent_dce
+    %tint_module_vars:tint_module_vars_struct = let %13
+    %15:subgroup_matrix_result<f16, 8, 8> = call %subgroupMatrixMultiplyAccumulate_c4062a
+    %16:ptr<storage, array<f16, 1024>, read_write> = access %tint_module_vars, 0u
+    %17:ptr<storage, f16, read_write> = access %16, 0u
+    %18:u64 = msl.convert 64u
+    %19:void = msl.simdgroup_store %15, %17, %18, vec2<u64>(0u64), false
+    ret
+  }
+}
+
+
+tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.spvasm
similarity index 70%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.spvasm
index c126b53..d072a96 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 37
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
@@ -17,7 +17,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_c75357 "subgroupMatrixMultiply_c75357"
+               OpName %subgroupMatrixMultiplyAccumulate_c4062a "subgroupMatrixMultiplyAccumulate_c4062a"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_half_uint_1024 ArrayStride 2
@@ -37,32 +37,33 @@
      %uint_2 = OpConstant %uint 2
           %9 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
+      %float = OpTypeFloat 32
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
      %uint_1 = OpConstant %uint 1
-         %19 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_1
-         %18 = OpConstantNull %19
-         %21 = OpConstantNull %9
+         %20 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_1
+         %19 = OpConstantNull %20
+         %22 = OpConstantNull %9
 %_ptr_Function_9 = OpTypePointer Function %9
        %void = OpTypeVoid
-         %28 = OpTypeFunction %void
+         %29 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_half_uint_1024 = OpTypePointer StorageBuffer %_arr_half_uint_1024
 %_ptr_StorageBuffer_half = OpTypePointer StorageBuffer %half
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_c75357 = OpFunction %9 None %13
+%subgroupMatrixMultiplyAccumulate_c4062a = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21
-               OpStore %res %22
-         %25 = OpLoad %9 %res None
-               OpReturnValue %25
+         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22
+               OpStore %res %23
+         %26 = OpLoad %9 %res None
+               OpReturnValue %26
                OpFunctionEnd
-%compute_main = OpFunction %void None %28
-         %29 = OpLabel
-         %30 = OpFunctionCall %9 %subgroupMatrixMultiply_c75357
-         %31 = OpAccessChain %_ptr_StorageBuffer__arr_half_uint_1024 %1 %uint_0
-         %33 = OpAccessChain %_ptr_StorageBuffer_half %31 %uint_0
-               OpCooperativeMatrixStoreKHR %33 %30 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %29
+         %30 = OpLabel
+         %31 = OpFunctionCall %9 %subgroupMatrixMultiplyAccumulate_c4062a
+         %32 = OpAccessChain %_ptr_StorageBuffer__arr_half_uint_1024 %1 %uint_0
+         %34 = OpAccessChain %_ptr_StorageBuffer_half %32 %uint_0
+               OpCooperativeMatrixStoreKHR %34 %31 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.wgsl
new file mode 100644
index 0000000..44c77d4
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable chromium_experimental_subgroup_matrix;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
+
+fn subgroupMatrixMultiplyAccumulate_c4062a() -> subgroup_matrix_result<f16, 8, 8> {
+  var res : subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiplyAccumulate(subgroup_matrix_left<f32, 8, 8>(), subgroup_matrix_right<f32, 8, 8>(), subgroup_matrix_result<f16, 8, 8>());
+  return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiplyAccumulate_c4062a(), false, 64);
+}
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/db91bf.wgsl
similarity index 81%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/db91bf.wgsl
index 75a2603..3cf59d0 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/db91bf.wgsl
@@ -42,14 +42,12 @@
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<u32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, u32, 8, 8>, subgroup_matrix<right, u32, 8, 8>) -> subgroup_matrix<result, u32, 8, 8>
-fn subgroupMatrixMultiply_837e77() -> subgroup_matrix_result<u32, 8, 8>{
-  var arg_0 = subgroup_matrix_left<u32, 8, 8>();
-  var arg_1 = subgroup_matrix_right<u32, 8, 8>();
-  var res: subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+// fn subgroupMatrixMultiplyAccumulate(subgroup_matrix<left, f32, 8, 8>, subgroup_matrix<right, f32, 8, 8>, subgroup_matrix<result, u32, 8, 8>) -> subgroup_matrix<result, u32, 8, 8>
+fn subgroupMatrixMultiplyAccumulate_db91bf() -> subgroup_matrix_result<u32, 8, 8>{
+  var res: subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiplyAccumulate(subgroup_matrix_left<f32, 8, 8>(), subgroup_matrix_right<f32, 8, 8>(), subgroup_matrix_result<u32, 8, 8>());
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_837e77(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiplyAccumulate_db91bf(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.spvasm
similarity index 68%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.spvasm
index 593db93..ae2da75 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 36
+; Bound: 37
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
@@ -14,7 +14,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_837e77 "subgroupMatrixMultiply_837e77"
+               OpName %subgroupMatrixMultiplyAccumulate_db91bf "subgroupMatrixMultiplyAccumulate_db91bf"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_uint_uint_1024 ArrayStride 4
@@ -33,32 +33,33 @@
      %uint_2 = OpConstant %uint 2
           %8 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_2
          %12 = OpTypeFunction %8
+      %float = OpTypeFloat 32
      %uint_0 = OpConstant %uint 0
-         %15 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_0
+         %15 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_0
          %14 = OpConstantNull %15
      %uint_1 = OpConstant %uint 1
-         %18 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_1
-         %17 = OpConstantNull %18
-         %20 = OpConstantNull %8
+         %19 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_1
+         %18 = OpConstantNull %19
+         %21 = OpConstantNull %8
 %_ptr_Function_8 = OpTypePointer Function %8
        %void = OpTypeVoid
-         %27 = OpTypeFunction %void
+         %28 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_uint_uint_1024 = OpTypePointer StorageBuffer %_arr_uint_uint_1024
 %_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_837e77 = OpFunction %8 None %12
+%subgroupMatrixMultiplyAccumulate_db91bf = OpFunction %8 None %12
          %13 = OpLabel
         %res = OpVariable %_ptr_Function_8 Function
-         %21 = OpCooperativeMatrixMulAddKHR %8 %14 %17 %20
-               OpStore %res %21
-         %24 = OpLoad %8 %res None
-               OpReturnValue %24
+         %22 = OpCooperativeMatrixMulAddKHR %8 %14 %18 %21
+               OpStore %res %22
+         %25 = OpLoad %8 %res None
+               OpReturnValue %25
                OpFunctionEnd
-%compute_main = OpFunction %void None %27
-         %28 = OpLabel
-         %29 = OpFunctionCall %8 %subgroupMatrixMultiply_837e77
-         %30 = OpAccessChain %_ptr_StorageBuffer__arr_uint_uint_1024 %1 %uint_0
-         %32 = OpAccessChain %_ptr_StorageBuffer_uint %30 %uint_0
-               OpCooperativeMatrixStoreKHR %32 %29 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %8 %subgroupMatrixMultiplyAccumulate_db91bf
+         %31 = OpAccessChain %_ptr_StorageBuffer__arr_uint_uint_1024 %1 %uint_0
+         %33 = OpAccessChain %_ptr_StorageBuffer_uint %31 %uint_0
+               OpCooperativeMatrixStoreKHR %33 %30 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.wgsl
new file mode 100644
index 0000000..e3ace34
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable chromium_experimental_subgroup_matrix;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<u32, 1024>;
+
+fn subgroupMatrixMultiplyAccumulate_db91bf() -> subgroup_matrix_result<u32, 8, 8> {
+  var res : subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiplyAccumulate(subgroup_matrix_left<f32, 8, 8>(), subgroup_matrix_right<f32, 8, 8>(), subgroup_matrix_result<u32, 8, 8>());
+  return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiplyAccumulate_db91bf(), false, 64);
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e27d24.wgsl
similarity index 81%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e27d24.wgsl
index b529f72..beeb251 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e27d24.wgsl
@@ -42,12 +42,12 @@
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, i32, 8, 8>, subgroup_matrix<right, i32, 8, 8>) -> subgroup_matrix<result, i32, 8, 8>
-fn subgroupMatrixMultiply_fd0481() -> subgroup_matrix_result<i32, 8, 8>{
-  var res: subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<i32, 8, 8>(), subgroup_matrix_right<i32, 8, 8>());
+// fn subgroupMatrixMultiplyAccumulate(subgroup_matrix<left, f32, 8, 8>, subgroup_matrix<right, f32, 8, 8>, subgroup_matrix<result, i32, 8, 8>) -> subgroup_matrix<result, i32, 8, 8>
+fn subgroupMatrixMultiplyAccumulate_e27d24() -> subgroup_matrix_result<i32, 8, 8>{
+  var res: subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiplyAccumulate(subgroup_matrix_left<f32, 8, 8>(), subgroup_matrix_right<f32, 8, 8>(), subgroup_matrix_result<i32, 8, 8>());
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_fd0481(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiplyAccumulate_e27d24(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.spvasm
similarity index 68%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.spvasm
index 4f290ad..15efd1a 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 37
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
@@ -14,7 +14,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_fd0481 "subgroupMatrixMultiply_fd0481"
+               OpName %subgroupMatrixMultiplyAccumulate_e27d24 "subgroupMatrixMultiplyAccumulate_e27d24"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_int_uint_1024 ArrayStride 4
@@ -34,32 +34,33 @@
      %uint_2 = OpConstant %uint 2
           %9 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
+      %float = OpTypeFloat 32
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
      %uint_1 = OpConstant %uint 1
-         %19 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_1
-         %18 = OpConstantNull %19
-         %21 = OpConstantNull %9
+         %20 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_1
+         %19 = OpConstantNull %20
+         %22 = OpConstantNull %9
 %_ptr_Function_9 = OpTypePointer Function %9
        %void = OpTypeVoid
-         %28 = OpTypeFunction %void
+         %29 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_int_uint_1024 = OpTypePointer StorageBuffer %_arr_int_uint_1024
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_fd0481 = OpFunction %9 None %13
+%subgroupMatrixMultiplyAccumulate_e27d24 = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21
-               OpStore %res %22
-         %25 = OpLoad %9 %res None
-               OpReturnValue %25
+         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22
+               OpStore %res %23
+         %26 = OpLoad %9 %res None
+               OpReturnValue %26
                OpFunctionEnd
-%compute_main = OpFunction %void None %28
-         %29 = OpLabel
-         %30 = OpFunctionCall %9 %subgroupMatrixMultiply_fd0481
-         %31 = OpAccessChain %_ptr_StorageBuffer__arr_int_uint_1024 %1 %uint_0
-         %33 = OpAccessChain %_ptr_StorageBuffer_int %31 %uint_0
-               OpCooperativeMatrixStoreKHR %33 %30 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %29
+         %30 = OpLabel
+         %31 = OpFunctionCall %9 %subgroupMatrixMultiplyAccumulate_e27d24
+         %32 = OpAccessChain %_ptr_StorageBuffer__arr_int_uint_1024 %1 %uint_0
+         %34 = OpAccessChain %_ptr_StorageBuffer_int %32 %uint_0
+               OpCooperativeMatrixStoreKHR %34 %31 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.wgsl
new file mode 100644
index 0000000..0d7778c
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable chromium_experimental_subgroup_matrix;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
+
+fn subgroupMatrixMultiplyAccumulate_e27d24() -> subgroup_matrix_result<i32, 8, 8> {
+  var res : subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiplyAccumulate(subgroup_matrix_left<f32, 8, 8>(), subgroup_matrix_right<f32, 8, 8>(), subgroup_matrix_result<i32, 8, 8>());
+  return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiplyAccumulate_e27d24(), false, 64);
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e49afd.wgsl
similarity index 81%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e49afd.wgsl
index 9c040d0..01cdd4c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e49afd.wgsl
@@ -42,12 +42,12 @@
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, f32, 8, 8>, subgroup_matrix<right, f32, 8, 8>) -> subgroup_matrix<result, f32, 8, 8>
-fn subgroupMatrixMultiply_077fe6() -> subgroup_matrix_result<f32, 8, 8>{
-  var res: subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply(subgroup_matrix_left<f32, 8, 8>(), subgroup_matrix_right<f32, 8, 8>());
+// fn subgroupMatrixMultiplyAccumulate(subgroup_matrix<left, u32, 8, 8>, subgroup_matrix<right, u32, 8, 8>, subgroup_matrix<result, f32, 8, 8>) -> subgroup_matrix<result, f32, 8, 8>
+fn subgroupMatrixMultiplyAccumulate_e49afd() -> subgroup_matrix_result<f32, 8, 8>{
+  var res: subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiplyAccumulate(subgroup_matrix_left<u32, 8, 8>(), subgroup_matrix_right<u32, 8, 8>(), subgroup_matrix_result<f32, 8, 8>());
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_077fe6(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiplyAccumulate_e49afd(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.spvasm
similarity index 86%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm
copy to test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.spvasm
index a52ca13..979b20e 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.spvasm
@@ -14,7 +14,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_077fe6 "subgroupMatrixMultiply_077fe6"
+               OpName %subgroupMatrixMultiplyAccumulate_e49afd "subgroupMatrixMultiplyAccumulate_e49afd"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_float_uint_1024 ArrayStride 4
@@ -35,10 +35,10 @@
           %9 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
      %uint_1 = OpConstant %uint 1
-         %19 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_1
+         %19 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_1
          %18 = OpConstantNull %19
          %21 = OpConstantNull %9
 %_ptr_Function_9 = OpTypePointer Function %9
@@ -47,7 +47,7 @@
 %_ptr_StorageBuffer__arr_float_uint_1024 = OpTypePointer StorageBuffer %_arr_float_uint_1024
 %_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_077fe6 = OpFunction %9 None %13
+%subgroupMatrixMultiplyAccumulate_e49afd = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
          %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21
@@ -57,7 +57,7 @@
                OpFunctionEnd
 %compute_main = OpFunction %void None %28
          %29 = OpLabel
-         %30 = OpFunctionCall %9 %subgroupMatrixMultiply_077fe6
+         %30 = OpFunctionCall %9 %subgroupMatrixMultiplyAccumulate_e49afd
          %31 = OpAccessChain %_ptr_StorageBuffer__arr_float_uint_1024 %1 %uint_0
          %33 = OpAccessChain %_ptr_StorageBuffer_float %31 %uint_0
                OpCooperativeMatrixStoreKHR %33 %30 %uint_0 %uint_64 NonPrivatePointer
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.wgsl
new file mode 100644
index 0000000..ae41502
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable chromium_experimental_subgroup_matrix;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
+
+fn subgroupMatrixMultiplyAccumulate_e49afd() -> subgroup_matrix_result<f32, 8, 8> {
+  var res : subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiplyAccumulate(subgroup_matrix_left<u32, 8, 8>(), subgroup_matrix_right<u32, 8, 8>(), subgroup_matrix_result<f32, 8, 8>());
+  return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiplyAccumulate_e49afd(), false, 64);
+}
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
deleted file mode 100644
index 5664c5f..0000000
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: trace/BPT trap
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
deleted file mode 100644
index e202956..0000000
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: INVALID
-
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: trace/BPT trap
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/2969da.wgsl
similarity index 87%
rename from test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl
rename to test/tint/builtins/gen/var/subgroupMatrixMultiply/2969da.wgsl
index dac8030..40c55ee 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/2969da.wgsl
@@ -42,14 +42,14 @@
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, i32, 8, 8>, subgroup_matrix<right, i32, 8, 8>) -> subgroup_matrix<result, i32, 8, 8>
-fn subgroupMatrixMultiply_fd0481() -> subgroup_matrix_result<i32, 8, 8>{
+// fn subgroupMatrixMultiply<TR: i32>(subgroup_matrix<left, i32, 8, 8>, subgroup_matrix<right, i32, 8, 8>) -> subgroup_matrix<result, i32, 8, 8>
+fn subgroupMatrixMultiply_2969da() -> subgroup_matrix_result<i32, 8, 8>{
   var arg_0 = subgroup_matrix_left<i32, 8, 8>();
   var arg_1 = subgroup_matrix_right<i32, 8, 8>();
-  var res: subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var res: subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply<i32>(arg_0, arg_1);
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_fd0481(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_2969da(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/2969da.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/2969da.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/2969da.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/2969da.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/2969da.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/2969da.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/2969da.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/2969da.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/2969da.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/2969da.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/2969da.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/2969da.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/2969da.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/2969da.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiply/2969da.wgsl.expected.spvasm
similarity index 93%
rename from test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm
rename to test/tint/builtins/gen/var/subgroupMatrixMultiply/2969da.wgsl.expected.spvasm
index 3b129e9..8fc4581 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/2969da.wgsl.expected.spvasm
@@ -14,7 +14,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_fd0481 "subgroupMatrixMultiply_fd0481"
+               OpName %subgroupMatrixMultiply_2969da "subgroupMatrixMultiply_2969da"
                OpName %arg_0 "arg_0"
                OpName %arg_1 "arg_1"
                OpName %res "res"
@@ -51,7 +51,7 @@
 %_ptr_StorageBuffer__arr_int_uint_1024 = OpTypePointer StorageBuffer %_arr_int_uint_1024
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_fd0481 = OpFunction %9 None %13
+%subgroupMatrixMultiply_2969da = OpFunction %9 None %13
          %14 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_16 Function
       %arg_1 = OpVariable %_ptr_Function_21 Function
@@ -67,7 +67,7 @@
                OpFunctionEnd
 %compute_main = OpFunction %void None %34
          %35 = OpLabel
-         %36 = OpFunctionCall %9 %subgroupMatrixMultiply_fd0481
+         %36 = OpFunctionCall %9 %subgroupMatrixMultiply_2969da
          %37 = OpAccessChain %_ptr_StorageBuffer__arr_int_uint_1024 %1 %uint_0
          %39 = OpAccessChain %_ptr_StorageBuffer_int %37 %uint_0
                OpCooperativeMatrixStoreKHR %39 %36 %uint_0 %uint_64 NonPrivatePointer
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/2969da.wgsl.expected.wgsl
similarity index 79%
rename from test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.wgsl
rename to test/tint/builtins/gen/var/subgroupMatrixMultiply/2969da.wgsl.expected.wgsl
index e2629e5..47d1fe8 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/2969da.wgsl.expected.wgsl
@@ -2,14 +2,14 @@
 
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
 
-fn subgroupMatrixMultiply_fd0481() -> subgroup_matrix_result<i32, 8, 8> {
+fn subgroupMatrixMultiply_2969da() -> subgroup_matrix_result<i32, 8, 8> {
   var arg_0 = subgroup_matrix_left<i32, 8, 8>();
   var arg_1 = subgroup_matrix_right<i32, 8, 8>();
-  var res : subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var res : subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply<i32>(arg_0, arg_1);
   return res;
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_fd0481(), false, 64);
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_2969da(), false, 64);
 }
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/2c905b.wgsl
similarity index 87%
rename from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl
rename to test/tint/builtins/gen/var/subgroupMatrixMultiply/2c905b.wgsl
index a097359..02cb754 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/2c905b.wgsl
@@ -42,14 +42,14 @@
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, f32, 8, 8>, subgroup_matrix<right, f32, 8, 8>) -> subgroup_matrix<result, f32, 8, 8>
-fn subgroupMatrixMultiply_077fe6() -> subgroup_matrix_result<f32, 8, 8>{
+// fn subgroupMatrixMultiply<TR: f32>(subgroup_matrix<left, f32, 8, 8>, subgroup_matrix<right, f32, 8, 8>) -> subgroup_matrix<result, f32, 8, 8>
+fn subgroupMatrixMultiply_2c905b() -> subgroup_matrix_result<f32, 8, 8>{
   var arg_0 = subgroup_matrix_left<f32, 8, 8>();
   var arg_1 = subgroup_matrix_right<f32, 8, 8>();
-  var res: subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var res: subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply<f32>(arg_0, arg_1);
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_077fe6(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_2c905b(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/2c905b.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/2c905b.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/2c905b.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/2c905b.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/2c905b.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/2c905b.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/2c905b.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/2c905b.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/2c905b.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/2c905b.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/2c905b.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/2c905b.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/2c905b.wgsl.expected.msl
similarity index 91%
rename from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.msl
rename to test/tint/builtins/gen/var/subgroupMatrixMultiply/2c905b.wgsl.expected.msl
index 725aaa8..cef5d51 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/2c905b.wgsl.expected.msl
@@ -17,7 +17,7 @@
   device tint_array<float, 1024>* prevent_dce;
 };
 
-simdgroup_float8x8 subgroupMatrixMultiply_077fe6() {
+simdgroup_float8x8 subgroupMatrixMultiply_2c905b() {
   simdgroup_float8x8 arg_0 = simdgroup_float8x8();
   simdgroup_float8x8 arg_1 = simdgroup_float8x8();
   simdgroup_float8x8 v = make_filled_simdgroup_matrix<float, 8, 8>(0.0f);
@@ -28,5 +28,5 @@
 
 kernel void compute_main(device tint_array<float, 1024>* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  simdgroup_store(subgroupMatrixMultiply_077fe6(), (&(*tint_module_vars.prevent_dce)[0u]), ulong(64u), ulong2(0ul), false);
+  simdgroup_store(subgroupMatrixMultiply_2c905b(), (&(*tint_module_vars.prevent_dce)[0u]), ulong(64u), ulong2(0ul), false);
 }
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiply/2c905b.wgsl.expected.spvasm
similarity index 94%
rename from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm
rename to test/tint/builtins/gen/var/subgroupMatrixMultiply/2c905b.wgsl.expected.spvasm
index a329068..0c50051 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/2c905b.wgsl.expected.spvasm
@@ -14,7 +14,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_077fe6 "subgroupMatrixMultiply_077fe6"
+               OpName %subgroupMatrixMultiply_2c905b "subgroupMatrixMultiply_2c905b"
                OpName %arg_0 "arg_0"
                OpName %arg_1 "arg_1"
                OpName %res "res"
@@ -51,7 +51,7 @@
 %_ptr_StorageBuffer__arr_float_uint_1024 = OpTypePointer StorageBuffer %_arr_float_uint_1024
 %_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_077fe6 = OpFunction %9 None %13
+%subgroupMatrixMultiply_2c905b = OpFunction %9 None %13
          %14 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_16 Function
       %arg_1 = OpVariable %_ptr_Function_21 Function
@@ -67,7 +67,7 @@
                OpFunctionEnd
 %compute_main = OpFunction %void None %34
          %35 = OpLabel
-         %36 = OpFunctionCall %9 %subgroupMatrixMultiply_077fe6
+         %36 = OpFunctionCall %9 %subgroupMatrixMultiply_2c905b
          %37 = OpAccessChain %_ptr_StorageBuffer__arr_float_uint_1024 %1 %uint_0
          %39 = OpAccessChain %_ptr_StorageBuffer_float %37 %uint_0
                OpCooperativeMatrixStoreKHR %39 %36 %uint_0 %uint_64 NonPrivatePointer
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/2c905b.wgsl.expected.wgsl
similarity index 79%
rename from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.wgsl
rename to test/tint/builtins/gen/var/subgroupMatrixMultiply/2c905b.wgsl.expected.wgsl
index 813d309..8805990 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/2c905b.wgsl.expected.wgsl
@@ -2,14 +2,14 @@
 
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
 
-fn subgroupMatrixMultiply_077fe6() -> subgroup_matrix_result<f32, 8, 8> {
+fn subgroupMatrixMultiply_2c905b() -> subgroup_matrix_result<f32, 8, 8> {
   var arg_0 = subgroup_matrix_left<f32, 8, 8>();
   var arg_1 = subgroup_matrix_right<f32, 8, 8>();
-  var res : subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var res : subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply<f32>(arg_0, arg_1);
   return res;
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_077fe6(), false, 64);
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_2c905b(), false, 64);
 }
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/3e9b04.wgsl
similarity index 84%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/3e9b04.wgsl
index dac8030..aa1fc07 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/3e9b04.wgsl
@@ -39,17 +39,17 @@
 
 
 enable chromium_experimental_subgroup_matrix;
-@group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<u32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, i32, 8, 8>, subgroup_matrix<right, i32, 8, 8>) -> subgroup_matrix<result, i32, 8, 8>
-fn subgroupMatrixMultiply_fd0481() -> subgroup_matrix_result<i32, 8, 8>{
+// fn subgroupMatrixMultiply<TR: u32>(subgroup_matrix<left, i32, 8, 8>, subgroup_matrix<right, i32, 8, 8>) -> subgroup_matrix<result, u32, 8, 8>
+fn subgroupMatrixMultiply_3e9b04() -> subgroup_matrix_result<u32, 8, 8>{
   var arg_0 = subgroup_matrix_left<i32, 8, 8>();
   var arg_1 = subgroup_matrix_right<i32, 8, 8>();
-  var res: subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var res: subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply<u32>(arg_0, arg_1);
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_fd0481(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_3e9b04(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/3e9b04.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/3e9b04.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/3e9b04.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/3e9b04.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/3e9b04.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/3e9b04.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/3e9b04.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/3e9b04.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/3e9b04.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/3e9b04.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/3e9b04.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/3e9b04.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/3e9b04.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/3e9b04.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiply/3e9b04.wgsl.expected.spvasm
similarity index 67%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/3e9b04.wgsl.expected.spvasm
index a14cda7..6722c01 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/3e9b04.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 42
+; Bound: 43
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
@@ -14,7 +14,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_837e77 "subgroupMatrixMultiply_837e77"
+               OpName %subgroupMatrixMultiply_3e9b04 "subgroupMatrixMultiply_3e9b04"
                OpName %arg_0 "arg_0"
                OpName %arg_1 "arg_1"
                OpName %res "res"
@@ -35,40 +35,41 @@
      %uint_2 = OpConstant %uint 2
           %8 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_2
          %12 = OpTypeFunction %8
+        %int = OpTypeInt 32 1
      %uint_0 = OpConstant %uint 0
-         %15 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_0
+         %15 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_0
          %14 = OpConstantNull %15
 %_ptr_Function_15 = OpTypePointer Function %15
      %uint_1 = OpConstant %uint 1
-         %20 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_1
-         %19 = OpConstantNull %20
-%_ptr_Function_20 = OpTypePointer Function %20
-         %26 = OpConstantNull %8
+         %21 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_1
+         %20 = OpConstantNull %21
+%_ptr_Function_21 = OpTypePointer Function %21
+         %27 = OpConstantNull %8
 %_ptr_Function_8 = OpTypePointer Function %8
        %void = OpTypeVoid
-         %33 = OpTypeFunction %void
+         %34 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_uint_uint_1024 = OpTypePointer StorageBuffer %_arr_uint_uint_1024
 %_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_837e77 = OpFunction %8 None %12
+%subgroupMatrixMultiply_3e9b04 = OpFunction %8 None %12
          %13 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_15 Function
-      %arg_1 = OpVariable %_ptr_Function_20 Function
+      %arg_1 = OpVariable %_ptr_Function_21 Function
         %res = OpVariable %_ptr_Function_8 Function
                OpStore %arg_0 %14
-               OpStore %arg_1 %19
-         %24 = OpLoad %15 %arg_0 None
-         %25 = OpLoad %20 %arg_1 None
-         %27 = OpCooperativeMatrixMulAddKHR %8 %24 %25 %26
-               OpStore %res %27
-         %30 = OpLoad %8 %res None
-               OpReturnValue %30
+               OpStore %arg_1 %20
+         %25 = OpLoad %15 %arg_0 None
+         %26 = OpLoad %21 %arg_1 None
+         %28 = OpCooperativeMatrixMulAddKHR %8 %25 %26 %27
+               OpStore %res %28
+         %31 = OpLoad %8 %res None
+               OpReturnValue %31
                OpFunctionEnd
-%compute_main = OpFunction %void None %33
-         %34 = OpLabel
-         %35 = OpFunctionCall %8 %subgroupMatrixMultiply_837e77
-         %36 = OpAccessChain %_ptr_StorageBuffer__arr_uint_uint_1024 %1 %uint_0
-         %38 = OpAccessChain %_ptr_StorageBuffer_uint %36 %uint_0
-               OpCooperativeMatrixStoreKHR %38 %35 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %34
+         %35 = OpLabel
+         %36 = OpFunctionCall %8 %subgroupMatrixMultiply_3e9b04
+         %37 = OpAccessChain %_ptr_StorageBuffer__arr_uint_uint_1024 %1 %uint_0
+         %39 = OpAccessChain %_ptr_StorageBuffer_uint %37 %uint_0
+               OpCooperativeMatrixStoreKHR %39 %36 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/3e9b04.wgsl.expected.wgsl
similarity index 64%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/3e9b04.wgsl.expected.wgsl
index e2629e5..b014f02 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/3e9b04.wgsl.expected.wgsl
@@ -1,15 +1,15 @@
 enable chromium_experimental_subgroup_matrix;
 
-@group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<u32, 1024>;
 
-fn subgroupMatrixMultiply_fd0481() -> subgroup_matrix_result<i32, 8, 8> {
+fn subgroupMatrixMultiply_3e9b04() -> subgroup_matrix_result<u32, 8, 8> {
   var arg_0 = subgroup_matrix_left<i32, 8, 8>();
   var arg_1 = subgroup_matrix_right<i32, 8, 8>();
-  var res : subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var res : subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply<u32>(arg_0, arg_1);
   return res;
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_fd0481(), false, 64);
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_3e9b04(), false, 64);
 }
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/42abed.wgsl
similarity index 87%
rename from test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl
rename to test/tint/builtins/gen/var/subgroupMatrixMultiply/42abed.wgsl
index e2f0f13..ea3fd59 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/42abed.wgsl
@@ -44,14 +44,14 @@
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, f16, 8, 8>, subgroup_matrix<right, f16, 8, 8>) -> subgroup_matrix<result, f16, 8, 8>
-fn subgroupMatrixMultiply_c75357() -> subgroup_matrix_result<f16, 8, 8>{
+// fn subgroupMatrixMultiply<TR: f16>(subgroup_matrix<left, f16, 8, 8>, subgroup_matrix<right, f16, 8, 8>) -> subgroup_matrix<result, f16, 8, 8>
+fn subgroupMatrixMultiply_42abed() -> subgroup_matrix_result<f16, 8, 8>{
   var arg_0 = subgroup_matrix_left<f16, 8, 8>();
   var arg_1 = subgroup_matrix_right<f16, 8, 8>();
-  var res: subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var res: subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply<f16>(arg_0, arg_1);
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_c75357(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_42abed(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/42abed.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/42abed.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/42abed.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/42abed.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/42abed.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/42abed.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/42abed.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/42abed.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/42abed.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/42abed.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/42abed.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/42abed.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/42abed.wgsl.expected.msl
similarity index 91%
rename from test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.msl
rename to test/tint/builtins/gen/var/subgroupMatrixMultiply/42abed.wgsl.expected.msl
index b120ac9..000629a 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/42abed.wgsl.expected.msl
@@ -17,7 +17,7 @@
   device tint_array<half, 1024>* prevent_dce;
 };
 
-simdgroup_half8x8 subgroupMatrixMultiply_c75357() {
+simdgroup_half8x8 subgroupMatrixMultiply_42abed() {
   simdgroup_half8x8 arg_0 = simdgroup_half8x8();
   simdgroup_half8x8 arg_1 = simdgroup_half8x8();
   simdgroup_half8x8 v = make_filled_simdgroup_matrix<half, 8, 8>(0.0h);
@@ -28,5 +28,5 @@
 
 kernel void compute_main(device tint_array<half, 1024>* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  simdgroup_store(subgroupMatrixMultiply_c75357(), (&(*tint_module_vars.prevent_dce)[0u]), ulong(64u), ulong2(0ul), false);
+  simdgroup_store(subgroupMatrixMultiply_42abed(), (&(*tint_module_vars.prevent_dce)[0u]), ulong(64u), ulong2(0ul), false);
 }
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiply/42abed.wgsl.expected.spvasm
similarity index 94%
rename from test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm
rename to test/tint/builtins/gen/var/subgroupMatrixMultiply/42abed.wgsl.expected.spvasm
index 41bc0a8..ed0bcaa 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/42abed.wgsl.expected.spvasm
@@ -17,7 +17,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_c75357 "subgroupMatrixMultiply_c75357"
+               OpName %subgroupMatrixMultiply_42abed "subgroupMatrixMultiply_42abed"
                OpName %arg_0 "arg_0"
                OpName %arg_1 "arg_1"
                OpName %res "res"
@@ -54,7 +54,7 @@
 %_ptr_StorageBuffer__arr_half_uint_1024 = OpTypePointer StorageBuffer %_arr_half_uint_1024
 %_ptr_StorageBuffer_half = OpTypePointer StorageBuffer %half
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_c75357 = OpFunction %9 None %13
+%subgroupMatrixMultiply_42abed = OpFunction %9 None %13
          %14 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_16 Function
       %arg_1 = OpVariable %_ptr_Function_21 Function
@@ -70,7 +70,7 @@
                OpFunctionEnd
 %compute_main = OpFunction %void None %34
          %35 = OpLabel
-         %36 = OpFunctionCall %9 %subgroupMatrixMultiply_c75357
+         %36 = OpFunctionCall %9 %subgroupMatrixMultiply_42abed
          %37 = OpAccessChain %_ptr_StorageBuffer__arr_half_uint_1024 %1 %uint_0
          %39 = OpAccessChain %_ptr_StorageBuffer_half %37 %uint_0
                OpCooperativeMatrixStoreKHR %39 %36 %uint_0 %uint_64 NonPrivatePointer
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/42abed.wgsl.expected.wgsl
similarity index 79%
rename from test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.wgsl
rename to test/tint/builtins/gen/var/subgroupMatrixMultiply/42abed.wgsl.expected.wgsl
index 1ce1b6a..40cdb4a 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/42abed.wgsl.expected.wgsl
@@ -3,14 +3,14 @@
 
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
 
-fn subgroupMatrixMultiply_c75357() -> subgroup_matrix_result<f16, 8, 8> {
+fn subgroupMatrixMultiply_42abed() -> subgroup_matrix_result<f16, 8, 8> {
   var arg_0 = subgroup_matrix_left<f16, 8, 8>();
   var arg_1 = subgroup_matrix_right<f16, 8, 8>();
-  var res : subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var res : subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply<f16>(arg_0, arg_1);
   return res;
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_c75357(), false, 64);
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_42abed(), false, 64);
 }
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/5677fc.wgsl
similarity index 84%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/5677fc.wgsl
index e2f0f13..0143a9a 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/5677fc.wgsl
@@ -41,17 +41,17 @@
 enable chromium_experimental_subgroup_matrix;
 
 enable f16;
-@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, f16, 8, 8>, subgroup_matrix<right, f16, 8, 8>) -> subgroup_matrix<result, f16, 8, 8>
-fn subgroupMatrixMultiply_c75357() -> subgroup_matrix_result<f16, 8, 8>{
+// fn subgroupMatrixMultiply<TR: f32>(subgroup_matrix<left, f16, 8, 8>, subgroup_matrix<right, f16, 8, 8>) -> subgroup_matrix<result, f32, 8, 8>
+fn subgroupMatrixMultiply_5677fc() -> subgroup_matrix_result<f32, 8, 8>{
   var arg_0 = subgroup_matrix_left<f16, 8, 8>();
   var arg_1 = subgroup_matrix_right<f16, 8, 8>();
-  var res: subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var res: subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply<f32>(arg_0, arg_1);
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_c75357(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_5677fc(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/5677fc.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/5677fc.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/5677fc.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/5677fc.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/5677fc.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/5677fc.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/5677fc.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/5677fc.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/5677fc.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/5677fc.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/5677fc.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/5677fc.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/5677fc.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/5677fc.wgsl.expected.msl
new file mode 100644
index 0000000..14655f4
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/5677fc.wgsl.expected.msl
@@ -0,0 +1,70 @@
+SKIP: FAILED
+
+
+enable chromium_experimental_subgroup_matrix;
+enable f16;
+
+@internal(disable_validation__binding_point_collision) @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
+
+fn subgroupMatrixMultiply_5677fc() -> subgroup_matrix_result<f32, 8, 8> {
+  var arg_0 = subgroup_matrix_left<f16, 8, 8>();
+  var arg_1 = subgroup_matrix_right<f16, 8, 8>();
+  var res : subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply<f32>(arg_0, arg_1);
+  return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_5677fc(), false, 64);
+}
+
+Failed to generate: :15:16 error: msl.simdgroup_multiply: no matching call to 'msl.simdgroup_multiply(subgroup_matrix_result<f32, 8, 8>, subgroup_matrix_left<f16, 8, 8>, subgroup_matrix_right<f16, 8, 8>)'
+
+1 candidate function:
+ • 'msl.simdgroup_multiply(subgroup_matrix<result, S, C, R>  ✓ , subgroup_matrix<left, S, K, R>  ✗ , subgroup_matrix<right, S, C, K>  ✗ )' where:
+      ✓  'S' is 'f32' or 'f16'
+
+    %10:void = msl.simdgroup_multiply %9, %6, %7
+               ^^^^^^^^^^^^^^^^^^^^^^
+
+:6:3 note: in block
+  $B1: {
+  ^^^
+
+note: # Disassembly
+tint_module_vars_struct = struct @align(1) {
+  prevent_dce:ptr<storage, array<f32, 1024>, read_write> @offset(0)
+}
+
+%subgroupMatrixMultiply_5677fc = func():subgroup_matrix_result<f32, 8, 8> {
+  $B1: {
+    %2:subgroup_matrix_left<f16, 8, 8> = construct
+    %arg_0:ptr<function, subgroup_matrix_left<f16, 8, 8>, read_write> = var, %2
+    %4:subgroup_matrix_right<f16, 8, 8> = construct
+    %arg_1:ptr<function, subgroup_matrix_right<f16, 8, 8>, read_write> = var, %4
+    %6:subgroup_matrix_left<f16, 8, 8> = load %arg_0
+    %7:subgroup_matrix_right<f16, 8, 8> = load %arg_1
+    %8:ptr<function, subgroup_matrix_result<f32, 8, 8>, read_write> = var
+    %9:subgroup_matrix_result<f32, 8, 8> = load %8
+    %10:void = msl.simdgroup_multiply %9, %6, %7
+    %11:subgroup_matrix_result<f32, 8, 8> = load %8
+    %res:ptr<function, subgroup_matrix_result<f32, 8, 8>, read_write> = var, %11
+    %13:subgroup_matrix_result<f32, 8, 8> = load %res
+    ret %13
+  }
+}
+%compute_main = @compute @workgroup_size(1u, 1u, 1u) func(%prevent_dce:ptr<storage, array<f32, 1024>, read_write> [@binding_point(0, 0)]):void {
+  $B2: {
+    %16:tint_module_vars_struct = construct %prevent_dce
+    %tint_module_vars:tint_module_vars_struct = let %16
+    %18:subgroup_matrix_result<f32, 8, 8> = call %subgroupMatrixMultiply_5677fc
+    %19:ptr<storage, array<f32, 1024>, read_write> = access %tint_module_vars, 0u
+    %20:ptr<storage, f32, read_write> = access %19, 0u
+    %21:u64 = msl.convert 64u
+    %22:void = msl.simdgroup_store %18, %20, %21, vec2<u64>(0u64), false
+    ret
+  }
+}
+
+
+tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiply/5677fc.wgsl.expected.spvasm
similarity index 64%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/5677fc.wgsl.expected.spvasm
index a329068..d76b312 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/5677fc.wgsl.expected.spvasm
@@ -1,12 +1,15 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 43
+; Bound: 44
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
                OpCapability VulkanMemoryModelDeviceScope
                OpCapability CooperativeMatrixKHR
+               OpCapability Float16
+               OpCapability UniformAndStorageBuffer16BitAccess
+               OpCapability StorageBuffer16BitAccess
                OpExtension "SPV_KHR_vulkan_memory_model"
                OpExtension "SPV_KHR_cooperative_matrix"
                OpMemoryModel Logical Vulkan
@@ -14,7 +17,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_077fe6 "subgroupMatrixMultiply_077fe6"
+               OpName %subgroupMatrixMultiply_5677fc "subgroupMatrixMultiply_5677fc"
                OpName %arg_0 "arg_0"
                OpName %arg_1 "arg_1"
                OpName %res "res"
@@ -36,40 +39,41 @@
      %uint_2 = OpConstant %uint 2
           %9 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
+       %half = OpTypeFloat 16
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
 %_ptr_Function_16 = OpTypePointer Function %16
      %uint_1 = OpConstant %uint 1
-         %21 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_1
-         %20 = OpConstantNull %21
-%_ptr_Function_21 = OpTypePointer Function %21
-         %27 = OpConstantNull %9
+         %22 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_1
+         %21 = OpConstantNull %22
+%_ptr_Function_22 = OpTypePointer Function %22
+         %28 = OpConstantNull %9
 %_ptr_Function_9 = OpTypePointer Function %9
        %void = OpTypeVoid
-         %34 = OpTypeFunction %void
+         %35 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_float_uint_1024 = OpTypePointer StorageBuffer %_arr_float_uint_1024
 %_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_077fe6 = OpFunction %9 None %13
+%subgroupMatrixMultiply_5677fc = OpFunction %9 None %13
          %14 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_16 Function
-      %arg_1 = OpVariable %_ptr_Function_21 Function
+      %arg_1 = OpVariable %_ptr_Function_22 Function
         %res = OpVariable %_ptr_Function_9 Function
                OpStore %arg_0 %15
-               OpStore %arg_1 %20
-         %25 = OpLoad %16 %arg_0 None
-         %26 = OpLoad %21 %arg_1 None
-         %28 = OpCooperativeMatrixMulAddKHR %9 %25 %26 %27
-               OpStore %res %28
-         %31 = OpLoad %9 %res None
-               OpReturnValue %31
+               OpStore %arg_1 %21
+         %26 = OpLoad %16 %arg_0 None
+         %27 = OpLoad %22 %arg_1 None
+         %29 = OpCooperativeMatrixMulAddKHR %9 %26 %27 %28
+               OpStore %res %29
+         %32 = OpLoad %9 %res None
+               OpReturnValue %32
                OpFunctionEnd
-%compute_main = OpFunction %void None %34
-         %35 = OpLabel
-         %36 = OpFunctionCall %9 %subgroupMatrixMultiply_077fe6
-         %37 = OpAccessChain %_ptr_StorageBuffer__arr_float_uint_1024 %1 %uint_0
-         %39 = OpAccessChain %_ptr_StorageBuffer_float %37 %uint_0
-               OpCooperativeMatrixStoreKHR %39 %36 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %35
+         %36 = OpLabel
+         %37 = OpFunctionCall %9 %subgroupMatrixMultiply_5677fc
+         %38 = OpAccessChain %_ptr_StorageBuffer__arr_float_uint_1024 %1 %uint_0
+         %40 = OpAccessChain %_ptr_StorageBuffer_float %38 %uint_0
+               OpCooperativeMatrixStoreKHR %40 %37 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/5677fc.wgsl.expected.wgsl
similarity index 65%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/5677fc.wgsl.expected.wgsl
index 1ce1b6a..59d3d69 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/5677fc.wgsl.expected.wgsl
@@ -1,16 +1,16 @@
 enable chromium_experimental_subgroup_matrix;
 enable f16;
 
-@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
 
-fn subgroupMatrixMultiply_c75357() -> subgroup_matrix_result<f16, 8, 8> {
+fn subgroupMatrixMultiply_5677fc() -> subgroup_matrix_result<f32, 8, 8> {
   var arg_0 = subgroup_matrix_left<f16, 8, 8>();
   var arg_1 = subgroup_matrix_right<f16, 8, 8>();
-  var res : subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var res : subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply<f32>(arg_0, arg_1);
   return res;
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_c75357(), false, 64);
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_5677fc(), false, 64);
 }
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/704b4d.wgsl
similarity index 84%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/704b4d.wgsl
index e2f0f13..378dc1e 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/704b4d.wgsl
@@ -41,17 +41,17 @@
 enable chromium_experimental_subgroup_matrix;
 
 enable f16;
-@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, f16, 8, 8>, subgroup_matrix<right, f16, 8, 8>) -> subgroup_matrix<result, f16, 8, 8>
-fn subgroupMatrixMultiply_c75357() -> subgroup_matrix_result<f16, 8, 8>{
+// fn subgroupMatrixMultiply<TR: i32>(subgroup_matrix<left, f16, 8, 8>, subgroup_matrix<right, f16, 8, 8>) -> subgroup_matrix<result, i32, 8, 8>
+fn subgroupMatrixMultiply_704b4d() -> subgroup_matrix_result<i32, 8, 8>{
   var arg_0 = subgroup_matrix_left<f16, 8, 8>();
   var arg_1 = subgroup_matrix_right<f16, 8, 8>();
-  var res: subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var res: subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply<i32>(arg_0, arg_1);
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_c75357(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_704b4d(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/704b4d.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/704b4d.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/704b4d.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/704b4d.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/704b4d.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/704b4d.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/704b4d.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/704b4d.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/704b4d.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/704b4d.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/704b4d.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/704b4d.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/704b4d.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/704b4d.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiply/704b4d.wgsl.expected.spvasm
similarity index 64%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/704b4d.wgsl.expected.spvasm
index 3b129e9..3f9de81 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/704b4d.wgsl.expected.spvasm
@@ -1,12 +1,15 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 43
+; Bound: 44
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
                OpCapability VulkanMemoryModelDeviceScope
                OpCapability CooperativeMatrixKHR
+               OpCapability Float16
+               OpCapability UniformAndStorageBuffer16BitAccess
+               OpCapability StorageBuffer16BitAccess
                OpExtension "SPV_KHR_vulkan_memory_model"
                OpExtension "SPV_KHR_cooperative_matrix"
                OpMemoryModel Logical Vulkan
@@ -14,7 +17,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_fd0481 "subgroupMatrixMultiply_fd0481"
+               OpName %subgroupMatrixMultiply_704b4d "subgroupMatrixMultiply_704b4d"
                OpName %arg_0 "arg_0"
                OpName %arg_1 "arg_1"
                OpName %res "res"
@@ -36,40 +39,41 @@
      %uint_2 = OpConstant %uint 2
           %9 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
+       %half = OpTypeFloat 16
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
 %_ptr_Function_16 = OpTypePointer Function %16
      %uint_1 = OpConstant %uint 1
-         %21 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_1
-         %20 = OpConstantNull %21
-%_ptr_Function_21 = OpTypePointer Function %21
-         %27 = OpConstantNull %9
+         %22 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_1
+         %21 = OpConstantNull %22
+%_ptr_Function_22 = OpTypePointer Function %22
+         %28 = OpConstantNull %9
 %_ptr_Function_9 = OpTypePointer Function %9
        %void = OpTypeVoid
-         %34 = OpTypeFunction %void
+         %35 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_int_uint_1024 = OpTypePointer StorageBuffer %_arr_int_uint_1024
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_fd0481 = OpFunction %9 None %13
+%subgroupMatrixMultiply_704b4d = OpFunction %9 None %13
          %14 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_16 Function
-      %arg_1 = OpVariable %_ptr_Function_21 Function
+      %arg_1 = OpVariable %_ptr_Function_22 Function
         %res = OpVariable %_ptr_Function_9 Function
                OpStore %arg_0 %15
-               OpStore %arg_1 %20
-         %25 = OpLoad %16 %arg_0 None
-         %26 = OpLoad %21 %arg_1 None
-         %28 = OpCooperativeMatrixMulAddKHR %9 %25 %26 %27
-               OpStore %res %28
-         %31 = OpLoad %9 %res None
-               OpReturnValue %31
+               OpStore %arg_1 %21
+         %26 = OpLoad %16 %arg_0 None
+         %27 = OpLoad %22 %arg_1 None
+         %29 = OpCooperativeMatrixMulAddKHR %9 %26 %27 %28
+               OpStore %res %29
+         %32 = OpLoad %9 %res None
+               OpReturnValue %32
                OpFunctionEnd
-%compute_main = OpFunction %void None %34
-         %35 = OpLabel
-         %36 = OpFunctionCall %9 %subgroupMatrixMultiply_fd0481
-         %37 = OpAccessChain %_ptr_StorageBuffer__arr_int_uint_1024 %1 %uint_0
-         %39 = OpAccessChain %_ptr_StorageBuffer_int %37 %uint_0
-               OpCooperativeMatrixStoreKHR %39 %36 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %35
+         %36 = OpLabel
+         %37 = OpFunctionCall %9 %subgroupMatrixMultiply_704b4d
+         %38 = OpAccessChain %_ptr_StorageBuffer__arr_int_uint_1024 %1 %uint_0
+         %40 = OpAccessChain %_ptr_StorageBuffer_int %38 %uint_0
+               OpCooperativeMatrixStoreKHR %40 %37 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/704b4d.wgsl.expected.wgsl
similarity index 65%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/704b4d.wgsl.expected.wgsl
index 1ce1b6a..c2c2119 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/704b4d.wgsl.expected.wgsl
@@ -1,16 +1,16 @@
 enable chromium_experimental_subgroup_matrix;
 enable f16;
 
-@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
 
-fn subgroupMatrixMultiply_c75357() -> subgroup_matrix_result<f16, 8, 8> {
+fn subgroupMatrixMultiply_704b4d() -> subgroup_matrix_result<i32, 8, 8> {
   var arg_0 = subgroup_matrix_left<f16, 8, 8>();
   var arg_1 = subgroup_matrix_right<f16, 8, 8>();
-  var res : subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var res : subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply<i32>(arg_0, arg_1);
   return res;
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_c75357(), false, 64);
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_704b4d(), false, 64);
 }
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.dxc.hlsl
deleted file mode 100644
index 5664c5f..0000000
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.dxc.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: trace/BPT trap
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.fxc.hlsl
deleted file mode 100644
index e202956..0000000
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.fxc.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: INVALID
-
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: trace/BPT trap
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8648ad.wgsl
similarity index 84%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/8648ad.wgsl
index a097359..2933fb1 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8648ad.wgsl
@@ -42,14 +42,14 @@
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, f32, 8, 8>, subgroup_matrix<right, f32, 8, 8>) -> subgroup_matrix<result, f32, 8, 8>
-fn subgroupMatrixMultiply_077fe6() -> subgroup_matrix_result<f32, 8, 8>{
-  var arg_0 = subgroup_matrix_left<f32, 8, 8>();
-  var arg_1 = subgroup_matrix_right<f32, 8, 8>();
-  var res: subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+// fn subgroupMatrixMultiply<TR: f32>(subgroup_matrix<left, i32, 8, 8>, subgroup_matrix<right, i32, 8, 8>) -> subgroup_matrix<result, f32, 8, 8>
+fn subgroupMatrixMultiply_8648ad() -> subgroup_matrix_result<f32, 8, 8>{
+  var arg_0 = subgroup_matrix_left<i32, 8, 8>();
+  var arg_1 = subgroup_matrix_right<i32, 8, 8>();
+  var res: subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply<f32>(arg_0, arg_1);
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_077fe6(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_8648ad(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8648ad.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/8648ad.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8648ad.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8648ad.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/8648ad.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8648ad.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8648ad.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/8648ad.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8648ad.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/8648ad.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8648ad.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/8648ad.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8648ad.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/8648ad.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8648ad.wgsl.expected.spvasm
similarity index 67%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/8648ad.wgsl.expected.spvasm
index a329068..3634fcc 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8648ad.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 43
+; Bound: 44
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
@@ -14,7 +14,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_077fe6 "subgroupMatrixMultiply_077fe6"
+               OpName %subgroupMatrixMultiply_8648ad "subgroupMatrixMultiply_8648ad"
                OpName %arg_0 "arg_0"
                OpName %arg_1 "arg_1"
                OpName %res "res"
@@ -36,40 +36,41 @@
      %uint_2 = OpConstant %uint 2
           %9 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
+        %int = OpTypeInt 32 1
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
 %_ptr_Function_16 = OpTypePointer Function %16
      %uint_1 = OpConstant %uint 1
-         %21 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_1
-         %20 = OpConstantNull %21
-%_ptr_Function_21 = OpTypePointer Function %21
-         %27 = OpConstantNull %9
+         %22 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_1
+         %21 = OpConstantNull %22
+%_ptr_Function_22 = OpTypePointer Function %22
+         %28 = OpConstantNull %9
 %_ptr_Function_9 = OpTypePointer Function %9
        %void = OpTypeVoid
-         %34 = OpTypeFunction %void
+         %35 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_float_uint_1024 = OpTypePointer StorageBuffer %_arr_float_uint_1024
 %_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_077fe6 = OpFunction %9 None %13
+%subgroupMatrixMultiply_8648ad = OpFunction %9 None %13
          %14 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_16 Function
-      %arg_1 = OpVariable %_ptr_Function_21 Function
+      %arg_1 = OpVariable %_ptr_Function_22 Function
         %res = OpVariable %_ptr_Function_9 Function
                OpStore %arg_0 %15
-               OpStore %arg_1 %20
-         %25 = OpLoad %16 %arg_0 None
-         %26 = OpLoad %21 %arg_1 None
-         %28 = OpCooperativeMatrixMulAddKHR %9 %25 %26 %27
-               OpStore %res %28
-         %31 = OpLoad %9 %res None
-               OpReturnValue %31
+               OpStore %arg_1 %21
+         %26 = OpLoad %16 %arg_0 None
+         %27 = OpLoad %22 %arg_1 None
+         %29 = OpCooperativeMatrixMulAddKHR %9 %26 %27 %28
+               OpStore %res %29
+         %32 = OpLoad %9 %res None
+               OpReturnValue %32
                OpFunctionEnd
-%compute_main = OpFunction %void None %34
-         %35 = OpLabel
-         %36 = OpFunctionCall %9 %subgroupMatrixMultiply_077fe6
-         %37 = OpAccessChain %_ptr_StorageBuffer__arr_float_uint_1024 %1 %uint_0
-         %39 = OpAccessChain %_ptr_StorageBuffer_float %37 %uint_0
-               OpCooperativeMatrixStoreKHR %39 %36 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %35
+         %36 = OpLabel
+         %37 = OpFunctionCall %9 %subgroupMatrixMultiply_8648ad
+         %38 = OpAccessChain %_ptr_StorageBuffer__arr_float_uint_1024 %1 %uint_0
+         %40 = OpAccessChain %_ptr_StorageBuffer_float %38 %uint_0
+               OpCooperativeMatrixStoreKHR %40 %37 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8648ad.wgsl.expected.wgsl
similarity index 64%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/8648ad.wgsl.expected.wgsl
index e2629e5..b75f949 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8648ad.wgsl.expected.wgsl
@@ -1,15 +1,15 @@
 enable chromium_experimental_subgroup_matrix;
 
-@group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
 
-fn subgroupMatrixMultiply_fd0481() -> subgroup_matrix_result<i32, 8, 8> {
+fn subgroupMatrixMultiply_8648ad() -> subgroup_matrix_result<f32, 8, 8> {
   var arg_0 = subgroup_matrix_left<i32, 8, 8>();
   var arg_1 = subgroup_matrix_right<i32, 8, 8>();
-  var res : subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var res : subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply<f32>(arg_0, arg_1);
   return res;
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_fd0481(), false, 64);
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_8648ad(), false, 64);
 }
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8744bd.wgsl
similarity index 84%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/8744bd.wgsl
index e2f0f13..8b76a9e 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8744bd.wgsl
@@ -44,14 +44,14 @@
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, f16, 8, 8>, subgroup_matrix<right, f16, 8, 8>) -> subgroup_matrix<result, f16, 8, 8>
-fn subgroupMatrixMultiply_c75357() -> subgroup_matrix_result<f16, 8, 8>{
-  var arg_0 = subgroup_matrix_left<f16, 8, 8>();
-  var arg_1 = subgroup_matrix_right<f16, 8, 8>();
-  var res: subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+// fn subgroupMatrixMultiply<TR: f16>(subgroup_matrix<left, f32, 8, 8>, subgroup_matrix<right, f32, 8, 8>) -> subgroup_matrix<result, f16, 8, 8>
+fn subgroupMatrixMultiply_8744bd() -> subgroup_matrix_result<f16, 8, 8>{
+  var arg_0 = subgroup_matrix_left<f32, 8, 8>();
+  var arg_1 = subgroup_matrix_right<f32, 8, 8>();
+  var res: subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply<f16>(arg_0, arg_1);
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_c75357(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_8744bd(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8744bd.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/8744bd.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8744bd.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8744bd.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/8744bd.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8744bd.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8744bd.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/8744bd.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8744bd.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/8744bd.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8744bd.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/8744bd.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/8744bd.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8744bd.wgsl.expected.msl
new file mode 100644
index 0000000..a4f8fe0
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8744bd.wgsl.expected.msl
@@ -0,0 +1,70 @@
+SKIP: FAILED
+
+
+enable chromium_experimental_subgroup_matrix;
+enable f16;
+
+@internal(disable_validation__binding_point_collision) @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
+
+fn subgroupMatrixMultiply_8744bd() -> subgroup_matrix_result<f16, 8, 8> {
+  var arg_0 = subgroup_matrix_left<f32, 8, 8>();
+  var arg_1 = subgroup_matrix_right<f32, 8, 8>();
+  var res : subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply<f16>(arg_0, arg_1);
+  return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_8744bd(), false, 64);
+}
+
+Failed to generate: :15:16 error: msl.simdgroup_multiply: no matching call to 'msl.simdgroup_multiply(subgroup_matrix_result<f16, 8, 8>, subgroup_matrix_left<f32, 8, 8>, subgroup_matrix_right<f32, 8, 8>)'
+
+1 candidate function:
+ • 'msl.simdgroup_multiply(subgroup_matrix<result, S, C, R>  ✓ , subgroup_matrix<left, S, K, R>  ✗ , subgroup_matrix<right, S, C, K>  ✗ )' where:
+      ✓  'S' is 'f32' or 'f16'
+
+    %10:void = msl.simdgroup_multiply %9, %6, %7
+               ^^^^^^^^^^^^^^^^^^^^^^
+
+:6:3 note: in block
+  $B1: {
+  ^^^
+
+note: # Disassembly
+tint_module_vars_struct = struct @align(1) {
+  prevent_dce:ptr<storage, array<f16, 1024>, read_write> @offset(0)
+}
+
+%subgroupMatrixMultiply_8744bd = func():subgroup_matrix_result<f16, 8, 8> {
+  $B1: {
+    %2:subgroup_matrix_left<f32, 8, 8> = construct
+    %arg_0:ptr<function, subgroup_matrix_left<f32, 8, 8>, read_write> = var, %2
+    %4:subgroup_matrix_right<f32, 8, 8> = construct
+    %arg_1:ptr<function, subgroup_matrix_right<f32, 8, 8>, read_write> = var, %4
+    %6:subgroup_matrix_left<f32, 8, 8> = load %arg_0
+    %7:subgroup_matrix_right<f32, 8, 8> = load %arg_1
+    %8:ptr<function, subgroup_matrix_result<f16, 8, 8>, read_write> = var
+    %9:subgroup_matrix_result<f16, 8, 8> = load %8
+    %10:void = msl.simdgroup_multiply %9, %6, %7
+    %11:subgroup_matrix_result<f16, 8, 8> = load %8
+    %res:ptr<function, subgroup_matrix_result<f16, 8, 8>, read_write> = var, %11
+    %13:subgroup_matrix_result<f16, 8, 8> = load %res
+    ret %13
+  }
+}
+%compute_main = @compute @workgroup_size(1u, 1u, 1u) func(%prevent_dce:ptr<storage, array<f16, 1024>, read_write> [@binding_point(0, 0)]):void {
+  $B2: {
+    %16:tint_module_vars_struct = construct %prevent_dce
+    %tint_module_vars:tint_module_vars_struct = let %16
+    %18:subgroup_matrix_result<f16, 8, 8> = call %subgroupMatrixMultiply_8744bd
+    %19:ptr<storage, array<f16, 1024>, read_write> = access %tint_module_vars, 0u
+    %20:ptr<storage, f16, read_write> = access %19, 0u
+    %21:u64 = msl.convert 64u
+    %22:void = msl.simdgroup_store %18, %20, %21, vec2<u64>(0u64), false
+    ret
+  }
+}
+
+
+tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8744bd.wgsl.expected.spvasm
similarity index 68%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/8744bd.wgsl.expected.spvasm
index 41bc0a8..db8a09f 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8744bd.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 43
+; Bound: 44
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
@@ -17,7 +17,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_c75357 "subgroupMatrixMultiply_c75357"
+               OpName %subgroupMatrixMultiply_8744bd "subgroupMatrixMultiply_8744bd"
                OpName %arg_0 "arg_0"
                OpName %arg_1 "arg_1"
                OpName %res "res"
@@ -39,40 +39,41 @@
      %uint_2 = OpConstant %uint 2
           %9 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
+      %float = OpTypeFloat 32
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
 %_ptr_Function_16 = OpTypePointer Function %16
      %uint_1 = OpConstant %uint 1
-         %21 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_1
-         %20 = OpConstantNull %21
-%_ptr_Function_21 = OpTypePointer Function %21
-         %27 = OpConstantNull %9
+         %22 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_1
+         %21 = OpConstantNull %22
+%_ptr_Function_22 = OpTypePointer Function %22
+         %28 = OpConstantNull %9
 %_ptr_Function_9 = OpTypePointer Function %9
        %void = OpTypeVoid
-         %34 = OpTypeFunction %void
+         %35 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_half_uint_1024 = OpTypePointer StorageBuffer %_arr_half_uint_1024
 %_ptr_StorageBuffer_half = OpTypePointer StorageBuffer %half
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_c75357 = OpFunction %9 None %13
+%subgroupMatrixMultiply_8744bd = OpFunction %9 None %13
          %14 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_16 Function
-      %arg_1 = OpVariable %_ptr_Function_21 Function
+      %arg_1 = OpVariable %_ptr_Function_22 Function
         %res = OpVariable %_ptr_Function_9 Function
                OpStore %arg_0 %15
-               OpStore %arg_1 %20
-         %25 = OpLoad %16 %arg_0 None
-         %26 = OpLoad %21 %arg_1 None
-         %28 = OpCooperativeMatrixMulAddKHR %9 %25 %26 %27
-               OpStore %res %28
-         %31 = OpLoad %9 %res None
-               OpReturnValue %31
+               OpStore %arg_1 %21
+         %26 = OpLoad %16 %arg_0 None
+         %27 = OpLoad %22 %arg_1 None
+         %29 = OpCooperativeMatrixMulAddKHR %9 %26 %27 %28
+               OpStore %res %29
+         %32 = OpLoad %9 %res None
+               OpReturnValue %32
                OpFunctionEnd
-%compute_main = OpFunction %void None %34
-         %35 = OpLabel
-         %36 = OpFunctionCall %9 %subgroupMatrixMultiply_c75357
-         %37 = OpAccessChain %_ptr_StorageBuffer__arr_half_uint_1024 %1 %uint_0
-         %39 = OpAccessChain %_ptr_StorageBuffer_half %37 %uint_0
-               OpCooperativeMatrixStoreKHR %39 %36 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %35
+         %36 = OpLabel
+         %37 = OpFunctionCall %9 %subgroupMatrixMultiply_8744bd
+         %38 = OpAccessChain %_ptr_StorageBuffer__arr_half_uint_1024 %1 %uint_0
+         %40 = OpAccessChain %_ptr_StorageBuffer_half %38 %uint_0
+               OpCooperativeMatrixStoreKHR %40 %37 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8744bd.wgsl.expected.wgsl
similarity index 63%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/8744bd.wgsl.expected.wgsl
index 813d309..0685d16 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8744bd.wgsl.expected.wgsl
@@ -1,15 +1,16 @@
 enable chromium_experimental_subgroup_matrix;
+enable f16;
 
-@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
 
-fn subgroupMatrixMultiply_077fe6() -> subgroup_matrix_result<f32, 8, 8> {
+fn subgroupMatrixMultiply_8744bd() -> subgroup_matrix_result<f16, 8, 8> {
   var arg_0 = subgroup_matrix_left<f32, 8, 8>();
   var arg_1 = subgroup_matrix_right<f32, 8, 8>();
-  var res : subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var res : subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply<f16>(arg_0, arg_1);
   return res;
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_077fe6(), false, 64);
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_8744bd(), false, 64);
 }
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8c3aac.wgsl
similarity index 84%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/8c3aac.wgsl
index a097359..824c0eb 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8c3aac.wgsl
@@ -39,17 +39,17 @@
 
 
 enable chromium_experimental_subgroup_matrix;
-@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<u32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, f32, 8, 8>, subgroup_matrix<right, f32, 8, 8>) -> subgroup_matrix<result, f32, 8, 8>
-fn subgroupMatrixMultiply_077fe6() -> subgroup_matrix_result<f32, 8, 8>{
+// fn subgroupMatrixMultiply<TR: u32>(subgroup_matrix<left, f32, 8, 8>, subgroup_matrix<right, f32, 8, 8>) -> subgroup_matrix<result, u32, 8, 8>
+fn subgroupMatrixMultiply_8c3aac() -> subgroup_matrix_result<u32, 8, 8>{
   var arg_0 = subgroup_matrix_left<f32, 8, 8>();
   var arg_1 = subgroup_matrix_right<f32, 8, 8>();
-  var res: subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var res: subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply<u32>(arg_0, arg_1);
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_077fe6(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_8c3aac(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8c3aac.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/8c3aac.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8c3aac.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8c3aac.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/8c3aac.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8c3aac.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8c3aac.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/8c3aac.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8c3aac.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/8c3aac.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8c3aac.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/8c3aac.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8c3aac.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/8c3aac.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8c3aac.wgsl.expected.spvasm
similarity index 67%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/8c3aac.wgsl.expected.spvasm
index a14cda7..72a4368 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8c3aac.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 42
+; Bound: 43
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
@@ -14,7 +14,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_837e77 "subgroupMatrixMultiply_837e77"
+               OpName %subgroupMatrixMultiply_8c3aac "subgroupMatrixMultiply_8c3aac"
                OpName %arg_0 "arg_0"
                OpName %arg_1 "arg_1"
                OpName %res "res"
@@ -35,40 +35,41 @@
      %uint_2 = OpConstant %uint 2
           %8 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_2
          %12 = OpTypeFunction %8
+      %float = OpTypeFloat 32
      %uint_0 = OpConstant %uint 0
-         %15 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_0
+         %15 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_0
          %14 = OpConstantNull %15
 %_ptr_Function_15 = OpTypePointer Function %15
      %uint_1 = OpConstant %uint 1
-         %20 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_1
-         %19 = OpConstantNull %20
-%_ptr_Function_20 = OpTypePointer Function %20
-         %26 = OpConstantNull %8
+         %21 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_1
+         %20 = OpConstantNull %21
+%_ptr_Function_21 = OpTypePointer Function %21
+         %27 = OpConstantNull %8
 %_ptr_Function_8 = OpTypePointer Function %8
        %void = OpTypeVoid
-         %33 = OpTypeFunction %void
+         %34 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_uint_uint_1024 = OpTypePointer StorageBuffer %_arr_uint_uint_1024
 %_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_837e77 = OpFunction %8 None %12
+%subgroupMatrixMultiply_8c3aac = OpFunction %8 None %12
          %13 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_15 Function
-      %arg_1 = OpVariable %_ptr_Function_20 Function
+      %arg_1 = OpVariable %_ptr_Function_21 Function
         %res = OpVariable %_ptr_Function_8 Function
                OpStore %arg_0 %14
-               OpStore %arg_1 %19
-         %24 = OpLoad %15 %arg_0 None
-         %25 = OpLoad %20 %arg_1 None
-         %27 = OpCooperativeMatrixMulAddKHR %8 %24 %25 %26
-               OpStore %res %27
-         %30 = OpLoad %8 %res None
-               OpReturnValue %30
+               OpStore %arg_1 %20
+         %25 = OpLoad %15 %arg_0 None
+         %26 = OpLoad %21 %arg_1 None
+         %28 = OpCooperativeMatrixMulAddKHR %8 %25 %26 %27
+               OpStore %res %28
+         %31 = OpLoad %8 %res None
+               OpReturnValue %31
                OpFunctionEnd
-%compute_main = OpFunction %void None %33
-         %34 = OpLabel
-         %35 = OpFunctionCall %8 %subgroupMatrixMultiply_837e77
-         %36 = OpAccessChain %_ptr_StorageBuffer__arr_uint_uint_1024 %1 %uint_0
-         %38 = OpAccessChain %_ptr_StorageBuffer_uint %36 %uint_0
-               OpCooperativeMatrixStoreKHR %38 %35 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %34
+         %35 = OpLabel
+         %36 = OpFunctionCall %8 %subgroupMatrixMultiply_8c3aac
+         %37 = OpAccessChain %_ptr_StorageBuffer__arr_uint_uint_1024 %1 %uint_0
+         %39 = OpAccessChain %_ptr_StorageBuffer_uint %37 %uint_0
+               OpCooperativeMatrixStoreKHR %39 %36 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8c3aac.wgsl.expected.wgsl
similarity index 64%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/8c3aac.wgsl.expected.wgsl
index 813d309..8d109fa 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8c3aac.wgsl.expected.wgsl
@@ -1,15 +1,15 @@
 enable chromium_experimental_subgroup_matrix;
 
-@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<u32, 1024>;
 
-fn subgroupMatrixMultiply_077fe6() -> subgroup_matrix_result<f32, 8, 8> {
+fn subgroupMatrixMultiply_8c3aac() -> subgroup_matrix_result<u32, 8, 8> {
   var arg_0 = subgroup_matrix_left<f32, 8, 8>();
   var arg_1 = subgroup_matrix_right<f32, 8, 8>();
-  var res : subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var res : subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply<u32>(arg_0, arg_1);
   return res;
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_077fe6(), false, 64);
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_8c3aac(), false, 64);
 }
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/957137.wgsl
similarity index 84%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/957137.wgsl
index e2f0f13..3f076a3 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/957137.wgsl
@@ -41,17 +41,17 @@
 enable chromium_experimental_subgroup_matrix;
 
 enable f16;
-@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<u32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, f16, 8, 8>, subgroup_matrix<right, f16, 8, 8>) -> subgroup_matrix<result, f16, 8, 8>
-fn subgroupMatrixMultiply_c75357() -> subgroup_matrix_result<f16, 8, 8>{
+// fn subgroupMatrixMultiply<TR: u32>(subgroup_matrix<left, f16, 8, 8>, subgroup_matrix<right, f16, 8, 8>) -> subgroup_matrix<result, u32, 8, 8>
+fn subgroupMatrixMultiply_957137() -> subgroup_matrix_result<u32, 8, 8>{
   var arg_0 = subgroup_matrix_left<f16, 8, 8>();
   var arg_1 = subgroup_matrix_right<f16, 8, 8>();
-  var res: subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var res: subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply<u32>(arg_0, arg_1);
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_c75357(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_957137(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/957137.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/957137.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/957137.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/957137.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/957137.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/957137.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/957137.wgsl.expected.glsl
similarity index 100%
rename from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.glsl
rename to test/tint/builtins/gen/var/subgroupMatrixMultiply/957137.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/957137.wgsl.expected.ir.dxc.hlsl
similarity index 100%
rename from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.ir.dxc.hlsl
rename to test/tint/builtins/gen/var/subgroupMatrixMultiply/957137.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/957137.wgsl.expected.ir.fxc.hlsl
similarity index 100%
rename from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.ir.fxc.hlsl
rename to test/tint/builtins/gen/var/subgroupMatrixMultiply/957137.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/957137.wgsl.expected.msl
similarity index 100%
rename from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl
rename to test/tint/builtins/gen/var/subgroupMatrixMultiply/957137.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiply/957137.wgsl.expected.spvasm
similarity index 65%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/957137.wgsl.expected.spvasm
index a14cda7..5bf38f0 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/957137.wgsl.expected.spvasm
@@ -1,12 +1,15 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 42
+; Bound: 43
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
                OpCapability VulkanMemoryModelDeviceScope
                OpCapability CooperativeMatrixKHR
+               OpCapability Float16
+               OpCapability UniformAndStorageBuffer16BitAccess
+               OpCapability StorageBuffer16BitAccess
                OpExtension "SPV_KHR_vulkan_memory_model"
                OpExtension "SPV_KHR_cooperative_matrix"
                OpMemoryModel Logical Vulkan
@@ -14,7 +17,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_837e77 "subgroupMatrixMultiply_837e77"
+               OpName %subgroupMatrixMultiply_957137 "subgroupMatrixMultiply_957137"
                OpName %arg_0 "arg_0"
                OpName %arg_1 "arg_1"
                OpName %res "res"
@@ -35,40 +38,41 @@
      %uint_2 = OpConstant %uint 2
           %8 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_2
          %12 = OpTypeFunction %8
+       %half = OpTypeFloat 16
      %uint_0 = OpConstant %uint 0
-         %15 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_0
+         %15 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_0
          %14 = OpConstantNull %15
 %_ptr_Function_15 = OpTypePointer Function %15
      %uint_1 = OpConstant %uint 1
-         %20 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_1
-         %19 = OpConstantNull %20
-%_ptr_Function_20 = OpTypePointer Function %20
-         %26 = OpConstantNull %8
+         %21 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_1
+         %20 = OpConstantNull %21
+%_ptr_Function_21 = OpTypePointer Function %21
+         %27 = OpConstantNull %8
 %_ptr_Function_8 = OpTypePointer Function %8
        %void = OpTypeVoid
-         %33 = OpTypeFunction %void
+         %34 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_uint_uint_1024 = OpTypePointer StorageBuffer %_arr_uint_uint_1024
 %_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_837e77 = OpFunction %8 None %12
+%subgroupMatrixMultiply_957137 = OpFunction %8 None %12
          %13 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_15 Function
-      %arg_1 = OpVariable %_ptr_Function_20 Function
+      %arg_1 = OpVariable %_ptr_Function_21 Function
         %res = OpVariable %_ptr_Function_8 Function
                OpStore %arg_0 %14
-               OpStore %arg_1 %19
-         %24 = OpLoad %15 %arg_0 None
-         %25 = OpLoad %20 %arg_1 None
-         %27 = OpCooperativeMatrixMulAddKHR %8 %24 %25 %26
-               OpStore %res %27
-         %30 = OpLoad %8 %res None
-               OpReturnValue %30
+               OpStore %arg_1 %20
+         %25 = OpLoad %15 %arg_0 None
+         %26 = OpLoad %21 %arg_1 None
+         %28 = OpCooperativeMatrixMulAddKHR %8 %25 %26 %27
+               OpStore %res %28
+         %31 = OpLoad %8 %res None
+               OpReturnValue %31
                OpFunctionEnd
-%compute_main = OpFunction %void None %33
-         %34 = OpLabel
-         %35 = OpFunctionCall %8 %subgroupMatrixMultiply_837e77
-         %36 = OpAccessChain %_ptr_StorageBuffer__arr_uint_uint_1024 %1 %uint_0
-         %38 = OpAccessChain %_ptr_StorageBuffer_uint %36 %uint_0
-               OpCooperativeMatrixStoreKHR %38 %35 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %34
+         %35 = OpLabel
+         %36 = OpFunctionCall %8 %subgroupMatrixMultiply_957137
+         %37 = OpAccessChain %_ptr_StorageBuffer__arr_uint_uint_1024 %1 %uint_0
+         %39 = OpAccessChain %_ptr_StorageBuffer_uint %37 %uint_0
+               OpCooperativeMatrixStoreKHR %39 %36 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/957137.wgsl.expected.wgsl
similarity index 65%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/957137.wgsl.expected.wgsl
index 1ce1b6a..aa6f360 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/957137.wgsl.expected.wgsl
@@ -1,16 +1,16 @@
 enable chromium_experimental_subgroup_matrix;
 enable f16;
 
-@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<u32, 1024>;
 
-fn subgroupMatrixMultiply_c75357() -> subgroup_matrix_result<f16, 8, 8> {
+fn subgroupMatrixMultiply_957137() -> subgroup_matrix_result<u32, 8, 8> {
   var arg_0 = subgroup_matrix_left<f16, 8, 8>();
   var arg_1 = subgroup_matrix_right<f16, 8, 8>();
-  var res : subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var res : subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply<u32>(arg_0, arg_1);
   return res;
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_c75357(), false, 64);
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_957137(), false, 64);
 }
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/bf2e54.wgsl
similarity index 84%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/bf2e54.wgsl
index e2f0f13..4a75c3f 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/bf2e54.wgsl
@@ -44,14 +44,14 @@
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, f16, 8, 8>, subgroup_matrix<right, f16, 8, 8>) -> subgroup_matrix<result, f16, 8, 8>
-fn subgroupMatrixMultiply_c75357() -> subgroup_matrix_result<f16, 8, 8>{
-  var arg_0 = subgroup_matrix_left<f16, 8, 8>();
-  var arg_1 = subgroup_matrix_right<f16, 8, 8>();
-  var res: subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+// fn subgroupMatrixMultiply<TR: f16>(subgroup_matrix<left, i32, 8, 8>, subgroup_matrix<right, i32, 8, 8>) -> subgroup_matrix<result, f16, 8, 8>
+fn subgroupMatrixMultiply_bf2e54() -> subgroup_matrix_result<f16, 8, 8>{
+  var arg_0 = subgroup_matrix_left<i32, 8, 8>();
+  var arg_1 = subgroup_matrix_right<i32, 8, 8>();
+  var res: subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply<f16>(arg_0, arg_1);
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_c75357(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_bf2e54(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/bf2e54.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/bf2e54.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/bf2e54.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/bf2e54.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/bf2e54.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/bf2e54.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/bf2e54.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/bf2e54.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/bf2e54.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/bf2e54.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/bf2e54.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/bf2e54.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/bf2e54.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/bf2e54.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiply/bf2e54.wgsl.expected.spvasm
similarity index 69%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/bf2e54.wgsl.expected.spvasm
index 41bc0a8..2c9d0a5 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/bf2e54.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 43
+; Bound: 44
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
@@ -17,7 +17,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_c75357 "subgroupMatrixMultiply_c75357"
+               OpName %subgroupMatrixMultiply_bf2e54 "subgroupMatrixMultiply_bf2e54"
                OpName %arg_0 "arg_0"
                OpName %arg_1 "arg_1"
                OpName %res "res"
@@ -39,40 +39,41 @@
      %uint_2 = OpConstant %uint 2
           %9 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
+        %int = OpTypeInt 32 1
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
 %_ptr_Function_16 = OpTypePointer Function %16
      %uint_1 = OpConstant %uint 1
-         %21 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_1
-         %20 = OpConstantNull %21
-%_ptr_Function_21 = OpTypePointer Function %21
-         %27 = OpConstantNull %9
+         %22 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_1
+         %21 = OpConstantNull %22
+%_ptr_Function_22 = OpTypePointer Function %22
+         %28 = OpConstantNull %9
 %_ptr_Function_9 = OpTypePointer Function %9
        %void = OpTypeVoid
-         %34 = OpTypeFunction %void
+         %35 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_half_uint_1024 = OpTypePointer StorageBuffer %_arr_half_uint_1024
 %_ptr_StorageBuffer_half = OpTypePointer StorageBuffer %half
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_c75357 = OpFunction %9 None %13
+%subgroupMatrixMultiply_bf2e54 = OpFunction %9 None %13
          %14 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_16 Function
-      %arg_1 = OpVariable %_ptr_Function_21 Function
+      %arg_1 = OpVariable %_ptr_Function_22 Function
         %res = OpVariable %_ptr_Function_9 Function
                OpStore %arg_0 %15
-               OpStore %arg_1 %20
-         %25 = OpLoad %16 %arg_0 None
-         %26 = OpLoad %21 %arg_1 None
-         %28 = OpCooperativeMatrixMulAddKHR %9 %25 %26 %27
-               OpStore %res %28
-         %31 = OpLoad %9 %res None
-               OpReturnValue %31
+               OpStore %arg_1 %21
+         %26 = OpLoad %16 %arg_0 None
+         %27 = OpLoad %22 %arg_1 None
+         %29 = OpCooperativeMatrixMulAddKHR %9 %26 %27 %28
+               OpStore %res %29
+         %32 = OpLoad %9 %res None
+               OpReturnValue %32
                OpFunctionEnd
-%compute_main = OpFunction %void None %34
-         %35 = OpLabel
-         %36 = OpFunctionCall %9 %subgroupMatrixMultiply_c75357
-         %37 = OpAccessChain %_ptr_StorageBuffer__arr_half_uint_1024 %1 %uint_0
-         %39 = OpAccessChain %_ptr_StorageBuffer_half %37 %uint_0
-               OpCooperativeMatrixStoreKHR %39 %36 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %35
+         %36 = OpLabel
+         %37 = OpFunctionCall %9 %subgroupMatrixMultiply_bf2e54
+         %38 = OpAccessChain %_ptr_StorageBuffer__arr_half_uint_1024 %1 %uint_0
+         %40 = OpAccessChain %_ptr_StorageBuffer_half %38 %uint_0
+               OpCooperativeMatrixStoreKHR %40 %37 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/bf2e54.wgsl.expected.wgsl
similarity index 63%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/bf2e54.wgsl.expected.wgsl
index e2629e5..34e1d5f 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/bf2e54.wgsl.expected.wgsl
@@ -1,15 +1,16 @@
 enable chromium_experimental_subgroup_matrix;
+enable f16;
 
-@group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
 
-fn subgroupMatrixMultiply_fd0481() -> subgroup_matrix_result<i32, 8, 8> {
+fn subgroupMatrixMultiply_bf2e54() -> subgroup_matrix_result<f16, 8, 8> {
   var arg_0 = subgroup_matrix_left<i32, 8, 8>();
   var arg_1 = subgroup_matrix_right<i32, 8, 8>();
-  var res : subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var res : subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply<f16>(arg_0, arg_1);
   return res;
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_fd0481(), false, 64);
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_bf2e54(), false, 64);
 }
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/c26fb9.wgsl
similarity index 84%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/c26fb9.wgsl
index a097359..ced0fb5 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/c26fb9.wgsl
@@ -42,14 +42,14 @@
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, f32, 8, 8>, subgroup_matrix<right, f32, 8, 8>) -> subgroup_matrix<result, f32, 8, 8>
-fn subgroupMatrixMultiply_077fe6() -> subgroup_matrix_result<f32, 8, 8>{
-  var arg_0 = subgroup_matrix_left<f32, 8, 8>();
-  var arg_1 = subgroup_matrix_right<f32, 8, 8>();
-  var res: subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+// fn subgroupMatrixMultiply<TR: f32>(subgroup_matrix<left, u32, 8, 8>, subgroup_matrix<right, u32, 8, 8>) -> subgroup_matrix<result, f32, 8, 8>
+fn subgroupMatrixMultiply_c26fb9() -> subgroup_matrix_result<f32, 8, 8>{
+  var arg_0 = subgroup_matrix_left<u32, 8, 8>();
+  var arg_1 = subgroup_matrix_right<u32, 8, 8>();
+  var res: subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply<f32>(arg_0, arg_1);
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_077fe6(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_c26fb9(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/c26fb9.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/c26fb9.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/c26fb9.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/c26fb9.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/c26fb9.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/c26fb9.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/c26fb9.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/c26fb9.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/c26fb9.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/c26fb9.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/c26fb9.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/c26fb9.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/c26fb9.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/c26fb9.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiply/c26fb9.wgsl.expected.spvasm
similarity index 89%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/c26fb9.wgsl.expected.spvasm
index a329068..2ca1d74 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/c26fb9.wgsl.expected.spvasm
@@ -14,7 +14,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_077fe6 "subgroupMatrixMultiply_077fe6"
+               OpName %subgroupMatrixMultiply_c26fb9 "subgroupMatrixMultiply_c26fb9"
                OpName %arg_0 "arg_0"
                OpName %arg_1 "arg_1"
                OpName %res "res"
@@ -37,11 +37,11 @@
           %9 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
 %_ptr_Function_16 = OpTypePointer Function %16
      %uint_1 = OpConstant %uint 1
-         %21 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_1
+         %21 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_1
          %20 = OpConstantNull %21
 %_ptr_Function_21 = OpTypePointer Function %21
          %27 = OpConstantNull %9
@@ -51,7 +51,7 @@
 %_ptr_StorageBuffer__arr_float_uint_1024 = OpTypePointer StorageBuffer %_arr_float_uint_1024
 %_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_077fe6 = OpFunction %9 None %13
+%subgroupMatrixMultiply_c26fb9 = OpFunction %9 None %13
          %14 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_16 Function
       %arg_1 = OpVariable %_ptr_Function_21 Function
@@ -67,7 +67,7 @@
                OpFunctionEnd
 %compute_main = OpFunction %void None %34
          %35 = OpLabel
-         %36 = OpFunctionCall %9 %subgroupMatrixMultiply_077fe6
+         %36 = OpFunctionCall %9 %subgroupMatrixMultiply_c26fb9
          %37 = OpAccessChain %_ptr_StorageBuffer__arr_float_uint_1024 %1 %uint_0
          %39 = OpAccessChain %_ptr_StorageBuffer_float %37 %uint_0
                OpCooperativeMatrixStoreKHR %39 %36 %uint_0 %uint_64 NonPrivatePointer
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/c26fb9.wgsl.expected.wgsl
similarity index 64%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/c26fb9.wgsl.expected.wgsl
index 972e758..da57835 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/c26fb9.wgsl.expected.wgsl
@@ -1,15 +1,15 @@
 enable chromium_experimental_subgroup_matrix;
 
-@group(0) @binding(0) var<storage, read_write> prevent_dce : array<u32, 1024>;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
 
-fn subgroupMatrixMultiply_837e77() -> subgroup_matrix_result<u32, 8, 8> {
+fn subgroupMatrixMultiply_c26fb9() -> subgroup_matrix_result<f32, 8, 8> {
   var arg_0 = subgroup_matrix_left<u32, 8, 8>();
   var arg_1 = subgroup_matrix_right<u32, 8, 8>();
-  var res : subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var res : subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply<f32>(arg_0, arg_1);
   return res;
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_837e77(), false, 64);
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_c26fb9(), false, 64);
 }
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.dxc.hlsl
deleted file mode 100644
index 5664c5f..0000000
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.dxc.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: trace/BPT trap
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.fxc.hlsl
deleted file mode 100644
index e202956..0000000
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.fxc.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: INVALID
-
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: trace/BPT trap
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.glsl
deleted file mode 100644
index cc19bf0..0000000
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.glsl
+++ /dev/null
@@ -1,5 +0,0 @@
-SKIP: INVALID
-
-error: subgroup matrices are not supported by the GLSL backend
-
-tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.ir.dxc.hlsl
deleted file mode 100644
index dda740a..0000000
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.ir.dxc.hlsl
+++ /dev/null
@@ -1,5 +0,0 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the HLSL backend
-
-tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.ir.fxc.hlsl
deleted file mode 100644
index 4709805..0000000
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.ir.fxc.hlsl
+++ /dev/null
@@ -1,5 +0,0 @@
-SKIP: INVALID
-
-error: subgroup matrices are not supported by the HLSL backend
-
-tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/da556f.wgsl
similarity index 87%
rename from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl
rename to test/tint/builtins/gen/var/subgroupMatrixMultiply/da556f.wgsl
index 75a2603..9cac0eb 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/da556f.wgsl
@@ -42,14 +42,14 @@
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<u32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, u32, 8, 8>, subgroup_matrix<right, u32, 8, 8>) -> subgroup_matrix<result, u32, 8, 8>
-fn subgroupMatrixMultiply_837e77() -> subgroup_matrix_result<u32, 8, 8>{
+// fn subgroupMatrixMultiply<TR: u32>(subgroup_matrix<left, u32, 8, 8>, subgroup_matrix<right, u32, 8, 8>) -> subgroup_matrix<result, u32, 8, 8>
+fn subgroupMatrixMultiply_da556f() -> subgroup_matrix_result<u32, 8, 8>{
   var arg_0 = subgroup_matrix_left<u32, 8, 8>();
   var arg_1 = subgroup_matrix_right<u32, 8, 8>();
-  var res: subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var res: subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply<u32>(arg_0, arg_1);
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_837e77(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_da556f(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/da556f.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/da556f.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/da556f.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/da556f.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/da556f.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/da556f.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/da556f.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/da556f.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/da556f.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/da556f.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/da556f.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/da556f.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/da556f.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/da556f.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiply/da556f.wgsl.expected.spvasm
similarity index 93%
rename from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm
rename to test/tint/builtins/gen/var/subgroupMatrixMultiply/da556f.wgsl.expected.spvasm
index a14cda7..10abcfb 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/da556f.wgsl.expected.spvasm
@@ -14,7 +14,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_837e77 "subgroupMatrixMultiply_837e77"
+               OpName %subgroupMatrixMultiply_da556f "subgroupMatrixMultiply_da556f"
                OpName %arg_0 "arg_0"
                OpName %arg_1 "arg_1"
                OpName %res "res"
@@ -50,7 +50,7 @@
 %_ptr_StorageBuffer__arr_uint_uint_1024 = OpTypePointer StorageBuffer %_arr_uint_uint_1024
 %_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_837e77 = OpFunction %8 None %12
+%subgroupMatrixMultiply_da556f = OpFunction %8 None %12
          %13 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_15 Function
       %arg_1 = OpVariable %_ptr_Function_20 Function
@@ -66,7 +66,7 @@
                OpFunctionEnd
 %compute_main = OpFunction %void None %33
          %34 = OpLabel
-         %35 = OpFunctionCall %8 %subgroupMatrixMultiply_837e77
+         %35 = OpFunctionCall %8 %subgroupMatrixMultiply_da556f
          %36 = OpAccessChain %_ptr_StorageBuffer__arr_uint_uint_1024 %1 %uint_0
          %38 = OpAccessChain %_ptr_StorageBuffer_uint %36 %uint_0
                OpCooperativeMatrixStoreKHR %38 %35 %uint_0 %uint_64 NonPrivatePointer
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/da556f.wgsl.expected.wgsl
similarity index 79%
rename from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.wgsl
rename to test/tint/builtins/gen/var/subgroupMatrixMultiply/da556f.wgsl.expected.wgsl
index 972e758..d4b7c92 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/da556f.wgsl.expected.wgsl
@@ -2,14 +2,14 @@
 
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<u32, 1024>;
 
-fn subgroupMatrixMultiply_837e77() -> subgroup_matrix_result<u32, 8, 8> {
+fn subgroupMatrixMultiply_da556f() -> subgroup_matrix_result<u32, 8, 8> {
   var arg_0 = subgroup_matrix_left<u32, 8, 8>();
   var arg_1 = subgroup_matrix_right<u32, 8, 8>();
-  var res : subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var res : subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply<u32>(arg_0, arg_1);
   return res;
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_837e77(), false, 64);
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_da556f(), false, 64);
 }
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/db4ee8.wgsl
similarity index 84%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/db4ee8.wgsl
index e2f0f13..f60c4b4 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/db4ee8.wgsl
@@ -44,14 +44,14 @@
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, f16, 8, 8>, subgroup_matrix<right, f16, 8, 8>) -> subgroup_matrix<result, f16, 8, 8>
-fn subgroupMatrixMultiply_c75357() -> subgroup_matrix_result<f16, 8, 8>{
-  var arg_0 = subgroup_matrix_left<f16, 8, 8>();
-  var arg_1 = subgroup_matrix_right<f16, 8, 8>();
-  var res: subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+// fn subgroupMatrixMultiply<TR: f16>(subgroup_matrix<left, u32, 8, 8>, subgroup_matrix<right, u32, 8, 8>) -> subgroup_matrix<result, f16, 8, 8>
+fn subgroupMatrixMultiply_db4ee8() -> subgroup_matrix_result<f16, 8, 8>{
+  var arg_0 = subgroup_matrix_left<u32, 8, 8>();
+  var arg_1 = subgroup_matrix_right<u32, 8, 8>();
+  var res: subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply<f16>(arg_0, arg_1);
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_c75357(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_db4ee8(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/db4ee8.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/db4ee8.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/db4ee8.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/db4ee8.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/db4ee8.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/db4ee8.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/db4ee8.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/db4ee8.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/db4ee8.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/db4ee8.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/db4ee8.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/db4ee8.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/db4ee8.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/db4ee8.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiply/db4ee8.wgsl.expected.spvasm
similarity index 90%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/db4ee8.wgsl.expected.spvasm
index 41bc0a8..e327a54 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/db4ee8.wgsl.expected.spvasm
@@ -17,7 +17,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_c75357 "subgroupMatrixMultiply_c75357"
+               OpName %subgroupMatrixMultiply_db4ee8 "subgroupMatrixMultiply_db4ee8"
                OpName %arg_0 "arg_0"
                OpName %arg_1 "arg_1"
                OpName %res "res"
@@ -40,11 +40,11 @@
           %9 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
 %_ptr_Function_16 = OpTypePointer Function %16
      %uint_1 = OpConstant %uint 1
-         %21 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_1
+         %21 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_1
          %20 = OpConstantNull %21
 %_ptr_Function_21 = OpTypePointer Function %21
          %27 = OpConstantNull %9
@@ -54,7 +54,7 @@
 %_ptr_StorageBuffer__arr_half_uint_1024 = OpTypePointer StorageBuffer %_arr_half_uint_1024
 %_ptr_StorageBuffer_half = OpTypePointer StorageBuffer %half
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_c75357 = OpFunction %9 None %13
+%subgroupMatrixMultiply_db4ee8 = OpFunction %9 None %13
          %14 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_16 Function
       %arg_1 = OpVariable %_ptr_Function_21 Function
@@ -70,7 +70,7 @@
                OpFunctionEnd
 %compute_main = OpFunction %void None %34
          %35 = OpLabel
-         %36 = OpFunctionCall %9 %subgroupMatrixMultiply_c75357
+         %36 = OpFunctionCall %9 %subgroupMatrixMultiply_db4ee8
          %37 = OpAccessChain %_ptr_StorageBuffer__arr_half_uint_1024 %1 %uint_0
          %39 = OpAccessChain %_ptr_StorageBuffer_half %37 %uint_0
                OpCooperativeMatrixStoreKHR %39 %36 %uint_0 %uint_64 NonPrivatePointer
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/db4ee8.wgsl.expected.wgsl
similarity index 63%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/db4ee8.wgsl.expected.wgsl
index 972e758..0f11ab7 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/db4ee8.wgsl.expected.wgsl
@@ -1,15 +1,16 @@
 enable chromium_experimental_subgroup_matrix;
+enable f16;
 
-@group(0) @binding(0) var<storage, read_write> prevent_dce : array<u32, 1024>;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
 
-fn subgroupMatrixMultiply_837e77() -> subgroup_matrix_result<u32, 8, 8> {
+fn subgroupMatrixMultiply_db4ee8() -> subgroup_matrix_result<f16, 8, 8> {
   var arg_0 = subgroup_matrix_left<u32, 8, 8>();
   var arg_1 = subgroup_matrix_right<u32, 8, 8>();
-  var res : subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var res : subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply<f16>(arg_0, arg_1);
   return res;
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_837e77(), false, 64);
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_db4ee8(), false, 64);
 }
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/f51206.wgsl
similarity index 84%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/f51206.wgsl
index dac8030..ff95ffe 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/f51206.wgsl
@@ -42,14 +42,14 @@
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, i32, 8, 8>, subgroup_matrix<right, i32, 8, 8>) -> subgroup_matrix<result, i32, 8, 8>
-fn subgroupMatrixMultiply_fd0481() -> subgroup_matrix_result<i32, 8, 8>{
-  var arg_0 = subgroup_matrix_left<i32, 8, 8>();
-  var arg_1 = subgroup_matrix_right<i32, 8, 8>();
-  var res: subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+// fn subgroupMatrixMultiply<TR: i32>(subgroup_matrix<left, u32, 8, 8>, subgroup_matrix<right, u32, 8, 8>) -> subgroup_matrix<result, i32, 8, 8>
+fn subgroupMatrixMultiply_f51206() -> subgroup_matrix_result<i32, 8, 8>{
+  var arg_0 = subgroup_matrix_left<u32, 8, 8>();
+  var arg_1 = subgroup_matrix_right<u32, 8, 8>();
+  var res: subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply<i32>(arg_0, arg_1);
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_fd0481(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_f51206(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/f51206.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/f51206.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/f51206.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/f51206.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/f51206.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/f51206.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/f51206.wgsl.expected.glsl
similarity index 100%
rename from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
rename to test/tint/builtins/gen/var/subgroupMatrixMultiply/f51206.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/f51206.wgsl.expected.ir.dxc.hlsl
similarity index 100%
rename from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
rename to test/tint/builtins/gen/var/subgroupMatrixMultiply/f51206.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/f51206.wgsl.expected.ir.fxc.hlsl
similarity index 100%
rename from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
rename to test/tint/builtins/gen/var/subgroupMatrixMultiply/f51206.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/f51206.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/f51206.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiply/f51206.wgsl.expected.spvasm
similarity index 89%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/f51206.wgsl.expected.spvasm
index 3b129e9..96ab5e8 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/f51206.wgsl.expected.spvasm
@@ -14,7 +14,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_fd0481 "subgroupMatrixMultiply_fd0481"
+               OpName %subgroupMatrixMultiply_f51206 "subgroupMatrixMultiply_f51206"
                OpName %arg_0 "arg_0"
                OpName %arg_1 "arg_1"
                OpName %res "res"
@@ -37,11 +37,11 @@
           %9 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
 %_ptr_Function_16 = OpTypePointer Function %16
      %uint_1 = OpConstant %uint 1
-         %21 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_1
+         %21 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_1
          %20 = OpConstantNull %21
 %_ptr_Function_21 = OpTypePointer Function %21
          %27 = OpConstantNull %9
@@ -51,7 +51,7 @@
 %_ptr_StorageBuffer__arr_int_uint_1024 = OpTypePointer StorageBuffer %_arr_int_uint_1024
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_fd0481 = OpFunction %9 None %13
+%subgroupMatrixMultiply_f51206 = OpFunction %9 None %13
          %14 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_16 Function
       %arg_1 = OpVariable %_ptr_Function_21 Function
@@ -67,7 +67,7 @@
                OpFunctionEnd
 %compute_main = OpFunction %void None %34
          %35 = OpLabel
-         %36 = OpFunctionCall %9 %subgroupMatrixMultiply_fd0481
+         %36 = OpFunctionCall %9 %subgroupMatrixMultiply_f51206
          %37 = OpAccessChain %_ptr_StorageBuffer__arr_int_uint_1024 %1 %uint_0
          %39 = OpAccessChain %_ptr_StorageBuffer_int %37 %uint_0
                OpCooperativeMatrixStoreKHR %39 %36 %uint_0 %uint_64 NonPrivatePointer
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/f51206.wgsl.expected.wgsl
similarity index 64%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/f51206.wgsl.expected.wgsl
index 972e758..f40026a 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/f51206.wgsl.expected.wgsl
@@ -1,15 +1,15 @@
 enable chromium_experimental_subgroup_matrix;
 
-@group(0) @binding(0) var<storage, read_write> prevent_dce : array<u32, 1024>;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
 
-fn subgroupMatrixMultiply_837e77() -> subgroup_matrix_result<u32, 8, 8> {
+fn subgroupMatrixMultiply_f51206() -> subgroup_matrix_result<i32, 8, 8> {
   var arg_0 = subgroup_matrix_left<u32, 8, 8>();
   var arg_1 = subgroup_matrix_right<u32, 8, 8>();
-  var res : subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var res : subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply<i32>(arg_0, arg_1);
   return res;
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_837e77(), false, 64);
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_f51206(), false, 64);
 }
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/fa5318.wgsl
similarity index 84%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/fa5318.wgsl
index a097359..17bc8823 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/fa5318.wgsl
@@ -39,17 +39,17 @@
 
 
 enable chromium_experimental_subgroup_matrix;
-@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, f32, 8, 8>, subgroup_matrix<right, f32, 8, 8>) -> subgroup_matrix<result, f32, 8, 8>
-fn subgroupMatrixMultiply_077fe6() -> subgroup_matrix_result<f32, 8, 8>{
+// fn subgroupMatrixMultiply<TR: i32>(subgroup_matrix<left, f32, 8, 8>, subgroup_matrix<right, f32, 8, 8>) -> subgroup_matrix<result, i32, 8, 8>
+fn subgroupMatrixMultiply_fa5318() -> subgroup_matrix_result<i32, 8, 8>{
   var arg_0 = subgroup_matrix_left<f32, 8, 8>();
   var arg_1 = subgroup_matrix_right<f32, 8, 8>();
-  var res: subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var res: subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply<i32>(arg_0, arg_1);
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_077fe6(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_fa5318(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/fa5318.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/fa5318.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/fa5318.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/fa5318.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/fa5318.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/fa5318.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/fa5318.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/fa5318.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/fa5318.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/fa5318.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/fa5318.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/fa5318.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/fa5318.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/fa5318.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiply/fa5318.wgsl.expected.spvasm
similarity index 67%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/fa5318.wgsl.expected.spvasm
index 3b129e9..e733d2a 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/fa5318.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 43
+; Bound: 44
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
@@ -14,7 +14,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_fd0481 "subgroupMatrixMultiply_fd0481"
+               OpName %subgroupMatrixMultiply_fa5318 "subgroupMatrixMultiply_fa5318"
                OpName %arg_0 "arg_0"
                OpName %arg_1 "arg_1"
                OpName %res "res"
@@ -36,40 +36,41 @@
      %uint_2 = OpConstant %uint 2
           %9 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
+      %float = OpTypeFloat 32
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
 %_ptr_Function_16 = OpTypePointer Function %16
      %uint_1 = OpConstant %uint 1
-         %21 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_1
-         %20 = OpConstantNull %21
-%_ptr_Function_21 = OpTypePointer Function %21
-         %27 = OpConstantNull %9
+         %22 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_1
+         %21 = OpConstantNull %22
+%_ptr_Function_22 = OpTypePointer Function %22
+         %28 = OpConstantNull %9
 %_ptr_Function_9 = OpTypePointer Function %9
        %void = OpTypeVoid
-         %34 = OpTypeFunction %void
+         %35 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_int_uint_1024 = OpTypePointer StorageBuffer %_arr_int_uint_1024
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_fd0481 = OpFunction %9 None %13
+%subgroupMatrixMultiply_fa5318 = OpFunction %9 None %13
          %14 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_16 Function
-      %arg_1 = OpVariable %_ptr_Function_21 Function
+      %arg_1 = OpVariable %_ptr_Function_22 Function
         %res = OpVariable %_ptr_Function_9 Function
                OpStore %arg_0 %15
-               OpStore %arg_1 %20
-         %25 = OpLoad %16 %arg_0 None
-         %26 = OpLoad %21 %arg_1 None
-         %28 = OpCooperativeMatrixMulAddKHR %9 %25 %26 %27
-               OpStore %res %28
-         %31 = OpLoad %9 %res None
-               OpReturnValue %31
+               OpStore %arg_1 %21
+         %26 = OpLoad %16 %arg_0 None
+         %27 = OpLoad %22 %arg_1 None
+         %29 = OpCooperativeMatrixMulAddKHR %9 %26 %27 %28
+               OpStore %res %29
+         %32 = OpLoad %9 %res None
+               OpReturnValue %32
                OpFunctionEnd
-%compute_main = OpFunction %void None %34
-         %35 = OpLabel
-         %36 = OpFunctionCall %9 %subgroupMatrixMultiply_fd0481
-         %37 = OpAccessChain %_ptr_StorageBuffer__arr_int_uint_1024 %1 %uint_0
-         %39 = OpAccessChain %_ptr_StorageBuffer_int %37 %uint_0
-               OpCooperativeMatrixStoreKHR %39 %36 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %35
+         %36 = OpLabel
+         %37 = OpFunctionCall %9 %subgroupMatrixMultiply_fa5318
+         %38 = OpAccessChain %_ptr_StorageBuffer__arr_int_uint_1024 %1 %uint_0
+         %40 = OpAccessChain %_ptr_StorageBuffer_int %38 %uint_0
+               OpCooperativeMatrixStoreKHR %40 %37 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/fa5318.wgsl.expected.wgsl
similarity index 64%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiply/fa5318.wgsl.expected.wgsl
index 813d309..e0c63ac 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/fa5318.wgsl.expected.wgsl
@@ -1,15 +1,15 @@
 enable chromium_experimental_subgroup_matrix;
 
-@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
 
-fn subgroupMatrixMultiply_077fe6() -> subgroup_matrix_result<f32, 8, 8> {
+fn subgroupMatrixMultiply_fa5318() -> subgroup_matrix_result<i32, 8, 8> {
   var arg_0 = subgroup_matrix_left<f32, 8, 8>();
   var arg_1 = subgroup_matrix_right<f32, 8, 8>();
-  var res : subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var res : subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply<i32>(arg_0, arg_1);
   return res;
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_077fe6(), false, 64);
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_fa5318(), false, 64);
 }
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.dxc.hlsl
deleted file mode 100644
index 5664c5f..0000000
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.dxc.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: trace/BPT trap
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.fxc.hlsl
deleted file mode 100644
index e202956..0000000
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.fxc.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: INVALID
-
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
-
-tint executable returned error: signal: trace/BPT trap
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.glsl
deleted file mode 100644
index cc19bf0..0000000
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.glsl
+++ /dev/null
@@ -1,5 +0,0 @@
-SKIP: INVALID
-
-error: subgroup matrices are not supported by the GLSL backend
-
-tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.ir.dxc.hlsl
deleted file mode 100644
index dda740a..0000000
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.ir.dxc.hlsl
+++ /dev/null
@@ -1,5 +0,0 @@
-SKIP: FAILED
-
-error: subgroup matrices are not supported by the HLSL backend
-
-tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.ir.fxc.hlsl
deleted file mode 100644
index 4709805..0000000
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.ir.fxc.hlsl
+++ /dev/null
@@ -1,5 +0,0 @@
-SKIP: INVALID
-
-error: subgroup matrices are not supported by the HLSL backend
-
-tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.msl
deleted file mode 100644
index 5dba48c..0000000
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.msl
+++ /dev/null
@@ -1,5 +0,0 @@
-SKIP: INVALID
-
-error: non-float subgroup matrices are not supported by the MSL backend
-
-tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/071472.wgsl
similarity index 80%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/071472.wgsl
index e2f0f13..376bc12 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/071472.wgsl
@@ -41,17 +41,18 @@
 enable chromium_experimental_subgroup_matrix;
 
 enable f16;
-@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, f16, 8, 8>, subgroup_matrix<right, f16, 8, 8>) -> subgroup_matrix<result, f16, 8, 8>
-fn subgroupMatrixMultiply_c75357() -> subgroup_matrix_result<f16, 8, 8>{
+// fn subgroupMatrixMultiplyAccumulate(subgroup_matrix<left, f16, 8, 8>, subgroup_matrix<right, f16, 8, 8>, subgroup_matrix<result, f32, 8, 8>) -> subgroup_matrix<result, f32, 8, 8>
+fn subgroupMatrixMultiplyAccumulate_071472() -> subgroup_matrix_result<f32, 8, 8>{
   var arg_0 = subgroup_matrix_left<f16, 8, 8>();
   var arg_1 = subgroup_matrix_right<f16, 8, 8>();
-  var res: subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var arg_2 = subgroup_matrix_result<f32, 8, 8>();
+  var res: subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiplyAccumulate(arg_0, arg_1, arg_2);
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_c75357(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiplyAccumulate_071472(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.msl
new file mode 100644
index 0000000..f609d11
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.msl
@@ -0,0 +1,74 @@
+SKIP: FAILED
+
+
+enable chromium_experimental_subgroup_matrix;
+enable f16;
+
+@internal(disable_validation__binding_point_collision) @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
+
+fn subgroupMatrixMultiplyAccumulate_071472() -> subgroup_matrix_result<f32, 8, 8> {
+  var arg_0 = subgroup_matrix_left<f16, 8, 8>();
+  var arg_1 = subgroup_matrix_right<f16, 8, 8>();
+  var arg_2 = subgroup_matrix_result<f32, 8, 8>();
+  var res : subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiplyAccumulate(arg_0, arg_1, arg_2);
+  return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiplyAccumulate_071472(), false, 64);
+}
+
+Failed to generate: :18:16 error: msl.simdgroup_multiply_accumulate: no matching call to 'msl.simdgroup_multiply_accumulate(subgroup_matrix_result<f32, 8, 8>, subgroup_matrix_left<f16, 8, 8>, subgroup_matrix_right<f16, 8, 8>, subgroup_matrix_result<f32, 8, 8>)'
+
+1 candidate function:
+ • 'msl.simdgroup_multiply_accumulate(subgroup_matrix<result, S, C, R>  ✓ , subgroup_matrix<left, S, K, R>  ✗ , subgroup_matrix<right, S, C, K>  ✗ , subgroup_matrix<result, S, C, R>  ✓ )' where:
+      ✓  'S' is 'f32' or 'f16'
+
+    %13:void = msl.simdgroup_multiply_accumulate %12, %8, %9, %10
+               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+:6:3 note: in block
+  $B1: {
+  ^^^
+
+note: # Disassembly
+tint_module_vars_struct = struct @align(1) {
+  prevent_dce:ptr<storage, array<f32, 1024>, read_write> @offset(0)
+}
+
+%subgroupMatrixMultiplyAccumulate_071472 = func():subgroup_matrix_result<f32, 8, 8> {
+  $B1: {
+    %2:subgroup_matrix_left<f16, 8, 8> = construct
+    %arg_0:ptr<function, subgroup_matrix_left<f16, 8, 8>, read_write> = var, %2
+    %4:subgroup_matrix_right<f16, 8, 8> = construct
+    %arg_1:ptr<function, subgroup_matrix_right<f16, 8, 8>, read_write> = var, %4
+    %6:subgroup_matrix_result<f32, 8, 8> = construct
+    %arg_2:ptr<function, subgroup_matrix_result<f32, 8, 8>, read_write> = var, %6
+    %8:subgroup_matrix_left<f16, 8, 8> = load %arg_0
+    %9:subgroup_matrix_right<f16, 8, 8> = load %arg_1
+    %10:subgroup_matrix_result<f32, 8, 8> = load %arg_2
+    %11:ptr<function, subgroup_matrix_result<f32, 8, 8>, read_write> = var
+    %12:subgroup_matrix_result<f32, 8, 8> = load %11
+    %13:void = msl.simdgroup_multiply_accumulate %12, %8, %9, %10
+    %14:subgroup_matrix_result<f32, 8, 8> = load %11
+    %res:ptr<function, subgroup_matrix_result<f32, 8, 8>, read_write> = var, %14
+    %16:subgroup_matrix_result<f32, 8, 8> = load %res
+    ret %16
+  }
+}
+%compute_main = @compute @workgroup_size(1u, 1u, 1u) func(%prevent_dce:ptr<storage, array<f32, 1024>, read_write> [@binding_point(0, 0)]):void {
+  $B2: {
+    %19:tint_module_vars_struct = construct %prevent_dce
+    %tint_module_vars:tint_module_vars_struct = let %19
+    %21:subgroup_matrix_result<f32, 8, 8> = call %subgroupMatrixMultiplyAccumulate_071472
+    %22:ptr<storage, array<f32, 1024>, read_write> = access %tint_module_vars, 0u
+    %23:ptr<storage, f32, read_write> = access %22, 0u
+    %24:u64 = msl.convert 64u
+    %25:void = msl.simdgroup_store %21, %23, %24, vec2<u64>(0u64), false
+    ret
+  }
+}
+
+
+tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.spvasm
similarity index 61%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.spvasm
index a329068..d479d9f 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.spvasm
@@ -1,12 +1,15 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 43
+; Bound: 46
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
                OpCapability VulkanMemoryModelDeviceScope
                OpCapability CooperativeMatrixKHR
+               OpCapability Float16
+               OpCapability UniformAndStorageBuffer16BitAccess
+               OpCapability StorageBuffer16BitAccess
                OpExtension "SPV_KHR_vulkan_memory_model"
                OpExtension "SPV_KHR_cooperative_matrix"
                OpMemoryModel Logical Vulkan
@@ -14,9 +17,10 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_077fe6 "subgroupMatrixMultiply_077fe6"
+               OpName %subgroupMatrixMultiplyAccumulate_071472 "subgroupMatrixMultiplyAccumulate_071472"
                OpName %arg_0 "arg_0"
                OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_float_uint_1024 ArrayStride 4
@@ -36,40 +40,44 @@
      %uint_2 = OpConstant %uint 2
           %9 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
+       %half = OpTypeFloat 16
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
 %_ptr_Function_16 = OpTypePointer Function %16
      %uint_1 = OpConstant %uint 1
-         %21 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_1
-         %20 = OpConstantNull %21
-%_ptr_Function_21 = OpTypePointer Function %21
-         %27 = OpConstantNull %9
+         %22 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_1
+         %21 = OpConstantNull %22
+%_ptr_Function_22 = OpTypePointer Function %22
+         %26 = OpConstantNull %9
 %_ptr_Function_9 = OpTypePointer Function %9
        %void = OpTypeVoid
-         %34 = OpTypeFunction %void
+         %37 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_float_uint_1024 = OpTypePointer StorageBuffer %_arr_float_uint_1024
 %_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_077fe6 = OpFunction %9 None %13
+%subgroupMatrixMultiplyAccumulate_071472 = OpFunction %9 None %13
          %14 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_16 Function
-      %arg_1 = OpVariable %_ptr_Function_21 Function
+      %arg_1 = OpVariable %_ptr_Function_22 Function
+      %arg_2 = OpVariable %_ptr_Function_9 Function
         %res = OpVariable %_ptr_Function_9 Function
                OpStore %arg_0 %15
-               OpStore %arg_1 %20
-         %25 = OpLoad %16 %arg_0 None
-         %26 = OpLoad %21 %arg_1 None
-         %28 = OpCooperativeMatrixMulAddKHR %9 %25 %26 %27
-               OpStore %res %28
-         %31 = OpLoad %9 %res None
-               OpReturnValue %31
+               OpStore %arg_1 %21
+               OpStore %arg_2 %26
+         %29 = OpLoad %16 %arg_0 None
+         %30 = OpLoad %22 %arg_1 None
+         %31 = OpLoad %9 %arg_2 None
+         %32 = OpCooperativeMatrixMulAddKHR %9 %29 %30 %31
+               OpStore %res %32
+         %34 = OpLoad %9 %res None
+               OpReturnValue %34
                OpFunctionEnd
-%compute_main = OpFunction %void None %34
-         %35 = OpLabel
-         %36 = OpFunctionCall %9 %subgroupMatrixMultiply_077fe6
-         %37 = OpAccessChain %_ptr_StorageBuffer__arr_float_uint_1024 %1 %uint_0
-         %39 = OpAccessChain %_ptr_StorageBuffer_float %37 %uint_0
-               OpCooperativeMatrixStoreKHR %39 %36 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %37
+         %38 = OpLabel
+         %39 = OpFunctionCall %9 %subgroupMatrixMultiplyAccumulate_071472
+         %40 = OpAccessChain %_ptr_StorageBuffer__arr_float_uint_1024 %1 %uint_0
+         %42 = OpAccessChain %_ptr_StorageBuffer_float %40 %uint_0
+               OpCooperativeMatrixStoreKHR %42 %39 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.wgsl
new file mode 100644
index 0000000..3d9dbc6
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.wgsl
@@ -0,0 +1,17 @@
+enable chromium_experimental_subgroup_matrix;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
+
+fn subgroupMatrixMultiplyAccumulate_071472() -> subgroup_matrix_result<f32, 8, 8> {
+  var arg_0 = subgroup_matrix_left<f16, 8, 8>();
+  var arg_1 = subgroup_matrix_right<f16, 8, 8>();
+  var arg_2 = subgroup_matrix_result<f32, 8, 8>();
+  var res : subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiplyAccumulate(arg_0, arg_1, arg_2);
+  return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiplyAccumulate_071472(), false, 64);
+}
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/075302.wgsl
similarity index 79%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/075302.wgsl
index e2f0f13..9fcd3b5 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/075302.wgsl
@@ -44,14 +44,15 @@
 @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, f16, 8, 8>, subgroup_matrix<right, f16, 8, 8>) -> subgroup_matrix<result, f16, 8, 8>
-fn subgroupMatrixMultiply_c75357() -> subgroup_matrix_result<f16, 8, 8>{
-  var arg_0 = subgroup_matrix_left<f16, 8, 8>();
-  var arg_1 = subgroup_matrix_right<f16, 8, 8>();
-  var res: subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+// fn subgroupMatrixMultiplyAccumulate(subgroup_matrix<left, u32, 8, 8>, subgroup_matrix<right, u32, 8, 8>, subgroup_matrix<result, f16, 8, 8>) -> subgroup_matrix<result, f16, 8, 8>
+fn subgroupMatrixMultiplyAccumulate_075302() -> subgroup_matrix_result<f16, 8, 8>{
+  var arg_0 = subgroup_matrix_left<u32, 8, 8>();
+  var arg_1 = subgroup_matrix_right<u32, 8, 8>();
+  var arg_2 = subgroup_matrix_result<f16, 8, 8>();
+  var res: subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiplyAccumulate(arg_0, arg_1, arg_2);
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_c75357(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiplyAccumulate_075302(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.spvasm
similarity index 70%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.spvasm
index 41bc0a8..2af47dc 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 43
+; Bound: 45
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
@@ -17,9 +17,10 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_c75357 "subgroupMatrixMultiply_c75357"
+               OpName %subgroupMatrixMultiplyAccumulate_075302 "subgroupMatrixMultiplyAccumulate_075302"
                OpName %arg_0 "arg_0"
                OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_half_uint_1024 ArrayStride 2
@@ -40,39 +41,42 @@
           %9 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
 %_ptr_Function_16 = OpTypePointer Function %16
      %uint_1 = OpConstant %uint 1
-         %21 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_1
+         %21 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_1
          %20 = OpConstantNull %21
 %_ptr_Function_21 = OpTypePointer Function %21
-         %27 = OpConstantNull %9
+         %25 = OpConstantNull %9
 %_ptr_Function_9 = OpTypePointer Function %9
        %void = OpTypeVoid
-         %34 = OpTypeFunction %void
+         %36 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_half_uint_1024 = OpTypePointer StorageBuffer %_arr_half_uint_1024
 %_ptr_StorageBuffer_half = OpTypePointer StorageBuffer %half
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_c75357 = OpFunction %9 None %13
+%subgroupMatrixMultiplyAccumulate_075302 = OpFunction %9 None %13
          %14 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_16 Function
       %arg_1 = OpVariable %_ptr_Function_21 Function
+      %arg_2 = OpVariable %_ptr_Function_9 Function
         %res = OpVariable %_ptr_Function_9 Function
                OpStore %arg_0 %15
                OpStore %arg_1 %20
-         %25 = OpLoad %16 %arg_0 None
-         %26 = OpLoad %21 %arg_1 None
-         %28 = OpCooperativeMatrixMulAddKHR %9 %25 %26 %27
-               OpStore %res %28
-         %31 = OpLoad %9 %res None
-               OpReturnValue %31
+               OpStore %arg_2 %25
+         %28 = OpLoad %16 %arg_0 None
+         %29 = OpLoad %21 %arg_1 None
+         %30 = OpLoad %9 %arg_2 None
+         %31 = OpCooperativeMatrixMulAddKHR %9 %28 %29 %30
+               OpStore %res %31
+         %33 = OpLoad %9 %res None
+               OpReturnValue %33
                OpFunctionEnd
-%compute_main = OpFunction %void None %34
-         %35 = OpLabel
-         %36 = OpFunctionCall %9 %subgroupMatrixMultiply_c75357
-         %37 = OpAccessChain %_ptr_StorageBuffer__arr_half_uint_1024 %1 %uint_0
-         %39 = OpAccessChain %_ptr_StorageBuffer_half %37 %uint_0
-               OpCooperativeMatrixStoreKHR %39 %36 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %36
+         %37 = OpLabel
+         %38 = OpFunctionCall %9 %subgroupMatrixMultiplyAccumulate_075302
+         %39 = OpAccessChain %_ptr_StorageBuffer__arr_half_uint_1024 %1 %uint_0
+         %41 = OpAccessChain %_ptr_StorageBuffer_half %39 %uint_0
+               OpCooperativeMatrixStoreKHR %41 %38 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.wgsl
new file mode 100644
index 0000000..9229b12
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.wgsl
@@ -0,0 +1,17 @@
+enable chromium_experimental_subgroup_matrix;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
+
+fn subgroupMatrixMultiplyAccumulate_075302() -> subgroup_matrix_result<f16, 8, 8> {
+  var arg_0 = subgroup_matrix_left<u32, 8, 8>();
+  var arg_1 = subgroup_matrix_right<u32, 8, 8>();
+  var arg_2 = subgroup_matrix_result<f16, 8, 8>();
+  var res : subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiplyAccumulate(arg_0, arg_1, arg_2);
+  return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiplyAccumulate_075302(), false, 64);
+}
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/12354d.wgsl
similarity index 80%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/12354d.wgsl
index e2f0f13..088f0dd 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/12354d.wgsl
@@ -41,17 +41,18 @@
 enable chromium_experimental_subgroup_matrix;
 
 enable f16;
-@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<u32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, f16, 8, 8>, subgroup_matrix<right, f16, 8, 8>) -> subgroup_matrix<result, f16, 8, 8>
-fn subgroupMatrixMultiply_c75357() -> subgroup_matrix_result<f16, 8, 8>{
+// fn subgroupMatrixMultiplyAccumulate(subgroup_matrix<left, f16, 8, 8>, subgroup_matrix<right, f16, 8, 8>, subgroup_matrix<result, u32, 8, 8>) -> subgroup_matrix<result, u32, 8, 8>
+fn subgroupMatrixMultiplyAccumulate_12354d() -> subgroup_matrix_result<u32, 8, 8>{
   var arg_0 = subgroup_matrix_left<f16, 8, 8>();
   var arg_1 = subgroup_matrix_right<f16, 8, 8>();
-  var res: subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var arg_2 = subgroup_matrix_result<u32, 8, 8>();
+  var res: subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiplyAccumulate(arg_0, arg_1, arg_2);
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_c75357(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiplyAccumulate_12354d(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.spvasm
similarity index 61%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.spvasm
index a14cda7..26925a5 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.spvasm
@@ -1,12 +1,15 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 42
+; Bound: 45
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
                OpCapability VulkanMemoryModelDeviceScope
                OpCapability CooperativeMatrixKHR
+               OpCapability Float16
+               OpCapability UniformAndStorageBuffer16BitAccess
+               OpCapability StorageBuffer16BitAccess
                OpExtension "SPV_KHR_vulkan_memory_model"
                OpExtension "SPV_KHR_cooperative_matrix"
                OpMemoryModel Logical Vulkan
@@ -14,9 +17,10 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_837e77 "subgroupMatrixMultiply_837e77"
+               OpName %subgroupMatrixMultiplyAccumulate_12354d "subgroupMatrixMultiplyAccumulate_12354d"
                OpName %arg_0 "arg_0"
                OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_uint_uint_1024 ArrayStride 4
@@ -35,40 +39,44 @@
      %uint_2 = OpConstant %uint 2
           %8 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_2
          %12 = OpTypeFunction %8
+       %half = OpTypeFloat 16
      %uint_0 = OpConstant %uint 0
-         %15 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_0
+         %15 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_0
          %14 = OpConstantNull %15
 %_ptr_Function_15 = OpTypePointer Function %15
      %uint_1 = OpConstant %uint 1
-         %20 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_1
-         %19 = OpConstantNull %20
-%_ptr_Function_20 = OpTypePointer Function %20
-         %26 = OpConstantNull %8
+         %21 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_1
+         %20 = OpConstantNull %21
+%_ptr_Function_21 = OpTypePointer Function %21
+         %25 = OpConstantNull %8
 %_ptr_Function_8 = OpTypePointer Function %8
        %void = OpTypeVoid
-         %33 = OpTypeFunction %void
+         %36 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_uint_uint_1024 = OpTypePointer StorageBuffer %_arr_uint_uint_1024
 %_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_837e77 = OpFunction %8 None %12
+%subgroupMatrixMultiplyAccumulate_12354d = OpFunction %8 None %12
          %13 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_15 Function
-      %arg_1 = OpVariable %_ptr_Function_20 Function
+      %arg_1 = OpVariable %_ptr_Function_21 Function
+      %arg_2 = OpVariable %_ptr_Function_8 Function
         %res = OpVariable %_ptr_Function_8 Function
                OpStore %arg_0 %14
-               OpStore %arg_1 %19
-         %24 = OpLoad %15 %arg_0 None
-         %25 = OpLoad %20 %arg_1 None
-         %27 = OpCooperativeMatrixMulAddKHR %8 %24 %25 %26
-               OpStore %res %27
-         %30 = OpLoad %8 %res None
-               OpReturnValue %30
+               OpStore %arg_1 %20
+               OpStore %arg_2 %25
+         %28 = OpLoad %15 %arg_0 None
+         %29 = OpLoad %21 %arg_1 None
+         %30 = OpLoad %8 %arg_2 None
+         %31 = OpCooperativeMatrixMulAddKHR %8 %28 %29 %30
+               OpStore %res %31
+         %33 = OpLoad %8 %res None
+               OpReturnValue %33
                OpFunctionEnd
-%compute_main = OpFunction %void None %33
-         %34 = OpLabel
-         %35 = OpFunctionCall %8 %subgroupMatrixMultiply_837e77
-         %36 = OpAccessChain %_ptr_StorageBuffer__arr_uint_uint_1024 %1 %uint_0
-         %38 = OpAccessChain %_ptr_StorageBuffer_uint %36 %uint_0
-               OpCooperativeMatrixStoreKHR %38 %35 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %36
+         %37 = OpLabel
+         %38 = OpFunctionCall %8 %subgroupMatrixMultiplyAccumulate_12354d
+         %39 = OpAccessChain %_ptr_StorageBuffer__arr_uint_uint_1024 %1 %uint_0
+         %41 = OpAccessChain %_ptr_StorageBuffer_uint %39 %uint_0
+               OpCooperativeMatrixStoreKHR %41 %38 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.wgsl
new file mode 100644
index 0000000..192be53
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.wgsl
@@ -0,0 +1,17 @@
+enable chromium_experimental_subgroup_matrix;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<u32, 1024>;
+
+fn subgroupMatrixMultiplyAccumulate_12354d() -> subgroup_matrix_result<u32, 8, 8> {
+  var arg_0 = subgroup_matrix_left<f16, 8, 8>();
+  var arg_1 = subgroup_matrix_right<f16, 8, 8>();
+  var arg_2 = subgroup_matrix_result<u32, 8, 8>();
+  var res : subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiplyAccumulate(arg_0, arg_1, arg_2);
+  return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiplyAccumulate_12354d(), false, 64);
+}
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/163ab5.wgsl
similarity index 80%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/163ab5.wgsl
index dac8030..ef7aa3d 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/163ab5.wgsl
@@ -39,17 +39,18 @@
 
 
 enable chromium_experimental_subgroup_matrix;
-@group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, i32, 8, 8>, subgroup_matrix<right, i32, 8, 8>) -> subgroup_matrix<result, i32, 8, 8>
-fn subgroupMatrixMultiply_fd0481() -> subgroup_matrix_result<i32, 8, 8>{
+// fn subgroupMatrixMultiplyAccumulate(subgroup_matrix<left, i32, 8, 8>, subgroup_matrix<right, i32, 8, 8>, subgroup_matrix<result, f32, 8, 8>) -> subgroup_matrix<result, f32, 8, 8>
+fn subgroupMatrixMultiplyAccumulate_163ab5() -> subgroup_matrix_result<f32, 8, 8>{
   var arg_0 = subgroup_matrix_left<i32, 8, 8>();
   var arg_1 = subgroup_matrix_right<i32, 8, 8>();
-  var res: subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var arg_2 = subgroup_matrix_result<f32, 8, 8>();
+  var res: subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiplyAccumulate(arg_0, arg_1, arg_2);
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_fd0481(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiplyAccumulate_163ab5(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.spvasm
similarity index 63%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.spvasm
index a329068..2757009 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 43
+; Bound: 46
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
@@ -14,9 +14,10 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_077fe6 "subgroupMatrixMultiply_077fe6"
+               OpName %subgroupMatrixMultiplyAccumulate_163ab5 "subgroupMatrixMultiplyAccumulate_163ab5"
                OpName %arg_0 "arg_0"
                OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_float_uint_1024 ArrayStride 4
@@ -36,40 +37,44 @@
      %uint_2 = OpConstant %uint 2
           %9 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
+        %int = OpTypeInt 32 1
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
 %_ptr_Function_16 = OpTypePointer Function %16
      %uint_1 = OpConstant %uint 1
-         %21 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_1
-         %20 = OpConstantNull %21
-%_ptr_Function_21 = OpTypePointer Function %21
-         %27 = OpConstantNull %9
+         %22 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_1
+         %21 = OpConstantNull %22
+%_ptr_Function_22 = OpTypePointer Function %22
+         %26 = OpConstantNull %9
 %_ptr_Function_9 = OpTypePointer Function %9
        %void = OpTypeVoid
-         %34 = OpTypeFunction %void
+         %37 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_float_uint_1024 = OpTypePointer StorageBuffer %_arr_float_uint_1024
 %_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_077fe6 = OpFunction %9 None %13
+%subgroupMatrixMultiplyAccumulate_163ab5 = OpFunction %9 None %13
          %14 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_16 Function
-      %arg_1 = OpVariable %_ptr_Function_21 Function
+      %arg_1 = OpVariable %_ptr_Function_22 Function
+      %arg_2 = OpVariable %_ptr_Function_9 Function
         %res = OpVariable %_ptr_Function_9 Function
                OpStore %arg_0 %15
-               OpStore %arg_1 %20
-         %25 = OpLoad %16 %arg_0 None
-         %26 = OpLoad %21 %arg_1 None
-         %28 = OpCooperativeMatrixMulAddKHR %9 %25 %26 %27
-               OpStore %res %28
-         %31 = OpLoad %9 %res None
-               OpReturnValue %31
+               OpStore %arg_1 %21
+               OpStore %arg_2 %26
+         %29 = OpLoad %16 %arg_0 None
+         %30 = OpLoad %22 %arg_1 None
+         %31 = OpLoad %9 %arg_2 None
+         %32 = OpCooperativeMatrixMulAddKHR %9 %29 %30 %31
+               OpStore %res %32
+         %34 = OpLoad %9 %res None
+               OpReturnValue %34
                OpFunctionEnd
-%compute_main = OpFunction %void None %34
-         %35 = OpLabel
-         %36 = OpFunctionCall %9 %subgroupMatrixMultiply_077fe6
-         %37 = OpAccessChain %_ptr_StorageBuffer__arr_float_uint_1024 %1 %uint_0
-         %39 = OpAccessChain %_ptr_StorageBuffer_float %37 %uint_0
-               OpCooperativeMatrixStoreKHR %39 %36 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %37
+         %38 = OpLabel
+         %39 = OpFunctionCall %9 %subgroupMatrixMultiplyAccumulate_163ab5
+         %40 = OpAccessChain %_ptr_StorageBuffer__arr_float_uint_1024 %1 %uint_0
+         %42 = OpAccessChain %_ptr_StorageBuffer_float %40 %uint_0
+               OpCooperativeMatrixStoreKHR %42 %39 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.wgsl
new file mode 100644
index 0000000..2b531f4
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.wgsl
@@ -0,0 +1,16 @@
+enable chromium_experimental_subgroup_matrix;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
+
+fn subgroupMatrixMultiplyAccumulate_163ab5() -> subgroup_matrix_result<f32, 8, 8> {
+  var arg_0 = subgroup_matrix_left<i32, 8, 8>();
+  var arg_1 = subgroup_matrix_right<i32, 8, 8>();
+  var arg_2 = subgroup_matrix_result<f32, 8, 8>();
+  var res : subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiplyAccumulate(arg_0, arg_1, arg_2);
+  return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiplyAccumulate_163ab5(), false, 64);
+}
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl
similarity index 80%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl
index e2f0f13..fc397cbf 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl
@@ -41,17 +41,18 @@
 enable chromium_experimental_subgroup_matrix;
 
 enable f16;
-@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, f16, 8, 8>, subgroup_matrix<right, f16, 8, 8>) -> subgroup_matrix<result, f16, 8, 8>
-fn subgroupMatrixMultiply_c75357() -> subgroup_matrix_result<f16, 8, 8>{
+// fn subgroupMatrixMultiplyAccumulate(subgroup_matrix<left, f16, 8, 8>, subgroup_matrix<right, f16, 8, 8>, subgroup_matrix<result, i32, 8, 8>) -> subgroup_matrix<result, i32, 8, 8>
+fn subgroupMatrixMultiplyAccumulate_3ea7db() -> subgroup_matrix_result<i32, 8, 8>{
   var arg_0 = subgroup_matrix_left<f16, 8, 8>();
   var arg_1 = subgroup_matrix_right<f16, 8, 8>();
-  var res: subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var arg_2 = subgroup_matrix_result<i32, 8, 8>();
+  var res: subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiplyAccumulate(arg_0, arg_1, arg_2);
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_c75357(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiplyAccumulate_3ea7db(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.spvasm
similarity index 61%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.spvasm
index 3b129e9..5cdce15 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.spvasm
@@ -1,12 +1,15 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 43
+; Bound: 46
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
                OpCapability VulkanMemoryModelDeviceScope
                OpCapability CooperativeMatrixKHR
+               OpCapability Float16
+               OpCapability UniformAndStorageBuffer16BitAccess
+               OpCapability StorageBuffer16BitAccess
                OpExtension "SPV_KHR_vulkan_memory_model"
                OpExtension "SPV_KHR_cooperative_matrix"
                OpMemoryModel Logical Vulkan
@@ -14,9 +17,10 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_fd0481 "subgroupMatrixMultiply_fd0481"
+               OpName %subgroupMatrixMultiplyAccumulate_3ea7db "subgroupMatrixMultiplyAccumulate_3ea7db"
                OpName %arg_0 "arg_0"
                OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_int_uint_1024 ArrayStride 4
@@ -36,40 +40,44 @@
      %uint_2 = OpConstant %uint 2
           %9 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
+       %half = OpTypeFloat 16
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
 %_ptr_Function_16 = OpTypePointer Function %16
      %uint_1 = OpConstant %uint 1
-         %21 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_1
-         %20 = OpConstantNull %21
-%_ptr_Function_21 = OpTypePointer Function %21
-         %27 = OpConstantNull %9
+         %22 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_1
+         %21 = OpConstantNull %22
+%_ptr_Function_22 = OpTypePointer Function %22
+         %26 = OpConstantNull %9
 %_ptr_Function_9 = OpTypePointer Function %9
        %void = OpTypeVoid
-         %34 = OpTypeFunction %void
+         %37 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_int_uint_1024 = OpTypePointer StorageBuffer %_arr_int_uint_1024
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_fd0481 = OpFunction %9 None %13
+%subgroupMatrixMultiplyAccumulate_3ea7db = OpFunction %9 None %13
          %14 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_16 Function
-      %arg_1 = OpVariable %_ptr_Function_21 Function
+      %arg_1 = OpVariable %_ptr_Function_22 Function
+      %arg_2 = OpVariable %_ptr_Function_9 Function
         %res = OpVariable %_ptr_Function_9 Function
                OpStore %arg_0 %15
-               OpStore %arg_1 %20
-         %25 = OpLoad %16 %arg_0 None
-         %26 = OpLoad %21 %arg_1 None
-         %28 = OpCooperativeMatrixMulAddKHR %9 %25 %26 %27
-               OpStore %res %28
-         %31 = OpLoad %9 %res None
-               OpReturnValue %31
+               OpStore %arg_1 %21
+               OpStore %arg_2 %26
+         %29 = OpLoad %16 %arg_0 None
+         %30 = OpLoad %22 %arg_1 None
+         %31 = OpLoad %9 %arg_2 None
+         %32 = OpCooperativeMatrixMulAddKHR %9 %29 %30 %31
+               OpStore %res %32
+         %34 = OpLoad %9 %res None
+               OpReturnValue %34
                OpFunctionEnd
-%compute_main = OpFunction %void None %34
-         %35 = OpLabel
-         %36 = OpFunctionCall %9 %subgroupMatrixMultiply_fd0481
-         %37 = OpAccessChain %_ptr_StorageBuffer__arr_int_uint_1024 %1 %uint_0
-         %39 = OpAccessChain %_ptr_StorageBuffer_int %37 %uint_0
-               OpCooperativeMatrixStoreKHR %39 %36 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %37
+         %38 = OpLabel
+         %39 = OpFunctionCall %9 %subgroupMatrixMultiplyAccumulate_3ea7db
+         %40 = OpAccessChain %_ptr_StorageBuffer__arr_int_uint_1024 %1 %uint_0
+         %42 = OpAccessChain %_ptr_StorageBuffer_int %40 %uint_0
+               OpCooperativeMatrixStoreKHR %42 %39 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.wgsl
new file mode 100644
index 0000000..67eab5e9
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.wgsl
@@ -0,0 +1,17 @@
+enable chromium_experimental_subgroup_matrix;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
+
+fn subgroupMatrixMultiplyAccumulate_3ea7db() -> subgroup_matrix_result<i32, 8, 8> {
+  var arg_0 = subgroup_matrix_left<f16, 8, 8>();
+  var arg_1 = subgroup_matrix_right<f16, 8, 8>();
+  var arg_2 = subgroup_matrix_result<i32, 8, 8>();
+  var res : subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiplyAccumulate(arg_0, arg_1, arg_2);
+  return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiplyAccumulate_3ea7db(), false, 64);
+}
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/676ca8.wgsl
similarity index 80%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/676ca8.wgsl
index 75a2603..6ed27b0 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/676ca8.wgsl
@@ -39,17 +39,18 @@
 
 
 enable chromium_experimental_subgroup_matrix;
-@group(0) @binding(0) var<storage, read_write> prevent_dce : array<u32, 1024>;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, u32, 8, 8>, subgroup_matrix<right, u32, 8, 8>) -> subgroup_matrix<result, u32, 8, 8>
-fn subgroupMatrixMultiply_837e77() -> subgroup_matrix_result<u32, 8, 8>{
+// fn subgroupMatrixMultiplyAccumulate(subgroup_matrix<left, u32, 8, 8>, subgroup_matrix<right, u32, 8, 8>, subgroup_matrix<result, i32, 8, 8>) -> subgroup_matrix<result, i32, 8, 8>
+fn subgroupMatrixMultiplyAccumulate_676ca8() -> subgroup_matrix_result<i32, 8, 8>{
   var arg_0 = subgroup_matrix_left<u32, 8, 8>();
   var arg_1 = subgroup_matrix_right<u32, 8, 8>();
-  var res: subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var arg_2 = subgroup_matrix_result<i32, 8, 8>();
+  var res: subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiplyAccumulate(arg_0, arg_1, arg_2);
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_837e77(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiplyAccumulate_676ca8(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.spvasm
similarity index 68%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.spvasm
index 3b129e9..e0d1e79 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 43
+; Bound: 45
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
@@ -14,9 +14,10 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_fd0481 "subgroupMatrixMultiply_fd0481"
+               OpName %subgroupMatrixMultiplyAccumulate_676ca8 "subgroupMatrixMultiplyAccumulate_676ca8"
                OpName %arg_0 "arg_0"
                OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_int_uint_1024 ArrayStride 4
@@ -37,39 +38,42 @@
           %9 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
 %_ptr_Function_16 = OpTypePointer Function %16
      %uint_1 = OpConstant %uint 1
-         %21 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_1
+         %21 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_1
          %20 = OpConstantNull %21
 %_ptr_Function_21 = OpTypePointer Function %21
-         %27 = OpConstantNull %9
+         %25 = OpConstantNull %9
 %_ptr_Function_9 = OpTypePointer Function %9
        %void = OpTypeVoid
-         %34 = OpTypeFunction %void
+         %36 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_int_uint_1024 = OpTypePointer StorageBuffer %_arr_int_uint_1024
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_fd0481 = OpFunction %9 None %13
+%subgroupMatrixMultiplyAccumulate_676ca8 = OpFunction %9 None %13
          %14 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_16 Function
       %arg_1 = OpVariable %_ptr_Function_21 Function
+      %arg_2 = OpVariable %_ptr_Function_9 Function
         %res = OpVariable %_ptr_Function_9 Function
                OpStore %arg_0 %15
                OpStore %arg_1 %20
-         %25 = OpLoad %16 %arg_0 None
-         %26 = OpLoad %21 %arg_1 None
-         %28 = OpCooperativeMatrixMulAddKHR %9 %25 %26 %27
-               OpStore %res %28
-         %31 = OpLoad %9 %res None
-               OpReturnValue %31
+               OpStore %arg_2 %25
+         %28 = OpLoad %16 %arg_0 None
+         %29 = OpLoad %21 %arg_1 None
+         %30 = OpLoad %9 %arg_2 None
+         %31 = OpCooperativeMatrixMulAddKHR %9 %28 %29 %30
+               OpStore %res %31
+         %33 = OpLoad %9 %res None
+               OpReturnValue %33
                OpFunctionEnd
-%compute_main = OpFunction %void None %34
-         %35 = OpLabel
-         %36 = OpFunctionCall %9 %subgroupMatrixMultiply_fd0481
-         %37 = OpAccessChain %_ptr_StorageBuffer__arr_int_uint_1024 %1 %uint_0
-         %39 = OpAccessChain %_ptr_StorageBuffer_int %37 %uint_0
-               OpCooperativeMatrixStoreKHR %39 %36 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %36
+         %37 = OpLabel
+         %38 = OpFunctionCall %9 %subgroupMatrixMultiplyAccumulate_676ca8
+         %39 = OpAccessChain %_ptr_StorageBuffer__arr_int_uint_1024 %1 %uint_0
+         %41 = OpAccessChain %_ptr_StorageBuffer_int %39 %uint_0
+               OpCooperativeMatrixStoreKHR %41 %38 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.wgsl
new file mode 100644
index 0000000..06af0a1
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.wgsl
@@ -0,0 +1,16 @@
+enable chromium_experimental_subgroup_matrix;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
+
+fn subgroupMatrixMultiplyAccumulate_676ca8() -> subgroup_matrix_result<i32, 8, 8> {
+  var arg_0 = subgroup_matrix_left<u32, 8, 8>();
+  var arg_1 = subgroup_matrix_right<u32, 8, 8>();
+  var arg_2 = subgroup_matrix_result<i32, 8, 8>();
+  var res : subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiplyAccumulate(arg_0, arg_1, arg_2);
+  return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiplyAccumulate_676ca8(), false, 64);
+}
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl
similarity index 79%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl
index dac8030..b2d7b5b 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl
@@ -35,21 +35,24 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 
-// [hlsl-dxc] flags: --hlsl-shader-model 60
+// flags: --hlsl-shader-model 62
 
 
 enable chromium_experimental_subgroup_matrix;
-@group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
+
+enable f16;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, i32, 8, 8>, subgroup_matrix<right, i32, 8, 8>) -> subgroup_matrix<result, i32, 8, 8>
-fn subgroupMatrixMultiply_fd0481() -> subgroup_matrix_result<i32, 8, 8>{
+// fn subgroupMatrixMultiplyAccumulate(subgroup_matrix<left, i32, 8, 8>, subgroup_matrix<right, i32, 8, 8>, subgroup_matrix<result, f16, 8, 8>) -> subgroup_matrix<result, f16, 8, 8>
+fn subgroupMatrixMultiplyAccumulate_7ceae2() -> subgroup_matrix_result<f16, 8, 8>{
   var arg_0 = subgroup_matrix_left<i32, 8, 8>();
   var arg_1 = subgroup_matrix_right<i32, 8, 8>();
-  var res: subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var arg_2 = subgroup_matrix_result<f16, 8, 8>();
+  var res: subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiplyAccumulate(arg_0, arg_1, arg_2);
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_fd0481(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiplyAccumulate_7ceae2(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.spvasm
similarity index 65%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.spvasm
index 41bc0a8..0bd83b2 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 43
+; Bound: 46
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
@@ -17,9 +17,10 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_c75357 "subgroupMatrixMultiply_c75357"
+               OpName %subgroupMatrixMultiplyAccumulate_7ceae2 "subgroupMatrixMultiplyAccumulate_7ceae2"
                OpName %arg_0 "arg_0"
                OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_half_uint_1024 ArrayStride 2
@@ -39,40 +40,44 @@
      %uint_2 = OpConstant %uint 2
           %9 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
+        %int = OpTypeInt 32 1
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
 %_ptr_Function_16 = OpTypePointer Function %16
      %uint_1 = OpConstant %uint 1
-         %21 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_1
-         %20 = OpConstantNull %21
-%_ptr_Function_21 = OpTypePointer Function %21
-         %27 = OpConstantNull %9
+         %22 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_1
+         %21 = OpConstantNull %22
+%_ptr_Function_22 = OpTypePointer Function %22
+         %26 = OpConstantNull %9
 %_ptr_Function_9 = OpTypePointer Function %9
        %void = OpTypeVoid
-         %34 = OpTypeFunction %void
+         %37 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_half_uint_1024 = OpTypePointer StorageBuffer %_arr_half_uint_1024
 %_ptr_StorageBuffer_half = OpTypePointer StorageBuffer %half
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_c75357 = OpFunction %9 None %13
+%subgroupMatrixMultiplyAccumulate_7ceae2 = OpFunction %9 None %13
          %14 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_16 Function
-      %arg_1 = OpVariable %_ptr_Function_21 Function
+      %arg_1 = OpVariable %_ptr_Function_22 Function
+      %arg_2 = OpVariable %_ptr_Function_9 Function
         %res = OpVariable %_ptr_Function_9 Function
                OpStore %arg_0 %15
-               OpStore %arg_1 %20
-         %25 = OpLoad %16 %arg_0 None
-         %26 = OpLoad %21 %arg_1 None
-         %28 = OpCooperativeMatrixMulAddKHR %9 %25 %26 %27
-               OpStore %res %28
-         %31 = OpLoad %9 %res None
-               OpReturnValue %31
+               OpStore %arg_1 %21
+               OpStore %arg_2 %26
+         %29 = OpLoad %16 %arg_0 None
+         %30 = OpLoad %22 %arg_1 None
+         %31 = OpLoad %9 %arg_2 None
+         %32 = OpCooperativeMatrixMulAddKHR %9 %29 %30 %31
+               OpStore %res %32
+         %34 = OpLoad %9 %res None
+               OpReturnValue %34
                OpFunctionEnd
-%compute_main = OpFunction %void None %34
-         %35 = OpLabel
-         %36 = OpFunctionCall %9 %subgroupMatrixMultiply_c75357
-         %37 = OpAccessChain %_ptr_StorageBuffer__arr_half_uint_1024 %1 %uint_0
-         %39 = OpAccessChain %_ptr_StorageBuffer_half %37 %uint_0
-               OpCooperativeMatrixStoreKHR %39 %36 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %37
+         %38 = OpLabel
+         %39 = OpFunctionCall %9 %subgroupMatrixMultiplyAccumulate_7ceae2
+         %40 = OpAccessChain %_ptr_StorageBuffer__arr_half_uint_1024 %1 %uint_0
+         %42 = OpAccessChain %_ptr_StorageBuffer_half %40 %uint_0
+               OpCooperativeMatrixStoreKHR %42 %39 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.wgsl
new file mode 100644
index 0000000..38b1da7
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.wgsl
@@ -0,0 +1,17 @@
+enable chromium_experimental_subgroup_matrix;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
+
+fn subgroupMatrixMultiplyAccumulate_7ceae2() -> subgroup_matrix_result<f16, 8, 8> {
+  var arg_0 = subgroup_matrix_left<i32, 8, 8>();
+  var arg_1 = subgroup_matrix_right<i32, 8, 8>();
+  var arg_2 = subgroup_matrix_result<f16, 8, 8>();
+  var res : subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiplyAccumulate(arg_0, arg_1, arg_2);
+  return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiplyAccumulate_7ceae2(), false, 64);
+}
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/877989.wgsl
similarity index 80%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/877989.wgsl
index dac8030..82f3a4a 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/877989.wgsl
@@ -39,17 +39,18 @@
 
 
 enable chromium_experimental_subgroup_matrix;
-@group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<u32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, i32, 8, 8>, subgroup_matrix<right, i32, 8, 8>) -> subgroup_matrix<result, i32, 8, 8>
-fn subgroupMatrixMultiply_fd0481() -> subgroup_matrix_result<i32, 8, 8>{
+// fn subgroupMatrixMultiplyAccumulate(subgroup_matrix<left, i32, 8, 8>, subgroup_matrix<right, i32, 8, 8>, subgroup_matrix<result, u32, 8, 8>) -> subgroup_matrix<result, u32, 8, 8>
+fn subgroupMatrixMultiplyAccumulate_877989() -> subgroup_matrix_result<u32, 8, 8>{
   var arg_0 = subgroup_matrix_left<i32, 8, 8>();
   var arg_1 = subgroup_matrix_right<i32, 8, 8>();
-  var res: subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var arg_2 = subgroup_matrix_result<u32, 8, 8>();
+  var res: subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiplyAccumulate(arg_0, arg_1, arg_2);
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_fd0481(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiplyAccumulate_877989(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.spvasm
similarity index 63%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.spvasm
index a14cda7..210558d 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 42
+; Bound: 45
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
@@ -14,9 +14,10 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_837e77 "subgroupMatrixMultiply_837e77"
+               OpName %subgroupMatrixMultiplyAccumulate_877989 "subgroupMatrixMultiplyAccumulate_877989"
                OpName %arg_0 "arg_0"
                OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_uint_uint_1024 ArrayStride 4
@@ -35,40 +36,44 @@
      %uint_2 = OpConstant %uint 2
           %8 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_2
          %12 = OpTypeFunction %8
+        %int = OpTypeInt 32 1
      %uint_0 = OpConstant %uint 0
-         %15 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_0
+         %15 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_0
          %14 = OpConstantNull %15
 %_ptr_Function_15 = OpTypePointer Function %15
      %uint_1 = OpConstant %uint 1
-         %20 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_1
-         %19 = OpConstantNull %20
-%_ptr_Function_20 = OpTypePointer Function %20
-         %26 = OpConstantNull %8
+         %21 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_1
+         %20 = OpConstantNull %21
+%_ptr_Function_21 = OpTypePointer Function %21
+         %25 = OpConstantNull %8
 %_ptr_Function_8 = OpTypePointer Function %8
        %void = OpTypeVoid
-         %33 = OpTypeFunction %void
+         %36 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_uint_uint_1024 = OpTypePointer StorageBuffer %_arr_uint_uint_1024
 %_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_837e77 = OpFunction %8 None %12
+%subgroupMatrixMultiplyAccumulate_877989 = OpFunction %8 None %12
          %13 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_15 Function
-      %arg_1 = OpVariable %_ptr_Function_20 Function
+      %arg_1 = OpVariable %_ptr_Function_21 Function
+      %arg_2 = OpVariable %_ptr_Function_8 Function
         %res = OpVariable %_ptr_Function_8 Function
                OpStore %arg_0 %14
-               OpStore %arg_1 %19
-         %24 = OpLoad %15 %arg_0 None
-         %25 = OpLoad %20 %arg_1 None
-         %27 = OpCooperativeMatrixMulAddKHR %8 %24 %25 %26
-               OpStore %res %27
-         %30 = OpLoad %8 %res None
-               OpReturnValue %30
+               OpStore %arg_1 %20
+               OpStore %arg_2 %25
+         %28 = OpLoad %15 %arg_0 None
+         %29 = OpLoad %21 %arg_1 None
+         %30 = OpLoad %8 %arg_2 None
+         %31 = OpCooperativeMatrixMulAddKHR %8 %28 %29 %30
+               OpStore %res %31
+         %33 = OpLoad %8 %res None
+               OpReturnValue %33
                OpFunctionEnd
-%compute_main = OpFunction %void None %33
-         %34 = OpLabel
-         %35 = OpFunctionCall %8 %subgroupMatrixMultiply_837e77
-         %36 = OpAccessChain %_ptr_StorageBuffer__arr_uint_uint_1024 %1 %uint_0
-         %38 = OpAccessChain %_ptr_StorageBuffer_uint %36 %uint_0
-               OpCooperativeMatrixStoreKHR %38 %35 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %36
+         %37 = OpLabel
+         %38 = OpFunctionCall %8 %subgroupMatrixMultiplyAccumulate_877989
+         %39 = OpAccessChain %_ptr_StorageBuffer__arr_uint_uint_1024 %1 %uint_0
+         %41 = OpAccessChain %_ptr_StorageBuffer_uint %39 %uint_0
+               OpCooperativeMatrixStoreKHR %41 %38 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.wgsl
new file mode 100644
index 0000000..6d97432
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.wgsl
@@ -0,0 +1,16 @@
+enable chromium_experimental_subgroup_matrix;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<u32, 1024>;
+
+fn subgroupMatrixMultiplyAccumulate_877989() -> subgroup_matrix_result<u32, 8, 8> {
+  var arg_0 = subgroup_matrix_left<i32, 8, 8>();
+  var arg_1 = subgroup_matrix_right<i32, 8, 8>();
+  var arg_2 = subgroup_matrix_result<u32, 8, 8>();
+  var res : subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiplyAccumulate(arg_0, arg_1, arg_2);
+  return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiplyAccumulate_877989(), false, 64);
+}
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/c4062a.wgsl
similarity index 79%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/c4062a.wgsl
index a097359..b68e7ab 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/c4062a.wgsl
@@ -35,21 +35,24 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 
-// [hlsl-dxc] flags: --hlsl-shader-model 60
+// flags: --hlsl-shader-model 62
 
 
 enable chromium_experimental_subgroup_matrix;
-@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
+
+enable f16;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, f32, 8, 8>, subgroup_matrix<right, f32, 8, 8>) -> subgroup_matrix<result, f32, 8, 8>
-fn subgroupMatrixMultiply_077fe6() -> subgroup_matrix_result<f32, 8, 8>{
+// fn subgroupMatrixMultiplyAccumulate(subgroup_matrix<left, f32, 8, 8>, subgroup_matrix<right, f32, 8, 8>, subgroup_matrix<result, f16, 8, 8>) -> subgroup_matrix<result, f16, 8, 8>
+fn subgroupMatrixMultiplyAccumulate_c4062a() -> subgroup_matrix_result<f16, 8, 8>{
   var arg_0 = subgroup_matrix_left<f32, 8, 8>();
   var arg_1 = subgroup_matrix_right<f32, 8, 8>();
-  var res: subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var arg_2 = subgroup_matrix_result<f16, 8, 8>();
+  var res: subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiplyAccumulate(arg_0, arg_1, arg_2);
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_077fe6(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiplyAccumulate_c4062a(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.msl
new file mode 100644
index 0000000..25abe34
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.msl
@@ -0,0 +1,74 @@
+SKIP: FAILED
+
+
+enable chromium_experimental_subgroup_matrix;
+enable f16;
+
+@internal(disable_validation__binding_point_collision) @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
+
+fn subgroupMatrixMultiplyAccumulate_c4062a() -> subgroup_matrix_result<f16, 8, 8> {
+  var arg_0 = subgroup_matrix_left<f32, 8, 8>();
+  var arg_1 = subgroup_matrix_right<f32, 8, 8>();
+  var arg_2 = subgroup_matrix_result<f16, 8, 8>();
+  var res : subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiplyAccumulate(arg_0, arg_1, arg_2);
+  return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiplyAccumulate_c4062a(), false, 64);
+}
+
+Failed to generate: :18:16 error: msl.simdgroup_multiply_accumulate: no matching call to 'msl.simdgroup_multiply_accumulate(subgroup_matrix_result<f16, 8, 8>, subgroup_matrix_left<f32, 8, 8>, subgroup_matrix_right<f32, 8, 8>, subgroup_matrix_result<f16, 8, 8>)'
+
+1 candidate function:
+ • 'msl.simdgroup_multiply_accumulate(subgroup_matrix<result, S, C, R>  ✓ , subgroup_matrix<left, S, K, R>  ✗ , subgroup_matrix<right, S, C, K>  ✗ , subgroup_matrix<result, S, C, R>  ✓ )' where:
+      ✓  'S' is 'f32' or 'f16'
+
+    %13:void = msl.simdgroup_multiply_accumulate %12, %8, %9, %10
+               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+:6:3 note: in block
+  $B1: {
+  ^^^
+
+note: # Disassembly
+tint_module_vars_struct = struct @align(1) {
+  prevent_dce:ptr<storage, array<f16, 1024>, read_write> @offset(0)
+}
+
+%subgroupMatrixMultiplyAccumulate_c4062a = func():subgroup_matrix_result<f16, 8, 8> {
+  $B1: {
+    %2:subgroup_matrix_left<f32, 8, 8> = construct
+    %arg_0:ptr<function, subgroup_matrix_left<f32, 8, 8>, read_write> = var, %2
+    %4:subgroup_matrix_right<f32, 8, 8> = construct
+    %arg_1:ptr<function, subgroup_matrix_right<f32, 8, 8>, read_write> = var, %4
+    %6:subgroup_matrix_result<f16, 8, 8> = construct
+    %arg_2:ptr<function, subgroup_matrix_result<f16, 8, 8>, read_write> = var, %6
+    %8:subgroup_matrix_left<f32, 8, 8> = load %arg_0
+    %9:subgroup_matrix_right<f32, 8, 8> = load %arg_1
+    %10:subgroup_matrix_result<f16, 8, 8> = load %arg_2
+    %11:ptr<function, subgroup_matrix_result<f16, 8, 8>, read_write> = var
+    %12:subgroup_matrix_result<f16, 8, 8> = load %11
+    %13:void = msl.simdgroup_multiply_accumulate %12, %8, %9, %10
+    %14:subgroup_matrix_result<f16, 8, 8> = load %11
+    %res:ptr<function, subgroup_matrix_result<f16, 8, 8>, read_write> = var, %14
+    %16:subgroup_matrix_result<f16, 8, 8> = load %res
+    ret %16
+  }
+}
+%compute_main = @compute @workgroup_size(1u, 1u, 1u) func(%prevent_dce:ptr<storage, array<f16, 1024>, read_write> [@binding_point(0, 0)]):void {
+  $B2: {
+    %19:tint_module_vars_struct = construct %prevent_dce
+    %tint_module_vars:tint_module_vars_struct = let %19
+    %21:subgroup_matrix_result<f16, 8, 8> = call %subgroupMatrixMultiplyAccumulate_c4062a
+    %22:ptr<storage, array<f16, 1024>, read_write> = access %tint_module_vars, 0u
+    %23:ptr<storage, f16, read_write> = access %22, 0u
+    %24:u64 = msl.convert 64u
+    %25:void = msl.simdgroup_store %21, %23, %24, vec2<u64>(0u64), false
+    ret
+  }
+}
+
+
+tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.spvasm
similarity index 65%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.spvasm
index 41bc0a8..25a9e82 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c75357.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 43
+; Bound: 46
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
@@ -17,9 +17,10 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_c75357 "subgroupMatrixMultiply_c75357"
+               OpName %subgroupMatrixMultiplyAccumulate_c4062a "subgroupMatrixMultiplyAccumulate_c4062a"
                OpName %arg_0 "arg_0"
                OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_half_uint_1024 ArrayStride 2
@@ -39,40 +40,44 @@
      %uint_2 = OpConstant %uint 2
           %9 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
+      %float = OpTypeFloat 32
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
 %_ptr_Function_16 = OpTypePointer Function %16
      %uint_1 = OpConstant %uint 1
-         %21 = OpTypeCooperativeMatrixKHR %half %uint_3 %uint_8 %uint_8 %uint_1
-         %20 = OpConstantNull %21
-%_ptr_Function_21 = OpTypePointer Function %21
-         %27 = OpConstantNull %9
+         %22 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_1
+         %21 = OpConstantNull %22
+%_ptr_Function_22 = OpTypePointer Function %22
+         %26 = OpConstantNull %9
 %_ptr_Function_9 = OpTypePointer Function %9
        %void = OpTypeVoid
-         %34 = OpTypeFunction %void
+         %37 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_half_uint_1024 = OpTypePointer StorageBuffer %_arr_half_uint_1024
 %_ptr_StorageBuffer_half = OpTypePointer StorageBuffer %half
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_c75357 = OpFunction %9 None %13
+%subgroupMatrixMultiplyAccumulate_c4062a = OpFunction %9 None %13
          %14 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_16 Function
-      %arg_1 = OpVariable %_ptr_Function_21 Function
+      %arg_1 = OpVariable %_ptr_Function_22 Function
+      %arg_2 = OpVariable %_ptr_Function_9 Function
         %res = OpVariable %_ptr_Function_9 Function
                OpStore %arg_0 %15
-               OpStore %arg_1 %20
-         %25 = OpLoad %16 %arg_0 None
-         %26 = OpLoad %21 %arg_1 None
-         %28 = OpCooperativeMatrixMulAddKHR %9 %25 %26 %27
-               OpStore %res %28
-         %31 = OpLoad %9 %res None
-               OpReturnValue %31
+               OpStore %arg_1 %21
+               OpStore %arg_2 %26
+         %29 = OpLoad %16 %arg_0 None
+         %30 = OpLoad %22 %arg_1 None
+         %31 = OpLoad %9 %arg_2 None
+         %32 = OpCooperativeMatrixMulAddKHR %9 %29 %30 %31
+               OpStore %res %32
+         %34 = OpLoad %9 %res None
+               OpReturnValue %34
                OpFunctionEnd
-%compute_main = OpFunction %void None %34
-         %35 = OpLabel
-         %36 = OpFunctionCall %9 %subgroupMatrixMultiply_c75357
-         %37 = OpAccessChain %_ptr_StorageBuffer__arr_half_uint_1024 %1 %uint_0
-         %39 = OpAccessChain %_ptr_StorageBuffer_half %37 %uint_0
-               OpCooperativeMatrixStoreKHR %39 %36 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %37
+         %38 = OpLabel
+         %39 = OpFunctionCall %9 %subgroupMatrixMultiplyAccumulate_c4062a
+         %40 = OpAccessChain %_ptr_StorageBuffer__arr_half_uint_1024 %1 %uint_0
+         %42 = OpAccessChain %_ptr_StorageBuffer_half %40 %uint_0
+               OpCooperativeMatrixStoreKHR %42 %39 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.wgsl
new file mode 100644
index 0000000..02253f1
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.wgsl
@@ -0,0 +1,17 @@
+enable chromium_experimental_subgroup_matrix;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;
+
+fn subgroupMatrixMultiplyAccumulate_c4062a() -> subgroup_matrix_result<f16, 8, 8> {
+  var arg_0 = subgroup_matrix_left<f32, 8, 8>();
+  var arg_1 = subgroup_matrix_right<f32, 8, 8>();
+  var arg_2 = subgroup_matrix_result<f16, 8, 8>();
+  var res : subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiplyAccumulate(arg_0, arg_1, arg_2);
+  return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiplyAccumulate_c4062a(), false, 64);
+}
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/db91bf.wgsl
similarity index 80%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/db91bf.wgsl
index a097359..6148677 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/db91bf.wgsl
@@ -39,17 +39,18 @@
 
 
 enable chromium_experimental_subgroup_matrix;
-@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<u32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, f32, 8, 8>, subgroup_matrix<right, f32, 8, 8>) -> subgroup_matrix<result, f32, 8, 8>
-fn subgroupMatrixMultiply_077fe6() -> subgroup_matrix_result<f32, 8, 8>{
+// fn subgroupMatrixMultiplyAccumulate(subgroup_matrix<left, f32, 8, 8>, subgroup_matrix<right, f32, 8, 8>, subgroup_matrix<result, u32, 8, 8>) -> subgroup_matrix<result, u32, 8, 8>
+fn subgroupMatrixMultiplyAccumulate_db91bf() -> subgroup_matrix_result<u32, 8, 8>{
   var arg_0 = subgroup_matrix_left<f32, 8, 8>();
   var arg_1 = subgroup_matrix_right<f32, 8, 8>();
-  var res: subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var arg_2 = subgroup_matrix_result<u32, 8, 8>();
+  var res: subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiplyAccumulate(arg_0, arg_1, arg_2);
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_077fe6(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiplyAccumulate_db91bf(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.spvasm
similarity index 63%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.spvasm
index a14cda7..f08bc83 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 42
+; Bound: 45
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
@@ -14,9 +14,10 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_837e77 "subgroupMatrixMultiply_837e77"
+               OpName %subgroupMatrixMultiplyAccumulate_db91bf "subgroupMatrixMultiplyAccumulate_db91bf"
                OpName %arg_0 "arg_0"
                OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_uint_uint_1024 ArrayStride 4
@@ -35,40 +36,44 @@
      %uint_2 = OpConstant %uint 2
           %8 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_2
          %12 = OpTypeFunction %8
+      %float = OpTypeFloat 32
      %uint_0 = OpConstant %uint 0
-         %15 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_0
+         %15 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_0
          %14 = OpConstantNull %15
 %_ptr_Function_15 = OpTypePointer Function %15
      %uint_1 = OpConstant %uint 1
-         %20 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_1
-         %19 = OpConstantNull %20
-%_ptr_Function_20 = OpTypePointer Function %20
-         %26 = OpConstantNull %8
+         %21 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_1
+         %20 = OpConstantNull %21
+%_ptr_Function_21 = OpTypePointer Function %21
+         %25 = OpConstantNull %8
 %_ptr_Function_8 = OpTypePointer Function %8
        %void = OpTypeVoid
-         %33 = OpTypeFunction %void
+         %36 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_uint_uint_1024 = OpTypePointer StorageBuffer %_arr_uint_uint_1024
 %_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_837e77 = OpFunction %8 None %12
+%subgroupMatrixMultiplyAccumulate_db91bf = OpFunction %8 None %12
          %13 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_15 Function
-      %arg_1 = OpVariable %_ptr_Function_20 Function
+      %arg_1 = OpVariable %_ptr_Function_21 Function
+      %arg_2 = OpVariable %_ptr_Function_8 Function
         %res = OpVariable %_ptr_Function_8 Function
                OpStore %arg_0 %14
-               OpStore %arg_1 %19
-         %24 = OpLoad %15 %arg_0 None
-         %25 = OpLoad %20 %arg_1 None
-         %27 = OpCooperativeMatrixMulAddKHR %8 %24 %25 %26
-               OpStore %res %27
-         %30 = OpLoad %8 %res None
-               OpReturnValue %30
+               OpStore %arg_1 %20
+               OpStore %arg_2 %25
+         %28 = OpLoad %15 %arg_0 None
+         %29 = OpLoad %21 %arg_1 None
+         %30 = OpLoad %8 %arg_2 None
+         %31 = OpCooperativeMatrixMulAddKHR %8 %28 %29 %30
+               OpStore %res %31
+         %33 = OpLoad %8 %res None
+               OpReturnValue %33
                OpFunctionEnd
-%compute_main = OpFunction %void None %33
-         %34 = OpLabel
-         %35 = OpFunctionCall %8 %subgroupMatrixMultiply_837e77
-         %36 = OpAccessChain %_ptr_StorageBuffer__arr_uint_uint_1024 %1 %uint_0
-         %38 = OpAccessChain %_ptr_StorageBuffer_uint %36 %uint_0
-               OpCooperativeMatrixStoreKHR %38 %35 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %36
+         %37 = OpLabel
+         %38 = OpFunctionCall %8 %subgroupMatrixMultiplyAccumulate_db91bf
+         %39 = OpAccessChain %_ptr_StorageBuffer__arr_uint_uint_1024 %1 %uint_0
+         %41 = OpAccessChain %_ptr_StorageBuffer_uint %39 %uint_0
+               OpCooperativeMatrixStoreKHR %41 %38 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.wgsl
new file mode 100644
index 0000000..465b9e7
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.wgsl
@@ -0,0 +1,16 @@
+enable chromium_experimental_subgroup_matrix;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<u32, 1024>;
+
+fn subgroupMatrixMultiplyAccumulate_db91bf() -> subgroup_matrix_result<u32, 8, 8> {
+  var arg_0 = subgroup_matrix_left<f32, 8, 8>();
+  var arg_1 = subgroup_matrix_right<f32, 8, 8>();
+  var arg_2 = subgroup_matrix_result<u32, 8, 8>();
+  var res : subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiplyAccumulate(arg_0, arg_1, arg_2);
+  return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiplyAccumulate_db91bf(), false, 64);
+}
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e27d24.wgsl
similarity index 80%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e27d24.wgsl
index a097359..f25beaf 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e27d24.wgsl
@@ -39,17 +39,18 @@
 
 
 enable chromium_experimental_subgroup_matrix;
-@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, f32, 8, 8>, subgroup_matrix<right, f32, 8, 8>) -> subgroup_matrix<result, f32, 8, 8>
-fn subgroupMatrixMultiply_077fe6() -> subgroup_matrix_result<f32, 8, 8>{
+// fn subgroupMatrixMultiplyAccumulate(subgroup_matrix<left, f32, 8, 8>, subgroup_matrix<right, f32, 8, 8>, subgroup_matrix<result, i32, 8, 8>) -> subgroup_matrix<result, i32, 8, 8>
+fn subgroupMatrixMultiplyAccumulate_e27d24() -> subgroup_matrix_result<i32, 8, 8>{
   var arg_0 = subgroup_matrix_left<f32, 8, 8>();
   var arg_1 = subgroup_matrix_right<f32, 8, 8>();
-  var res: subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var arg_2 = subgroup_matrix_result<i32, 8, 8>();
+  var res: subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiplyAccumulate(arg_0, arg_1, arg_2);
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_077fe6(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiplyAccumulate_e27d24(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.spvasm
similarity index 63%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.spvasm
index 3b129e9..471b3a7 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fd0481.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 43
+; Bound: 46
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
@@ -14,9 +14,10 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_fd0481 "subgroupMatrixMultiply_fd0481"
+               OpName %subgroupMatrixMultiplyAccumulate_e27d24 "subgroupMatrixMultiplyAccumulate_e27d24"
                OpName %arg_0 "arg_0"
                OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_int_uint_1024 ArrayStride 4
@@ -36,40 +37,44 @@
      %uint_2 = OpConstant %uint 2
           %9 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
+      %float = OpTypeFloat 32
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
 %_ptr_Function_16 = OpTypePointer Function %16
      %uint_1 = OpConstant %uint 1
-         %21 = OpTypeCooperativeMatrixKHR %int %uint_3 %uint_8 %uint_8 %uint_1
-         %20 = OpConstantNull %21
-%_ptr_Function_21 = OpTypePointer Function %21
-         %27 = OpConstantNull %9
+         %22 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_1
+         %21 = OpConstantNull %22
+%_ptr_Function_22 = OpTypePointer Function %22
+         %26 = OpConstantNull %9
 %_ptr_Function_9 = OpTypePointer Function %9
        %void = OpTypeVoid
-         %34 = OpTypeFunction %void
+         %37 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_int_uint_1024 = OpTypePointer StorageBuffer %_arr_int_uint_1024
 %_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_fd0481 = OpFunction %9 None %13
+%subgroupMatrixMultiplyAccumulate_e27d24 = OpFunction %9 None %13
          %14 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_16 Function
-      %arg_1 = OpVariable %_ptr_Function_21 Function
+      %arg_1 = OpVariable %_ptr_Function_22 Function
+      %arg_2 = OpVariable %_ptr_Function_9 Function
         %res = OpVariable %_ptr_Function_9 Function
                OpStore %arg_0 %15
-               OpStore %arg_1 %20
-         %25 = OpLoad %16 %arg_0 None
-         %26 = OpLoad %21 %arg_1 None
-         %28 = OpCooperativeMatrixMulAddKHR %9 %25 %26 %27
-               OpStore %res %28
-         %31 = OpLoad %9 %res None
-               OpReturnValue %31
+               OpStore %arg_1 %21
+               OpStore %arg_2 %26
+         %29 = OpLoad %16 %arg_0 None
+         %30 = OpLoad %22 %arg_1 None
+         %31 = OpLoad %9 %arg_2 None
+         %32 = OpCooperativeMatrixMulAddKHR %9 %29 %30 %31
+               OpStore %res %32
+         %34 = OpLoad %9 %res None
+               OpReturnValue %34
                OpFunctionEnd
-%compute_main = OpFunction %void None %34
-         %35 = OpLabel
-         %36 = OpFunctionCall %9 %subgroupMatrixMultiply_fd0481
-         %37 = OpAccessChain %_ptr_StorageBuffer__arr_int_uint_1024 %1 %uint_0
-         %39 = OpAccessChain %_ptr_StorageBuffer_int %37 %uint_0
-               OpCooperativeMatrixStoreKHR %39 %36 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %37
+         %38 = OpLabel
+         %39 = OpFunctionCall %9 %subgroupMatrixMultiplyAccumulate_e27d24
+         %40 = OpAccessChain %_ptr_StorageBuffer__arr_int_uint_1024 %1 %uint_0
+         %42 = OpAccessChain %_ptr_StorageBuffer_int %40 %uint_0
+               OpCooperativeMatrixStoreKHR %42 %39 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.wgsl
new file mode 100644
index 0000000..d6366b8
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.wgsl
@@ -0,0 +1,16 @@
+enable chromium_experimental_subgroup_matrix;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<i32, 1024>;
+
+fn subgroupMatrixMultiplyAccumulate_e27d24() -> subgroup_matrix_result<i32, 8, 8> {
+  var arg_0 = subgroup_matrix_left<f32, 8, 8>();
+  var arg_1 = subgroup_matrix_right<f32, 8, 8>();
+  var arg_2 = subgroup_matrix_result<i32, 8, 8>();
+  var res : subgroup_matrix_result<i32, 8, 8> = subgroupMatrixMultiplyAccumulate(arg_0, arg_1, arg_2);
+  return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiplyAccumulate_e27d24(), false, 64);
+}
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e49afd.wgsl
similarity index 80%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e49afd.wgsl
index 75a2603..ac840ea 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e49afd.wgsl
@@ -39,17 +39,18 @@
 
 
 enable chromium_experimental_subgroup_matrix;
-@group(0) @binding(0) var<storage, read_write> prevent_dce : array<u32, 1024>;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
 
 
-// fn subgroupMatrixMultiply(subgroup_matrix<left, u32, 8, 8>, subgroup_matrix<right, u32, 8, 8>) -> subgroup_matrix<result, u32, 8, 8>
-fn subgroupMatrixMultiply_837e77() -> subgroup_matrix_result<u32, 8, 8>{
+// fn subgroupMatrixMultiplyAccumulate(subgroup_matrix<left, u32, 8, 8>, subgroup_matrix<right, u32, 8, 8>, subgroup_matrix<result, f32, 8, 8>) -> subgroup_matrix<result, f32, 8, 8>
+fn subgroupMatrixMultiplyAccumulate_e49afd() -> subgroup_matrix_result<f32, 8, 8>{
   var arg_0 = subgroup_matrix_left<u32, 8, 8>();
   var arg_1 = subgroup_matrix_right<u32, 8, 8>();
-  var res: subgroup_matrix_result<u32, 8, 8> = subgroupMatrixMultiply(arg_0, arg_1);
+  var arg_2 = subgroup_matrix_result<f32, 8, 8>();
+  var res: subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiplyAccumulate(arg_0, arg_1, arg_2);
   return res;
 }
 @compute @workgroup_size(1)
 fn compute_main() {
-  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiply_837e77(), false, 64);
+  subgroupMatrixStore(&prevent_dce, 0, subgroupMatrixMultiplyAccumulate_e49afd(), false, 64);
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.dxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.dxc.hlsl
index 5664c5f..3cd8b8c 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.fxc.hlsl
index e202956..48f5b71 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/077fe6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 SKIP: INVALID
 
-../../src/tint/lang/wgsl/ast/transform/transform.cc:193 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
+../../src/tint/lang/wgsl/ast/transform/transform.cc:188 internal compiler error: TINT_UNREACHABLE Unhandled type: tint::core::type::SubgroupMatrix
 ********************************************************************
 *  The tint shader compiler has encountered an unexpected error.   *
 *                                                                  *
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.glsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.glsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.glsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.ir.dxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.dxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.ir.dxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.ir.fxc.hlsl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.ir.fxc.hlsl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.ir.fxc.hlsl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.msl
similarity index 100%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/837e77.wgsl.expected.msl
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.msl
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.spvasm
similarity index 68%
copy from test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm
copy to test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.spvasm
index a329068..ba1cc9f 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/077fe6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 1
-; Bound: 43
+; Bound: 45
 ; Schema: 0
                OpCapability Shader
                OpCapability VulkanMemoryModel
@@ -14,9 +14,10 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpMemberName %prevent_dce_block 0 "inner"
                OpName %prevent_dce_block "prevent_dce_block"
-               OpName %subgroupMatrixMultiply_077fe6 "subgroupMatrixMultiply_077fe6"
+               OpName %subgroupMatrixMultiplyAccumulate_e49afd "subgroupMatrixMultiplyAccumulate_e49afd"
                OpName %arg_0 "arg_0"
                OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
                OpName %res "res"
                OpName %compute_main "compute_main"
                OpDecorate %_arr_float_uint_1024 ArrayStride 4
@@ -37,39 +38,42 @@
           %9 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_2
          %13 = OpTypeFunction %9
      %uint_0 = OpConstant %uint 0
-         %16 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_0
+         %16 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_0
          %15 = OpConstantNull %16
 %_ptr_Function_16 = OpTypePointer Function %16
      %uint_1 = OpConstant %uint 1
-         %21 = OpTypeCooperativeMatrixKHR %float %uint_3 %uint_8 %uint_8 %uint_1
+         %21 = OpTypeCooperativeMatrixKHR %uint %uint_3 %uint_8 %uint_8 %uint_1
          %20 = OpConstantNull %21
 %_ptr_Function_21 = OpTypePointer Function %21
-         %27 = OpConstantNull %9
+         %25 = OpConstantNull %9
 %_ptr_Function_9 = OpTypePointer Function %9
        %void = OpTypeVoid
-         %34 = OpTypeFunction %void
+         %36 = OpTypeFunction %void
 %_ptr_StorageBuffer__arr_float_uint_1024 = OpTypePointer StorageBuffer %_arr_float_uint_1024
 %_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
     %uint_64 = OpConstant %uint 64
-%subgroupMatrixMultiply_077fe6 = OpFunction %9 None %13
+%subgroupMatrixMultiplyAccumulate_e49afd = OpFunction %9 None %13
          %14 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_16 Function
       %arg_1 = OpVariable %_ptr_Function_21 Function
+      %arg_2 = OpVariable %_ptr_Function_9 Function
         %res = OpVariable %_ptr_Function_9 Function
                OpStore %arg_0 %15
                OpStore %arg_1 %20
-         %25 = OpLoad %16 %arg_0 None
-         %26 = OpLoad %21 %arg_1 None
-         %28 = OpCooperativeMatrixMulAddKHR %9 %25 %26 %27
-               OpStore %res %28
-         %31 = OpLoad %9 %res None
-               OpReturnValue %31
+               OpStore %arg_2 %25
+         %28 = OpLoad %16 %arg_0 None
+         %29 = OpLoad %21 %arg_1 None
+         %30 = OpLoad %9 %arg_2 None
+         %31 = OpCooperativeMatrixMulAddKHR %9 %28 %29 %30
+               OpStore %res %31
+         %33 = OpLoad %9 %res None
+               OpReturnValue %33
                OpFunctionEnd
-%compute_main = OpFunction %void None %34
-         %35 = OpLabel
-         %36 = OpFunctionCall %9 %subgroupMatrixMultiply_077fe6
-         %37 = OpAccessChain %_ptr_StorageBuffer__arr_float_uint_1024 %1 %uint_0
-         %39 = OpAccessChain %_ptr_StorageBuffer_float %37 %uint_0
-               OpCooperativeMatrixStoreKHR %39 %36 %uint_0 %uint_64 NonPrivatePointer
+%compute_main = OpFunction %void None %36
+         %37 = OpLabel
+         %38 = OpFunctionCall %9 %subgroupMatrixMultiplyAccumulate_e49afd
+         %39 = OpAccessChain %_ptr_StorageBuffer__arr_float_uint_1024 %1 %uint_0
+         %41 = OpAccessChain %_ptr_StorageBuffer_float %39 %uint_0
+               OpCooperativeMatrixStoreKHR %41 %38 %uint_0 %uint_64 NonPrivatePointer
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.wgsl
new file mode 100644
index 0000000..8f94637
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.wgsl
@@ -0,0 +1,16 @@
+enable chromium_experimental_subgroup_matrix;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : array<f32, 1024>;
+
+fn subgroupMatrixMultiplyAccumulate_e49afd() -> subgroup_matrix_result<f32, 8, 8> {
+  var arg_0 = subgroup_matrix_left<u32, 8, 8>();
+  var arg_1 = subgroup_matrix_right<u32, 8, 8>();
+  var arg_2 = subgroup_matrix_result<f32, 8, 8>();
+  var res : subgroup_matrix_result<f32, 8, 8> = subgroupMatrixMultiplyAccumulate(arg_0, arg_1, arg_2);
+  return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiplyAccumulate_e49afd(), false, 64);
+}