[spirv] Emit Matrix*SignedComponents operands

If cooperative matrices have signed component types then the
OpCooperativeMatrixMulAddKHR instruction needs operands that say so.

Bug: 348702031
Change-Id: I20fc2129e5959052a52d89e3138fe7a58c5f4df0
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/226156
Reviewed-by: dan sinclair <dsinclair@chromium.org>
diff --git a/src/tint/lang/spirv/intrinsic/data.cc b/src/tint/lang/spirv/intrinsic/data.cc
index 06ab199..386073b 100644
--- a/src/tint/lang/spirv/intrinsic/data.cc
+++ b/src/tint/lang/spirv/intrinsic/data.cc
@@ -2993,147 +2993,147 @@
   {
     /* [281] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(101),
+    /* matcher_indices */ MatcherIndicesIndex(33),
   },
   {
     /* [282] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(1),
+    /* matcher_indices */ MatcherIndicesIndex(38),
   },
   {
     /* [283] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(8),
+    /* matcher_indices */ MatcherIndicesIndex(28),
   },
   {
     /* [284] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(104),
+    /* matcher_indices */ MatcherIndicesIndex(114),
   },
   {
     /* [285] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(183),
+    /* matcher_indices */ MatcherIndicesIndex(101),
   },
   {
     /* [286] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(8),
+    /* matcher_indices */ MatcherIndicesIndex(1),
   },
   {
     /* [287] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(107),
+    /* matcher_indices */ MatcherIndicesIndex(8),
   },
   {
     /* [288] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(213),
+    /* matcher_indices */ MatcherIndicesIndex(104),
   },
   {
     /* [289] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(8),
+    /* matcher_indices */ MatcherIndicesIndex(183),
   },
   {
     /* [290] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(110),
+    /* matcher_indices */ MatcherIndicesIndex(8),
   },
   {
     /* [291] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(213),
+    /* matcher_indices */ MatcherIndicesIndex(107),
   },
   {
     /* [292] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(8),
+    /* matcher_indices */ MatcherIndicesIndex(213),
   },
   {
     /* [293] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(83),
+    /* matcher_indices */ MatcherIndicesIndex(8),
   },
   {
     /* [294] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(44),
+    /* matcher_indices */ MatcherIndicesIndex(110),
   },
   {
     /* [295] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(3),
+    /* matcher_indices */ MatcherIndicesIndex(213),
   },
   {
     /* [296] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(17),
+    /* matcher_indices */ MatcherIndicesIndex(8),
   },
   {
     /* [297] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(4),
+    /* matcher_indices */ MatcherIndicesIndex(83),
   },
   {
     /* [298] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(4),
+    /* matcher_indices */ MatcherIndicesIndex(44),
   },
   {
     /* [299] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(152),
+    /* matcher_indices */ MatcherIndicesIndex(3),
   },
   {
     /* [300] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(80),
+    /* matcher_indices */ MatcherIndicesIndex(17),
   },
   {
     /* [301] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(80),
+    /* matcher_indices */ MatcherIndicesIndex(4),
   },
   {
     /* [302] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(176),
+    /* matcher_indices */ MatcherIndicesIndex(4),
   },
   {
     /* [303] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(167),
+    /* matcher_indices */ MatcherIndicesIndex(152),
   },
   {
     /* [304] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(170),
+    /* matcher_indices */ MatcherIndicesIndex(80),
   },
   {
     /* [305] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(173),
+    /* matcher_indices */ MatcherIndicesIndex(80),
   },
   {
     /* [306] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(2),
+    /* matcher_indices */ MatcherIndicesIndex(176),
   },
   {
     /* [307] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(2),
+    /* matcher_indices */ MatcherIndicesIndex(167),
   },
   {
     /* [308] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(4),
+    /* matcher_indices */ MatcherIndicesIndex(170),
   },
   {
     /* [309] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(2),
+    /* matcher_indices */ MatcherIndicesIndex(173),
   },
   {
     /* [310] */
@@ -3148,260 +3148,265 @@
   {
     /* [312] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(55),
+    /* matcher_indices */ MatcherIndicesIndex(4),
   },
   {
     /* [313] */
+    /* usage */ core::ParameterUsage::kNone,
+    /* matcher_indices */ MatcherIndicesIndex(2),
+  },
+  {
+    /* [314] */
+    /* usage */ core::ParameterUsage::kNone,
+    /* matcher_indices */ MatcherIndicesIndex(2),
+  },
+  {
+    /* [315] */
+    /* usage */ core::ParameterUsage::kNone,
+    /* matcher_indices */ MatcherIndicesIndex(2),
+  },
+  {
+    /* [316] */
+    /* usage */ core::ParameterUsage::kNone,
+    /* matcher_indices */ MatcherIndicesIndex(55),
+  },
+  {
+    /* [317] */
     /* usage */ core::ParameterUsage::kBase,
     /* matcher_indices */ MatcherIndicesIndex(4),
   },
   {
-    /* [314] */
-    /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(225),
-  },
-  {
-    /* [315] */
-    /* usage */ core::ParameterUsage::kCount,
-    /* matcher_indices */ MatcherIndicesIndex(225),
-  },
-  {
-    /* [316] */
-    /* usage */ core::ParameterUsage::kBase,
-    /* matcher_indices */ MatcherIndicesIndex(2),
-  },
-  {
-    /* [317] */
-    /* usage */ core::ParameterUsage::kOffset,
-    /* matcher_indices */ MatcherIndicesIndex(225),
-  },
-  {
     /* [318] */
-    /* usage */ core::ParameterUsage::kCount,
+    /* usage */ core::ParameterUsage::kOffset,
     /* matcher_indices */ MatcherIndicesIndex(225),
   },
   {
     /* [319] */
-    /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(33),
+    /* usage */ core::ParameterUsage::kCount,
+    /* matcher_indices */ MatcherIndicesIndex(225),
   },
   {
     /* [320] */
-    /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(38),
+    /* usage */ core::ParameterUsage::kBase,
+    /* matcher_indices */ MatcherIndicesIndex(2),
   },
   {
     /* [321] */
-    /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(28),
+    /* usage */ core::ParameterUsage::kOffset,
+    /* matcher_indices */ MatcherIndicesIndex(225),
   },
   {
     /* [322] */
-    /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(43),
+    /* usage */ core::ParameterUsage::kCount,
+    /* matcher_indices */ MatcherIndicesIndex(225),
   },
   {
     /* [323] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(4),
+    /* matcher_indices */ MatcherIndicesIndex(43),
   },
   {
     /* [324] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(87),
+    /* matcher_indices */ MatcherIndicesIndex(4),
   },
   {
     /* [325] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(3),
+    /* matcher_indices */ MatcherIndicesIndex(87),
   },
   {
     /* [326] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(90),
+    /* matcher_indices */ MatcherIndicesIndex(3),
   },
   {
     /* [327] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(3),
+    /* matcher_indices */ MatcherIndicesIndex(90),
   },
   {
     /* [328] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(93),
+    /* matcher_indices */ MatcherIndicesIndex(3),
   },
   {
     /* [329] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(3),
+    /* matcher_indices */ MatcherIndicesIndex(93),
   },
   {
     /* [330] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(96),
+    /* matcher_indices */ MatcherIndicesIndex(3),
   },
   {
     /* [331] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(3),
+    /* matcher_indices */ MatcherIndicesIndex(96),
   },
   {
     /* [332] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(99),
+    /* matcher_indices */ MatcherIndicesIndex(3),
   },
   {
     /* [333] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(3),
+    /* matcher_indices */ MatcherIndicesIndex(99),
   },
   {
     /* [334] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(180),
+    /* matcher_indices */ MatcherIndicesIndex(3),
   },
   {
     /* [335] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(4),
+    /* matcher_indices */ MatcherIndicesIndex(180),
   },
   {
     /* [336] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(186),
+    /* matcher_indices */ MatcherIndicesIndex(4),
   },
   {
     /* [337] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(4),
+    /* matcher_indices */ MatcherIndicesIndex(186),
   },
   {
     /* [338] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(190),
+    /* matcher_indices */ MatcherIndicesIndex(4),
   },
   {
     /* [339] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(4),
+    /* matcher_indices */ MatcherIndicesIndex(190),
   },
   {
     /* [340] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(192),
+    /* matcher_indices */ MatcherIndicesIndex(4),
   },
   {
     /* [341] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(4),
+    /* matcher_indices */ MatcherIndicesIndex(192),
   },
   {
     /* [342] */
+    /* usage */ core::ParameterUsage::kNone,
+    /* matcher_indices */ MatcherIndicesIndex(4),
+  },
+  {
+    /* [343] */
     /* usage */ core::ParameterUsage::kInputAttachment,
     /* matcher_indices */ MatcherIndicesIndex(215),
   },
   {
-    /* [343] */
+    /* [344] */
     /* usage */ core::ParameterUsage::kNone,
     /* matcher_indices */ MatcherIndicesIndex(195),
   },
   {
-    /* [344] */
+    /* [345] */
     /* usage */ core::ParameterUsage::kNone,
     /* matcher_indices */ MatcherIndicesIndex(51),
   },
   {
-    /* [345] */
+    /* [346] */
     /* usage */ core::ParameterUsage::kNone,
     /* matcher_indices */ MatcherIndicesIndex(55),
   },
   {
-    /* [346] */
-    /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(59),
-  },
-  {
     /* [347] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(4),
+    /* matcher_indices */ MatcherIndicesIndex(59),
   },
   {
     /* [348] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(59),
+    /* matcher_indices */ MatcherIndicesIndex(4),
   },
   {
     /* [349] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(2),
+    /* matcher_indices */ MatcherIndicesIndex(59),
   },
   {
     /* [350] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(158),
+    /* matcher_indices */ MatcherIndicesIndex(2),
   },
   {
     /* [351] */
     /* usage */ core::ParameterUsage::kNone,
-    /* matcher_indices */ MatcherIndicesIndex(161),
+    /* matcher_indices */ MatcherIndicesIndex(158),
   },
   {
     /* [352] */
+    /* usage */ core::ParameterUsage::kNone,
+    /* matcher_indices */ MatcherIndicesIndex(161),
+  },
+  {
+    /* [353] */
     /* usage */ core::ParameterUsage::kX,
     /* matcher_indices */ MatcherIndicesIndex(4),
   },
   {
-    /* [353] */
+    /* [354] */
     /* usage */ core::ParameterUsage::kI,
     /* matcher_indices */ MatcherIndicesIndex(63),
   },
   {
-    /* [354] */
+    /* [355] */
     /* usage */ core::ParameterUsage::kX,
     /* matcher_indices */ MatcherIndicesIndex(2),
   },
   {
-    /* [355] */
+    /* [356] */
     /* usage */ core::ParameterUsage::kI,
     /* matcher_indices */ MatcherIndicesIndex(0),
   },
   {
-    /* [356] */
+    /* [357] */
     /* usage */ core::ParameterUsage::kX,
     /* matcher_indices */ MatcherIndicesIndex(4),
   },
   {
-    /* [357] */
+    /* [358] */
     /* usage */ core::ParameterUsage::kI,
     /* matcher_indices */ MatcherIndicesIndex(67),
   },
   {
-    /* [358] */
+    /* [359] */
     /* usage */ core::ParameterUsage::kX,
     /* matcher_indices */ MatcherIndicesIndex(149),
   },
   {
-    /* [359] */
+    /* [360] */
     /* usage */ core::ParameterUsage::kI,
     /* matcher_indices */ MatcherIndicesIndex(7),
   },
   {
-    /* [360] */
+    /* [361] */
     /* usage */ core::ParameterUsage::kNone,
     /* matcher_indices */ MatcherIndicesIndex(5),
   },
   {
-    /* [361] */
+    /* [362] */
     /* usage */ core::ParameterUsage::kNone,
     /* matcher_indices */ MatcherIndicesIndex(221),
   },
   {
-    /* [362] */
+    /* [363] */
     /* usage */ core::ParameterUsage::kNone,
     /* matcher_indices */ MatcherIndicesIndex(223),
   },
   {
-    /* [363] */
+    /* [364] */
     /* usage */ core::ParameterUsage::kNone,
     /* matcher_indices */ MatcherIndicesIndex(9),
   },
@@ -3922,7 +3927,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(17),
-    /* parameters */ ParameterIndex(293),
+    /* parameters */ ParameterIndex(297),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -4472,7 +4477,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(17),
-    /* parameters */ ParameterIndex(330),
+    /* parameters */ ParameterIndex(331),
     /* return_matcher_indices */ MatcherIndicesIndex(205),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -4483,7 +4488,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(17),
-    /* parameters */ ParameterIndex(332),
+    /* parameters */ ParameterIndex(333),
     /* return_matcher_indices */ MatcherIndicesIndex(207),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -4527,7 +4532,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(338),
+    /* parameters */ ParameterIndex(339),
     /* return_matcher_indices */ MatcherIndicesIndex(205),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -4538,7 +4543,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 0,
     /* templates */ TemplateIndex(/* invalid */),
-    /* parameters */ ParameterIndex(340),
+    /* parameters */ ParameterIndex(341),
     /* return_matcher_indices */ MatcherIndicesIndex(207),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -4560,7 +4565,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(77),
-    /* parameters */ ParameterIndex(281),
+    /* parameters */ ParameterIndex(285),
     /* return_matcher_indices */ MatcherIndicesIndex(114),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -4571,7 +4576,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(77),
-    /* parameters */ ParameterIndex(284),
+    /* parameters */ ParameterIndex(288),
     /* return_matcher_indices */ MatcherIndicesIndex(205),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -4582,7 +4587,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(77),
-    /* parameters */ ParameterIndex(287),
+    /* parameters */ ParameterIndex(291),
     /* return_matcher_indices */ MatcherIndicesIndex(207),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -4593,7 +4598,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(77),
-    /* parameters */ ParameterIndex(290),
+    /* parameters */ ParameterIndex(294),
     /* return_matcher_indices */ MatcherIndicesIndex(207),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -4758,7 +4763,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(26),
-    /* parameters */ ParameterIndex(281),
+    /* parameters */ ParameterIndex(285),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -4769,7 +4774,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(30),
-    /* parameters */ ParameterIndex(281),
+    /* parameters */ ParameterIndex(285),
     /* return_matcher_indices */ MatcherIndicesIndex(209),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -4780,7 +4785,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(34),
-    /* parameters */ ParameterIndex(281),
+    /* parameters */ ParameterIndex(285),
     /* return_matcher_indices */ MatcherIndicesIndex(211),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -4791,7 +4796,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(26),
-    /* parameters */ ParameterIndex(284),
+    /* parameters */ ParameterIndex(288),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -4802,7 +4807,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(30),
-    /* parameters */ ParameterIndex(284),
+    /* parameters */ ParameterIndex(288),
     /* return_matcher_indices */ MatcherIndicesIndex(209),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -4813,7 +4818,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(34),
-    /* parameters */ ParameterIndex(284),
+    /* parameters */ ParameterIndex(288),
     /* return_matcher_indices */ MatcherIndicesIndex(211),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -4824,7 +4829,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(26),
-    /* parameters */ ParameterIndex(287),
+    /* parameters */ ParameterIndex(291),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -4835,7 +4840,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(30),
-    /* parameters */ ParameterIndex(287),
+    /* parameters */ ParameterIndex(291),
     /* return_matcher_indices */ MatcherIndicesIndex(209),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -4846,7 +4851,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(34),
-    /* parameters */ ParameterIndex(287),
+    /* parameters */ ParameterIndex(291),
     /* return_matcher_indices */ MatcherIndicesIndex(211),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -4857,7 +4862,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(26),
-    /* parameters */ ParameterIndex(290),
+    /* parameters */ ParameterIndex(294),
     /* return_matcher_indices */ MatcherIndicesIndex(74),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -4868,7 +4873,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(30),
-    /* parameters */ ParameterIndex(290),
+    /* parameters */ ParameterIndex(294),
     /* return_matcher_indices */ MatcherIndicesIndex(209),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -4879,7 +4884,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(34),
-    /* parameters */ ParameterIndex(290),
+    /* parameters */ ParameterIndex(294),
     /* return_matcher_indices */ MatcherIndicesIndex(211),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -4890,7 +4895,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(17),
-    /* parameters */ ParameterIndex(342),
+    /* parameters */ ParameterIndex(343),
     /* return_matcher_indices */ MatcherIndicesIndex(193),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5044,7 +5049,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(21),
-    /* parameters */ ParameterIndex(324),
+    /* parameters */ ParameterIndex(325),
     /* return_matcher_indices */ MatcherIndicesIndex(205),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5055,7 +5060,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(21),
-    /* parameters */ ParameterIndex(326),
+    /* parameters */ ParameterIndex(327),
     /* return_matcher_indices */ MatcherIndicesIndex(207),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5066,7 +5071,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(21),
-    /* parameters */ ParameterIndex(328),
+    /* parameters */ ParameterIndex(329),
     /* return_matcher_indices */ MatcherIndicesIndex(207),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5077,7 +5082,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(21),
-    /* parameters */ ParameterIndex(330),
+    /* parameters */ ParameterIndex(331),
     /* return_matcher_indices */ MatcherIndicesIndex(205),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5088,7 +5093,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(21),
-    /* parameters */ ParameterIndex(332),
+    /* parameters */ ParameterIndex(333),
     /* return_matcher_indices */ MatcherIndicesIndex(207),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5099,7 +5104,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(22),
-    /* parameters */ ParameterIndex(334),
+    /* parameters */ ParameterIndex(335),
     /* return_matcher_indices */ MatcherIndicesIndex(205),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5110,7 +5115,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(22),
-    /* parameters */ ParameterIndex(336),
+    /* parameters */ ParameterIndex(337),
     /* return_matcher_indices */ MatcherIndicesIndex(207),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5121,7 +5126,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(22),
-    /* parameters */ ParameterIndex(338),
+    /* parameters */ ParameterIndex(339),
     /* return_matcher_indices */ MatcherIndicesIndex(205),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5132,7 +5137,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(22),
-    /* parameters */ ParameterIndex(340),
+    /* parameters */ ParameterIndex(341),
     /* return_matcher_indices */ MatcherIndicesIndex(207),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5154,7 +5159,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(79),
-    /* parameters */ ParameterIndex(324),
+    /* parameters */ ParameterIndex(325),
     /* return_matcher_indices */ MatcherIndicesIndex(86),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5165,7 +5170,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(79),
-    /* parameters */ ParameterIndex(326),
+    /* parameters */ ParameterIndex(327),
     /* return_matcher_indices */ MatcherIndicesIndex(89),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5176,7 +5181,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(79),
-    /* parameters */ ParameterIndex(328),
+    /* parameters */ ParameterIndex(329),
     /* return_matcher_indices */ MatcherIndicesIndex(92),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5187,7 +5192,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(79),
-    /* parameters */ ParameterIndex(330),
+    /* parameters */ ParameterIndex(331),
     /* return_matcher_indices */ MatcherIndicesIndex(95),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5198,7 +5203,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(79),
-    /* parameters */ ParameterIndex(332),
+    /* parameters */ ParameterIndex(333),
     /* return_matcher_indices */ MatcherIndicesIndex(98),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5209,7 +5214,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(80),
-    /* parameters */ ParameterIndex(334),
+    /* parameters */ ParameterIndex(335),
     /* return_matcher_indices */ MatcherIndicesIndex(179),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5220,7 +5225,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(80),
-    /* parameters */ ParameterIndex(336),
+    /* parameters */ ParameterIndex(337),
     /* return_matcher_indices */ MatcherIndicesIndex(185),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5231,7 +5236,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(80),
-    /* parameters */ ParameterIndex(338),
+    /* parameters */ ParameterIndex(339),
     /* return_matcher_indices */ MatcherIndicesIndex(189),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5242,7 +5247,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(80),
-    /* parameters */ ParameterIndex(340),
+    /* parameters */ ParameterIndex(341),
     /* return_matcher_indices */ MatcherIndicesIndex(191),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5539,7 +5544,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(5),
-    /* parameters */ ParameterIndex(360),
+    /* parameters */ ParameterIndex(361),
     /* return_matcher_indices */ MatcherIndicesIndex(5),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5550,7 +5555,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(5),
-    /* parameters */ ParameterIndex(361),
+    /* parameters */ ParameterIndex(362),
     /* return_matcher_indices */ MatcherIndicesIndex(221),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5561,7 +5566,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(5),
-    /* parameters */ ParameterIndex(362),
+    /* parameters */ ParameterIndex(363),
     /* return_matcher_indices */ MatcherIndicesIndex(223),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5572,7 +5577,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(46),
-    /* parameters */ ParameterIndex(296),
+    /* parameters */ ParameterIndex(300),
     /* return_matcher_indices */ MatcherIndicesIndex(4),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5583,7 +5588,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(45),
-    /* parameters */ ParameterIndex(299),
+    /* parameters */ ParameterIndex(303),
     /* return_matcher_indices */ MatcherIndicesIndex(80),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5605,7 +5610,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(4),
-    /* parameters */ ParameterIndex(300),
+    /* parameters */ ParameterIndex(304),
     /* return_matcher_indices */ MatcherIndicesIndex(80),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5627,7 +5632,7 @@
     /* num_explicit_templates */ 1,
     /* num_templates   */ 3,
     /* templates */ TemplateIndex(66),
-    /* parameters */ ParameterIndex(363),
+    /* parameters */ ParameterIndex(364),
     /* return_matcher_indices */ MatcherIndicesIndex(149),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5649,7 +5654,7 @@
     /* num_explicit_templates */ 1,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(42),
-    /* parameters */ ParameterIndex(350),
+    /* parameters */ ParameterIndex(351),
     /* return_matcher_indices */ MatcherIndicesIndex(155),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5671,7 +5676,7 @@
     /* num_explicit_templates */ 1,
     /* num_templates   */ 5,
     /* templates */ TemplateIndex(0),
-    /* parameters */ ParameterIndex(303),
+    /* parameters */ ParameterIndex(307),
     /* return_matcher_indices */ MatcherIndicesIndex(164),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5693,7 +5698,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(63),
-    /* parameters */ ParameterIndex(306),
+    /* parameters */ ParameterIndex(310),
     /* return_matcher_indices */ MatcherIndicesIndex(2),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5715,7 +5720,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(63),
-    /* parameters */ ParameterIndex(306),
+    /* parameters */ ParameterIndex(310),
     /* return_matcher_indices */ MatcherIndicesIndex(2),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5737,7 +5742,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(63),
-    /* parameters */ ParameterIndex(309),
+    /* parameters */ ParameterIndex(313),
     /* return_matcher_indices */ MatcherIndicesIndex(2),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5759,7 +5764,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
     /* templates */ TemplateIndex(4),
-    /* parameters */ ParameterIndex(301),
+    /* parameters */ ParameterIndex(305),
     /* return_matcher_indices */ MatcherIndicesIndex(80),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5770,7 +5775,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(81),
-    /* parameters */ ParameterIndex(352),
+    /* parameters */ ParameterIndex(353),
     /* return_matcher_indices */ MatcherIndicesIndex(4),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5781,7 +5786,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
     /* templates */ TemplateIndex(69),
-    /* parameters */ ParameterIndex(354),
+    /* parameters */ ParameterIndex(355),
     /* return_matcher_indices */ MatcherIndicesIndex(2),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5792,7 +5797,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
     /* templates */ TemplateIndex(72),
-    /* parameters */ ParameterIndex(356),
+    /* parameters */ ParameterIndex(357),
     /* return_matcher_indices */ MatcherIndicesIndex(4),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5803,7 +5808,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(47),
-    /* parameters */ ParameterIndex(358),
+    /* parameters */ ParameterIndex(359),
     /* return_matcher_indices */ MatcherIndicesIndex(149),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5836,7 +5841,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 1,
     /* templates */ TemplateIndex(1),
-    /* parameters */ ParameterIndex(313),
+    /* parameters */ ParameterIndex(317),
     /* return_matcher_indices */ MatcherIndicesIndex(4),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5847,7 +5852,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(67),
-    /* parameters */ ParameterIndex(316),
+    /* parameters */ ParameterIndex(320),
     /* return_matcher_indices */ MatcherIndicesIndex(2),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5858,7 +5863,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(75),
-    /* parameters */ ParameterIndex(322),
+    /* parameters */ ParameterIndex(323),
     /* return_matcher_indices */ MatcherIndicesIndex(114),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5913,7 +5918,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(4),
-    /* parameters */ ParameterIndex(300),
+    /* parameters */ ParameterIndex(304),
     /* return_matcher_indices */ MatcherIndicesIndex(3),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5924,7 +5929,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 4,
     /* templates */ TemplateIndex(38),
-    /* parameters */ ParameterIndex(344),
+    /* parameters */ ParameterIndex(345),
     /* return_matcher_indices */ MatcherIndicesIndex(47),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5935,7 +5940,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
     /* templates */ TemplateIndex(63),
-    /* parameters */ ParameterIndex(346),
+    /* parameters */ ParameterIndex(347),
     /* return_matcher_indices */ MatcherIndicesIndex(59),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5946,7 +5951,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
     /* templates */ TemplateIndex(63),
-    /* parameters */ ParameterIndex(348),
+    /* parameters */ ParameterIndex(349),
     /* return_matcher_indices */ MatcherIndicesIndex(149),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5957,7 +5962,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 3,
     /* templates */ TemplateIndex(63),
-    /* parameters */ ParameterIndex(311),
+    /* parameters */ ParameterIndex(315),
     /* return_matcher_indices */ MatcherIndicesIndex(149),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -5968,7 +5973,7 @@
     /* num_explicit_templates */ 0,
     /* num_templates   */ 2,
     /* templates */ TemplateIndex(63),
-    /* parameters */ ParameterIndex(307),
+    /* parameters */ ParameterIndex(311),
     /* return_matcher_indices */ MatcherIndicesIndex(2),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -6019,11 +6024,11 @@
   {
     /* [191] */
     /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
-    /* num_parameters */ 3,
+    /* num_parameters */ 4,
     /* num_explicit_templates */ 0,
     /* num_templates   */ 5,
     /* templates */ TemplateIndex(12),
-    /* parameters */ ParameterIndex(319),
+    /* parameters */ ParameterIndex(281),
     /* return_matcher_indices */ MatcherIndicesIndex(28),
     /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
   },
@@ -6555,7 +6560,7 @@
   },
   {
     /* [60] */
-    /* 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> */
+    /* 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>, u32) -> 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 df555c3..854cbcc 100644
--- a/src/tint/lang/spirv/spirv.def
+++ b/src/tint/lang/spirv/spirv.def
@@ -420,6 +420,7 @@
 @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>,
+  u32)
   -> subgroup_matrix<subgroup_matrix_kind_result, TR, C, R>
 
diff --git a/src/tint/lang/spirv/writer/raise/builtin_polyfill.cc b/src/tint/lang/spirv/writer/raise/builtin_polyfill.cc
index f3e1b43..469c5bd 100644
--- a/src/tint/lang/spirv/writer/raise/builtin_polyfill.cc
+++ b/src/tint/lang/spirv/writer/raise/builtin_polyfill.cc
@@ -1029,18 +1029,40 @@
         builtin->Destroy();
     }
 
+    /// Generate the literal operand for a subgroup matrix multiply instruction.
+    /// @param input_ty the type of the input matrices
+    /// @param result_ty the type of the result matrix
+    /// @returns the literal operands
+    ir::LiteralOperand* SubgroupMatrixMultiplyOperands(
+        const core::type::SubgroupMatrix* input_ty,
+        const core::type::SubgroupMatrix* result_ty) {
+        uint32_t operands = SpvCooperativeMatrixOperandsMaskNone;
+        if (input_ty->Type()->IsSignedIntegerScalar()) {
+            operands |= SpvCooperativeMatrixOperandsMatrixASignedComponentsKHRMask;
+            operands |= SpvCooperativeMatrixOperandsMatrixBSignedComponentsKHRMask;
+        }
+        if (result_ty->Type()->IsSignedIntegerScalar()) {
+            operands |= SpvCooperativeMatrixOperandsMatrixCSignedComponentsKHRMask;
+            operands |= SpvCooperativeMatrixOperandsMatrixResultSignedComponentsKHRMask;
+        }
+        return Literal(u32(operands));
+    }
+
     /// Replace a subgroupMatrixMultiply builtin.
     /// @param builtin the builtin call instruction
     void SubgroupMatrixMultiply(core::ir::CoreBuiltinCall* builtin) {
         b.InsertBefore(builtin, [&] {
             // SPIR-V only provides a multiply-accumulate instruction, so construct a zero-valued
             // matrix to accumulate into.
+            auto* result_ty = builtin->Result(0)->Type()->As<core::type::SubgroupMatrix>();
             auto* left = builtin->Args()[0];
             auto* right = builtin->Args()[1];
-            auto* acc = b.Construct(builtin->Result(0)->Type());
+            auto* acc = b.Construct(result_ty);
+            auto* operands = SubgroupMatrixMultiplyOperands(
+                left->Type()->As<core::type::SubgroupMatrix>(), result_ty);
             b.CallWithResult<spirv::ir::BuiltinCall>(builtin->DetachResult(),
                                                      spirv::BuiltinFn::kCooperativeMatrixMulAdd,
-                                                     left, right, acc);
+                                                     left, right, acc, operands);
         });
         builtin->Destroy();
     }
@@ -1052,9 +1074,12 @@
             auto* left = builtin->Args()[0];
             auto* right = builtin->Args()[1];
             auto* acc = builtin->Args()[2];
+            auto* operands =
+                SubgroupMatrixMultiplyOperands(left->Type()->As<core::type::SubgroupMatrix>(),
+                                               acc->Type()->As<core::type::SubgroupMatrix>());
             b.CallWithResult<spirv::ir::BuiltinCall>(builtin->DetachResult(),
                                                      spirv::BuiltinFn::kCooperativeMatrixMulAdd,
-                                                     left, right, acc);
+                                                     left, right, acc, operands);
         });
         builtin->Destroy();
     }
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 19ea802..6da8e0c 100644
--- a/src/tint/lang/spirv/writer/raise/builtin_polyfill_test.cc
+++ b/src/tint/lang/spirv/writer/raise/builtin_polyfill_test.cc
@@ -3378,7 +3378,7 @@
 %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> = construct
-    %5:subgroup_matrix_result<f32, 8, 8> = spirv.cooperative_matrix_mul_add %left, %right, %4
+    %5:subgroup_matrix_result<f32, 8, 8> = spirv.cooperative_matrix_mul_add %left, %right, %4, 0u
     ret %5
   }
 }
@@ -3389,9 +3389,9 @@
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(SpirvWriter_BuiltinPolyfillTest, SubgroupMatrixMultiply_U32) {
-    auto* left = b.FunctionParam("left", ty.subgroup_matrix_left(ty.u32(), 8, 4));
-    auto* right = b.FunctionParam("right", ty.subgroup_matrix_right(ty.u32(), 2, 8));
+TEST_F(SpirvWriter_BuiltinPolyfillTest, SubgroupMatrixMultiply_I32_U32) {
+    auto* left = b.FunctionParam("left", ty.subgroup_matrix_left(ty.i32(), 8, 4));
+    auto* right = b.FunctionParam("right", ty.subgroup_matrix_right(ty.i32(), 2, 8));
     auto* result = ty.subgroup_matrix_result(ty.u32(), 2, 4);
     auto* func = b.Function("foo", result);
     func->SetParams({left, right});
@@ -3402,7 +3402,7 @@
     });
 
     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> {
+%foo = func(%left:subgroup_matrix_left<i32, 8, 4>, %right:subgroup_matrix_right<i32, 2, 8>):subgroup_matrix_result<u32, 2, 4> {
   $B1: {
     %4:subgroup_matrix_result<u32, 2, 4> = subgroupMatrixMultiply<u32> %left, %right
     ret %4
@@ -3412,10 +3412,84 @@
     EXPECT_EQ(src, str());
 
     auto* expect = R"(
-%foo = func(%left:subgroup_matrix_left<u32, 8, 4>, %right:subgroup_matrix_right<u32, 2, 8>):subgroup_matrix_result<u32, 2, 4> {
+%foo = func(%left:subgroup_matrix_left<i32, 8, 4>, %right:subgroup_matrix_right<i32, 2, 8>):subgroup_matrix_result<u32, 2, 4> {
   $B1: {
     %4:subgroup_matrix_result<u32, 2, 4> = construct
-    %5:subgroup_matrix_result<u32, 2, 4> = spirv.cooperative_matrix_mul_add %left, %right, %4
+    %5:subgroup_matrix_result<u32, 2, 4> = spirv.cooperative_matrix_mul_add %left, %right, %4, 3u
+    ret %5
+  }
+}
+)";
+
+    Run(BuiltinPolyfill, true);
+
+    EXPECT_EQ(expect, str());
+}
+
+TEST_F(SpirvWriter_BuiltinPolyfillTest, SubgroupMatrixMultiply_U32_I32) {
+    auto* left = b.FunctionParam("left", ty.subgroup_matrix_left(ty.u32(), 8, 4));
+    auto* right = b.FunctionParam("right", ty.subgroup_matrix_right(ty.u32(), 2, 8));
+    auto* result = ty.subgroup_matrix_result(ty.i32(), 2, 4);
+    auto* func = b.Function("foo", result);
+    func->SetParams({left, right});
+    b.Append(func->Block(), [&] {
+        auto* call = b.CallExplicit(result, core::BuiltinFn::kSubgroupMatrixMultiply,
+                                    Vector{ty.i32()}, 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<i32, 2, 4> {
+  $B1: {
+    %4:subgroup_matrix_result<i32, 2, 4> = subgroupMatrixMultiply<i32> %left, %right
+    ret %4
+  }
+}
+)";
+    EXPECT_EQ(src, str());
+
+    auto* expect = R"(
+%foo = func(%left:subgroup_matrix_left<u32, 8, 4>, %right:subgroup_matrix_right<u32, 2, 8>):subgroup_matrix_result<i32, 2, 4> {
+  $B1: {
+    %4:subgroup_matrix_result<i32, 2, 4> = construct
+    %5:subgroup_matrix_result<i32, 2, 4> = spirv.cooperative_matrix_mul_add %left, %right, %4, 12u
+    ret %5
+  }
+}
+)";
+
+    Run(BuiltinPolyfill, true);
+
+    EXPECT_EQ(expect, str());
+}
+
+TEST_F(SpirvWriter_BuiltinPolyfillTest, SubgroupMatrixMultiply_I32_I32) {
+    auto* left = b.FunctionParam("left", ty.subgroup_matrix_left(ty.i32(), 8, 4));
+    auto* right = b.FunctionParam("right", ty.subgroup_matrix_right(ty.i32(), 2, 8));
+    auto* result = ty.subgroup_matrix_result(ty.i32(), 2, 4);
+    auto* func = b.Function("foo", result);
+    func->SetParams({left, right});
+    b.Append(func->Block(), [&] {
+        auto* call = b.CallExplicit(result, core::BuiltinFn::kSubgroupMatrixMultiply,
+                                    Vector{ty.i32()}, left, right);
+        b.Return(func, call);
+    });
+
+    auto* src = R"(
+%foo = func(%left:subgroup_matrix_left<i32, 8, 4>, %right:subgroup_matrix_right<i32, 2, 8>):subgroup_matrix_result<i32, 2, 4> {
+  $B1: {
+    %4:subgroup_matrix_result<i32, 2, 4> = subgroupMatrixMultiply<i32> %left, %right
+    ret %4
+  }
+}
+)";
+    EXPECT_EQ(src, str());
+
+    auto* expect = R"(
+%foo = func(%left:subgroup_matrix_left<i32, 8, 4>, %right:subgroup_matrix_right<i32, 2, 8>):subgroup_matrix_result<i32, 2, 4> {
+  $B1: {
+    %4:subgroup_matrix_result<i32, 2, 4> = construct
+    %5:subgroup_matrix_result<i32, 2, 4> = spirv.cooperative_matrix_mul_add %left, %right, %4, 15u
     ret %5
   }
 }
@@ -3452,7 +3526,7 @@
     auto* expect = R"(
 %foo = func(%left:subgroup_matrix_left<f32, 4, 8>, %right:subgroup_matrix_right<f32, 8, 4>, %acc:subgroup_matrix_result<f32, 8, 8>):subgroup_matrix_result<f32, 8, 8> {
   $B1: {
-    %5:subgroup_matrix_result<f32, 8, 8> = spirv.cooperative_matrix_mul_add %left, %right, %acc
+    %5:subgroup_matrix_result<f32, 8, 8> = spirv.cooperative_matrix_mul_add %left, %right, %acc, 0u
     ret %5
   }
 }
@@ -3463,9 +3537,9 @@
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(SpirvWriter_BuiltinPolyfillTest, SubgroupMatrixMultiplyAccumulate_U32) {
-    auto* left = b.FunctionParam("left", ty.subgroup_matrix_left(ty.u32(), 8, 4));
-    auto* right = b.FunctionParam("right", ty.subgroup_matrix_right(ty.u32(), 2, 8));
+TEST_F(SpirvWriter_BuiltinPolyfillTest, SubgroupMatrixMultiplyAccumulate_I32_U32) {
+    auto* left = b.FunctionParam("left", ty.subgroup_matrix_left(ty.i32(), 8, 4));
+    auto* right = b.FunctionParam("right", ty.subgroup_matrix_right(ty.i32(), 2, 8));
     auto* acc = b.FunctionParam("acc", ty.subgroup_matrix_result(ty.u32(), 2, 4));
     auto* result = ty.subgroup_matrix_result(ty.u32(), 2, 4);
     auto* func = b.Function("foo", result);
@@ -3477,7 +3551,7 @@
     });
 
     auto* src = R"(
-%foo = func(%left:subgroup_matrix_left<u32, 8, 4>, %right:subgroup_matrix_right<u32, 2, 8>, %acc:subgroup_matrix_result<u32, 2, 4>):subgroup_matrix_result<u32, 2, 4> {
+%foo = func(%left:subgroup_matrix_left<i32, 8, 4>, %right:subgroup_matrix_right<i32, 2, 8>, %acc:subgroup_matrix_result<u32, 2, 4>):subgroup_matrix_result<u32, 2, 4> {
   $B1: {
     %5:subgroup_matrix_result<u32, 2, 4> = subgroupMatrixMultiplyAccumulate %left, %right, %acc
     ret %5
@@ -3487,9 +3561,83 @@
     EXPECT_EQ(src, str());
 
     auto* expect = R"(
-%foo = func(%left:subgroup_matrix_left<u32, 8, 4>, %right:subgroup_matrix_right<u32, 2, 8>, %acc:subgroup_matrix_result<u32, 2, 4>):subgroup_matrix_result<u32, 2, 4> {
+%foo = func(%left:subgroup_matrix_left<i32, 8, 4>, %right:subgroup_matrix_right<i32, 2, 8>, %acc:subgroup_matrix_result<u32, 2, 4>):subgroup_matrix_result<u32, 2, 4> {
   $B1: {
-    %5:subgroup_matrix_result<u32, 2, 4> = spirv.cooperative_matrix_mul_add %left, %right, %acc
+    %5:subgroup_matrix_result<u32, 2, 4> = spirv.cooperative_matrix_mul_add %left, %right, %acc, 3u
+    ret %5
+  }
+}
+)";
+
+    Run(BuiltinPolyfill, true);
+
+    EXPECT_EQ(expect, str());
+}
+
+TEST_F(SpirvWriter_BuiltinPolyfillTest, SubgroupMatrixMultiplyAccumulate_U32_I32) {
+    auto* left = b.FunctionParam("left", ty.subgroup_matrix_left(ty.u32(), 8, 4));
+    auto* right = b.FunctionParam("right", ty.subgroup_matrix_right(ty.u32(), 2, 8));
+    auto* acc = b.FunctionParam("acc", ty.subgroup_matrix_result(ty.i32(), 2, 4));
+    auto* result = ty.subgroup_matrix_result(ty.i32(), 2, 4);
+    auto* func = b.Function("foo", result);
+    func->SetParams({left, right, acc});
+    b.Append(func->Block(), [&] {
+        auto* call =
+            b.Call(result, core::BuiltinFn::kSubgroupMatrixMultiplyAccumulate, left, right, acc);
+        b.Return(func, call);
+    });
+
+    auto* src = R"(
+%foo = func(%left:subgroup_matrix_left<u32, 8, 4>, %right:subgroup_matrix_right<u32, 2, 8>, %acc:subgroup_matrix_result<i32, 2, 4>):subgroup_matrix_result<i32, 2, 4> {
+  $B1: {
+    %5:subgroup_matrix_result<i32, 2, 4> = subgroupMatrixMultiplyAccumulate %left, %right, %acc
+    ret %5
+  }
+}
+)";
+    EXPECT_EQ(src, str());
+
+    auto* expect = R"(
+%foo = func(%left:subgroup_matrix_left<u32, 8, 4>, %right:subgroup_matrix_right<u32, 2, 8>, %acc:subgroup_matrix_result<i32, 2, 4>):subgroup_matrix_result<i32, 2, 4> {
+  $B1: {
+    %5:subgroup_matrix_result<i32, 2, 4> = spirv.cooperative_matrix_mul_add %left, %right, %acc, 12u
+    ret %5
+  }
+}
+)";
+
+    Run(BuiltinPolyfill, true);
+
+    EXPECT_EQ(expect, str());
+}
+
+TEST_F(SpirvWriter_BuiltinPolyfillTest, SubgroupMatrixMultiplyAccumulate_I32_I32) {
+    auto* left = b.FunctionParam("left", ty.subgroup_matrix_left(ty.i32(), 8, 4));
+    auto* right = b.FunctionParam("right", ty.subgroup_matrix_right(ty.i32(), 2, 8));
+    auto* acc = b.FunctionParam("acc", ty.subgroup_matrix_result(ty.i32(), 2, 4));
+    auto* result = ty.subgroup_matrix_result(ty.i32(), 2, 4);
+    auto* func = b.Function("foo", result);
+    func->SetParams({left, right, acc});
+    b.Append(func->Block(), [&] {
+        auto* call =
+            b.Call(result, core::BuiltinFn::kSubgroupMatrixMultiplyAccumulate, left, right, acc);
+        b.Return(func, call);
+    });
+
+    auto* src = R"(
+%foo = func(%left:subgroup_matrix_left<i32, 8, 4>, %right:subgroup_matrix_right<i32, 2, 8>, %acc:subgroup_matrix_result<i32, 2, 4>):subgroup_matrix_result<i32, 2, 4> {
+  $B1: {
+    %5:subgroup_matrix_result<i32, 2, 4> = subgroupMatrixMultiplyAccumulate %left, %right, %acc
+    ret %5
+  }
+}
+)";
+    EXPECT_EQ(src, str());
+
+    auto* expect = R"(
+%foo = func(%left:subgroup_matrix_left<i32, 8, 4>, %right:subgroup_matrix_right<i32, 2, 8>, %acc:subgroup_matrix_result<i32, 2, 4>):subgroup_matrix_result<i32, 2, 4> {
+  $B1: {
+    %5:subgroup_matrix_result<i32, 2, 4> = spirv.cooperative_matrix_mul_add %left, %right, %acc, 15u
     ret %5
   }
 }
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2969da.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2969da.wgsl.expected.spvasm
index 3bac40a..f96e634 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2969da.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2969da.wgsl.expected.spvasm
@@ -50,7 +50,7 @@
 %subgroupMatrixMultiply_2969da = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21
+         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21 MatrixASignedComponentsKHR|MatrixBSignedComponentsKHR|MatrixCSignedComponentsKHR|MatrixResultSignedComponentsKHR
                OpStore %res %22
          %25 = OpLoad %9 %res None
                OpReturnValue %25
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2c905b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2c905b.wgsl.expected.spvasm
index 726b6fc..cd5c9f1 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2c905b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/2c905b.wgsl.expected.spvasm
@@ -50,7 +50,7 @@
 %subgroupMatrixMultiply_2c905b = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21
+         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21 NoneKHR
                OpStore %res %22
          %25 = OpLoad %9 %res None
                OpReturnValue %25
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/3e9b04.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/3e9b04.wgsl.expected.spvasm
index accce49..2332d99 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/3e9b04.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/3e9b04.wgsl.expected.spvasm
@@ -50,7 +50,7 @@
 %subgroupMatrixMultiply_3e9b04 = OpFunction %8 None %12
          %13 = OpLabel
         %res = OpVariable %_ptr_Function_8 Function
-         %22 = OpCooperativeMatrixMulAddKHR %8 %14 %18 %21
+         %22 = OpCooperativeMatrixMulAddKHR %8 %14 %18 %21 MatrixASignedComponentsKHR|MatrixBSignedComponentsKHR
                OpStore %res %22
          %25 = OpLoad %8 %res None
                OpReturnValue %25
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/42abed.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/42abed.wgsl.expected.spvasm
index dfe9544..3d3a649 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/42abed.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/42abed.wgsl.expected.spvasm
@@ -53,7 +53,7 @@
 %subgroupMatrixMultiply_42abed = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21
+         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21 NoneKHR
                OpStore %res %22
          %25 = OpLoad %9 %res None
                OpReturnValue %25
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/5677fc.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/5677fc.wgsl.expected.spvasm
index 3cabffc..a005bf1 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/5677fc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/5677fc.wgsl.expected.spvasm
@@ -54,7 +54,7 @@
 %subgroupMatrixMultiply_5677fc = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22
+         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22 NoneKHR
                OpStore %res %23
          %26 = OpLoad %9 %res None
                OpReturnValue %26
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/704b4d.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/704b4d.wgsl.expected.spvasm
index 89e1190..1de7f4e 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/704b4d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/704b4d.wgsl.expected.spvasm
@@ -54,7 +54,7 @@
 %subgroupMatrixMultiply_704b4d = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22
+         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22 MatrixCSignedComponentsKHR|MatrixResultSignedComponentsKHR
                OpStore %res %23
          %26 = OpLoad %9 %res None
                OpReturnValue %26
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8648ad.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8648ad.wgsl.expected.spvasm
index 34db8c6..fb94656 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8648ad.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8648ad.wgsl.expected.spvasm
@@ -51,7 +51,7 @@
 %subgroupMatrixMultiply_8648ad = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22
+         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22 MatrixASignedComponentsKHR|MatrixBSignedComponentsKHR
                OpStore %res %23
          %26 = OpLoad %9 %res None
                OpReturnValue %26
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8744bd.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8744bd.wgsl.expected.spvasm
index e12f925..9055618 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8744bd.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8744bd.wgsl.expected.spvasm
@@ -54,7 +54,7 @@
 %subgroupMatrixMultiply_8744bd = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22
+         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22 NoneKHR
                OpStore %res %23
          %26 = OpLoad %9 %res None
                OpReturnValue %26
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8c3aac.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8c3aac.wgsl.expected.spvasm
index 52370c9..118b0d6 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8c3aac.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/8c3aac.wgsl.expected.spvasm
@@ -50,7 +50,7 @@
 %subgroupMatrixMultiply_8c3aac = OpFunction %8 None %12
          %13 = OpLabel
         %res = OpVariable %_ptr_Function_8 Function
-         %22 = OpCooperativeMatrixMulAddKHR %8 %14 %18 %21
+         %22 = OpCooperativeMatrixMulAddKHR %8 %14 %18 %21 NoneKHR
                OpStore %res %22
          %25 = OpLoad %8 %res None
                OpReturnValue %25
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/957137.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/957137.wgsl.expected.spvasm
index 33e1dca..d206358 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/957137.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/957137.wgsl.expected.spvasm
@@ -53,7 +53,7 @@
 %subgroupMatrixMultiply_957137 = OpFunction %8 None %12
          %13 = OpLabel
         %res = OpVariable %_ptr_Function_8 Function
-         %22 = OpCooperativeMatrixMulAddKHR %8 %14 %18 %21
+         %22 = OpCooperativeMatrixMulAddKHR %8 %14 %18 %21 NoneKHR
                OpStore %res %22
          %25 = OpLoad %8 %res None
                OpReturnValue %25
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/bf2e54.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/bf2e54.wgsl.expected.spvasm
index 9e42e3e..b972268 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/bf2e54.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/bf2e54.wgsl.expected.spvasm
@@ -54,7 +54,7 @@
 %subgroupMatrixMultiply_bf2e54 = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22
+         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22 MatrixASignedComponentsKHR|MatrixBSignedComponentsKHR
                OpStore %res %23
          %26 = OpLoad %9 %res None
                OpReturnValue %26
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c26fb9.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c26fb9.wgsl.expected.spvasm
index 5fa43ed..6231f34 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c26fb9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/c26fb9.wgsl.expected.spvasm
@@ -50,7 +50,7 @@
 %subgroupMatrixMultiply_c26fb9 = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21
+         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21 NoneKHR
                OpStore %res %22
          %25 = OpLoad %9 %res None
                OpReturnValue %25
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/da556f.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/da556f.wgsl.expected.spvasm
index 8ce7b4d..d237a89 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/da556f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/da556f.wgsl.expected.spvasm
@@ -49,7 +49,7 @@
 %subgroupMatrixMultiply_da556f = OpFunction %8 None %12
          %13 = OpLabel
         %res = OpVariable %_ptr_Function_8 Function
-         %21 = OpCooperativeMatrixMulAddKHR %8 %14 %17 %20
+         %21 = OpCooperativeMatrixMulAddKHR %8 %14 %17 %20 NoneKHR
                OpStore %res %21
          %24 = OpLoad %8 %res None
                OpReturnValue %24
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/db4ee8.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/db4ee8.wgsl.expected.spvasm
index db9a415..59eab0e 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/db4ee8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/db4ee8.wgsl.expected.spvasm
@@ -53,7 +53,7 @@
 %subgroupMatrixMultiply_db4ee8 = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21
+         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21 NoneKHR
                OpStore %res %22
          %25 = OpLoad %9 %res None
                OpReturnValue %25
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/f51206.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/f51206.wgsl.expected.spvasm
index f21c6a0..0eaf194 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/f51206.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/f51206.wgsl.expected.spvasm
@@ -50,7 +50,7 @@
 %subgroupMatrixMultiply_f51206 = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21
+         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21 MatrixCSignedComponentsKHR|MatrixResultSignedComponentsKHR
                OpStore %res %22
          %25 = OpLoad %9 %res None
                OpReturnValue %25
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fa5318.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fa5318.wgsl.expected.spvasm
index dac5dea..3ad0a6b 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fa5318.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiply/fa5318.wgsl.expected.spvasm
@@ -51,7 +51,7 @@
 %subgroupMatrixMultiply_fa5318 = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22
+         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22 MatrixCSignedComponentsKHR|MatrixResultSignedComponentsKHR
                OpStore %res %23
          %26 = OpLoad %9 %res None
                OpReturnValue %26
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.spvasm
index b9c3183..0fd4322 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.spvasm
@@ -54,7 +54,7 @@
 %subgroupMatrixMultiplyAccumulate_071472 = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22
+         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22 NoneKHR
                OpStore %res %23
          %26 = OpLoad %9 %res None
                OpReturnValue %26
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.spvasm
index abbfe4e..36872a7 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.spvasm
@@ -53,7 +53,7 @@
 %subgroupMatrixMultiplyAccumulate_075302 = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21
+         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21 NoneKHR
                OpStore %res %22
          %25 = OpLoad %9 %res None
                OpReturnValue %25
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.spvasm
index 110cd14..c04b24b 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.spvasm
@@ -53,7 +53,7 @@
 %subgroupMatrixMultiplyAccumulate_12354d = OpFunction %8 None %12
          %13 = OpLabel
         %res = OpVariable %_ptr_Function_8 Function
-         %22 = OpCooperativeMatrixMulAddKHR %8 %14 %18 %21
+         %22 = OpCooperativeMatrixMulAddKHR %8 %14 %18 %21 NoneKHR
                OpStore %res %22
          %25 = OpLoad %8 %res None
                OpReturnValue %25
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.spvasm
index f2e8886..54f9e5f 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.spvasm
@@ -51,7 +51,7 @@
 %subgroupMatrixMultiplyAccumulate_163ab5 = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22
+         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22 MatrixASignedComponentsKHR|MatrixBSignedComponentsKHR
                OpStore %res %23
          %26 = OpLoad %9 %res None
                OpReturnValue %26
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.spvasm
index 3acef939..494b65b 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.spvasm
@@ -54,7 +54,7 @@
 %subgroupMatrixMultiplyAccumulate_3ea7db = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22
+         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22 MatrixCSignedComponentsKHR|MatrixResultSignedComponentsKHR
                OpStore %res %23
          %26 = OpLoad %9 %res None
                OpReturnValue %26
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.spvasm
index 1532dac..6c700cf 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.spvasm
@@ -50,7 +50,7 @@
 %subgroupMatrixMultiplyAccumulate_676ca8 = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21
+         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21 MatrixCSignedComponentsKHR|MatrixResultSignedComponentsKHR
                OpStore %res %22
          %25 = OpLoad %9 %res None
                OpReturnValue %25
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/709578.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/709578.wgsl.expected.spvasm
index 63b57d2..6fd3745 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/709578.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/709578.wgsl.expected.spvasm
@@ -50,7 +50,7 @@
 %subgroupMatrixMultiplyAccumulate_709578 = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21
+         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21 MatrixASignedComponentsKHR|MatrixBSignedComponentsKHR|MatrixCSignedComponentsKHR|MatrixResultSignedComponentsKHR
                OpStore %res %22
          %25 = OpLoad %9 %res None
                OpReturnValue %25
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.spvasm
index 7fc8265..9e3355e 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.spvasm
@@ -54,7 +54,7 @@
 %subgroupMatrixMultiplyAccumulate_7ceae2 = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22
+         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22 MatrixASignedComponentsKHR|MatrixBSignedComponentsKHR
                OpStore %res %23
          %26 = OpLoad %9 %res None
                OpReturnValue %26
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.spvasm
index 3890cc6..4cee945 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.spvasm
@@ -50,7 +50,7 @@
 %subgroupMatrixMultiplyAccumulate_877989 = OpFunction %8 None %12
          %13 = OpLabel
         %res = OpVariable %_ptr_Function_8 Function
-         %22 = OpCooperativeMatrixMulAddKHR %8 %14 %18 %21
+         %22 = OpCooperativeMatrixMulAddKHR %8 %14 %18 %21 MatrixASignedComponentsKHR|MatrixBSignedComponentsKHR
                OpStore %res %22
          %25 = OpLoad %8 %res None
                OpReturnValue %25
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/8b907c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/8b907c.wgsl.expected.spvasm
index 7008a5c..2fef75e 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/8b907c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/8b907c.wgsl.expected.spvasm
@@ -53,7 +53,7 @@
 %subgroupMatrixMultiplyAccumulate_8b907c = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21
+         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21 NoneKHR
                OpStore %res %22
          %25 = OpLoad %9 %res None
                OpReturnValue %25
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/9ad4f5.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/9ad4f5.wgsl.expected.spvasm
index d571dbe..aaeb5c8 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/9ad4f5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/9ad4f5.wgsl.expected.spvasm
@@ -49,7 +49,7 @@
 %subgroupMatrixMultiplyAccumulate_9ad4f5 = OpFunction %8 None %12
          %13 = OpLabel
         %res = OpVariable %_ptr_Function_8 Function
-         %21 = OpCooperativeMatrixMulAddKHR %8 %14 %17 %20
+         %21 = OpCooperativeMatrixMulAddKHR %8 %14 %17 %20 NoneKHR
                OpStore %res %21
          %24 = OpLoad %8 %res None
                OpReturnValue %24
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.spvasm
index d072a96..b26df9d 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.spvasm
@@ -54,7 +54,7 @@
 %subgroupMatrixMultiplyAccumulate_c4062a = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22
+         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22 NoneKHR
                OpStore %res %23
          %26 = OpLoad %9 %res None
                OpReturnValue %26
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.spvasm
index ae2da75..fd37c0a 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.spvasm
@@ -50,7 +50,7 @@
 %subgroupMatrixMultiplyAccumulate_db91bf = OpFunction %8 None %12
          %13 = OpLabel
         %res = OpVariable %_ptr_Function_8 Function
-         %22 = OpCooperativeMatrixMulAddKHR %8 %14 %18 %21
+         %22 = OpCooperativeMatrixMulAddKHR %8 %14 %18 %21 NoneKHR
                OpStore %res %22
          %25 = OpLoad %8 %res None
                OpReturnValue %25
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.spvasm
index 15efd1a..ba972f5 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.spvasm
@@ -51,7 +51,7 @@
 %subgroupMatrixMultiplyAccumulate_e27d24 = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22
+         %23 = OpCooperativeMatrixMulAddKHR %9 %15 %19 %22 MatrixCSignedComponentsKHR|MatrixResultSignedComponentsKHR
                OpStore %res %23
          %26 = OpLoad %9 %res None
                OpReturnValue %26
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.spvasm
index 979b20e..504c9cb 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.spvasm
@@ -50,7 +50,7 @@
 %subgroupMatrixMultiplyAccumulate_e49afd = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21
+         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21 NoneKHR
                OpStore %res %22
          %25 = OpLoad %9 %res None
                OpReturnValue %25
diff --git a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e7fb3c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e7fb3c.wgsl.expected.spvasm
index c45973f..9201f60 100644
--- a/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e7fb3c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupMatrixMultiplyAccumulate/e7fb3c.wgsl.expected.spvasm
@@ -50,7 +50,7 @@
 %subgroupMatrixMultiplyAccumulate_e7fb3c = OpFunction %9 None %13
          %14 = OpLabel
         %res = OpVariable %_ptr_Function_9 Function
-         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21
+         %22 = OpCooperativeMatrixMulAddKHR %9 %15 %18 %21 NoneKHR
                OpStore %res %22
          %25 = OpLoad %9 %res None
                OpReturnValue %25
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/2969da.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiply/2969da.wgsl.expected.spvasm
index 8fc4581..6388453 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/2969da.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/2969da.wgsl.expected.spvasm
@@ -60,7 +60,7 @@
                OpStore %arg_1 %20
          %25 = OpLoad %16 %arg_0 None
          %26 = OpLoad %21 %arg_1 None
-         %28 = OpCooperativeMatrixMulAddKHR %9 %25 %26 %27
+         %28 = OpCooperativeMatrixMulAddKHR %9 %25 %26 %27 MatrixASignedComponentsKHR|MatrixBSignedComponentsKHR|MatrixCSignedComponentsKHR|MatrixResultSignedComponentsKHR
                OpStore %res %28
          %31 = OpLoad %9 %res None
                OpReturnValue %31
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/2c905b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiply/2c905b.wgsl.expected.spvasm
index 0c50051..1bfc36d 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/2c905b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/2c905b.wgsl.expected.spvasm
@@ -60,7 +60,7 @@
                OpStore %arg_1 %20
          %25 = OpLoad %16 %arg_0 None
          %26 = OpLoad %21 %arg_1 None
-         %28 = OpCooperativeMatrixMulAddKHR %9 %25 %26 %27
+         %28 = OpCooperativeMatrixMulAddKHR %9 %25 %26 %27 NoneKHR
                OpStore %res %28
          %31 = OpLoad %9 %res None
                OpReturnValue %31
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/3e9b04.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiply/3e9b04.wgsl.expected.spvasm
index 6722c01..0213cee 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/3e9b04.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/3e9b04.wgsl.expected.spvasm
@@ -60,7 +60,7 @@
                OpStore %arg_1 %20
          %25 = OpLoad %15 %arg_0 None
          %26 = OpLoad %21 %arg_1 None
-         %28 = OpCooperativeMatrixMulAddKHR %8 %25 %26 %27
+         %28 = OpCooperativeMatrixMulAddKHR %8 %25 %26 %27 MatrixASignedComponentsKHR|MatrixBSignedComponentsKHR
                OpStore %res %28
          %31 = OpLoad %8 %res None
                OpReturnValue %31
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/42abed.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiply/42abed.wgsl.expected.spvasm
index ed0bcaa..5e30f43 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/42abed.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/42abed.wgsl.expected.spvasm
@@ -63,7 +63,7 @@
                OpStore %arg_1 %20
          %25 = OpLoad %16 %arg_0 None
          %26 = OpLoad %21 %arg_1 None
-         %28 = OpCooperativeMatrixMulAddKHR %9 %25 %26 %27
+         %28 = OpCooperativeMatrixMulAddKHR %9 %25 %26 %27 NoneKHR
                OpStore %res %28
          %31 = OpLoad %9 %res None
                OpReturnValue %31
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/5677fc.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiply/5677fc.wgsl.expected.spvasm
index d76b312..d91edab 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/5677fc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/5677fc.wgsl.expected.spvasm
@@ -64,7 +64,7 @@
                OpStore %arg_1 %21
          %26 = OpLoad %16 %arg_0 None
          %27 = OpLoad %22 %arg_1 None
-         %29 = OpCooperativeMatrixMulAddKHR %9 %26 %27 %28
+         %29 = OpCooperativeMatrixMulAddKHR %9 %26 %27 %28 NoneKHR
                OpStore %res %29
          %32 = OpLoad %9 %res None
                OpReturnValue %32
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/704b4d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiply/704b4d.wgsl.expected.spvasm
index 3f9de81..7e501b2 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/704b4d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/704b4d.wgsl.expected.spvasm
@@ -64,7 +64,7 @@
                OpStore %arg_1 %21
          %26 = OpLoad %16 %arg_0 None
          %27 = OpLoad %22 %arg_1 None
-         %29 = OpCooperativeMatrixMulAddKHR %9 %26 %27 %28
+         %29 = OpCooperativeMatrixMulAddKHR %9 %26 %27 %28 MatrixCSignedComponentsKHR|MatrixResultSignedComponentsKHR
                OpStore %res %29
          %32 = OpLoad %9 %res None
                OpReturnValue %32
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/8648ad.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8648ad.wgsl.expected.spvasm
index 3634fcc..e3406f5 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/8648ad.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8648ad.wgsl.expected.spvasm
@@ -61,7 +61,7 @@
                OpStore %arg_1 %21
          %26 = OpLoad %16 %arg_0 None
          %27 = OpLoad %22 %arg_1 None
-         %29 = OpCooperativeMatrixMulAddKHR %9 %26 %27 %28
+         %29 = OpCooperativeMatrixMulAddKHR %9 %26 %27 %28 MatrixASignedComponentsKHR|MatrixBSignedComponentsKHR
                OpStore %res %29
          %32 = OpLoad %9 %res None
                OpReturnValue %32
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/8744bd.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8744bd.wgsl.expected.spvasm
index db8a09f..31e18e8 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/8744bd.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8744bd.wgsl.expected.spvasm
@@ -64,7 +64,7 @@
                OpStore %arg_1 %21
          %26 = OpLoad %16 %arg_0 None
          %27 = OpLoad %22 %arg_1 None
-         %29 = OpCooperativeMatrixMulAddKHR %9 %26 %27 %28
+         %29 = OpCooperativeMatrixMulAddKHR %9 %26 %27 %28 NoneKHR
                OpStore %res %29
          %32 = OpLoad %9 %res None
                OpReturnValue %32
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/8c3aac.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8c3aac.wgsl.expected.spvasm
index 72a4368..0f1de62 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/8c3aac.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/8c3aac.wgsl.expected.spvasm
@@ -60,7 +60,7 @@
                OpStore %arg_1 %20
          %25 = OpLoad %15 %arg_0 None
          %26 = OpLoad %21 %arg_1 None
-         %28 = OpCooperativeMatrixMulAddKHR %8 %25 %26 %27
+         %28 = OpCooperativeMatrixMulAddKHR %8 %25 %26 %27 NoneKHR
                OpStore %res %28
          %31 = OpLoad %8 %res None
                OpReturnValue %31
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/957137.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiply/957137.wgsl.expected.spvasm
index 5bf38f0..4d6d70b 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/957137.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/957137.wgsl.expected.spvasm
@@ -63,7 +63,7 @@
                OpStore %arg_1 %20
          %25 = OpLoad %15 %arg_0 None
          %26 = OpLoad %21 %arg_1 None
-         %28 = OpCooperativeMatrixMulAddKHR %8 %25 %26 %27
+         %28 = OpCooperativeMatrixMulAddKHR %8 %25 %26 %27 NoneKHR
                OpStore %res %28
          %31 = OpLoad %8 %res None
                OpReturnValue %31
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/bf2e54.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiply/bf2e54.wgsl.expected.spvasm
index 2c9d0a5..522bd69 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/bf2e54.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/bf2e54.wgsl.expected.spvasm
@@ -64,7 +64,7 @@
                OpStore %arg_1 %21
          %26 = OpLoad %16 %arg_0 None
          %27 = OpLoad %22 %arg_1 None
-         %29 = OpCooperativeMatrixMulAddKHR %9 %26 %27 %28
+         %29 = OpCooperativeMatrixMulAddKHR %9 %26 %27 %28 MatrixASignedComponentsKHR|MatrixBSignedComponentsKHR
                OpStore %res %29
          %32 = OpLoad %9 %res None
                OpReturnValue %32
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c26fb9.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiply/c26fb9.wgsl.expected.spvasm
index 2ca1d74..bdfa12f 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/c26fb9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/c26fb9.wgsl.expected.spvasm
@@ -60,7 +60,7 @@
                OpStore %arg_1 %20
          %25 = OpLoad %16 %arg_0 None
          %26 = OpLoad %21 %arg_1 None
-         %28 = OpCooperativeMatrixMulAddKHR %9 %25 %26 %27
+         %28 = OpCooperativeMatrixMulAddKHR %9 %25 %26 %27 NoneKHR
                OpStore %res %28
          %31 = OpLoad %9 %res None
                OpReturnValue %31
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/da556f.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiply/da556f.wgsl.expected.spvasm
index 10abcfb..8971946 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/da556f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/da556f.wgsl.expected.spvasm
@@ -59,7 +59,7 @@
                OpStore %arg_1 %19
          %24 = OpLoad %15 %arg_0 None
          %25 = OpLoad %20 %arg_1 None
-         %27 = OpCooperativeMatrixMulAddKHR %8 %24 %25 %26
+         %27 = OpCooperativeMatrixMulAddKHR %8 %24 %25 %26 NoneKHR
                OpStore %res %27
          %30 = OpLoad %8 %res None
                OpReturnValue %30
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/db4ee8.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiply/db4ee8.wgsl.expected.spvasm
index e327a54..82009ae2 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/db4ee8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/db4ee8.wgsl.expected.spvasm
@@ -63,7 +63,7 @@
                OpStore %arg_1 %20
          %25 = OpLoad %16 %arg_0 None
          %26 = OpLoad %21 %arg_1 None
-         %28 = OpCooperativeMatrixMulAddKHR %9 %25 %26 %27
+         %28 = OpCooperativeMatrixMulAddKHR %9 %25 %26 %27 NoneKHR
                OpStore %res %28
          %31 = OpLoad %9 %res None
                OpReturnValue %31
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/f51206.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiply/f51206.wgsl.expected.spvasm
index 96ab5e8..c6876ec 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/f51206.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/f51206.wgsl.expected.spvasm
@@ -60,7 +60,7 @@
                OpStore %arg_1 %20
          %25 = OpLoad %16 %arg_0 None
          %26 = OpLoad %21 %arg_1 None
-         %28 = OpCooperativeMatrixMulAddKHR %9 %25 %26 %27
+         %28 = OpCooperativeMatrixMulAddKHR %9 %25 %26 %27 MatrixCSignedComponentsKHR|MatrixResultSignedComponentsKHR
                OpStore %res %28
          %31 = OpLoad %9 %res None
                OpReturnValue %31
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fa5318.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiply/fa5318.wgsl.expected.spvasm
index e733d2a..3e2f270 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiply/fa5318.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiply/fa5318.wgsl.expected.spvasm
@@ -61,7 +61,7 @@
                OpStore %arg_1 %21
          %26 = OpLoad %16 %arg_0 None
          %27 = OpLoad %22 %arg_1 None
-         %29 = OpCooperativeMatrixMulAddKHR %9 %26 %27 %28
+         %29 = OpCooperativeMatrixMulAddKHR %9 %26 %27 %28 MatrixCSignedComponentsKHR|MatrixResultSignedComponentsKHR
                OpStore %res %29
          %32 = OpLoad %9 %res None
                OpReturnValue %32
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.spvasm
index d479d9f..bc09bbc 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/071472.wgsl.expected.spvasm
@@ -68,7 +68,7 @@
          %29 = OpLoad %16 %arg_0 None
          %30 = OpLoad %22 %arg_1 None
          %31 = OpLoad %9 %arg_2 None
-         %32 = OpCooperativeMatrixMulAddKHR %9 %29 %30 %31
+         %32 = OpCooperativeMatrixMulAddKHR %9 %29 %30 %31 NoneKHR
                OpStore %res %32
          %34 = OpLoad %9 %res None
                OpReturnValue %34
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.spvasm
index 2af47dc..b8310d7 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/075302.wgsl.expected.spvasm
@@ -67,7 +67,7 @@
          %28 = OpLoad %16 %arg_0 None
          %29 = OpLoad %21 %arg_1 None
          %30 = OpLoad %9 %arg_2 None
-         %31 = OpCooperativeMatrixMulAddKHR %9 %28 %29 %30
+         %31 = OpCooperativeMatrixMulAddKHR %9 %28 %29 %30 NoneKHR
                OpStore %res %31
          %33 = OpLoad %9 %res None
                OpReturnValue %33
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.spvasm
index 26925a5..ef344b4 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/12354d.wgsl.expected.spvasm
@@ -67,7 +67,7 @@
          %28 = OpLoad %15 %arg_0 None
          %29 = OpLoad %21 %arg_1 None
          %30 = OpLoad %8 %arg_2 None
-         %31 = OpCooperativeMatrixMulAddKHR %8 %28 %29 %30
+         %31 = OpCooperativeMatrixMulAddKHR %8 %28 %29 %30 NoneKHR
                OpStore %res %31
          %33 = OpLoad %8 %res None
                OpReturnValue %33
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.spvasm
index 2757009..a51f8f2 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/163ab5.wgsl.expected.spvasm
@@ -65,7 +65,7 @@
          %29 = OpLoad %16 %arg_0 None
          %30 = OpLoad %22 %arg_1 None
          %31 = OpLoad %9 %arg_2 None
-         %32 = OpCooperativeMatrixMulAddKHR %9 %29 %30 %31
+         %32 = OpCooperativeMatrixMulAddKHR %9 %29 %30 %31 MatrixASignedComponentsKHR|MatrixBSignedComponentsKHR
                OpStore %res %32
          %34 = OpLoad %9 %res None
                OpReturnValue %34
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.spvasm
index 5cdce15..2d1aad9 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/3ea7db.wgsl.expected.spvasm
@@ -68,7 +68,7 @@
          %29 = OpLoad %16 %arg_0 None
          %30 = OpLoad %22 %arg_1 None
          %31 = OpLoad %9 %arg_2 None
-         %32 = OpCooperativeMatrixMulAddKHR %9 %29 %30 %31
+         %32 = OpCooperativeMatrixMulAddKHR %9 %29 %30 %31 MatrixCSignedComponentsKHR|MatrixResultSignedComponentsKHR
                OpStore %res %32
          %34 = OpLoad %9 %res None
                OpReturnValue %34
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.spvasm
index e0d1e79..7c4dd1a 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/676ca8.wgsl.expected.spvasm
@@ -64,7 +64,7 @@
          %28 = OpLoad %16 %arg_0 None
          %29 = OpLoad %21 %arg_1 None
          %30 = OpLoad %9 %arg_2 None
-         %31 = OpCooperativeMatrixMulAddKHR %9 %28 %29 %30
+         %31 = OpCooperativeMatrixMulAddKHR %9 %28 %29 %30 MatrixCSignedComponentsKHR|MatrixResultSignedComponentsKHR
                OpStore %res %31
          %33 = OpLoad %9 %res None
                OpReturnValue %33
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/709578.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/709578.wgsl.expected.spvasm
index 4dd8d93..c81c31f 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/709578.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/709578.wgsl.expected.spvasm
@@ -64,7 +64,7 @@
          %28 = OpLoad %16 %arg_0 None
          %29 = OpLoad %21 %arg_1 None
          %30 = OpLoad %9 %arg_2 None
-         %31 = OpCooperativeMatrixMulAddKHR %9 %28 %29 %30
+         %31 = OpCooperativeMatrixMulAddKHR %9 %28 %29 %30 MatrixASignedComponentsKHR|MatrixBSignedComponentsKHR|MatrixCSignedComponentsKHR|MatrixResultSignedComponentsKHR
                OpStore %res %31
          %33 = OpLoad %9 %res None
                OpReturnValue %33
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.spvasm
index 0bd83b2..6ffc33e 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/7ceae2.wgsl.expected.spvasm
@@ -68,7 +68,7 @@
          %29 = OpLoad %16 %arg_0 None
          %30 = OpLoad %22 %arg_1 None
          %31 = OpLoad %9 %arg_2 None
-         %32 = OpCooperativeMatrixMulAddKHR %9 %29 %30 %31
+         %32 = OpCooperativeMatrixMulAddKHR %9 %29 %30 %31 MatrixASignedComponentsKHR|MatrixBSignedComponentsKHR
                OpStore %res %32
          %34 = OpLoad %9 %res None
                OpReturnValue %34
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.spvasm
index 210558d..1c1efc4 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/877989.wgsl.expected.spvasm
@@ -64,7 +64,7 @@
          %28 = OpLoad %15 %arg_0 None
          %29 = OpLoad %21 %arg_1 None
          %30 = OpLoad %8 %arg_2 None
-         %31 = OpCooperativeMatrixMulAddKHR %8 %28 %29 %30
+         %31 = OpCooperativeMatrixMulAddKHR %8 %28 %29 %30 MatrixASignedComponentsKHR|MatrixBSignedComponentsKHR
                OpStore %res %31
          %33 = OpLoad %8 %res None
                OpReturnValue %33
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/8b907c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/8b907c.wgsl.expected.spvasm
index b94da43..20274f2 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/8b907c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/8b907c.wgsl.expected.spvasm
@@ -67,7 +67,7 @@
          %28 = OpLoad %16 %arg_0 None
          %29 = OpLoad %21 %arg_1 None
          %30 = OpLoad %9 %arg_2 None
-         %31 = OpCooperativeMatrixMulAddKHR %9 %28 %29 %30
+         %31 = OpCooperativeMatrixMulAddKHR %9 %28 %29 %30 NoneKHR
                OpStore %res %31
          %33 = OpLoad %9 %res None
                OpReturnValue %33
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/9ad4f5.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/9ad4f5.wgsl.expected.spvasm
index 8098469..21e9fff 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/9ad4f5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/9ad4f5.wgsl.expected.spvasm
@@ -63,7 +63,7 @@
          %27 = OpLoad %15 %arg_0 None
          %28 = OpLoad %20 %arg_1 None
          %29 = OpLoad %8 %arg_2 None
-         %30 = OpCooperativeMatrixMulAddKHR %8 %27 %28 %29
+         %30 = OpCooperativeMatrixMulAddKHR %8 %27 %28 %29 NoneKHR
                OpStore %res %30
          %32 = OpLoad %8 %res None
                OpReturnValue %32
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.spvasm
index 25a9e82..b6e9d77 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/c4062a.wgsl.expected.spvasm
@@ -68,7 +68,7 @@
          %29 = OpLoad %16 %arg_0 None
          %30 = OpLoad %22 %arg_1 None
          %31 = OpLoad %9 %arg_2 None
-         %32 = OpCooperativeMatrixMulAddKHR %9 %29 %30 %31
+         %32 = OpCooperativeMatrixMulAddKHR %9 %29 %30 %31 NoneKHR
                OpStore %res %32
          %34 = OpLoad %9 %res None
                OpReturnValue %34
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.spvasm
index f08bc83..fd504fa 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/db91bf.wgsl.expected.spvasm
@@ -64,7 +64,7 @@
          %28 = OpLoad %15 %arg_0 None
          %29 = OpLoad %21 %arg_1 None
          %30 = OpLoad %8 %arg_2 None
-         %31 = OpCooperativeMatrixMulAddKHR %8 %28 %29 %30
+         %31 = OpCooperativeMatrixMulAddKHR %8 %28 %29 %30 NoneKHR
                OpStore %res %31
          %33 = OpLoad %8 %res None
                OpReturnValue %33
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.spvasm
index 471b3a7..922cb88 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e27d24.wgsl.expected.spvasm
@@ -65,7 +65,7 @@
          %29 = OpLoad %16 %arg_0 None
          %30 = OpLoad %22 %arg_1 None
          %31 = OpLoad %9 %arg_2 None
-         %32 = OpCooperativeMatrixMulAddKHR %9 %29 %30 %31
+         %32 = OpCooperativeMatrixMulAddKHR %9 %29 %30 %31 MatrixCSignedComponentsKHR|MatrixResultSignedComponentsKHR
                OpStore %res %32
          %34 = OpLoad %9 %res None
                OpReturnValue %34
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.spvasm
index ba1cc9f..ce5560b 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e49afd.wgsl.expected.spvasm
@@ -64,7 +64,7 @@
          %28 = OpLoad %16 %arg_0 None
          %29 = OpLoad %21 %arg_1 None
          %30 = OpLoad %9 %arg_2 None
-         %31 = OpCooperativeMatrixMulAddKHR %9 %28 %29 %30
+         %31 = OpCooperativeMatrixMulAddKHR %9 %28 %29 %30 NoneKHR
                OpStore %res %31
          %33 = OpLoad %9 %res None
                OpReturnValue %33
diff --git a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e7fb3c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e7fb3c.wgsl.expected.spvasm
index 63ee4d2..29e0226 100644
--- a/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e7fb3c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupMatrixMultiplyAccumulate/e7fb3c.wgsl.expected.spvasm
@@ -64,7 +64,7 @@
          %28 = OpLoad %16 %arg_0 None
          %29 = OpLoad %21 %arg_1 None
          %30 = OpLoad %9 %arg_2 None
-         %31 = OpCooperativeMatrixMulAddKHR %9 %28 %29 %30
+         %31 = OpCooperativeMatrixMulAddKHR %9 %28 %29 %30 NoneKHR
                OpStore %res %31
          %33 = OpLoad %9 %res None
                OpReturnValue %33