[tint][spirv] Add subgroup(Exclusive){Add,Mul}
Add first set of arithmetic subgroup intrinsics and implement in the
SPIR-V IR backend using the following mapping:
+----------------------+--------------------------+-----------------+
| Built-in | SPIR-V Instruction | Group Operation |
+----------------------+--------------------------+-----------------+
| subgroupAdd | OpGroupNonUniform[IF]Add | Reduce |
| subgroupExclusiveAdd | OpGroupNonUniform[IF]Add | ExclusiveScan |
| subgroupMul | OpGroupNonUniform[IF]Mul | Reduce |
| subgroupExclusiveMul | OpGroupNonUniform[IF]Mul | ExclusiveScan |
+----------------------+--------------------------+-----------------+
Implementation in other backends will follow.
Bug: 354738715
Change-Id: I35db4731f73efa200ba3c6e0b5983943dfe77bf0
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/200918
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Commit-Queue: Natalie Chouinard <chouinard@google.com>
diff --git a/src/tint/cmd/fuzz/wgsl/dictionary.txt b/src/tint/cmd/fuzz/wgsl/dictionary.txt
index 6bf6c6f..1e9c846 100644
--- a/src/tint/cmd/fuzz/wgsl/dictionary.txt
+++ b/src/tint/cmd/fuzz/wgsl/dictionary.txt
@@ -367,8 +367,12 @@
"storage"
"storageBarrier"
"struct"
+"subgroupAdd"
"subgroupBallot"
"subgroupBroadcast"
+"subgroupExclusiveAdd"
+"subgroupExclusiveMul"
+"subgroupMul"
"subgroup_invocation_id"
"subgroup_size"
"subgroups"
diff --git a/src/tint/lang/core/builtin_fn.cc b/src/tint/lang/core/builtin_fn.cc
index 36b542f..eae42ab 100644
--- a/src/tint/lang/core/builtin_fn.cc
+++ b/src/tint/lang/core/builtin_fn.cc
@@ -405,6 +405,18 @@
if (name == "subgroupBroadcast") {
return BuiltinFn::kSubgroupBroadcast;
}
+ if (name == "subgroupAdd") {
+ return BuiltinFn::kSubgroupAdd;
+ }
+ if (name == "subgroupExclusiveAdd") {
+ return BuiltinFn::kSubgroupExclusiveAdd;
+ }
+ if (name == "subgroupMul") {
+ return BuiltinFn::kSubgroupMul;
+ }
+ if (name == "subgroupExclusiveMul") {
+ return BuiltinFn::kSubgroupExclusiveMul;
+ }
return BuiltinFn::kNone;
}
@@ -656,6 +668,14 @@
return "subgroupBallot";
case BuiltinFn::kSubgroupBroadcast:
return "subgroupBroadcast";
+ case BuiltinFn::kSubgroupAdd:
+ return "subgroupAdd";
+ case BuiltinFn::kSubgroupExclusiveAdd:
+ return "subgroupExclusiveAdd";
+ case BuiltinFn::kSubgroupMul:
+ return "subgroupMul";
+ case BuiltinFn::kSubgroupExclusiveMul:
+ return "subgroupExclusiveMul";
}
return "<unknown>";
}
diff --git a/src/tint/lang/core/builtin_fn.h b/src/tint/lang/core/builtin_fn.h
index 5c6cf01..02e6396 100644
--- a/src/tint/lang/core/builtin_fn.h
+++ b/src/tint/lang/core/builtin_fn.h
@@ -169,6 +169,10 @@
kAtomicCompareExchangeWeak,
kSubgroupBallot,
kSubgroupBroadcast,
+ kSubgroupAdd,
+ kSubgroupExclusiveAdd,
+ kSubgroupMul,
+ kSubgroupExclusiveMul,
kNone,
};
@@ -313,6 +317,10 @@
BuiltinFn::kAtomicCompareExchangeWeak,
BuiltinFn::kSubgroupBallot,
BuiltinFn::kSubgroupBroadcast,
+ BuiltinFn::kSubgroupAdd,
+ BuiltinFn::kSubgroupExclusiveAdd,
+ BuiltinFn::kSubgroupMul,
+ BuiltinFn::kSubgroupExclusiveMul,
};
/// All builtin function names
@@ -439,6 +447,10 @@
"atomicCompareExchangeWeak",
"subgroupBallot",
"subgroupBroadcast",
+ "subgroupAdd",
+ "subgroupExclusiveAdd",
+ "subgroupMul",
+ "subgroupExclusiveMul",
};
/// Determines if the given `f` is a coarse derivative.
diff --git a/src/tint/lang/core/core.def b/src/tint/lang/core/core.def
index 615b953..dcde884 100644
--- a/src/tint/lang/core/core.def
+++ b/src/tint/lang/core/core.def
@@ -702,6 +702,14 @@
@must_use @stage("compute") fn subgroupBallot(bool) -> vec4<u32>
@must_use @stage("compute") fn subgroupBroadcast[T: fiu32_f16](value: T, @const sourceLaneIndex: u32) -> T
@must_use @stage("compute") fn subgroupBroadcast[N: num, T: fiu32_f16](value: vec<N, T>, @const sourceLaneIndex: u32) -> vec<N, T>
+@must_use @stage("compute") fn subgroupAdd[T: fiu32_f16](value: T) -> T
+@must_use @stage("compute") fn subgroupAdd[N: num, T: fiu32_f16](value: vec<N, T>) -> vec<N, T>
+@must_use @stage("compute") fn subgroupExclusiveAdd[T: fiu32_f16](value: T) -> T
+@must_use @stage("compute") fn subgroupExclusiveAdd[N: num, T: fiu32_f16](value: vec<N, T>) -> vec<N, T>
+@must_use @stage("compute") fn subgroupMul[T: fiu32_f16](value: T) -> T
+@must_use @stage("compute") fn subgroupMul[N: num, T: fiu32_f16](value: vec<N, T>) -> vec<N, T>
+@must_use @stage("compute") fn subgroupExclusiveMul[T: fiu32_f16](value: T) -> T
+@must_use @stage("compute") fn subgroupExclusiveMul[N: num, T: fiu32_f16](value: vec<N, T>) -> vec<N, T>
////////////////////////////////////////////////////////////////////////////////
// Value constructors //
diff --git a/src/tint/lang/core/intrinsic/data.cc b/src/tint/lang/core/intrinsic/data.cc
index cd60be5..52eff9c 100644
--- a/src/tint/lang/core/intrinsic/data.cc
+++ b/src/tint/lang/core/intrinsic/data.cc
@@ -8865,6 +8865,28 @@
},
{
/* [407] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_explicit_templates */ 0,
+ /* num_templates */ 1,
+ /* templates */ TemplateIndex(26),
+ /* parameters */ ParameterIndex(350),
+ /* return_matcher_indices */ MatcherIndicesIndex(3),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [408] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_explicit_templates */ 0,
+ /* num_templates */ 2,
+ /* templates */ TemplateIndex(25),
+ /* parameters */ ParameterIndex(352),
+ /* return_matcher_indices */ MatcherIndicesIndex(38),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [409] */
/* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -8875,7 +8897,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(81),
},
{
- /* [408] */
+ /* [410] */
/* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -8886,7 +8908,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(81),
},
{
- /* [409] */
+ /* [411] */
/* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -8897,40 +8919,40 @@
/* const_eval_fn */ ConstEvalFunctionIndex(82),
},
{
- /* [410] */
- /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
- /* num_parameters */ 1,
- /* num_explicit_templates */ 0,
- /* num_templates */ 2,
- /* templates */ TemplateIndex(42),
- /* parameters */ ParameterIndex(221),
- /* return_matcher_indices */ MatcherIndicesIndex(44),
- /* const_eval_fn */ ConstEvalFunctionIndex(82),
- },
- {
- /* [411] */
- /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
- /* num_parameters */ 1,
- /* num_explicit_templates */ 0,
- /* num_templates */ 1,
- /* templates */ TemplateIndex(36),
- /* parameters */ ParameterIndex(1),
- /* return_matcher_indices */ MatcherIndicesIndex(3),
- /* const_eval_fn */ ConstEvalFunctionIndex(83),
- },
- {
/* [412] */
/* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
/* num_templates */ 2,
+ /* templates */ TemplateIndex(42),
+ /* parameters */ ParameterIndex(221),
+ /* return_matcher_indices */ MatcherIndicesIndex(44),
+ /* const_eval_fn */ ConstEvalFunctionIndex(82),
+ },
+ {
+ /* [413] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_explicit_templates */ 0,
+ /* num_templates */ 1,
+ /* templates */ TemplateIndex(36),
+ /* parameters */ ParameterIndex(1),
+ /* return_matcher_indices */ MatcherIndicesIndex(3),
+ /* const_eval_fn */ ConstEvalFunctionIndex(83),
+ },
+ {
+ /* [414] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_explicit_templates */ 0,
+ /* num_templates */ 2,
/* templates */ TemplateIndex(36),
/* parameters */ ParameterIndex(221),
/* return_matcher_indices */ MatcherIndicesIndex(44),
/* const_eval_fn */ ConstEvalFunctionIndex(83),
},
{
- /* [413] */
+ /* [415] */
/* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
@@ -8941,7 +8963,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(92),
},
{
- /* [414] */
+ /* [416] */
/* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
@@ -8952,28 +8974,6 @@
/* const_eval_fn */ ConstEvalFunctionIndex(92),
},
{
- /* [415] */
- /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
- /* num_parameters */ 2,
- /* num_explicit_templates */ 0,
- /* num_templates */ 1,
- /* templates */ TemplateIndex(32),
- /* parameters */ ParameterIndex(1),
- /* return_matcher_indices */ MatcherIndicesIndex(43),
- /* const_eval_fn */ ConstEvalFunctionIndex(97),
- },
- {
- /* [416] */
- /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
- /* num_parameters */ 2,
- /* num_explicit_templates */ 0,
- /* num_templates */ 2,
- /* templates */ TemplateIndex(32),
- /* parameters */ ParameterIndex(221),
- /* return_matcher_indices */ MatcherIndicesIndex(156),
- /* const_eval_fn */ ConstEvalFunctionIndex(97),
- },
- {
/* [417] */
/* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 2,
@@ -8982,7 +8982,7 @@
/* templates */ TemplateIndex(32),
/* parameters */ ParameterIndex(1),
/* return_matcher_indices */ MatcherIndicesIndex(43),
- /* const_eval_fn */ ConstEvalFunctionIndex(98),
+ /* const_eval_fn */ ConstEvalFunctionIndex(97),
},
{
/* [418] */
@@ -8993,7 +8993,7 @@
/* templates */ TemplateIndex(32),
/* parameters */ ParameterIndex(221),
/* return_matcher_indices */ MatcherIndicesIndex(156),
- /* const_eval_fn */ ConstEvalFunctionIndex(98),
+ /* const_eval_fn */ ConstEvalFunctionIndex(97),
},
{
/* [419] */
@@ -9001,10 +9001,10 @@
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(26),
+ /* templates */ TemplateIndex(32),
/* parameters */ ParameterIndex(1),
/* return_matcher_indices */ MatcherIndicesIndex(43),
- /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ /* const_eval_fn */ ConstEvalFunctionIndex(98),
},
{
/* [420] */
@@ -9012,10 +9012,10 @@
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
/* num_templates */ 2,
- /* templates */ TemplateIndex(26),
+ /* templates */ TemplateIndex(32),
/* parameters */ ParameterIndex(221),
/* return_matcher_indices */ MatcherIndicesIndex(156),
- /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ /* const_eval_fn */ ConstEvalFunctionIndex(98),
},
{
/* [421] */
@@ -9026,7 +9026,7 @@
/* templates */ TemplateIndex(26),
/* parameters */ ParameterIndex(1),
/* return_matcher_indices */ MatcherIndicesIndex(43),
- /* const_eval_fn */ ConstEvalFunctionIndex(100),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
},
{
/* [422] */
@@ -9037,7 +9037,7 @@
/* templates */ TemplateIndex(26),
/* parameters */ ParameterIndex(221),
/* return_matcher_indices */ MatcherIndicesIndex(156),
- /* const_eval_fn */ ConstEvalFunctionIndex(100),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
},
{
/* [423] */
@@ -9048,7 +9048,7 @@
/* templates */ TemplateIndex(26),
/* parameters */ ParameterIndex(1),
/* return_matcher_indices */ MatcherIndicesIndex(43),
- /* const_eval_fn */ ConstEvalFunctionIndex(101),
+ /* const_eval_fn */ ConstEvalFunctionIndex(100),
},
{
/* [424] */
@@ -9059,7 +9059,7 @@
/* templates */ TemplateIndex(26),
/* parameters */ ParameterIndex(221),
/* return_matcher_indices */ MatcherIndicesIndex(156),
- /* const_eval_fn */ ConstEvalFunctionIndex(101),
+ /* const_eval_fn */ ConstEvalFunctionIndex(100),
},
{
/* [425] */
@@ -9070,7 +9070,7 @@
/* templates */ TemplateIndex(26),
/* parameters */ ParameterIndex(1),
/* return_matcher_indices */ MatcherIndicesIndex(43),
- /* const_eval_fn */ ConstEvalFunctionIndex(102),
+ /* const_eval_fn */ ConstEvalFunctionIndex(101),
},
{
/* [426] */
@@ -9081,7 +9081,7 @@
/* templates */ TemplateIndex(26),
/* parameters */ ParameterIndex(221),
/* return_matcher_indices */ MatcherIndicesIndex(156),
- /* const_eval_fn */ ConstEvalFunctionIndex(102),
+ /* const_eval_fn */ ConstEvalFunctionIndex(101),
},
{
/* [427] */
@@ -9089,10 +9089,10 @@
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(28),
- /* parameters */ ParameterIndex(16),
- /* return_matcher_indices */ MatcherIndicesIndex(3),
- /* const_eval_fn */ ConstEvalFunctionIndex(103),
+ /* templates */ TemplateIndex(26),
+ /* parameters */ ParameterIndex(1),
+ /* return_matcher_indices */ MatcherIndicesIndex(43),
+ /* const_eval_fn */ ConstEvalFunctionIndex(102),
},
{
/* [428] */
@@ -9100,10 +9100,10 @@
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
/* num_templates */ 2,
- /* templates */ TemplateIndex(42),
- /* parameters */ ParameterIndex(356),
- /* return_matcher_indices */ MatcherIndicesIndex(44),
- /* const_eval_fn */ ConstEvalFunctionIndex(103),
+ /* templates */ TemplateIndex(26),
+ /* parameters */ ParameterIndex(221),
+ /* return_matcher_indices */ MatcherIndicesIndex(156),
+ /* const_eval_fn */ ConstEvalFunctionIndex(102),
},
{
/* [429] */
@@ -9114,7 +9114,7 @@
/* templates */ TemplateIndex(28),
/* parameters */ ParameterIndex(16),
/* return_matcher_indices */ MatcherIndicesIndex(3),
- /* const_eval_fn */ ConstEvalFunctionIndex(104),
+ /* const_eval_fn */ ConstEvalFunctionIndex(103),
},
{
/* [430] */
@@ -9125,10 +9125,32 @@
/* templates */ TemplateIndex(42),
/* parameters */ ParameterIndex(356),
/* return_matcher_indices */ MatcherIndicesIndex(44),
- /* const_eval_fn */ ConstEvalFunctionIndex(104),
+ /* const_eval_fn */ ConstEvalFunctionIndex(103),
},
{
/* [431] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_explicit_templates */ 0,
+ /* num_templates */ 1,
+ /* templates */ TemplateIndex(28),
+ /* parameters */ ParameterIndex(16),
+ /* return_matcher_indices */ MatcherIndicesIndex(3),
+ /* const_eval_fn */ ConstEvalFunctionIndex(104),
+ },
+ {
+ /* [432] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_explicit_templates */ 0,
+ /* num_templates */ 2,
+ /* templates */ TemplateIndex(42),
+ /* parameters */ ParameterIndex(356),
+ /* return_matcher_indices */ MatcherIndicesIndex(44),
+ /* const_eval_fn */ ConstEvalFunctionIndex(104),
+ },
+ {
+ /* [433] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -9139,7 +9161,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
- /* [432] */
+ /* [434] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
@@ -9150,7 +9172,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(17),
},
{
- /* [433] */
+ /* [435] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -9161,7 +9183,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(19),
},
{
- /* [434] */
+ /* [436] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
@@ -9172,7 +9194,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(21),
},
{
- /* [435] */
+ /* [437] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
@@ -9183,7 +9205,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(22),
},
{
- /* [436] */
+ /* [438] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
@@ -9194,7 +9216,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(23),
},
{
- /* [437] */
+ /* [439] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 3,
/* num_explicit_templates */ 0,
@@ -9205,7 +9227,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(27),
},
{
- /* [438] */
+ /* [440] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -9216,7 +9238,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(44),
},
{
- /* [439] */
+ /* [441] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -9227,7 +9249,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(45),
},
{
- /* [440] */
+ /* [442] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -9238,7 +9260,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(46),
},
{
- /* [441] */
+ /* [443] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -9249,7 +9271,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(47),
},
{
- /* [442] */
+ /* [444] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -9260,7 +9282,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(48),
},
{
- /* [443] */
+ /* [445] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -9271,7 +9293,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(49),
},
{
- /* [444] */
+ /* [446] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -9282,7 +9304,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(50),
},
{
- /* [445] */
+ /* [447] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -9293,7 +9315,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(51),
},
{
- /* [446] */
+ /* [448] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -9304,7 +9326,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(52),
},
{
- /* [447] */
+ /* [449] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -9315,7 +9337,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(53),
},
{
- /* [448] */
+ /* [450] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
@@ -9326,7 +9348,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(57),
},
{
- /* [449] */
+ /* [451] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 3,
/* num_explicit_templates */ 0,
@@ -9337,7 +9359,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(58),
},
{
- /* [450] */
+ /* [452] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsComputePipeline),
/* num_parameters */ 0,
/* num_explicit_templates */ 0,
@@ -9348,7 +9370,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
- /* [451] */
+ /* [453] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -9359,7 +9381,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(72),
},
{
- /* [452] */
+ /* [454] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -9370,7 +9392,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(74),
},
{
- /* [453] */
+ /* [455] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -9381,7 +9403,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(75),
},
{
- /* [454] */
+ /* [456] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -9392,7 +9414,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(76),
},
{
- /* [455] */
+ /* [457] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -9403,7 +9425,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(77),
},
{
- /* [456] */
+ /* [458] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -9414,7 +9436,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(78),
},
{
- /* [457] */
+ /* [459] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -9425,7 +9447,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(79),
},
{
- /* [458] */
+ /* [460] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -9436,7 +9458,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(80),
},
{
- /* [459] */
+ /* [461] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -9447,31 +9469,9 @@
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
- /* [460] */
- /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
- /* num_parameters */ 1,
- /* num_explicit_templates */ 0,
- /* num_templates */ 2,
- /* templates */ TemplateIndex(28),
- /* parameters */ ParameterIndex(0),
- /* return_matcher_indices */ MatcherIndicesIndex(3),
- /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
- },
- {
- /* [461] */
- /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
- /* num_parameters */ 2,
- /* num_explicit_templates */ 0,
- /* num_templates */ 2,
- /* templates */ TemplateIndex(28),
- /* parameters */ ParameterIndex(0),
- /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
- /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
- },
- {
/* [462] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
- /* num_parameters */ 2,
+ /* num_parameters */ 1,
/* num_explicit_templates */ 0,
/* num_templates */ 2,
/* templates */ TemplateIndex(28),
@@ -9482,6 +9482,28 @@
{
/* [463] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
+ /* num_parameters */ 2,
+ /* num_explicit_templates */ 0,
+ /* num_templates */ 2,
+ /* templates */ TemplateIndex(28),
+ /* parameters */ ParameterIndex(0),
+ /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [464] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
+ /* num_parameters */ 2,
+ /* num_explicit_templates */ 0,
+ /* num_templates */ 2,
+ /* templates */ TemplateIndex(28),
+ /* parameters */ ParameterIndex(0),
+ /* return_matcher_indices */ MatcherIndicesIndex(3),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [465] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
/* num_parameters */ 3,
/* num_explicit_templates */ 0,
/* num_templates */ 2,
@@ -9491,7 +9513,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
- /* [464] */
+ /* [466] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -9502,7 +9524,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
- /* [465] */
+ /* [467] */
/* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
@@ -9513,7 +9535,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(95),
},
{
- /* [466] */
+ /* [468] */
/* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
@@ -9568,7 +9590,7 @@
/* [5] */
/* fn arrayLength[T, A : access](ptr<storage, array<T>, A>) -> u32 */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(431),
+ /* overloads */ OverloadIndex(433),
},
{
/* [6] */
@@ -9658,7 +9680,7 @@
/* [18] */
/* fn cross[T : f32_f16](vec3<T>, vec3<T>) -> vec3<T> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(432),
+ /* overloads */ OverloadIndex(434),
},
{
/* [19] */
@@ -9671,7 +9693,7 @@
/* [20] */
/* fn determinant[N : num, T : f32_f16](mat<N, N, T>) -> T */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(433),
+ /* overloads */ OverloadIndex(435),
},
{
/* [21] */
@@ -9684,19 +9706,19 @@
/* [22] */
/* fn dot[N : num, T : fiu32_f16](vec<N, T>, vec<N, T>) -> T */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(434),
+ /* overloads */ OverloadIndex(436),
},
{
/* [23] */
/* fn dot4I8Packed(u32, u32) -> i32 */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(435),
+ /* overloads */ OverloadIndex(437),
},
{
/* [24] */
/* fn dot4U8Packed(u32, u32) -> u32 */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(436),
+ /* overloads */ OverloadIndex(438),
},
{
/* [25] */
@@ -9765,7 +9787,7 @@
/* [34] */
/* fn faceForward[N : num, T : f32_f16](vec<N, T>, vec<N, T>, vec<N, T>) -> vec<N, T> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(437),
+ /* overloads */ OverloadIndex(439),
},
{
/* [35] */
@@ -9905,61 +9927,61 @@
/* [54] */
/* fn normalize[N : num, T : f32_f16](vec<N, T>) -> vec<N, T> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(438),
+ /* overloads */ OverloadIndex(440),
},
{
/* [55] */
/* fn pack2x16float(vec2<f32>) -> u32 */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(439),
+ /* overloads */ OverloadIndex(441),
},
{
/* [56] */
/* fn pack2x16snorm(vec2<f32>) -> u32 */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(440),
+ /* overloads */ OverloadIndex(442),
},
{
/* [57] */
/* fn pack2x16unorm(vec2<f32>) -> u32 */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(441),
+ /* overloads */ OverloadIndex(443),
},
{
/* [58] */
/* fn pack4x8snorm(vec4<f32>) -> u32 */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(442),
+ /* overloads */ OverloadIndex(444),
},
{
/* [59] */
/* fn pack4x8unorm(vec4<f32>) -> u32 */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(443),
+ /* overloads */ OverloadIndex(445),
},
{
/* [60] */
/* fn pack4xI8(vec4<i32>) -> u32 */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(444),
+ /* overloads */ OverloadIndex(446),
},
{
/* [61] */
/* fn pack4xU8(vec4<u32>) -> u32 */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(445),
+ /* overloads */ OverloadIndex(447),
},
{
/* [62] */
/* fn pack4xI8Clamp(vec4<i32>) -> u32 */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(446),
+ /* overloads */ OverloadIndex(448),
},
{
/* [63] */
/* fn pack4xU8Clamp(vec4<u32>) -> u32 */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(447),
+ /* overloads */ OverloadIndex(449),
},
{
/* [64] */
@@ -9986,13 +10008,13 @@
/* [67] */
/* fn reflect[N : num, T : f32_f16](vec<N, T>, vec<N, T>) -> vec<N, T> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(448),
+ /* overloads */ OverloadIndex(450),
},
{
/* [68] */
/* fn refract[N : num, T : f32_f16](vec<N, T>, vec<N, T>, T) -> vec<N, T> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(449),
+ /* overloads */ OverloadIndex(451),
},
{
/* [69] */
@@ -10069,7 +10091,7 @@
/* [79] */
/* fn storageBarrier() */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(450),
+ /* overloads */ OverloadIndex(452),
},
{
/* [80] */
@@ -10089,7 +10111,7 @@
/* [82] */
/* fn transpose[M : num, N : num, T : f32_f16](mat<M, N, T>) -> mat<N, M, T> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(451),
+ /* overloads */ OverloadIndex(453),
},
{
/* [83] */
@@ -10102,55 +10124,55 @@
/* [84] */
/* fn unpack2x16float(u32) -> vec2<f32> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(452),
+ /* overloads */ OverloadIndex(454),
},
{
/* [85] */
/* fn unpack2x16snorm(u32) -> vec2<f32> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(453),
+ /* overloads */ OverloadIndex(455),
},
{
/* [86] */
/* fn unpack2x16unorm(u32) -> vec2<f32> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(454),
+ /* overloads */ OverloadIndex(456),
},
{
/* [87] */
/* fn unpack4x8snorm(u32) -> vec4<f32> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(455),
+ /* overloads */ OverloadIndex(457),
},
{
/* [88] */
/* fn unpack4x8unorm(u32) -> vec4<f32> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(456),
+ /* overloads */ OverloadIndex(458),
},
{
/* [89] */
/* fn unpack4xI8(u32) -> vec4<i32> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(457),
+ /* overloads */ OverloadIndex(459),
},
{
/* [90] */
/* fn unpack4xU8(u32) -> vec4<u32> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(458),
+ /* overloads */ OverloadIndex(460),
},
{
/* [91] */
/* fn workgroupBarrier() */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(450),
+ /* overloads */ OverloadIndex(452),
},
{
/* [92] */
/* fn textureBarrier() */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(450),
+ /* overloads */ OverloadIndex(452),
},
{
/* [93] */
@@ -10385,79 +10407,79 @@
/* [108] */
/* fn inputAttachmentLoad[T : fiu32](input_attachment: input_attachment<T>) -> vec4<T> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(459),
+ /* overloads */ OverloadIndex(461),
},
{
/* [109] */
/* fn atomicLoad[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>) -> T */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(460),
+ /* overloads */ OverloadIndex(462),
},
{
/* [110] */
/* fn atomicStore[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>, T) */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(461),
+ /* overloads */ OverloadIndex(463),
},
{
/* [111] */
/* fn atomicAdd[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>, T) -> T */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(462),
+ /* overloads */ OverloadIndex(464),
},
{
/* [112] */
/* fn atomicSub[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>, T) -> T */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(462),
+ /* overloads */ OverloadIndex(464),
},
{
/* [113] */
/* fn atomicMax[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>, T) -> T */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(462),
+ /* overloads */ OverloadIndex(464),
},
{
/* [114] */
/* fn atomicMin[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>, T) -> T */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(462),
+ /* overloads */ OverloadIndex(464),
},
{
/* [115] */
/* fn atomicAnd[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>, T) -> T */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(462),
+ /* overloads */ OverloadIndex(464),
},
{
/* [116] */
/* fn atomicOr[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>, T) -> T */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(462),
+ /* overloads */ OverloadIndex(464),
},
{
/* [117] */
/* fn atomicXor[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>, T) -> T */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(462),
+ /* overloads */ OverloadIndex(464),
},
{
/* [118] */
/* fn atomicExchange[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>, T) -> T */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(462),
+ /* overloads */ OverloadIndex(464),
},
{
/* [119] */
/* fn atomicCompareExchangeWeak[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>, T, T) -> __atomic_compare_exchange_result<T> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(463),
+ /* overloads */ OverloadIndex(465),
},
{
/* [120] */
/* fn subgroupBallot(bool) -> vec4<u32> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(464),
+ /* overloads */ OverloadIndex(466),
},
{
/* [121] */
@@ -10466,6 +10488,34 @@
/* num overloads */ 2,
/* overloads */ OverloadIndex(405),
},
+ {
+ /* [122] */
+ /* fn subgroupAdd[T : fiu32_f16](value: T) -> T */
+ /* fn subgroupAdd[N : num, T : fiu32_f16](value: vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(407),
+ },
+ {
+ /* [123] */
+ /* fn subgroupExclusiveAdd[T : fiu32_f16](value: T) -> T */
+ /* fn subgroupExclusiveAdd[N : num, T : fiu32_f16](value: vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(407),
+ },
+ {
+ /* [124] */
+ /* fn subgroupMul[T : fiu32_f16](value: T) -> T */
+ /* fn subgroupMul[N : num, T : fiu32_f16](value: vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(407),
+ },
+ {
+ /* [125] */
+ /* fn subgroupExclusiveMul[T : fiu32_f16](value: T) -> T */
+ /* fn subgroupExclusiveMul[N : num, T : fiu32_f16](value: vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(407),
+ },
};
constexpr IntrinsicInfo kUnaryOperators[] = {
@@ -10474,21 +10524,21 @@
/* op !(bool) -> bool */
/* op  -> vec<N, bool> */
/* num overloads */ 2,
- /* overloads */ OverloadIndex(407),
+ /* overloads */ OverloadIndex(409),
},
{
/* [1] */
/* op ~[T : iu32](T) -> T */
/* op ~[T : iu32, N : num](vec<N, T>) -> vec<N, T> */
/* num overloads */ 2,
- /* overloads */ OverloadIndex(409),
+ /* overloads */ OverloadIndex(411),
},
{
/* [2] */
/* op -[T : fi32_f16](T) -> T */
/* op -[T : fi32_f16, N : num](vec<N, T>) -> vec<N, T> */
/* num overloads */ 2,
- /* overloads */ OverloadIndex(411),
+ /* overloads */ OverloadIndex(413),
},
};
constexpr uint8_t kUnaryOperatorNot = 0;
@@ -10553,7 +10603,7 @@
/* op ^[T : iu32](T, T) -> T */
/* op ^[T : iu32, N : num](vec<N, T>, vec<N, T>) -> vec<N, T> */
/* num overloads */ 2,
- /* overloads */ OverloadIndex(413),
+ /* overloads */ OverloadIndex(415),
},
{
/* [6] */
@@ -10577,69 +10627,69 @@
/* [8] */
/* op &&(bool, bool) -> bool */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(465),
+ /* overloads */ OverloadIndex(467),
},
{
/* [9] */
/* op ||(bool, bool) -> bool */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(466),
+ /* overloads */ OverloadIndex(468),
},
{
/* [10] */
/* op ==[T : scalar](T, T) -> bool */
/* op ==[T : scalar, N : num](vec<N, T>, vec<N, T>) -> vec<N, bool> */
/* num overloads */ 2,
- /* overloads */ OverloadIndex(415),
+ /* overloads */ OverloadIndex(417),
},
{
/* [11] */
/* op !=[T : scalar](T, T) -> bool */
/* op !=[T : scalar, N : num](vec<N, T>, vec<N, T>) -> vec<N, bool> */
/* num overloads */ 2,
- /* overloads */ OverloadIndex(417),
+ /* overloads */ OverloadIndex(419),
},
{
/* [12] */
/* op <[T : fiu32_f16](T, T) -> bool */
/* op <[T : fiu32_f16, N : num](vec<N, T>, vec<N, T>) -> vec<N, bool> */
/* num overloads */ 2,
- /* overloads */ OverloadIndex(419),
+ /* overloads */ OverloadIndex(421),
},
{
/* [13] */
/* op >[T : fiu32_f16](T, T) -> bool */
/* op >[T : fiu32_f16, N : num](vec<N, T>, vec<N, T>) -> vec<N, bool> */
/* num overloads */ 2,
- /* overloads */ OverloadIndex(421),
+ /* overloads */ OverloadIndex(423),
},
{
/* [14] */
/* op <=[T : fiu32_f16](T, T) -> bool */
/* op <=[T : fiu32_f16, N : num](vec<N, T>, vec<N, T>) -> vec<N, bool> */
/* num overloads */ 2,
- /* overloads */ OverloadIndex(423),
+ /* overloads */ OverloadIndex(425),
},
{
/* [15] */
/* op >=[T : fiu32_f16](T, T) -> bool */
/* op >=[T : fiu32_f16, N : num](vec<N, T>, vec<N, T>) -> vec<N, bool> */
/* num overloads */ 2,
- /* overloads */ OverloadIndex(425),
+ /* overloads */ OverloadIndex(427),
},
{
/* [16] */
/* op <<[T : iu32](T, u32) -> T */
/* op <<[T : iu32, N : num](vec<N, T>, vec<N, u32>) -> vec<N, T> */
/* num overloads */ 2,
- /* overloads */ OverloadIndex(427),
+ /* overloads */ OverloadIndex(429),
},
{
/* [17] */
/* op >>[T : iu32](T, u32) -> T */
/* op >>[T : iu32, N : num](vec<N, T>, vec<N, u32>) -> vec<N, T> */
/* num overloads */ 2,
- /* overloads */ OverloadIndex(429),
+ /* overloads */ OverloadIndex(431),
},
};
constexpr uint8_t kBinaryOperatorPlus = 0;
diff --git a/src/tint/lang/core/ir/binary/decode.cc b/src/tint/lang/core/ir/binary/decode.cc
index 336bfdd..bc43946 100644
--- a/src/tint/lang/core/ir/binary/decode.cc
+++ b/src/tint/lang/core/ir/binary/decode.cc
@@ -1629,6 +1629,14 @@
return core::BuiltinFn::kSubgroupBroadcast;
case pb::BuiltinFn::input_attachment_load:
return core::BuiltinFn::kInputAttachmentLoad;
+ case pb::BuiltinFn::subgroup_add:
+ return core::BuiltinFn::kSubgroupAdd;
+ case pb::BuiltinFn::subgroup_exclusive_add:
+ return core::BuiltinFn::kSubgroupExclusiveAdd;
+ case pb::BuiltinFn::subgroup_mul:
+ return core::BuiltinFn::kSubgroupMul;
+ case pb::BuiltinFn::subgroup_exclusive_mul:
+ return core::BuiltinFn::kSubgroupExclusiveMul;
case pb::BuiltinFn::BuiltinFn_INT_MIN_SENTINEL_DO_NOT_USE_:
case pb::BuiltinFn::BuiltinFn_INT_MAX_SENTINEL_DO_NOT_USE_:
diff --git a/src/tint/lang/core/ir/binary/encode.cc b/src/tint/lang/core/ir/binary/encode.cc
index b1dc1e4..e6ce605 100644
--- a/src/tint/lang/core/ir/binary/encode.cc
+++ b/src/tint/lang/core/ir/binary/encode.cc
@@ -1141,6 +1141,14 @@
return pb::BuiltinFn::subgroup_broadcast;
case core::BuiltinFn::kInputAttachmentLoad:
return pb::BuiltinFn::input_attachment_load;
+ case core::BuiltinFn::kSubgroupAdd:
+ return pb::BuiltinFn::subgroup_add;
+ case core::BuiltinFn::kSubgroupExclusiveAdd:
+ return pb::BuiltinFn::subgroup_exclusive_add;
+ case core::BuiltinFn::kSubgroupMul:
+ return pb::BuiltinFn::subgroup_mul;
+ case core::BuiltinFn::kSubgroupExclusiveMul:
+ return pb::BuiltinFn::subgroup_exclusive_mul;
case core::BuiltinFn::kNone:
break;
}
diff --git a/src/tint/lang/spirv/writer/ast_printer/builder.cc b/src/tint/lang/spirv/writer/ast_printer/builder.cc
index 4c2c6fd..0b46db8 100644
--- a/src/tint/lang/spirv/writer/ast_printer/builder.cc
+++ b/src/tint/lang/spirv/writer/ast_printer/builder.cc
@@ -2565,6 +2565,14 @@
}
return result_id;
}
+ case wgsl::BuiltinFn::kSubgroupAdd:
+ case wgsl::BuiltinFn::kSubgroupExclusiveAdd:
+ case wgsl::BuiltinFn::kSubgroupMul:
+ case wgsl::BuiltinFn::kSubgroupExclusiveMul: {
+ // TODO(crbug.com/354738715): Implement more subgroup builtins. Adding this explicit
+ // failure in the intermediary CL to avoid a new ICE that can get caught by the fuzzers.
+ return 0;
+ }
default: {
auto inst_id = builtin_to_glsl_method(builtin);
if (inst_id == 0) {
diff --git a/src/tint/lang/spirv/writer/printer/printer.cc b/src/tint/lang/spirv/writer/printer/printer.cc
index ae54505..a728558 100644
--- a/src/tint/lang/spirv/writer/printer/printer.cc
+++ b/src/tint/lang/spirv/writer/printer/printer.cc
@@ -1648,6 +1648,34 @@
Constant(b_.ConstantValue(u32(spv::MemorySemanticsMask::UniformMemory |
spv::MemorySemanticsMask::AcquireRelease))));
break;
+ case core::BuiltinFn::kSubgroupAdd:
+ module_.PushCapability(SpvCapabilityGroupNonUniformArithmetic);
+ op = result_ty->is_integer_scalar_or_vector() ? spv::Op::OpGroupNonUniformIAdd
+ : spv::Op::OpGroupNonUniformFAdd;
+ operands.push_back(Constant(ir_.constant_values.Get(u32(spv::Scope::Subgroup))));
+ operands.push_back(U32Operand(u32(spv::GroupOperation::Reduce)));
+ break;
+ case core::BuiltinFn::kSubgroupExclusiveAdd:
+ module_.PushCapability(SpvCapabilityGroupNonUniformArithmetic);
+ op = result_ty->is_integer_scalar_or_vector() ? spv::Op::OpGroupNonUniformIAdd
+ : spv::Op::OpGroupNonUniformFAdd;
+ operands.push_back(Constant(ir_.constant_values.Get(u32(spv::Scope::Subgroup))));
+ operands.push_back(U32Operand(u32(spv::GroupOperation::ExclusiveScan)));
+ break;
+ case core::BuiltinFn::kSubgroupMul:
+ module_.PushCapability(SpvCapabilityGroupNonUniformArithmetic);
+ op = result_ty->is_integer_scalar_or_vector() ? spv::Op::OpGroupNonUniformIMul
+ : spv::Op::OpGroupNonUniformFMul;
+ operands.push_back(Constant(ir_.constant_values.Get(u32(spv::Scope::Subgroup))));
+ operands.push_back(U32Operand(u32(spv::GroupOperation::Reduce)));
+ break;
+ case core::BuiltinFn::kSubgroupExclusiveMul:
+ module_.PushCapability(SpvCapabilityGroupNonUniformArithmetic);
+ op = result_ty->is_integer_scalar_or_vector() ? spv::Op::OpGroupNonUniformIMul
+ : spv::Op::OpGroupNonUniformFMul;
+ operands.push_back(Constant(ir_.constant_values.Get(u32(spv::Scope::Subgroup))));
+ operands.push_back(U32Operand(u32(spv::GroupOperation::ExclusiveScan)));
+ break;
case core::BuiltinFn::kSubgroupBallot:
module_.PushCapability(SpvCapabilityGroupNonUniformBallot);
op = spv::Op::OpGroupNonUniformBallot;
diff --git a/src/tint/lang/wgsl/builtin_fn.cc b/src/tint/lang/wgsl/builtin_fn.cc
index f03fada..c331192 100644
--- a/src/tint/lang/wgsl/builtin_fn.cc
+++ b/src/tint/lang/wgsl/builtin_fn.cc
@@ -411,6 +411,18 @@
if (name == "subgroupBroadcast") {
return BuiltinFn::kSubgroupBroadcast;
}
+ if (name == "subgroupAdd") {
+ return BuiltinFn::kSubgroupAdd;
+ }
+ if (name == "subgroupExclusiveAdd") {
+ return BuiltinFn::kSubgroupExclusiveAdd;
+ }
+ if (name == "subgroupMul") {
+ return BuiltinFn::kSubgroupMul;
+ }
+ if (name == "subgroupExclusiveMul") {
+ return BuiltinFn::kSubgroupExclusiveMul;
+ }
if (name == "__tint_materialize") {
return BuiltinFn::kTintMaterialize;
}
@@ -669,6 +681,14 @@
return "subgroupBallot";
case BuiltinFn::kSubgroupBroadcast:
return "subgroupBroadcast";
+ case BuiltinFn::kSubgroupAdd:
+ return "subgroupAdd";
+ case BuiltinFn::kSubgroupExclusiveAdd:
+ return "subgroupExclusiveAdd";
+ case BuiltinFn::kSubgroupMul:
+ return "subgroupMul";
+ case BuiltinFn::kSubgroupExclusiveMul:
+ return "subgroupExclusiveMul";
case BuiltinFn::kTintMaterialize:
return "__tint_materialize";
}
diff --git a/src/tint/lang/wgsl/builtin_fn.h b/src/tint/lang/wgsl/builtin_fn.h
index 679e975..da9de21 100644
--- a/src/tint/lang/wgsl/builtin_fn.h
+++ b/src/tint/lang/wgsl/builtin_fn.h
@@ -171,6 +171,10 @@
kAtomicCompareExchangeWeak,
kSubgroupBallot,
kSubgroupBroadcast,
+ kSubgroupAdd,
+ kSubgroupExclusiveAdd,
+ kSubgroupMul,
+ kSubgroupExclusiveMul,
kTintMaterialize,
kNone,
};
@@ -318,6 +322,10 @@
BuiltinFn::kAtomicCompareExchangeWeak,
BuiltinFn::kSubgroupBallot,
BuiltinFn::kSubgroupBroadcast,
+ BuiltinFn::kSubgroupAdd,
+ BuiltinFn::kSubgroupExclusiveAdd,
+ BuiltinFn::kSubgroupMul,
+ BuiltinFn::kSubgroupExclusiveMul,
BuiltinFn::kTintMaterialize,
};
@@ -447,6 +455,10 @@
"atomicCompareExchangeWeak",
"subgroupBallot",
"subgroupBroadcast",
+ "subgroupAdd",
+ "subgroupExclusiveAdd",
+ "subgroupMul",
+ "subgroupExclusiveMul",
"__tint_materialize",
};
diff --git a/src/tint/lang/wgsl/intrinsic/data.cc b/src/tint/lang/wgsl/intrinsic/data.cc
index 3f4b09b..39121bc 100644
--- a/src/tint/lang/wgsl/intrinsic/data.cc
+++ b/src/tint/lang/wgsl/intrinsic/data.cc
@@ -10311,6 +10311,28 @@
},
{
/* [483] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_explicit_templates */ 0,
+ /* num_templates */ 1,
+ /* templates */ TemplateIndex(86),
+ /* parameters */ ParameterIndex(323),
+ /* return_matcher_indices */ MatcherIndicesIndex(3),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [484] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_explicit_templates */ 0,
+ /* num_templates */ 2,
+ /* templates */ TemplateIndex(85),
+ /* parameters */ ParameterIndex(325),
+ /* return_matcher_indices */ MatcherIndicesIndex(50),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [485] */
/* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -10321,7 +10343,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(83),
},
{
- /* [484] */
+ /* [486] */
/* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -10332,37 +10354,15 @@
/* const_eval_fn */ ConstEvalFunctionIndex(83),
},
{
- /* [485] */
- /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
- /* num_parameters */ 1,
- /* num_explicit_templates */ 0,
- /* num_templates */ 1,
- /* templates */ TemplateIndex(99),
- /* parameters */ ParameterIndex(1),
- /* return_matcher_indices */ MatcherIndicesIndex(3),
- /* const_eval_fn */ ConstEvalFunctionIndex(84),
- },
- {
- /* [486] */
- /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
- /* num_parameters */ 1,
- /* num_explicit_templates */ 0,
- /* num_templates */ 2,
- /* templates */ TemplateIndex(99),
- /* parameters */ ParameterIndex(221),
- /* return_matcher_indices */ MatcherIndicesIndex(56),
- /* const_eval_fn */ ConstEvalFunctionIndex(84),
- },
- {
/* [487] */
/* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(84),
+ /* templates */ TemplateIndex(99),
/* parameters */ ParameterIndex(1),
/* return_matcher_indices */ MatcherIndicesIndex(3),
- /* const_eval_fn */ ConstEvalFunctionIndex(85),
+ /* const_eval_fn */ ConstEvalFunctionIndex(84),
},
{
/* [488] */
@@ -10370,13 +10370,35 @@
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
/* num_templates */ 2,
+ /* templates */ TemplateIndex(99),
+ /* parameters */ ParameterIndex(221),
+ /* return_matcher_indices */ MatcherIndicesIndex(56),
+ /* const_eval_fn */ ConstEvalFunctionIndex(84),
+ },
+ {
+ /* [489] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_explicit_templates */ 0,
+ /* num_templates */ 1,
+ /* templates */ TemplateIndex(84),
+ /* parameters */ ParameterIndex(1),
+ /* return_matcher_indices */ MatcherIndicesIndex(3),
+ /* const_eval_fn */ ConstEvalFunctionIndex(85),
+ },
+ {
+ /* [490] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_explicit_templates */ 0,
+ /* num_templates */ 2,
/* templates */ TemplateIndex(84),
/* parameters */ ParameterIndex(221),
/* return_matcher_indices */ MatcherIndicesIndex(56),
/* const_eval_fn */ ConstEvalFunctionIndex(85),
},
{
- /* [489] */
+ /* [491] */
/* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
@@ -10387,7 +10409,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(94),
},
{
- /* [490] */
+ /* [492] */
/* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
@@ -10398,28 +10420,6 @@
/* const_eval_fn */ ConstEvalFunctionIndex(94),
},
{
- /* [491] */
- /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
- /* num_parameters */ 2,
- /* num_explicit_templates */ 0,
- /* num_templates */ 1,
- /* templates */ TemplateIndex(82),
- /* parameters */ ParameterIndex(1),
- /* return_matcher_indices */ MatcherIndicesIndex(55),
- /* const_eval_fn */ ConstEvalFunctionIndex(99),
- },
- {
- /* [492] */
- /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
- /* num_parameters */ 2,
- /* num_explicit_templates */ 0,
- /* num_templates */ 2,
- /* templates */ TemplateIndex(82),
- /* parameters */ ParameterIndex(221),
- /* return_matcher_indices */ MatcherIndicesIndex(113),
- /* const_eval_fn */ ConstEvalFunctionIndex(99),
- },
- {
/* [493] */
/* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 2,
@@ -10428,7 +10428,7 @@
/* templates */ TemplateIndex(82),
/* parameters */ ParameterIndex(1),
/* return_matcher_indices */ MatcherIndicesIndex(55),
- /* const_eval_fn */ ConstEvalFunctionIndex(100),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
},
{
/* [494] */
@@ -10439,7 +10439,7 @@
/* templates */ TemplateIndex(82),
/* parameters */ ParameterIndex(221),
/* return_matcher_indices */ MatcherIndicesIndex(113),
- /* const_eval_fn */ ConstEvalFunctionIndex(100),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
},
{
/* [495] */
@@ -10447,10 +10447,10 @@
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(70),
+ /* templates */ TemplateIndex(82),
/* parameters */ ParameterIndex(1),
/* return_matcher_indices */ MatcherIndicesIndex(55),
- /* const_eval_fn */ ConstEvalFunctionIndex(101),
+ /* const_eval_fn */ ConstEvalFunctionIndex(100),
},
{
/* [496] */
@@ -10458,10 +10458,10 @@
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
/* num_templates */ 2,
- /* templates */ TemplateIndex(70),
+ /* templates */ TemplateIndex(82),
/* parameters */ ParameterIndex(221),
/* return_matcher_indices */ MatcherIndicesIndex(113),
- /* const_eval_fn */ ConstEvalFunctionIndex(101),
+ /* const_eval_fn */ ConstEvalFunctionIndex(100),
},
{
/* [497] */
@@ -10472,7 +10472,7 @@
/* templates */ TemplateIndex(70),
/* parameters */ ParameterIndex(1),
/* return_matcher_indices */ MatcherIndicesIndex(55),
- /* const_eval_fn */ ConstEvalFunctionIndex(102),
+ /* const_eval_fn */ ConstEvalFunctionIndex(101),
},
{
/* [498] */
@@ -10483,7 +10483,7 @@
/* templates */ TemplateIndex(70),
/* parameters */ ParameterIndex(221),
/* return_matcher_indices */ MatcherIndicesIndex(113),
- /* const_eval_fn */ ConstEvalFunctionIndex(102),
+ /* const_eval_fn */ ConstEvalFunctionIndex(101),
},
{
/* [499] */
@@ -10494,7 +10494,7 @@
/* templates */ TemplateIndex(70),
/* parameters */ ParameterIndex(1),
/* return_matcher_indices */ MatcherIndicesIndex(55),
- /* const_eval_fn */ ConstEvalFunctionIndex(103),
+ /* const_eval_fn */ ConstEvalFunctionIndex(102),
},
{
/* [500] */
@@ -10505,7 +10505,7 @@
/* templates */ TemplateIndex(70),
/* parameters */ ParameterIndex(221),
/* return_matcher_indices */ MatcherIndicesIndex(113),
- /* const_eval_fn */ ConstEvalFunctionIndex(103),
+ /* const_eval_fn */ ConstEvalFunctionIndex(102),
},
{
/* [501] */
@@ -10516,7 +10516,7 @@
/* templates */ TemplateIndex(70),
/* parameters */ ParameterIndex(1),
/* return_matcher_indices */ MatcherIndicesIndex(55),
- /* const_eval_fn */ ConstEvalFunctionIndex(104),
+ /* const_eval_fn */ ConstEvalFunctionIndex(103),
},
{
/* [502] */
@@ -10527,7 +10527,7 @@
/* templates */ TemplateIndex(70),
/* parameters */ ParameterIndex(221),
/* return_matcher_indices */ MatcherIndicesIndex(113),
- /* const_eval_fn */ ConstEvalFunctionIndex(104),
+ /* const_eval_fn */ ConstEvalFunctionIndex(103),
},
{
/* [503] */
@@ -10535,10 +10535,10 @@
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(99),
- /* parameters */ ParameterIndex(16),
- /* return_matcher_indices */ MatcherIndicesIndex(3),
- /* const_eval_fn */ ConstEvalFunctionIndex(105),
+ /* templates */ TemplateIndex(70),
+ /* parameters */ ParameterIndex(1),
+ /* return_matcher_indices */ MatcherIndicesIndex(55),
+ /* const_eval_fn */ ConstEvalFunctionIndex(104),
},
{
/* [504] */
@@ -10546,10 +10546,10 @@
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
/* num_templates */ 2,
- /* templates */ TemplateIndex(99),
- /* parameters */ ParameterIndex(329),
- /* return_matcher_indices */ MatcherIndicesIndex(56),
- /* const_eval_fn */ ConstEvalFunctionIndex(105),
+ /* templates */ TemplateIndex(70),
+ /* parameters */ ParameterIndex(221),
+ /* return_matcher_indices */ MatcherIndicesIndex(113),
+ /* const_eval_fn */ ConstEvalFunctionIndex(104),
},
{
/* [505] */
@@ -10560,7 +10560,7 @@
/* templates */ TemplateIndex(99),
/* parameters */ ParameterIndex(16),
/* return_matcher_indices */ MatcherIndicesIndex(3),
- /* const_eval_fn */ ConstEvalFunctionIndex(106),
+ /* const_eval_fn */ ConstEvalFunctionIndex(105),
},
{
/* [506] */
@@ -10571,10 +10571,32 @@
/* templates */ TemplateIndex(99),
/* parameters */ ParameterIndex(329),
/* return_matcher_indices */ MatcherIndicesIndex(56),
- /* const_eval_fn */ ConstEvalFunctionIndex(106),
+ /* const_eval_fn */ ConstEvalFunctionIndex(105),
},
{
/* [507] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_explicit_templates */ 0,
+ /* num_templates */ 1,
+ /* templates */ TemplateIndex(99),
+ /* parameters */ ParameterIndex(16),
+ /* return_matcher_indices */ MatcherIndicesIndex(3),
+ /* const_eval_fn */ ConstEvalFunctionIndex(106),
+ },
+ {
+ /* [508] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_explicit_templates */ 0,
+ /* num_templates */ 2,
+ /* templates */ TemplateIndex(99),
+ /* parameters */ ParameterIndex(329),
+ /* return_matcher_indices */ MatcherIndicesIndex(56),
+ /* const_eval_fn */ ConstEvalFunctionIndex(106),
+ },
+ {
+ /* [509] */
/* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 1,
@@ -10585,7 +10607,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(108),
},
{
- /* [508] */
+ /* [510] */
/* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -10596,7 +10618,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(108),
},
{
- /* [509] */
+ /* [511] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
@@ -10607,7 +10629,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(18),
},
{
- /* [510] */
+ /* [512] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -10618,7 +10640,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(20),
},
{
- /* [511] */
+ /* [513] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
@@ -10629,7 +10651,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(22),
},
{
- /* [512] */
+ /* [514] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
@@ -10640,7 +10662,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(23),
},
{
- /* [513] */
+ /* [515] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
@@ -10651,7 +10673,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(24),
},
{
- /* [514] */
+ /* [516] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 3,
/* num_explicit_templates */ 0,
@@ -10662,7 +10684,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(28),
},
{
- /* [515] */
+ /* [517] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -10673,7 +10695,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(45),
},
{
- /* [516] */
+ /* [518] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -10684,7 +10706,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(46),
},
{
- /* [517] */
+ /* [519] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -10695,7 +10717,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(47),
},
{
- /* [518] */
+ /* [520] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -10706,7 +10728,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(48),
},
{
- /* [519] */
+ /* [521] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -10717,7 +10739,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(49),
},
{
- /* [520] */
+ /* [522] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -10728,7 +10750,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(50),
},
{
- /* [521] */
+ /* [523] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -10739,7 +10761,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(51),
},
{
- /* [522] */
+ /* [524] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -10750,7 +10772,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(52),
},
{
- /* [523] */
+ /* [525] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -10761,7 +10783,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(53),
},
{
- /* [524] */
+ /* [526] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -10772,7 +10794,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(54),
},
{
- /* [525] */
+ /* [527] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
@@ -10783,7 +10805,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(58),
},
{
- /* [526] */
+ /* [528] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 3,
/* num_explicit_templates */ 0,
@@ -10794,7 +10816,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(59),
},
{
- /* [527] */
+ /* [529] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsComputePipeline),
/* num_parameters */ 0,
/* num_explicit_templates */ 0,
@@ -10805,7 +10827,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
- /* [528] */
+ /* [530] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -10816,7 +10838,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(73),
},
{
- /* [529] */
+ /* [531] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -10827,7 +10849,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(75),
},
{
- /* [530] */
+ /* [532] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -10838,7 +10860,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(76),
},
{
- /* [531] */
+ /* [533] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -10849,7 +10871,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(77),
},
{
- /* [532] */
+ /* [534] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -10860,7 +10882,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(78),
},
{
- /* [533] */
+ /* [535] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -10871,7 +10893,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(79),
},
{
- /* [534] */
+ /* [536] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -10882,7 +10904,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(80),
},
{
- /* [535] */
+ /* [537] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -10893,7 +10915,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(81),
},
{
- /* [536] */
+ /* [538] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -10904,7 +10926,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
- /* [537] */
+ /* [539] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -10915,31 +10937,9 @@
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
- /* [538] */
- /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
- /* num_parameters */ 1,
- /* num_explicit_templates */ 0,
- /* num_templates */ 2,
- /* templates */ TemplateIndex(72),
- /* parameters */ ParameterIndex(0),
- /* return_matcher_indices */ MatcherIndicesIndex(3),
- /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
- },
- {
- /* [539] */
- /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
- /* num_parameters */ 2,
- /* num_explicit_templates */ 0,
- /* num_templates */ 2,
- /* templates */ TemplateIndex(72),
- /* parameters */ ParameterIndex(0),
- /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
- /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
- },
- {
/* [540] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
- /* num_parameters */ 2,
+ /* num_parameters */ 1,
/* num_explicit_templates */ 0,
/* num_templates */ 2,
/* templates */ TemplateIndex(72),
@@ -10950,6 +10950,28 @@
{
/* [541] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
+ /* num_parameters */ 2,
+ /* num_explicit_templates */ 0,
+ /* num_templates */ 2,
+ /* templates */ TemplateIndex(72),
+ /* parameters */ ParameterIndex(0),
+ /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [542] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
+ /* num_parameters */ 2,
+ /* num_explicit_templates */ 0,
+ /* num_templates */ 2,
+ /* templates */ TemplateIndex(72),
+ /* parameters */ ParameterIndex(0),
+ /* return_matcher_indices */ MatcherIndicesIndex(3),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [543] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
/* num_parameters */ 3,
/* num_explicit_templates */ 0,
/* num_templates */ 2,
@@ -10959,7 +10981,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
- /* [542] */
+ /* [544] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -10970,7 +10992,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
- /* [543] */
+ /* [545] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -10981,7 +11003,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(82),
},
{
- /* [544] */
+ /* [546] */
/* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -10992,7 +11014,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
- /* [545] */
+ /* [547] */
/* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
@@ -11003,7 +11025,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
- /* [546] */
+ /* [548] */
/* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
@@ -11014,7 +11036,7 @@
/* const_eval_fn */ ConstEvalFunctionIndex(97),
},
{
- /* [547] */
+ /* [549] */
/* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
@@ -11175,7 +11197,7 @@
/* [19] */
/* fn cross[T : fa_f32_f16](vec3<T>, vec3<T>) -> vec3<T> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(509),
+ /* overloads */ OverloadIndex(511),
},
{
/* [20] */
@@ -11188,7 +11210,7 @@
/* [21] */
/* fn determinant[N : num, T : fa_f32_f16](mat<N, N, T>) -> T */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(510),
+ /* overloads */ OverloadIndex(512),
},
{
/* [22] */
@@ -11201,19 +11223,19 @@
/* [23] */
/* fn dot[N : num, T : fia_fiu32_f16](vec<N, T>, vec<N, T>) -> T */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(511),
+ /* overloads */ OverloadIndex(513),
},
{
/* [24] */
/* fn dot4I8Packed(u32, u32) -> i32 */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(512),
+ /* overloads */ OverloadIndex(514),
},
{
/* [25] */
/* fn dot4U8Packed(u32, u32) -> u32 */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(513),
+ /* overloads */ OverloadIndex(515),
},
{
/* [26] */
@@ -11282,7 +11304,7 @@
/* [35] */
/* fn faceForward[N : num, T : fa_f32_f16](vec<N, T>, vec<N, T>, vec<N, T>) -> vec<N, T> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(514),
+ /* overloads */ OverloadIndex(516),
},
{
/* [36] */
@@ -11422,61 +11444,61 @@
/* [55] */
/* fn normalize[N : num, T : fa_f32_f16](vec<N, T>) -> vec<N, T> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(515),
+ /* overloads */ OverloadIndex(517),
},
{
/* [56] */
/* fn pack2x16float(vec2<f32>) -> u32 */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(516),
+ /* overloads */ OverloadIndex(518),
},
{
/* [57] */
/* fn pack2x16snorm(vec2<f32>) -> u32 */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(517),
+ /* overloads */ OverloadIndex(519),
},
{
/* [58] */
/* fn pack2x16unorm(vec2<f32>) -> u32 */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(518),
+ /* overloads */ OverloadIndex(520),
},
{
/* [59] */
/* fn pack4x8snorm(vec4<f32>) -> u32 */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(519),
+ /* overloads */ OverloadIndex(521),
},
{
/* [60] */
/* fn pack4x8unorm(vec4<f32>) -> u32 */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(520),
+ /* overloads */ OverloadIndex(522),
},
{
/* [61] */
/* fn pack4xI8(vec4<i32>) -> u32 */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(521),
+ /* overloads */ OverloadIndex(523),
},
{
/* [62] */
/* fn pack4xU8(vec4<u32>) -> u32 */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(522),
+ /* overloads */ OverloadIndex(524),
},
{
/* [63] */
/* fn pack4xI8Clamp(vec4<i32>) -> u32 */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(523),
+ /* overloads */ OverloadIndex(525),
},
{
/* [64] */
/* fn pack4xU8Clamp(vec4<u32>) -> u32 */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(524),
+ /* overloads */ OverloadIndex(526),
},
{
/* [65] */
@@ -11503,13 +11525,13 @@
/* [68] */
/* fn reflect[N : num, T : fa_f32_f16](vec<N, T>, vec<N, T>) -> vec<N, T> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(525),
+ /* overloads */ OverloadIndex(527),
},
{
/* [69] */
/* fn refract[N : num, T : fa_f32_f16](vec<N, T>, vec<N, T>, T) -> vec<N, T> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(526),
+ /* overloads */ OverloadIndex(528),
},
{
/* [70] */
@@ -11586,7 +11608,7 @@
/* [80] */
/* fn storageBarrier() */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(527),
+ /* overloads */ OverloadIndex(529),
},
{
/* [81] */
@@ -11606,7 +11628,7 @@
/* [83] */
/* fn transpose[M : num, N : num, T : fa_f32_f16](mat<M, N, T>) -> mat<N, M, T> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(528),
+ /* overloads */ OverloadIndex(530),
},
{
/* [84] */
@@ -11619,61 +11641,61 @@
/* [85] */
/* fn unpack2x16float(u32) -> vec2<f32> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(529),
+ /* overloads */ OverloadIndex(531),
},
{
/* [86] */
/* fn unpack2x16snorm(u32) -> vec2<f32> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(530),
+ /* overloads */ OverloadIndex(532),
},
{
/* [87] */
/* fn unpack2x16unorm(u32) -> vec2<f32> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(531),
+ /* overloads */ OverloadIndex(533),
},
{
/* [88] */
/* fn unpack4x8snorm(u32) -> vec4<f32> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(532),
+ /* overloads */ OverloadIndex(534),
},
{
/* [89] */
/* fn unpack4x8unorm(u32) -> vec4<f32> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(533),
+ /* overloads */ OverloadIndex(535),
},
{
/* [90] */
/* fn unpack4xI8(u32) -> vec4<i32> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(534),
+ /* overloads */ OverloadIndex(536),
},
{
/* [91] */
/* fn unpack4xU8(u32) -> vec4<u32> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(535),
+ /* overloads */ OverloadIndex(537),
},
{
/* [92] */
/* fn workgroupBarrier() */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(527),
+ /* overloads */ OverloadIndex(529),
},
{
/* [93] */
/* fn workgroupUniformLoad[T](ptr<workgroup, T, read_write>) -> T */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(536),
+ /* overloads */ OverloadIndex(538),
},
{
/* [94] */
/* fn textureBarrier() */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(527),
+ /* overloads */ OverloadIndex(529),
},
{
/* [95] */
@@ -11925,79 +11947,79 @@
/* [110] */
/* fn inputAttachmentLoad[T : fiu32](input_attachment: input_attachment<T>) -> vec4<T> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(537),
+ /* overloads */ OverloadIndex(539),
},
{
/* [111] */
/* fn atomicLoad[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>) -> T */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(538),
+ /* overloads */ OverloadIndex(540),
},
{
/* [112] */
/* fn atomicStore[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>, T) */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(539),
+ /* overloads */ OverloadIndex(541),
},
{
/* [113] */
/* fn atomicAdd[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>, T) -> T */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(540),
+ /* overloads */ OverloadIndex(542),
},
{
/* [114] */
/* fn atomicSub[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>, T) -> T */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(540),
+ /* overloads */ OverloadIndex(542),
},
{
/* [115] */
/* fn atomicMax[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>, T) -> T */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(540),
+ /* overloads */ OverloadIndex(542),
},
{
/* [116] */
/* fn atomicMin[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>, T) -> T */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(540),
+ /* overloads */ OverloadIndex(542),
},
{
/* [117] */
/* fn atomicAnd[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>, T) -> T */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(540),
+ /* overloads */ OverloadIndex(542),
},
{
/* [118] */
/* fn atomicOr[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>, T) -> T */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(540),
+ /* overloads */ OverloadIndex(542),
},
{
/* [119] */
/* fn atomicXor[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>, T) -> T */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(540),
+ /* overloads */ OverloadIndex(542),
},
{
/* [120] */
/* fn atomicExchange[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>, T) -> T */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(540),
+ /* overloads */ OverloadIndex(542),
},
{
/* [121] */
/* fn atomicCompareExchangeWeak[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>, T, T) -> __atomic_compare_exchange_result<T> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(541),
+ /* overloads */ OverloadIndex(543),
},
{
/* [122] */
/* fn subgroupBallot(bool) -> vec4<u32> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(542),
+ /* overloads */ OverloadIndex(544),
},
{
/* [123] */
@@ -12008,9 +12030,37 @@
},
{
/* [124] */
+ /* fn subgroupAdd[T : fiu32_f16](value: T) -> T */
+ /* fn subgroupAdd[N : num, T : fiu32_f16](value: vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(483),
+ },
+ {
+ /* [125] */
+ /* fn subgroupExclusiveAdd[T : fiu32_f16](value: T) -> T */
+ /* fn subgroupExclusiveAdd[N : num, T : fiu32_f16](value: vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(483),
+ },
+ {
+ /* [126] */
+ /* fn subgroupMul[T : fiu32_f16](value: T) -> T */
+ /* fn subgroupMul[N : num, T : fiu32_f16](value: vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(483),
+ },
+ {
+ /* [127] */
+ /* fn subgroupExclusiveMul[T : fiu32_f16](value: T) -> T */
+ /* fn subgroupExclusiveMul[N : num, T : fiu32_f16](value: vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(483),
+ },
+ {
+ /* [128] */
/* fn __tint_materialize[T](T) -> T */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(543),
+ /* overloads */ OverloadIndex(545),
},
};
@@ -12019,34 +12069,34 @@
/* [0] */
/* op &[S : address_space, T, A : access](ref<S, T, A>) -> ptr<S, T, A> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(544),
+ /* overloads */ OverloadIndex(546),
},
{
/* [1] */
/* op *[S : address_space, T, A : access](ptr<S, T, A>) -> ref<S, T, A> */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(545),
+ /* overloads */ OverloadIndex(547),
},
{
/* [2] */
/* op !(bool) -> bool */
/* op  -> vec<N, bool> */
/* num overloads */ 2,
- /* overloads */ OverloadIndex(483),
+ /* overloads */ OverloadIndex(485),
},
{
/* [3] */
/* op ~[T : ia_iu32](T) -> T */
/* op ~[T : ia_iu32, N : num](vec<N, T>) -> vec<N, T> */
/* num overloads */ 2,
- /* overloads */ OverloadIndex(485),
+ /* overloads */ OverloadIndex(487),
},
{
/* [4] */
/* op -[T : fia_fi32_f16](T) -> T */
/* op -[T : fia_fi32_f16, N : num](vec<N, T>) -> vec<N, T> */
/* num overloads */ 2,
- /* overloads */ OverloadIndex(487),
+ /* overloads */ OverloadIndex(489),
},
};
constexpr uint8_t kUnaryOperatorAnd = 0;
@@ -12113,7 +12163,7 @@
/* op ^[T : ia_iu32](T, T) -> T */
/* op ^[T : ia_iu32, N : num](vec<N, T>, vec<N, T>) -> vec<N, T> */
/* num overloads */ 2,
- /* overloads */ OverloadIndex(489),
+ /* overloads */ OverloadIndex(491),
},
{
/* [6] */
@@ -12137,69 +12187,69 @@
/* [8] */
/* op &&(bool, bool) -> bool */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(546),
+ /* overloads */ OverloadIndex(548),
},
{
/* [9] */
/* op ||(bool, bool) -> bool */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(547),
+ /* overloads */ OverloadIndex(549),
},
{
/* [10] */
/* op ==[T : scalar](T, T) -> bool */
/* op ==[T : scalar, N : num](vec<N, T>, vec<N, T>) -> vec<N, bool> */
/* num overloads */ 2,
- /* overloads */ OverloadIndex(491),
+ /* overloads */ OverloadIndex(493),
},
{
/* [11] */
/* op !=[T : scalar](T, T) -> bool */
/* op !=[T : scalar, N : num](vec<N, T>, vec<N, T>) -> vec<N, bool> */
/* num overloads */ 2,
- /* overloads */ OverloadIndex(493),
+ /* overloads */ OverloadIndex(495),
},
{
/* [12] */
/* op <[T : fia_fiu32_f16](T, T) -> bool */
/* op <[T : fia_fiu32_f16, N : num](vec<N, T>, vec<N, T>) -> vec<N, bool> */
/* num overloads */ 2,
- /* overloads */ OverloadIndex(495),
+ /* overloads */ OverloadIndex(497),
},
{
/* [13] */
/* op >[T : fia_fiu32_f16](T, T) -> bool */
/* op >[T : fia_fiu32_f16, N : num](vec<N, T>, vec<N, T>) -> vec<N, bool> */
/* num overloads */ 2,
- /* overloads */ OverloadIndex(497),
+ /* overloads */ OverloadIndex(499),
},
{
/* [14] */
/* op <=[T : fia_fiu32_f16](T, T) -> bool */
/* op <=[T : fia_fiu32_f16, N : num](vec<N, T>, vec<N, T>) -> vec<N, bool> */
/* num overloads */ 2,
- /* overloads */ OverloadIndex(499),
+ /* overloads */ OverloadIndex(501),
},
{
/* [15] */
/* op >=[T : fia_fiu32_f16](T, T) -> bool */
/* op >=[T : fia_fiu32_f16, N : num](vec<N, T>, vec<N, T>) -> vec<N, bool> */
/* num overloads */ 2,
- /* overloads */ OverloadIndex(501),
+ /* overloads */ OverloadIndex(503),
},
{
/* [16] */
/* op <<[T : ia_iu32](T, u32) -> T */
/* op <<[T : ia_iu32, N : num](vec<N, T>, vec<N, u32>) -> vec<N, T> */
/* num overloads */ 2,
- /* overloads */ OverloadIndex(503),
+ /* overloads */ OverloadIndex(505),
},
{
/* [17] */
/* op >>[T : ia_iu32](T, u32) -> T */
/* op >>[T : ia_iu32, N : num](vec<N, T>, vec<N, u32>) -> vec<N, T> */
/* num overloads */ 2,
- /* overloads */ OverloadIndex(505),
+ /* overloads */ OverloadIndex(507),
},
};
constexpr uint8_t kBinaryOperatorPlus = 0;
@@ -12463,7 +12513,7 @@
/* conv packedVec3<T : concrete_scalar>(vec3<T>) -> packedVec3<T> */
/* conv packedVec3[T : concrete_scalar](vec3<T>) -> packedVec3<T> */
/* num overloads */ 2,
- /* overloads */ OverloadIndex(507),
+ /* overloads */ OverloadIndex(509),
},
};
diff --git a/src/tint/lang/wgsl/reader/lower/lower.cc b/src/tint/lang/wgsl/reader/lower/lower.cc
index 56d9fd3..223be6a 100644
--- a/src/tint/lang/wgsl/reader/lower/lower.cc
+++ b/src/tint/lang/wgsl/reader/lower/lower.cc
@@ -168,6 +168,10 @@
CASE(kSubgroupBallot)
CASE(kSubgroupBroadcast)
CASE(kInputAttachmentLoad)
+ CASE(kSubgroupAdd)
+ CASE(kSubgroupExclusiveAdd)
+ CASE(kSubgroupMul)
+ CASE(kSubgroupExclusiveMul)
case tint::wgsl::BuiltinFn::kBitcast: // should lower to ir::Bitcast
case tint::wgsl::BuiltinFn::kWorkgroupUniformLoad: // should be handled in Lower()
diff --git a/src/tint/lang/wgsl/wgsl.def b/src/tint/lang/wgsl/wgsl.def
index 816724e..188fa03 100644
--- a/src/tint/lang/wgsl/wgsl.def
+++ b/src/tint/lang/wgsl/wgsl.def
@@ -622,6 +622,14 @@
@must_use @stage("compute") fn subgroupBallot(bool) -> vec4<u32>
@must_use @stage("compute") fn subgroupBroadcast[T: fiu32_f16](value: T, @const sourceLaneIndex: u32) -> T
@must_use @stage("compute") fn subgroupBroadcast[N: num, T: fiu32_f16](value: vec<N, T>, @const sourceLaneIndex: u32) -> vec<N, T>
+@must_use @stage("compute") fn subgroupAdd[T: fiu32_f16](value: T) -> T
+@must_use @stage("compute") fn subgroupAdd[N: num, T: fiu32_f16](value: vec<N, T>) -> vec<N, T>
+@must_use @stage("compute") fn subgroupExclusiveAdd[T: fiu32_f16](value: T) -> T
+@must_use @stage("compute") fn subgroupExclusiveAdd[N: num, T: fiu32_f16](value: vec<N, T>) -> vec<N, T>
+@must_use @stage("compute") fn subgroupMul[T: fiu32_f16](value: T) -> T
+@must_use @stage("compute") fn subgroupMul[N: num, T: fiu32_f16](value: vec<N, T>) -> vec<N, T>
+@must_use @stage("compute") fn subgroupExclusiveMul[T: fiu32_f16](value: T) -> T
+@must_use @stage("compute") fn subgroupExclusiveMul[N: num, T: fiu32_f16](value: vec<N, T>) -> vec<N, T>
////////////////////////////////////////////////////////////////////////////////
// Value constructors //
diff --git a/src/tint/lang/wgsl/writer/raise/raise.cc b/src/tint/lang/wgsl/writer/raise/raise.cc
index 56e9fac..f58ddd8 100644
--- a/src/tint/lang/wgsl/writer/raise/raise.cc
+++ b/src/tint/lang/wgsl/writer/raise/raise.cc
@@ -171,6 +171,10 @@
CASE(kAtomicCompareExchangeWeak)
CASE(kSubgroupBallot)
CASE(kSubgroupBroadcast)
+ CASE(kSubgroupAdd)
+ CASE(kSubgroupExclusiveAdd)
+ CASE(kSubgroupMul)
+ CASE(kSubgroupExclusiveMul)
CASE(kInputAttachmentLoad)
case core::BuiltinFn::kNone:
break;
diff --git a/src/tint/utils/protos/ir/ir.proto b/src/tint/utils/protos/ir/ir.proto
index b50a5a2..5c81367 100644
--- a/src/tint/utils/protos/ir/ir.proto
+++ b/src/tint/utils/protos/ir/ir.proto
@@ -632,4 +632,8 @@
subgroup_ballot = 119;
subgroup_broadcast = 120;
input_attachment_load = 121;
+ subgroup_add = 122;
+ subgroup_exclusive_add = 123;
+ subgroup_mul = 124;
+ subgroup_exclusive_mul = 125;
}
diff --git a/test/tint/builtins/gen/gen.wgsl.tmpl b/test/tint/builtins/gen/gen.wgsl.tmpl
index bef377c..59c0e56 100644
--- a/test/tint/builtins/gen/gen.wgsl.tmpl
+++ b/test/tint/builtins/gen/gen.wgsl.tmpl
@@ -268,7 +268,7 @@
{{- $builtin_name := $permutation.Intrinsic.Name -}}
{{- /* Emit 'enable subgroups' and 'enable subgroups_f16' if required */ -}}
-{{- if or (eq "subgroupBallot" $builtin_name) (eq "subgroupBroadcast" $builtin_name)}}
+{{- if or (HasPrefix $builtin_name "subgroup") }}
enable subgroups;
{{- if OverloadUsesType $overload "f16"}}
enable subgroups_f16;
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/0dd12a.wgsl b/test/tint/builtins/gen/literal/subgroupAdd/0dd12a.wgsl
new file mode 100644
index 0000000..98faaa4
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/0dd12a.wgsl
@@ -0,0 +1,57 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// flags: --hlsl_shader_model 62
+
+
+enable subgroups;
+enable subgroups_f16;
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+
+// fn subgroupAdd(value: vec<3, f16>) -> vec<3, f16>
+fn subgroupAdd_0dd12a() -> vec3<f16>{
+ var res: vec3<f16> = subgroupAdd(vec3<f16>(1.h));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_0dd12a();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/0dd12a.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupAdd/0dd12a.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..b38c420
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/0dd12a.wgsl.expected.dxc.hlsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupAdd_0dd12a() -> vec3<f16> {
+ var res : vec3<f16> = subgroupAdd(vec3<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_0dd12a();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/0dd12a.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupAdd/0dd12a.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..b38c420
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/0dd12a.wgsl.expected.fxc.hlsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupAdd_0dd12a() -> vec3<f16> {
+ var res : vec3<f16> = subgroupAdd(vec3<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_0dd12a();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/0dd12a.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupAdd/0dd12a.wgsl.expected.glsl
new file mode 100644
index 0000000..3bec1d4
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/0dd12a.wgsl.expected.glsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupAdd_0dd12a() -> vec3<f16> {
+ var res : vec3<f16> = subgroupAdd(vec3<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_0dd12a();
+}
+
+Failed to generate: error: Unknown builtin method: 0x5560e98c4230
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/0dd12a.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupAdd/0dd12a.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..59ef967
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/0dd12a.wgsl.expected.ir.spvasm
@@ -0,0 +1,52 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability Float16
+ OpCapability UniformAndStorageBuffer16BitAccess
+ OpCapability StorageBuffer16BitAccess
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupAdd_0dd12a "subgroupAdd_0dd12a"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %half = OpTypeFloat 16
+ %v3half = OpTypeVector %half 3
+%tint_symbol_1 = OpTypeStruct %v3half
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v3half
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+%half_0x1p_0 = OpConstant %half 0x1p+0
+ %12 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+%_ptr_Function_v3half = OpTypePointer Function %v3half
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v3half = OpTypePointer StorageBuffer %v3half
+ %uint_0 = OpConstant %uint 0
+%subgroupAdd_0dd12a = OpFunction %v3half None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v3half Function
+ %9 = OpGroupNonUniformFAdd %v3half %uint_3 Reduce %12
+ OpStore %res %9
+ %16 = OpLoad %v3half %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v3half %subgroupAdd_0dd12a
+ %22 = OpAccessChain %_ptr_StorageBuffer_v3half %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/0dd12a.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupAdd/0dd12a.wgsl.expected.msl
new file mode 100644
index 0000000..06eaf1c
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/0dd12a.wgsl.expected.msl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupAdd_0dd12a() -> vec3<f16> {
+ var res : vec3<f16> = subgroupAdd(vec3<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_0dd12a();
+}
+
+Failed to generate: error: Unknown import method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/0dd12a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupAdd/0dd12a.wgsl.expected.spvasm
new file mode 100644
index 0000000..93f18a6
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/0dd12a.wgsl.expected.spvasm
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupAdd_0dd12a() -> vec3<f16> {
+ var res : vec3<f16> = subgroupAdd(vec3<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_0dd12a();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/0dd12a.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupAdd/0dd12a.wgsl.expected.wgsl
new file mode 100644
index 0000000..5bbcd98
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/0dd12a.wgsl.expected.wgsl
@@ -0,0 +1,15 @@
+enable subgroups;
+enable subgroups_f16;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupAdd_0dd12a() -> vec3<f16> {
+ var res : vec3<f16> = subgroupAdd(vec3<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_0dd12a();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/1280c8.wgsl b/test/tint/builtins/gen/literal/subgroupAdd/1280c8.wgsl
new file mode 100644
index 0000000..377d9e0
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/1280c8.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+
+// fn subgroupAdd(value: vec<2, u32>) -> vec<2, u32>
+fn subgroupAdd_1280c8() -> vec2<u32>{
+ var res: vec2<u32> = subgroupAdd(vec2<u32>(1u));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_1280c8();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/1280c8.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupAdd/1280c8.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..cdd762d
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/1280c8.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupAdd_1280c8() -> vec2<u32> {
+ var res : vec2<u32> = subgroupAdd(vec2<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_1280c8();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/1280c8.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupAdd/1280c8.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..cdd762d
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/1280c8.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupAdd_1280c8() -> vec2<u32> {
+ var res : vec2<u32> = subgroupAdd(vec2<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_1280c8();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/1280c8.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupAdd/1280c8.wgsl.expected.glsl
new file mode 100644
index 0000000..5e619c1
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/1280c8.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupAdd_1280c8() -> vec2<u32> {
+ var res : vec2<u32> = subgroupAdd(vec2<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_1280c8();
+}
+
+Failed to generate: error: Unknown builtin method: 0x56119f75e230
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/1280c8.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupAdd/1280c8.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..6e09438
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/1280c8.wgsl.expected.ir.spvasm
@@ -0,0 +1,48 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 24
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupAdd_1280c8 "subgroupAdd_1280c8"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %uint = OpTypeInt 32 0
+ %v2uint = OpTypeVector %uint 2
+%tint_symbol_1 = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v2uint
+ %uint_3 = OpConstant %uint 3
+ %uint_1 = OpConstant %uint 1
+ %11 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+ %void = OpTypeVoid
+ %18 = OpTypeFunction %void
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+ %uint_0 = OpConstant %uint 0
+%subgroupAdd_1280c8 = OpFunction %v2uint None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function
+ %9 = OpGroupNonUniformIAdd %v2uint %uint_3 Reduce %11
+ OpStore %res %9
+ %15 = OpLoad %v2uint %res
+ OpReturnValue %15
+ OpFunctionEnd
+%compute_main = OpFunction %void None %18
+ %19 = OpLabel
+ %20 = OpFunctionCall %v2uint %subgroupAdd_1280c8
+ %21 = OpAccessChain %_ptr_StorageBuffer_v2uint %1 %uint_0
+ OpStore %21 %20
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/1280c8.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupAdd/1280c8.wgsl.expected.msl
new file mode 100644
index 0000000..c2da93d
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/1280c8.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupAdd_1280c8() -> vec2<u32> {
+ var res : vec2<u32> = subgroupAdd(vec2<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_1280c8();
+}
+
+Failed to generate: error: Unknown import method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/1280c8.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupAdd/1280c8.wgsl.expected.spvasm
new file mode 100644
index 0000000..db447d8
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/1280c8.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupAdd_1280c8() -> vec2<u32> {
+ var res : vec2<u32> = subgroupAdd(vec2<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_1280c8();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/1280c8.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupAdd/1280c8.wgsl.expected.wgsl
new file mode 100644
index 0000000..5ef4a61
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/1280c8.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupAdd_1280c8() -> vec2<u32> {
+ var res : vec2<u32> = subgroupAdd(vec2<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_1280c8();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/1eb429.wgsl b/test/tint/builtins/gen/literal/subgroupAdd/1eb429.wgsl
new file mode 100644
index 0000000..2ac3c2e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/1eb429.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+
+// fn subgroupAdd(value: vec<2, i32>) -> vec<2, i32>
+fn subgroupAdd_1eb429() -> vec2<i32>{
+ var res: vec2<i32> = subgroupAdd(vec2<i32>(1i));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_1eb429();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/1eb429.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupAdd/1eb429.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..90ef829
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/1eb429.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupAdd_1eb429() -> vec2<i32> {
+ var res : vec2<i32> = subgroupAdd(vec2<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_1eb429();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/1eb429.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupAdd/1eb429.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..90ef829
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/1eb429.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupAdd_1eb429() -> vec2<i32> {
+ var res : vec2<i32> = subgroupAdd(vec2<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_1eb429();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/1eb429.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupAdd/1eb429.wgsl.expected.glsl
new file mode 100644
index 0000000..9199f28
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/1eb429.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupAdd_1eb429() -> vec2<i32> {
+ var res : vec2<i32> = subgroupAdd(vec2<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_1eb429();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55c8ea9d2230
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/1eb429.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupAdd/1eb429.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..38060ad
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/1eb429.wgsl.expected.ir.spvasm
@@ -0,0 +1,49 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupAdd_1eb429 "subgroupAdd_1eb429"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %int = OpTypeInt 32 1
+ %v2int = OpTypeVector %int 2
+%tint_symbol_1 = OpTypeStruct %v2int
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v2int
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %int_1 = OpConstant %int 1
+ %12 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v2int = OpTypePointer StorageBuffer %v2int
+ %uint_0 = OpConstant %uint 0
+%subgroupAdd_1eb429 = OpFunction %v2int None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v2int Function
+ %9 = OpGroupNonUniformIAdd %v2int %uint_3 Reduce %12
+ OpStore %res %9
+ %16 = OpLoad %v2int %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v2int %subgroupAdd_1eb429
+ %22 = OpAccessChain %_ptr_StorageBuffer_v2int %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/1eb429.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupAdd/1eb429.wgsl.expected.msl
new file mode 100644
index 0000000..178f18b
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/1eb429.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupAdd_1eb429() -> vec2<i32> {
+ var res : vec2<i32> = subgroupAdd(vec2<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_1eb429();
+}
+
+Failed to generate: error: Unknown import method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/1eb429.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupAdd/1eb429.wgsl.expected.spvasm
new file mode 100644
index 0000000..6f159f2
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/1eb429.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupAdd_1eb429() -> vec2<i32> {
+ var res : vec2<i32> = subgroupAdd(vec2<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_1eb429();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/1eb429.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupAdd/1eb429.wgsl.expected.wgsl
new file mode 100644
index 0000000..da4bbf9
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/1eb429.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupAdd_1eb429() -> vec2<i32> {
+ var res : vec2<i32> = subgroupAdd(vec2<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_1eb429();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/225207.wgsl b/test/tint/builtins/gen/literal/subgroupAdd/225207.wgsl
new file mode 100644
index 0000000..e63a155
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/225207.wgsl
@@ -0,0 +1,57 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// flags: --hlsl_shader_model 62
+
+
+enable subgroups;
+enable subgroups_f16;
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+
+// fn subgroupAdd(value: f16) -> f16
+fn subgroupAdd_225207() -> f16{
+ var res: f16 = subgroupAdd(1.h);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_225207();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/225207.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupAdd/225207.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..83b5703
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/225207.wgsl.expected.dxc.hlsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupAdd_225207() -> f16 {
+ var res : f16 = subgroupAdd(1.0h);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_225207();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/225207.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupAdd/225207.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..83b5703
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/225207.wgsl.expected.fxc.hlsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupAdd_225207() -> f16 {
+ var res : f16 = subgroupAdd(1.0h);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_225207();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/225207.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupAdd/225207.wgsl.expected.glsl
new file mode 100644
index 0000000..d36c7ba
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/225207.wgsl.expected.glsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupAdd_225207() -> f16 {
+ var res : f16 = subgroupAdd(1.0h);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_225207();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55ac4fb17f58
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/225207.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupAdd/225207.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..ab5b126
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/225207.wgsl.expected.ir.spvasm
@@ -0,0 +1,50 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 23
+; Schema: 0
+ OpCapability Shader
+ OpCapability Float16
+ OpCapability UniformAndStorageBuffer16BitAccess
+ OpCapability StorageBuffer16BitAccess
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupAdd_225207 "subgroupAdd_225207"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %half = OpTypeFloat 16
+%tint_symbol_1 = OpTypeStruct %half
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %6 = OpTypeFunction %half
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+%half_0x1p_0 = OpConstant %half 0x1p+0
+%_ptr_Function_half = OpTypePointer Function %half
+ %void = OpTypeVoid
+ %17 = OpTypeFunction %void
+%_ptr_StorageBuffer_half = OpTypePointer StorageBuffer %half
+ %uint_0 = OpConstant %uint 0
+%subgroupAdd_225207 = OpFunction %half None %6
+ %7 = OpLabel
+ %res = OpVariable %_ptr_Function_half Function
+ %8 = OpGroupNonUniformFAdd %half %uint_3 Reduce %half_0x1p_0
+ OpStore %res %8
+ %14 = OpLoad %half %res
+ OpReturnValue %14
+ OpFunctionEnd
+%compute_main = OpFunction %void None %17
+ %18 = OpLabel
+ %19 = OpFunctionCall %half %subgroupAdd_225207
+ %20 = OpAccessChain %_ptr_StorageBuffer_half %1 %uint_0
+ OpStore %20 %19
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/225207.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupAdd/225207.wgsl.expected.msl
new file mode 100644
index 0000000..c131b6c
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/225207.wgsl.expected.msl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupAdd_225207() -> f16 {
+ var res : f16 = subgroupAdd(1.0h);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_225207();
+}
+
+Failed to generate: error: Unknown import method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/225207.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupAdd/225207.wgsl.expected.spvasm
new file mode 100644
index 0000000..92cd5fc
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/225207.wgsl.expected.spvasm
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupAdd_225207() -> f16 {
+ var res : f16 = subgroupAdd(1.0h);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_225207();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/225207.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupAdd/225207.wgsl.expected.wgsl
new file mode 100644
index 0000000..35771a0
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/225207.wgsl.expected.wgsl
@@ -0,0 +1,15 @@
+enable subgroups;
+enable subgroups_f16;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupAdd_225207() -> f16 {
+ var res : f16 = subgroupAdd(1.0h);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_225207();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/22d041.wgsl b/test/tint/builtins/gen/literal/subgroupAdd/22d041.wgsl
new file mode 100644
index 0000000..715d216
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/22d041.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+
+// fn subgroupAdd(value: vec<3, i32>) -> vec<3, i32>
+fn subgroupAdd_22d041() -> vec3<i32>{
+ var res: vec3<i32> = subgroupAdd(vec3<i32>(1i));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_22d041();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/22d041.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupAdd/22d041.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..24dc168
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/22d041.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupAdd_22d041() -> vec3<i32> {
+ var res : vec3<i32> = subgroupAdd(vec3<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_22d041();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/22d041.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupAdd/22d041.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..24dc168
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/22d041.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupAdd_22d041() -> vec3<i32> {
+ var res : vec3<i32> = subgroupAdd(vec3<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_22d041();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/22d041.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupAdd/22d041.wgsl.expected.glsl
new file mode 100644
index 0000000..400c138
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/22d041.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupAdd_22d041() -> vec3<i32> {
+ var res : vec3<i32> = subgroupAdd(vec3<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_22d041();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55c8e21d6230
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/22d041.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupAdd/22d041.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..3dd37f1
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/22d041.wgsl.expected.ir.spvasm
@@ -0,0 +1,49 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupAdd_22d041 "subgroupAdd_22d041"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %int = OpTypeInt 32 1
+ %v3int = OpTypeVector %int 3
+%tint_symbol_1 = OpTypeStruct %v3int
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v3int
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %int_1 = OpConstant %int 1
+ %12 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v3int = OpTypePointer StorageBuffer %v3int
+ %uint_0 = OpConstant %uint 0
+%subgroupAdd_22d041 = OpFunction %v3int None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v3int Function
+ %9 = OpGroupNonUniformIAdd %v3int %uint_3 Reduce %12
+ OpStore %res %9
+ %16 = OpLoad %v3int %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v3int %subgroupAdd_22d041
+ %22 = OpAccessChain %_ptr_StorageBuffer_v3int %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/22d041.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupAdd/22d041.wgsl.expected.msl
new file mode 100644
index 0000000..3e6533d
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/22d041.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupAdd_22d041() -> vec3<i32> {
+ var res : vec3<i32> = subgroupAdd(vec3<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_22d041();
+}
+
+Failed to generate: error: Unknown import method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/22d041.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupAdd/22d041.wgsl.expected.spvasm
new file mode 100644
index 0000000..88eb604aa
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/22d041.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupAdd_22d041() -> vec3<i32> {
+ var res : vec3<i32> = subgroupAdd(vec3<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_22d041();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/22d041.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupAdd/22d041.wgsl.expected.wgsl
new file mode 100644
index 0000000..c5b43a2
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/22d041.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupAdd_22d041() -> vec3<i32> {
+ var res : vec3<i32> = subgroupAdd(vec3<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_22d041();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/28db2c.wgsl b/test/tint/builtins/gen/literal/subgroupAdd/28db2c.wgsl
new file mode 100644
index 0000000..d124f28
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/28db2c.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+
+// fn subgroupAdd(value: vec<4, i32>) -> vec<4, i32>
+fn subgroupAdd_28db2c() -> vec4<i32>{
+ var res: vec4<i32> = subgroupAdd(vec4<i32>(1i));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_28db2c();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/28db2c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupAdd/28db2c.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..3b41039
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/28db2c.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupAdd_28db2c() -> vec4<i32> {
+ var res : vec4<i32> = subgroupAdd(vec4<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_28db2c();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/28db2c.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupAdd/28db2c.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..3b41039
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/28db2c.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupAdd_28db2c() -> vec4<i32> {
+ var res : vec4<i32> = subgroupAdd(vec4<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_28db2c();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/28db2c.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupAdd/28db2c.wgsl.expected.glsl
new file mode 100644
index 0000000..4f3b853
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/28db2c.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupAdd_28db2c() -> vec4<i32> {
+ var res : vec4<i32> = subgroupAdd(vec4<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_28db2c();
+}
+
+Failed to generate: error: Unknown builtin method: 0x560e1b56d230
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/28db2c.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupAdd/28db2c.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..7147074
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/28db2c.wgsl.expected.ir.spvasm
@@ -0,0 +1,49 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupAdd_28db2c "subgroupAdd_28db2c"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %int = OpTypeInt 32 1
+ %v4int = OpTypeVector %int 4
+%tint_symbol_1 = OpTypeStruct %v4int
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v4int
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %int_1 = OpConstant %int 1
+ %12 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+ %uint_0 = OpConstant %uint 0
+%subgroupAdd_28db2c = OpFunction %v4int None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v4int Function
+ %9 = OpGroupNonUniformIAdd %v4int %uint_3 Reduce %12
+ OpStore %res %9
+ %16 = OpLoad %v4int %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v4int %subgroupAdd_28db2c
+ %22 = OpAccessChain %_ptr_StorageBuffer_v4int %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/28db2c.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupAdd/28db2c.wgsl.expected.msl
new file mode 100644
index 0000000..43b1b80
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/28db2c.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupAdd_28db2c() -> vec4<i32> {
+ var res : vec4<i32> = subgroupAdd(vec4<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_28db2c();
+}
+
+Failed to generate: error: Unknown import method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/28db2c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupAdd/28db2c.wgsl.expected.spvasm
new file mode 100644
index 0000000..f38164a
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/28db2c.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupAdd_28db2c() -> vec4<i32> {
+ var res : vec4<i32> = subgroupAdd(vec4<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_28db2c();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/28db2c.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupAdd/28db2c.wgsl.expected.wgsl
new file mode 100644
index 0000000..7e49b9d
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/28db2c.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupAdd_28db2c() -> vec4<i32> {
+ var res : vec4<i32> = subgroupAdd(vec4<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_28db2c();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/2ab40a.wgsl b/test/tint/builtins/gen/literal/subgroupAdd/2ab40a.wgsl
new file mode 100644
index 0000000..c5e6c35
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/2ab40a.wgsl
@@ -0,0 +1,57 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// flags: --hlsl_shader_model 62
+
+
+enable subgroups;
+enable subgroups_f16;
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+
+// fn subgroupAdd(value: vec<4, f16>) -> vec<4, f16>
+fn subgroupAdd_2ab40a() -> vec4<f16>{
+ var res: vec4<f16> = subgroupAdd(vec4<f16>(1.h));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_2ab40a();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/2ab40a.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupAdd/2ab40a.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..e2d2043
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/2ab40a.wgsl.expected.dxc.hlsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupAdd_2ab40a() -> vec4<f16> {
+ var res : vec4<f16> = subgroupAdd(vec4<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_2ab40a();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/2ab40a.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupAdd/2ab40a.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..e2d2043
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/2ab40a.wgsl.expected.fxc.hlsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupAdd_2ab40a() -> vec4<f16> {
+ var res : vec4<f16> = subgroupAdd(vec4<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_2ab40a();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/2ab40a.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupAdd/2ab40a.wgsl.expected.glsl
new file mode 100644
index 0000000..dbebf5a
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/2ab40a.wgsl.expected.glsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupAdd_2ab40a() -> vec4<f16> {
+ var res : vec4<f16> = subgroupAdd(vec4<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_2ab40a();
+}
+
+Failed to generate: error: Unknown builtin method: 0x558870aff230
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/2ab40a.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupAdd/2ab40a.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..1426d98
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/2ab40a.wgsl.expected.ir.spvasm
@@ -0,0 +1,52 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability Float16
+ OpCapability UniformAndStorageBuffer16BitAccess
+ OpCapability StorageBuffer16BitAccess
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupAdd_2ab40a "subgroupAdd_2ab40a"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %half = OpTypeFloat 16
+ %v4half = OpTypeVector %half 4
+%tint_symbol_1 = OpTypeStruct %v4half
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v4half
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+%half_0x1p_0 = OpConstant %half 0x1p+0
+ %12 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+%_ptr_Function_v4half = OpTypePointer Function %v4half
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v4half = OpTypePointer StorageBuffer %v4half
+ %uint_0 = OpConstant %uint 0
+%subgroupAdd_2ab40a = OpFunction %v4half None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v4half Function
+ %9 = OpGroupNonUniformFAdd %v4half %uint_3 Reduce %12
+ OpStore %res %9
+ %16 = OpLoad %v4half %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v4half %subgroupAdd_2ab40a
+ %22 = OpAccessChain %_ptr_StorageBuffer_v4half %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/2ab40a.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupAdd/2ab40a.wgsl.expected.msl
new file mode 100644
index 0000000..377a8c8
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/2ab40a.wgsl.expected.msl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupAdd_2ab40a() -> vec4<f16> {
+ var res : vec4<f16> = subgroupAdd(vec4<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_2ab40a();
+}
+
+Failed to generate: error: Unknown import method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/2ab40a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupAdd/2ab40a.wgsl.expected.spvasm
new file mode 100644
index 0000000..d3dee0c
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/2ab40a.wgsl.expected.spvasm
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupAdd_2ab40a() -> vec4<f16> {
+ var res : vec4<f16> = subgroupAdd(vec4<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_2ab40a();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/2ab40a.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupAdd/2ab40a.wgsl.expected.wgsl
new file mode 100644
index 0000000..e9ffade
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/2ab40a.wgsl.expected.wgsl
@@ -0,0 +1,15 @@
+enable subgroups;
+enable subgroups_f16;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupAdd_2ab40a() -> vec4<f16> {
+ var res : vec4<f16> = subgroupAdd(vec4<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_2ab40a();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/3854ae.wgsl b/test/tint/builtins/gen/literal/subgroupAdd/3854ae.wgsl
new file mode 100644
index 0000000..9eae358
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/3854ae.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+
+// fn subgroupAdd(value: f32) -> f32
+fn subgroupAdd_3854ae() -> f32{
+ var res: f32 = subgroupAdd(1.f);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_3854ae();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/3854ae.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupAdd/3854ae.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..ce3e297
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/3854ae.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupAdd_3854ae() -> f32 {
+ var res : f32 = subgroupAdd(1.0f);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_3854ae();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/3854ae.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupAdd/3854ae.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..ce3e297
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/3854ae.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupAdd_3854ae() -> f32 {
+ var res : f32 = subgroupAdd(1.0f);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_3854ae();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/3854ae.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupAdd/3854ae.wgsl.expected.glsl
new file mode 100644
index 0000000..1aac3e2
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/3854ae.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupAdd_3854ae() -> f32 {
+ var res : f32 = subgroupAdd(1.0f);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_3854ae();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55c7fc6f1f58
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/3854ae.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupAdd/3854ae.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..021e8f4
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/3854ae.wgsl.expected.ir.spvasm
@@ -0,0 +1,47 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 23
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupAdd_3854ae "subgroupAdd_3854ae"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %float = OpTypeFloat 32
+%tint_symbol_1 = OpTypeStruct %float
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %6 = OpTypeFunction %float
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %float_1 = OpConstant %float 1
+%_ptr_Function_float = OpTypePointer Function %float
+ %void = OpTypeVoid
+ %17 = OpTypeFunction %void
+%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
+ %uint_0 = OpConstant %uint 0
+%subgroupAdd_3854ae = OpFunction %float None %6
+ %7 = OpLabel
+ %res = OpVariable %_ptr_Function_float Function
+ %8 = OpGroupNonUniformFAdd %float %uint_3 Reduce %float_1
+ OpStore %res %8
+ %14 = OpLoad %float %res
+ OpReturnValue %14
+ OpFunctionEnd
+%compute_main = OpFunction %void None %17
+ %18 = OpLabel
+ %19 = OpFunctionCall %float %subgroupAdd_3854ae
+ %20 = OpAccessChain %_ptr_StorageBuffer_float %1 %uint_0
+ OpStore %20 %19
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/3854ae.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupAdd/3854ae.wgsl.expected.msl
new file mode 100644
index 0000000..dbdbb0b
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/3854ae.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupAdd_3854ae() -> f32 {
+ var res : f32 = subgroupAdd(1.0f);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_3854ae();
+}
+
+Failed to generate: error: Unknown import method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/3854ae.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupAdd/3854ae.wgsl.expected.spvasm
new file mode 100644
index 0000000..fe8c291
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/3854ae.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupAdd_3854ae() -> f32 {
+ var res : f32 = subgroupAdd(1.0f);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_3854ae();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/3854ae.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupAdd/3854ae.wgsl.expected.wgsl
new file mode 100644
index 0000000..f04d77c
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/3854ae.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupAdd_3854ae() -> f32 {
+ var res : f32 = subgroupAdd(1.0f);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_3854ae();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/6587ff.wgsl b/test/tint/builtins/gen/literal/subgroupAdd/6587ff.wgsl
new file mode 100644
index 0000000..7f139f6
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/6587ff.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+
+// fn subgroupAdd(value: vec<3, u32>) -> vec<3, u32>
+fn subgroupAdd_6587ff() -> vec3<u32>{
+ var res: vec3<u32> = subgroupAdd(vec3<u32>(1u));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_6587ff();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/6587ff.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupAdd/6587ff.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..25b821e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/6587ff.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupAdd_6587ff() -> vec3<u32> {
+ var res : vec3<u32> = subgroupAdd(vec3<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_6587ff();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/6587ff.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupAdd/6587ff.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..25b821e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/6587ff.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupAdd_6587ff() -> vec3<u32> {
+ var res : vec3<u32> = subgroupAdd(vec3<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_6587ff();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/6587ff.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupAdd/6587ff.wgsl.expected.glsl
new file mode 100644
index 0000000..b1c3031
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/6587ff.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupAdd_6587ff() -> vec3<u32> {
+ var res : vec3<u32> = subgroupAdd(vec3<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_6587ff();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55ea4ffe5230
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/6587ff.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupAdd/6587ff.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..5450cc2
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/6587ff.wgsl.expected.ir.spvasm
@@ -0,0 +1,48 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 24
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupAdd_6587ff "subgroupAdd_6587ff"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %uint = OpTypeInt 32 0
+ %v3uint = OpTypeVector %uint 3
+%tint_symbol_1 = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v3uint
+ %uint_3 = OpConstant %uint 3
+ %uint_1 = OpConstant %uint 1
+ %11 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+ %void = OpTypeVoid
+ %18 = OpTypeFunction %void
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+ %uint_0 = OpConstant %uint 0
+%subgroupAdd_6587ff = OpFunction %v3uint None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function
+ %9 = OpGroupNonUniformIAdd %v3uint %uint_3 Reduce %11
+ OpStore %res %9
+ %15 = OpLoad %v3uint %res
+ OpReturnValue %15
+ OpFunctionEnd
+%compute_main = OpFunction %void None %18
+ %19 = OpLabel
+ %20 = OpFunctionCall %v3uint %subgroupAdd_6587ff
+ %21 = OpAccessChain %_ptr_StorageBuffer_v3uint %1 %uint_0
+ OpStore %21 %20
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/6587ff.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupAdd/6587ff.wgsl.expected.msl
new file mode 100644
index 0000000..bede1d9
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/6587ff.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupAdd_6587ff() -> vec3<u32> {
+ var res : vec3<u32> = subgroupAdd(vec3<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_6587ff();
+}
+
+Failed to generate: error: Unknown import method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/6587ff.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupAdd/6587ff.wgsl.expected.spvasm
new file mode 100644
index 0000000..5682df1
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/6587ff.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupAdd_6587ff() -> vec3<u32> {
+ var res : vec3<u32> = subgroupAdd(vec3<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_6587ff();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/6587ff.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupAdd/6587ff.wgsl.expected.wgsl
new file mode 100644
index 0000000..e3da669
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/6587ff.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupAdd_6587ff() -> vec3<u32> {
+ var res : vec3<u32> = subgroupAdd(vec3<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_6587ff();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/7d1215.wgsl b/test/tint/builtins/gen/literal/subgroupAdd/7d1215.wgsl
new file mode 100644
index 0000000..be84829
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/7d1215.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+
+// fn subgroupAdd(value: vec<3, f32>) -> vec<3, f32>
+fn subgroupAdd_7d1215() -> vec3<f32>{
+ var res: vec3<f32> = subgroupAdd(vec3<f32>(1.f));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_7d1215();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/7d1215.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupAdd/7d1215.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..df3be16
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/7d1215.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupAdd_7d1215() -> vec3<f32> {
+ var res : vec3<f32> = subgroupAdd(vec3<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_7d1215();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/7d1215.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupAdd/7d1215.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..df3be16
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/7d1215.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupAdd_7d1215() -> vec3<f32> {
+ var res : vec3<f32> = subgroupAdd(vec3<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_7d1215();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/7d1215.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupAdd/7d1215.wgsl.expected.glsl
new file mode 100644
index 0000000..22e3e5a
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/7d1215.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupAdd_7d1215() -> vec3<f32> {
+ var res : vec3<f32> = subgroupAdd(vec3<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_7d1215();
+}
+
+Failed to generate: error: Unknown builtin method: 0x5623692c1230
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/7d1215.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupAdd/7d1215.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..b53e24d
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/7d1215.wgsl.expected.ir.spvasm
@@ -0,0 +1,49 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupAdd_7d1215 "subgroupAdd_7d1215"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %float = OpTypeFloat 32
+ %v3float = OpTypeVector %float 3
+%tint_symbol_1 = OpTypeStruct %v3float
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v3float
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %float_1 = OpConstant %float 1
+ %12 = OpConstantComposite %v3float %float_1 %float_1 %float_1
+%_ptr_Function_v3float = OpTypePointer Function %v3float
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v3float = OpTypePointer StorageBuffer %v3float
+ %uint_0 = OpConstant %uint 0
+%subgroupAdd_7d1215 = OpFunction %v3float None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v3float Function
+ %9 = OpGroupNonUniformFAdd %v3float %uint_3 Reduce %12
+ OpStore %res %9
+ %16 = OpLoad %v3float %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v3float %subgroupAdd_7d1215
+ %22 = OpAccessChain %_ptr_StorageBuffer_v3float %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/7d1215.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupAdd/7d1215.wgsl.expected.msl
new file mode 100644
index 0000000..3f535fa
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/7d1215.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupAdd_7d1215() -> vec3<f32> {
+ var res : vec3<f32> = subgroupAdd(vec3<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_7d1215();
+}
+
+Failed to generate: error: Unknown import method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/7d1215.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupAdd/7d1215.wgsl.expected.spvasm
new file mode 100644
index 0000000..d718935
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/7d1215.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupAdd_7d1215() -> vec3<f32> {
+ var res : vec3<f32> = subgroupAdd(vec3<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_7d1215();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/7d1215.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupAdd/7d1215.wgsl.expected.wgsl
new file mode 100644
index 0000000..d6ee0da
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/7d1215.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupAdd_7d1215() -> vec3<f32> {
+ var res : vec3<f32> = subgroupAdd(vec3<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_7d1215();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/8f4c15.wgsl b/test/tint/builtins/gen/literal/subgroupAdd/8f4c15.wgsl
new file mode 100644
index 0000000..898b0a0
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/8f4c15.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+
+// fn subgroupAdd(value: vec<4, f32>) -> vec<4, f32>
+fn subgroupAdd_8f4c15() -> vec4<f32>{
+ var res: vec4<f32> = subgroupAdd(vec4<f32>(1.f));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_8f4c15();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/8f4c15.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupAdd/8f4c15.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..71da983
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/8f4c15.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupAdd_8f4c15() -> vec4<f32> {
+ var res : vec4<f32> = subgroupAdd(vec4<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_8f4c15();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/8f4c15.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupAdd/8f4c15.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..71da983
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/8f4c15.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupAdd_8f4c15() -> vec4<f32> {
+ var res : vec4<f32> = subgroupAdd(vec4<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_8f4c15();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/8f4c15.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupAdd/8f4c15.wgsl.expected.glsl
new file mode 100644
index 0000000..e140e10
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/8f4c15.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupAdd_8f4c15() -> vec4<f32> {
+ var res : vec4<f32> = subgroupAdd(vec4<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_8f4c15();
+}
+
+Failed to generate: error: Unknown builtin method: 0x560a73a9b230
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/8f4c15.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupAdd/8f4c15.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..3beaf85
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/8f4c15.wgsl.expected.ir.spvasm
@@ -0,0 +1,49 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupAdd_8f4c15 "subgroupAdd_8f4c15"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %float = OpTypeFloat 32
+ %v4float = OpTypeVector %float 4
+%tint_symbol_1 = OpTypeStruct %v4float
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v4float
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %float_1 = OpConstant %float 1
+ %12 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+ %uint_0 = OpConstant %uint 0
+%subgroupAdd_8f4c15 = OpFunction %v4float None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v4float Function
+ %9 = OpGroupNonUniformFAdd %v4float %uint_3 Reduce %12
+ OpStore %res %9
+ %16 = OpLoad %v4float %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v4float %subgroupAdd_8f4c15
+ %22 = OpAccessChain %_ptr_StorageBuffer_v4float %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/8f4c15.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupAdd/8f4c15.wgsl.expected.msl
new file mode 100644
index 0000000..ac5875c
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/8f4c15.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupAdd_8f4c15() -> vec4<f32> {
+ var res : vec4<f32> = subgroupAdd(vec4<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_8f4c15();
+}
+
+Failed to generate: error: Unknown import method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/8f4c15.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupAdd/8f4c15.wgsl.expected.spvasm
new file mode 100644
index 0000000..dfea6d7
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/8f4c15.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupAdd_8f4c15() -> vec4<f32> {
+ var res : vec4<f32> = subgroupAdd(vec4<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_8f4c15();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/8f4c15.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupAdd/8f4c15.wgsl.expected.wgsl
new file mode 100644
index 0000000..0ea467b
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/8f4c15.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupAdd_8f4c15() -> vec4<f32> {
+ var res : vec4<f32> = subgroupAdd(vec4<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_8f4c15();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/b61df7.wgsl b/test/tint/builtins/gen/literal/subgroupAdd/b61df7.wgsl
new file mode 100644
index 0000000..4811cd3
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/b61df7.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+
+// fn subgroupAdd(value: u32) -> u32
+fn subgroupAdd_b61df7() -> u32{
+ var res: u32 = subgroupAdd(1u);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_b61df7();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/b61df7.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupAdd/b61df7.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..8fb5174
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/b61df7.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupAdd_b61df7() -> u32 {
+ var res : u32 = subgroupAdd(1u);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_b61df7();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/b61df7.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupAdd/b61df7.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..8fb5174
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/b61df7.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupAdd_b61df7() -> u32 {
+ var res : u32 = subgroupAdd(1u);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_b61df7();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/b61df7.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupAdd/b61df7.wgsl.expected.glsl
new file mode 100644
index 0000000..ef14ddf
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/b61df7.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupAdd_b61df7() -> u32 {
+ var res : u32 = subgroupAdd(1u);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_b61df7();
+}
+
+Failed to generate: error: Unknown builtin method: 0x5572ff816f58
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/b61df7.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupAdd/b61df7.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..4fb5dbc
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/b61df7.wgsl.expected.ir.spvasm
@@ -0,0 +1,46 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 22
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupAdd_b61df7 "subgroupAdd_b61df7"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %uint = OpTypeInt 32 0
+%tint_symbol_1 = OpTypeStruct %uint
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %6 = OpTypeFunction %uint
+ %uint_3 = OpConstant %uint 3
+ %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+ %void = OpTypeVoid
+ %16 = OpTypeFunction %void
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+ %uint_0 = OpConstant %uint 0
+%subgroupAdd_b61df7 = OpFunction %uint None %6
+ %7 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function
+ %8 = OpGroupNonUniformIAdd %uint %uint_3 Reduce %uint_1
+ OpStore %res %8
+ %13 = OpLoad %uint %res
+ OpReturnValue %13
+ OpFunctionEnd
+%compute_main = OpFunction %void None %16
+ %17 = OpLabel
+ %18 = OpFunctionCall %uint %subgroupAdd_b61df7
+ %19 = OpAccessChain %_ptr_StorageBuffer_uint %1 %uint_0
+ OpStore %19 %18
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/b61df7.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupAdd/b61df7.wgsl.expected.msl
new file mode 100644
index 0000000..889d329
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/b61df7.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupAdd_b61df7() -> u32 {
+ var res : u32 = subgroupAdd(1u);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_b61df7();
+}
+
+Failed to generate: error: Unknown import method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/b61df7.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupAdd/b61df7.wgsl.expected.spvasm
new file mode 100644
index 0000000..df88d4f
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/b61df7.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupAdd_b61df7() -> u32 {
+ var res : u32 = subgroupAdd(1u);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_b61df7();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/b61df7.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupAdd/b61df7.wgsl.expected.wgsl
new file mode 100644
index 0000000..5aa8d57
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/b61df7.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupAdd_b61df7() -> u32 {
+ var res : u32 = subgroupAdd(1u);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_b61df7();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/ba53f9.wgsl b/test/tint/builtins/gen/literal/subgroupAdd/ba53f9.wgsl
new file mode 100644
index 0000000..93c668b
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/ba53f9.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+
+// fn subgroupAdd(value: i32) -> i32
+fn subgroupAdd_ba53f9() -> i32{
+ var res: i32 = subgroupAdd(1i);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_ba53f9();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/ba53f9.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupAdd/ba53f9.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..24d4993
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/ba53f9.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupAdd_ba53f9() -> i32 {
+ var res : i32 = subgroupAdd(1i);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_ba53f9();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/ba53f9.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupAdd/ba53f9.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..24d4993
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/ba53f9.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupAdd_ba53f9() -> i32 {
+ var res : i32 = subgroupAdd(1i);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_ba53f9();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/ba53f9.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupAdd/ba53f9.wgsl.expected.glsl
new file mode 100644
index 0000000..76c730e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/ba53f9.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupAdd_ba53f9() -> i32 {
+ var res : i32 = subgroupAdd(1i);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_ba53f9();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55b32209af58
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/ba53f9.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupAdd/ba53f9.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..d850f85
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/ba53f9.wgsl.expected.ir.spvasm
@@ -0,0 +1,47 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 23
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupAdd_ba53f9 "subgroupAdd_ba53f9"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %int = OpTypeInt 32 1
+%tint_symbol_1 = OpTypeStruct %int
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %6 = OpTypeFunction %int
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+ %void = OpTypeVoid
+ %17 = OpTypeFunction %void
+%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
+ %uint_0 = OpConstant %uint 0
+%subgroupAdd_ba53f9 = OpFunction %int None %6
+ %7 = OpLabel
+ %res = OpVariable %_ptr_Function_int Function
+ %8 = OpGroupNonUniformIAdd %int %uint_3 Reduce %int_1
+ OpStore %res %8
+ %14 = OpLoad %int %res
+ OpReturnValue %14
+ OpFunctionEnd
+%compute_main = OpFunction %void None %17
+ %18 = OpLabel
+ %19 = OpFunctionCall %int %subgroupAdd_ba53f9
+ %20 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
+ OpStore %20 %19
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/ba53f9.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupAdd/ba53f9.wgsl.expected.msl
new file mode 100644
index 0000000..810b372
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/ba53f9.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupAdd_ba53f9() -> i32 {
+ var res : i32 = subgroupAdd(1i);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_ba53f9();
+}
+
+Failed to generate: error: Unknown import method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/ba53f9.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupAdd/ba53f9.wgsl.expected.spvasm
new file mode 100644
index 0000000..70dffe8
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/ba53f9.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupAdd_ba53f9() -> i32 {
+ var res : i32 = subgroupAdd(1i);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_ba53f9();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/ba53f9.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupAdd/ba53f9.wgsl.expected.wgsl
new file mode 100644
index 0000000..784f6b9
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/ba53f9.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupAdd_ba53f9() -> i32 {
+ var res : i32 = subgroupAdd(1i);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_ba53f9();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/cae1ed.wgsl b/test/tint/builtins/gen/literal/subgroupAdd/cae1ed.wgsl
new file mode 100644
index 0000000..687aa19
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/cae1ed.wgsl
@@ -0,0 +1,57 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// flags: --hlsl_shader_model 62
+
+
+enable subgroups;
+enable subgroups_f16;
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+
+// fn subgroupAdd(value: vec<2, f16>) -> vec<2, f16>
+fn subgroupAdd_cae1ed() -> vec2<f16>{
+ var res: vec2<f16> = subgroupAdd(vec2<f16>(1.h));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_cae1ed();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/cae1ed.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupAdd/cae1ed.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..2093186
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/cae1ed.wgsl.expected.dxc.hlsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupAdd_cae1ed() -> vec2<f16> {
+ var res : vec2<f16> = subgroupAdd(vec2<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_cae1ed();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/cae1ed.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupAdd/cae1ed.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..2093186
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/cae1ed.wgsl.expected.fxc.hlsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupAdd_cae1ed() -> vec2<f16> {
+ var res : vec2<f16> = subgroupAdd(vec2<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_cae1ed();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/cae1ed.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupAdd/cae1ed.wgsl.expected.glsl
new file mode 100644
index 0000000..10e14b6
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/cae1ed.wgsl.expected.glsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupAdd_cae1ed() -> vec2<f16> {
+ var res : vec2<f16> = subgroupAdd(vec2<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_cae1ed();
+}
+
+Failed to generate: error: Unknown builtin method: 0x5559ed5b3230
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/cae1ed.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupAdd/cae1ed.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..5e6f982
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/cae1ed.wgsl.expected.ir.spvasm
@@ -0,0 +1,52 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability Float16
+ OpCapability UniformAndStorageBuffer16BitAccess
+ OpCapability StorageBuffer16BitAccess
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupAdd_cae1ed "subgroupAdd_cae1ed"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %half = OpTypeFloat 16
+ %v2half = OpTypeVector %half 2
+%tint_symbol_1 = OpTypeStruct %v2half
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v2half
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+%half_0x1p_0 = OpConstant %half 0x1p+0
+ %12 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
+%_ptr_Function_v2half = OpTypePointer Function %v2half
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v2half = OpTypePointer StorageBuffer %v2half
+ %uint_0 = OpConstant %uint 0
+%subgroupAdd_cae1ed = OpFunction %v2half None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v2half Function
+ %9 = OpGroupNonUniformFAdd %v2half %uint_3 Reduce %12
+ OpStore %res %9
+ %16 = OpLoad %v2half %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v2half %subgroupAdd_cae1ed
+ %22 = OpAccessChain %_ptr_StorageBuffer_v2half %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/cae1ed.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupAdd/cae1ed.wgsl.expected.msl
new file mode 100644
index 0000000..9576828
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/cae1ed.wgsl.expected.msl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupAdd_cae1ed() -> vec2<f16> {
+ var res : vec2<f16> = subgroupAdd(vec2<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_cae1ed();
+}
+
+Failed to generate: error: Unknown import method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/cae1ed.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupAdd/cae1ed.wgsl.expected.spvasm
new file mode 100644
index 0000000..6fc734d
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/cae1ed.wgsl.expected.spvasm
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupAdd_cae1ed() -> vec2<f16> {
+ var res : vec2<f16> = subgroupAdd(vec2<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_cae1ed();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/cae1ed.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupAdd/cae1ed.wgsl.expected.wgsl
new file mode 100644
index 0000000..23fb0f1
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/cae1ed.wgsl.expected.wgsl
@@ -0,0 +1,15 @@
+enable subgroups;
+enable subgroups_f16;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupAdd_cae1ed() -> vec2<f16> {
+ var res : vec2<f16> = subgroupAdd(vec2<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_cae1ed();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/dcf73f.wgsl b/test/tint/builtins/gen/literal/subgroupAdd/dcf73f.wgsl
new file mode 100644
index 0000000..442123f
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/dcf73f.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+
+// fn subgroupAdd(value: vec<2, f32>) -> vec<2, f32>
+fn subgroupAdd_dcf73f() -> vec2<f32>{
+ var res: vec2<f32> = subgroupAdd(vec2<f32>(1.f));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_dcf73f();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/dcf73f.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupAdd/dcf73f.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..40b6330
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/dcf73f.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupAdd_dcf73f() -> vec2<f32> {
+ var res : vec2<f32> = subgroupAdd(vec2<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_dcf73f();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/dcf73f.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupAdd/dcf73f.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..40b6330
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/dcf73f.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupAdd_dcf73f() -> vec2<f32> {
+ var res : vec2<f32> = subgroupAdd(vec2<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_dcf73f();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/dcf73f.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupAdd/dcf73f.wgsl.expected.glsl
new file mode 100644
index 0000000..aca6371
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/dcf73f.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupAdd_dcf73f() -> vec2<f32> {
+ var res : vec2<f32> = subgroupAdd(vec2<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_dcf73f();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55b9be662230
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/dcf73f.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupAdd/dcf73f.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..029eeb2
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/dcf73f.wgsl.expected.ir.spvasm
@@ -0,0 +1,49 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupAdd_dcf73f "subgroupAdd_dcf73f"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %float = OpTypeFloat 32
+ %v2float = OpTypeVector %float 2
+%tint_symbol_1 = OpTypeStruct %v2float
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v2float
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %float_1 = OpConstant %float 1
+ %12 = OpConstantComposite %v2float %float_1 %float_1
+%_ptr_Function_v2float = OpTypePointer Function %v2float
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v2float = OpTypePointer StorageBuffer %v2float
+ %uint_0 = OpConstant %uint 0
+%subgroupAdd_dcf73f = OpFunction %v2float None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v2float Function
+ %9 = OpGroupNonUniformFAdd %v2float %uint_3 Reduce %12
+ OpStore %res %9
+ %16 = OpLoad %v2float %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v2float %subgroupAdd_dcf73f
+ %22 = OpAccessChain %_ptr_StorageBuffer_v2float %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/dcf73f.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupAdd/dcf73f.wgsl.expected.msl
new file mode 100644
index 0000000..cee484a
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/dcf73f.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupAdd_dcf73f() -> vec2<f32> {
+ var res : vec2<f32> = subgroupAdd(vec2<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_dcf73f();
+}
+
+Failed to generate: error: Unknown import method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/dcf73f.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupAdd/dcf73f.wgsl.expected.spvasm
new file mode 100644
index 0000000..a5a865c
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/dcf73f.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupAdd_dcf73f() -> vec2<f32> {
+ var res : vec2<f32> = subgroupAdd(vec2<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_dcf73f();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/dcf73f.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupAdd/dcf73f.wgsl.expected.wgsl
new file mode 100644
index 0000000..17ee001
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/dcf73f.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupAdd_dcf73f() -> vec2<f32> {
+ var res : vec2<f32> = subgroupAdd(vec2<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_dcf73f();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/fbc357.wgsl b/test/tint/builtins/gen/literal/subgroupAdd/fbc357.wgsl
new file mode 100644
index 0000000..2afcf71
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/fbc357.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+
+// fn subgroupAdd(value: vec<4, u32>) -> vec<4, u32>
+fn subgroupAdd_fbc357() -> vec4<u32>{
+ var res: vec4<u32> = subgroupAdd(vec4<u32>(1u));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_fbc357();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/fbc357.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupAdd/fbc357.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..e5473db
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/fbc357.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupAdd_fbc357() -> vec4<u32> {
+ var res : vec4<u32> = subgroupAdd(vec4<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_fbc357();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/fbc357.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupAdd/fbc357.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..e5473db
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/fbc357.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupAdd_fbc357() -> vec4<u32> {
+ var res : vec4<u32> = subgroupAdd(vec4<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_fbc357();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/fbc357.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupAdd/fbc357.wgsl.expected.glsl
new file mode 100644
index 0000000..95d1143
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/fbc357.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupAdd_fbc357() -> vec4<u32> {
+ var res : vec4<u32> = subgroupAdd(vec4<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_fbc357();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55c5105db230
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/fbc357.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupAdd/fbc357.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..66302ba
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/fbc357.wgsl.expected.ir.spvasm
@@ -0,0 +1,48 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 24
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupAdd_fbc357 "subgroupAdd_fbc357"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %uint = OpTypeInt 32 0
+ %v4uint = OpTypeVector %uint 4
+%tint_symbol_1 = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v4uint
+ %uint_3 = OpConstant %uint 3
+ %uint_1 = OpConstant %uint 1
+ %11 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+ %void = OpTypeVoid
+ %18 = OpTypeFunction %void
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+ %uint_0 = OpConstant %uint 0
+%subgroupAdd_fbc357 = OpFunction %v4uint None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v4uint Function
+ %9 = OpGroupNonUniformIAdd %v4uint %uint_3 Reduce %11
+ OpStore %res %9
+ %15 = OpLoad %v4uint %res
+ OpReturnValue %15
+ OpFunctionEnd
+%compute_main = OpFunction %void None %18
+ %19 = OpLabel
+ %20 = OpFunctionCall %v4uint %subgroupAdd_fbc357
+ %21 = OpAccessChain %_ptr_StorageBuffer_v4uint %1 %uint_0
+ OpStore %21 %20
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/fbc357.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupAdd/fbc357.wgsl.expected.msl
new file mode 100644
index 0000000..b07b13d
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/fbc357.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupAdd_fbc357() -> vec4<u32> {
+ var res : vec4<u32> = subgroupAdd(vec4<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_fbc357();
+}
+
+Failed to generate: error: Unknown import method: subgroupAdd
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/fbc357.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupAdd/fbc357.wgsl.expected.spvasm
new file mode 100644
index 0000000..fa7bcbd
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/fbc357.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupAdd_fbc357() -> vec4<u32> {
+ var res : vec4<u32> = subgroupAdd(vec4<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_fbc357();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupAdd/fbc357.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupAdd/fbc357.wgsl.expected.wgsl
new file mode 100644
index 0000000..8379b0f
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupAdd/fbc357.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupAdd_fbc357() -> vec4<u32> {
+ var res : vec4<u32> = subgroupAdd(vec4<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_fbc357();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/01de08.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/01de08.wgsl
new file mode 100644
index 0000000..44060f7
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/01de08.wgsl
@@ -0,0 +1,57 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// flags: --hlsl_shader_model 62
+
+
+enable subgroups;
+enable subgroups_f16;
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+
+// fn subgroupExclusiveAdd(value: vec<2, f16>) -> vec<2, f16>
+fn subgroupExclusiveAdd_01de08() -> vec2<f16>{
+ var res: vec2<f16> = subgroupExclusiveAdd(vec2<f16>(1.h));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_01de08();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/01de08.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/01de08.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..9367036
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/01de08.wgsl.expected.dxc.hlsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupExclusiveAdd_01de08() -> vec2<f16> {
+ var res : vec2<f16> = subgroupExclusiveAdd(vec2<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_01de08();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/01de08.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/01de08.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..9367036
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/01de08.wgsl.expected.fxc.hlsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupExclusiveAdd_01de08() -> vec2<f16> {
+ var res : vec2<f16> = subgroupExclusiveAdd(vec2<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_01de08();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/01de08.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/01de08.wgsl.expected.glsl
new file mode 100644
index 0000000..7422bbf
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/01de08.wgsl.expected.glsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupExclusiveAdd_01de08() -> vec2<f16> {
+ var res : vec2<f16> = subgroupExclusiveAdd(vec2<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_01de08();
+}
+
+Failed to generate: error: Unknown builtin method: 0x5616d463a230
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/01de08.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/01de08.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..501063e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/01de08.wgsl.expected.ir.spvasm
@@ -0,0 +1,52 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability Float16
+ OpCapability UniformAndStorageBuffer16BitAccess
+ OpCapability StorageBuffer16BitAccess
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveAdd_01de08 "subgroupExclusiveAdd_01de08"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %half = OpTypeFloat 16
+ %v2half = OpTypeVector %half 2
+%tint_symbol_1 = OpTypeStruct %v2half
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v2half
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+%half_0x1p_0 = OpConstant %half 0x1p+0
+ %12 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
+%_ptr_Function_v2half = OpTypePointer Function %v2half
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v2half = OpTypePointer StorageBuffer %v2half
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveAdd_01de08 = OpFunction %v2half None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v2half Function
+ %9 = OpGroupNonUniformFAdd %v2half %uint_3 ExclusiveScan %12
+ OpStore %res %9
+ %16 = OpLoad %v2half %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v2half %subgroupExclusiveAdd_01de08
+ %22 = OpAccessChain %_ptr_StorageBuffer_v2half %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/01de08.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/01de08.wgsl.expected.msl
new file mode 100644
index 0000000..b9a56ed
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/01de08.wgsl.expected.msl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupExclusiveAdd_01de08() -> vec2<f16> {
+ var res : vec2<f16> = subgroupExclusiveAdd(vec2<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_01de08();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/01de08.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/01de08.wgsl.expected.spvasm
new file mode 100644
index 0000000..59ef4cd
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/01de08.wgsl.expected.spvasm
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupExclusiveAdd_01de08() -> vec2<f16> {
+ var res : vec2<f16> = subgroupExclusiveAdd(vec2<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_01de08();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/01de08.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/01de08.wgsl.expected.wgsl
new file mode 100644
index 0000000..60c3604
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/01de08.wgsl.expected.wgsl
@@ -0,0 +1,15 @@
+enable subgroups;
+enable subgroups_f16;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupExclusiveAdd_01de08() -> vec2<f16> {
+ var res : vec2<f16> = subgroupExclusiveAdd(vec2<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_01de08();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/0ff95a.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/0ff95a.wgsl
new file mode 100644
index 0000000..cbac30d
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/0ff95a.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+
+// fn subgroupExclusiveAdd(value: vec<3, u32>) -> vec<3, u32>
+fn subgroupExclusiveAdd_0ff95a() -> vec3<u32>{
+ var res: vec3<u32> = subgroupExclusiveAdd(vec3<u32>(1u));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_0ff95a();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/0ff95a.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/0ff95a.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..2597572
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/0ff95a.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupExclusiveAdd_0ff95a() -> vec3<u32> {
+ var res : vec3<u32> = subgroupExclusiveAdd(vec3<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_0ff95a();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/0ff95a.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/0ff95a.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..2597572
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/0ff95a.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupExclusiveAdd_0ff95a() -> vec3<u32> {
+ var res : vec3<u32> = subgroupExclusiveAdd(vec3<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_0ff95a();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/0ff95a.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/0ff95a.wgsl.expected.glsl
new file mode 100644
index 0000000..dacd2f4
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/0ff95a.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupExclusiveAdd_0ff95a() -> vec3<u32> {
+ var res : vec3<u32> = subgroupExclusiveAdd(vec3<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_0ff95a();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55bc8779a230
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/0ff95a.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/0ff95a.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..543e607
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/0ff95a.wgsl.expected.ir.spvasm
@@ -0,0 +1,48 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 24
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveAdd_0ff95a "subgroupExclusiveAdd_0ff95a"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %uint = OpTypeInt 32 0
+ %v3uint = OpTypeVector %uint 3
+%tint_symbol_1 = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v3uint
+ %uint_3 = OpConstant %uint 3
+ %uint_1 = OpConstant %uint 1
+ %11 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+ %void = OpTypeVoid
+ %18 = OpTypeFunction %void
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveAdd_0ff95a = OpFunction %v3uint None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function
+ %9 = OpGroupNonUniformIAdd %v3uint %uint_3 ExclusiveScan %11
+ OpStore %res %9
+ %15 = OpLoad %v3uint %res
+ OpReturnValue %15
+ OpFunctionEnd
+%compute_main = OpFunction %void None %18
+ %19 = OpLabel
+ %20 = OpFunctionCall %v3uint %subgroupExclusiveAdd_0ff95a
+ %21 = OpAccessChain %_ptr_StorageBuffer_v3uint %1 %uint_0
+ OpStore %21 %20
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/0ff95a.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/0ff95a.wgsl.expected.msl
new file mode 100644
index 0000000..10f14a5
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/0ff95a.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupExclusiveAdd_0ff95a() -> vec3<u32> {
+ var res : vec3<u32> = subgroupExclusiveAdd(vec3<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_0ff95a();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/0ff95a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/0ff95a.wgsl.expected.spvasm
new file mode 100644
index 0000000..628240f
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/0ff95a.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupExclusiveAdd_0ff95a() -> vec3<u32> {
+ var res : vec3<u32> = subgroupExclusiveAdd(vec3<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_0ff95a();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/0ff95a.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/0ff95a.wgsl.expected.wgsl
new file mode 100644
index 0000000..6b34700
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/0ff95a.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupExclusiveAdd_0ff95a() -> vec3<u32> {
+ var res : vec3<u32> = subgroupExclusiveAdd(vec3<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_0ff95a();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/406ab4.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/406ab4.wgsl
new file mode 100644
index 0000000..c9d43bb
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/406ab4.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+
+// fn subgroupExclusiveAdd(value: vec<4, i32>) -> vec<4, i32>
+fn subgroupExclusiveAdd_406ab4() -> vec4<i32>{
+ var res: vec4<i32> = subgroupExclusiveAdd(vec4<i32>(1i));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_406ab4();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/406ab4.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/406ab4.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..9ead944
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/406ab4.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupExclusiveAdd_406ab4() -> vec4<i32> {
+ var res : vec4<i32> = subgroupExclusiveAdd(vec4<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_406ab4();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/406ab4.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/406ab4.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..9ead944
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/406ab4.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupExclusiveAdd_406ab4() -> vec4<i32> {
+ var res : vec4<i32> = subgroupExclusiveAdd(vec4<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_406ab4();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/406ab4.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/406ab4.wgsl.expected.glsl
new file mode 100644
index 0000000..ba04c73
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/406ab4.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupExclusiveAdd_406ab4() -> vec4<i32> {
+ var res : vec4<i32> = subgroupExclusiveAdd(vec4<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_406ab4();
+}
+
+Failed to generate: error: Unknown builtin method: 0x56172edaf230
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/406ab4.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/406ab4.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..2921553
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/406ab4.wgsl.expected.ir.spvasm
@@ -0,0 +1,49 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveAdd_406ab4 "subgroupExclusiveAdd_406ab4"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %int = OpTypeInt 32 1
+ %v4int = OpTypeVector %int 4
+%tint_symbol_1 = OpTypeStruct %v4int
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v4int
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %int_1 = OpConstant %int 1
+ %12 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveAdd_406ab4 = OpFunction %v4int None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v4int Function
+ %9 = OpGroupNonUniformIAdd %v4int %uint_3 ExclusiveScan %12
+ OpStore %res %9
+ %16 = OpLoad %v4int %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v4int %subgroupExclusiveAdd_406ab4
+ %22 = OpAccessChain %_ptr_StorageBuffer_v4int %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/406ab4.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/406ab4.wgsl.expected.msl
new file mode 100644
index 0000000..79a957a
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/406ab4.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupExclusiveAdd_406ab4() -> vec4<i32> {
+ var res : vec4<i32> = subgroupExclusiveAdd(vec4<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_406ab4();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/406ab4.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/406ab4.wgsl.expected.spvasm
new file mode 100644
index 0000000..45d6c81
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/406ab4.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupExclusiveAdd_406ab4() -> vec4<i32> {
+ var res : vec4<i32> = subgroupExclusiveAdd(vec4<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_406ab4();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/406ab4.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/406ab4.wgsl.expected.wgsl
new file mode 100644
index 0000000..43a2d07
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/406ab4.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupExclusiveAdd_406ab4() -> vec4<i32> {
+ var res : vec4<i32> = subgroupExclusiveAdd(vec4<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_406ab4();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/41cfde.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/41cfde.wgsl
new file mode 100644
index 0000000..e867a86
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/41cfde.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+
+// fn subgroupExclusiveAdd(value: vec<3, f32>) -> vec<3, f32>
+fn subgroupExclusiveAdd_41cfde() -> vec3<f32>{
+ var res: vec3<f32> = subgroupExclusiveAdd(vec3<f32>(1.f));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_41cfde();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/41cfde.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/41cfde.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..a9a8212
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/41cfde.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupExclusiveAdd_41cfde() -> vec3<f32> {
+ var res : vec3<f32> = subgroupExclusiveAdd(vec3<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_41cfde();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/41cfde.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/41cfde.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..a9a8212
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/41cfde.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupExclusiveAdd_41cfde() -> vec3<f32> {
+ var res : vec3<f32> = subgroupExclusiveAdd(vec3<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_41cfde();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/41cfde.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/41cfde.wgsl.expected.glsl
new file mode 100644
index 0000000..692c5e3
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/41cfde.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupExclusiveAdd_41cfde() -> vec3<f32> {
+ var res : vec3<f32> = subgroupExclusiveAdd(vec3<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_41cfde();
+}
+
+Failed to generate: error: Unknown builtin method: 0x5584f4fb8230
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/41cfde.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/41cfde.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..58cf836
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/41cfde.wgsl.expected.ir.spvasm
@@ -0,0 +1,49 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveAdd_41cfde "subgroupExclusiveAdd_41cfde"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %float = OpTypeFloat 32
+ %v3float = OpTypeVector %float 3
+%tint_symbol_1 = OpTypeStruct %v3float
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v3float
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %float_1 = OpConstant %float 1
+ %12 = OpConstantComposite %v3float %float_1 %float_1 %float_1
+%_ptr_Function_v3float = OpTypePointer Function %v3float
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v3float = OpTypePointer StorageBuffer %v3float
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveAdd_41cfde = OpFunction %v3float None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v3float Function
+ %9 = OpGroupNonUniformFAdd %v3float %uint_3 ExclusiveScan %12
+ OpStore %res %9
+ %16 = OpLoad %v3float %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v3float %subgroupExclusiveAdd_41cfde
+ %22 = OpAccessChain %_ptr_StorageBuffer_v3float %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/41cfde.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/41cfde.wgsl.expected.msl
new file mode 100644
index 0000000..e5d015d
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/41cfde.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupExclusiveAdd_41cfde() -> vec3<f32> {
+ var res : vec3<f32> = subgroupExclusiveAdd(vec3<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_41cfde();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/41cfde.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/41cfde.wgsl.expected.spvasm
new file mode 100644
index 0000000..3a07a3a
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/41cfde.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupExclusiveAdd_41cfde() -> vec3<f32> {
+ var res : vec3<f32> = subgroupExclusiveAdd(vec3<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_41cfde();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/41cfde.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/41cfde.wgsl.expected.wgsl
new file mode 100644
index 0000000..6c7ace8
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/41cfde.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupExclusiveAdd_41cfde() -> vec3<f32> {
+ var res : vec3<f32> = subgroupExclusiveAdd(vec3<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_41cfde();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/42684c.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/42684c.wgsl
new file mode 100644
index 0000000..d7ac089
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/42684c.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+
+// fn subgroupExclusiveAdd(value: u32) -> u32
+fn subgroupExclusiveAdd_42684c() -> u32{
+ var res: u32 = subgroupExclusiveAdd(1u);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_42684c();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/42684c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/42684c.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..17c184dc
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/42684c.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupExclusiveAdd_42684c() -> u32 {
+ var res : u32 = subgroupExclusiveAdd(1u);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_42684c();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/42684c.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/42684c.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..17c184dc
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/42684c.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupExclusiveAdd_42684c() -> u32 {
+ var res : u32 = subgroupExclusiveAdd(1u);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_42684c();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/42684c.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/42684c.wgsl.expected.glsl
new file mode 100644
index 0000000..9342b09
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/42684c.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupExclusiveAdd_42684c() -> u32 {
+ var res : u32 = subgroupExclusiveAdd(1u);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_42684c();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55cadd930f58
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/42684c.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/42684c.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..1bc2976
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/42684c.wgsl.expected.ir.spvasm
@@ -0,0 +1,46 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 22
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveAdd_42684c "subgroupExclusiveAdd_42684c"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %uint = OpTypeInt 32 0
+%tint_symbol_1 = OpTypeStruct %uint
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %6 = OpTypeFunction %uint
+ %uint_3 = OpConstant %uint 3
+ %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+ %void = OpTypeVoid
+ %16 = OpTypeFunction %void
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveAdd_42684c = OpFunction %uint None %6
+ %7 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function
+ %8 = OpGroupNonUniformIAdd %uint %uint_3 ExclusiveScan %uint_1
+ OpStore %res %8
+ %13 = OpLoad %uint %res
+ OpReturnValue %13
+ OpFunctionEnd
+%compute_main = OpFunction %void None %16
+ %17 = OpLabel
+ %18 = OpFunctionCall %uint %subgroupExclusiveAdd_42684c
+ %19 = OpAccessChain %_ptr_StorageBuffer_uint %1 %uint_0
+ OpStore %19 %18
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/42684c.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/42684c.wgsl.expected.msl
new file mode 100644
index 0000000..84a26b7
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/42684c.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupExclusiveAdd_42684c() -> u32 {
+ var res : u32 = subgroupExclusiveAdd(1u);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_42684c();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/42684c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/42684c.wgsl.expected.spvasm
new file mode 100644
index 0000000..4f9388f
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/42684c.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupExclusiveAdd_42684c() -> u32 {
+ var res : u32 = subgroupExclusiveAdd(1u);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_42684c();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/42684c.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/42684c.wgsl.expected.wgsl
new file mode 100644
index 0000000..738d3de
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/42684c.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupExclusiveAdd_42684c() -> u32 {
+ var res : u32 = subgroupExclusiveAdd(1u);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_42684c();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/48acea.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/48acea.wgsl
new file mode 100644
index 0000000..e8f8ebb
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/48acea.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+
+// fn subgroupExclusiveAdd(value: vec<2, u32>) -> vec<2, u32>
+fn subgroupExclusiveAdd_48acea() -> vec2<u32>{
+ var res: vec2<u32> = subgroupExclusiveAdd(vec2<u32>(1u));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_48acea();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/48acea.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/48acea.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..b1db044
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/48acea.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupExclusiveAdd_48acea() -> vec2<u32> {
+ var res : vec2<u32> = subgroupExclusiveAdd(vec2<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_48acea();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/48acea.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/48acea.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..b1db044
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/48acea.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupExclusiveAdd_48acea() -> vec2<u32> {
+ var res : vec2<u32> = subgroupExclusiveAdd(vec2<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_48acea();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/48acea.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/48acea.wgsl.expected.glsl
new file mode 100644
index 0000000..a8b48f0
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/48acea.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupExclusiveAdd_48acea() -> vec2<u32> {
+ var res : vec2<u32> = subgroupExclusiveAdd(vec2<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_48acea();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55cb7c0f3230
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/48acea.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/48acea.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..95a44c7
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/48acea.wgsl.expected.ir.spvasm
@@ -0,0 +1,48 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 24
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveAdd_48acea "subgroupExclusiveAdd_48acea"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %uint = OpTypeInt 32 0
+ %v2uint = OpTypeVector %uint 2
+%tint_symbol_1 = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v2uint
+ %uint_3 = OpConstant %uint 3
+ %uint_1 = OpConstant %uint 1
+ %11 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+ %void = OpTypeVoid
+ %18 = OpTypeFunction %void
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveAdd_48acea = OpFunction %v2uint None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function
+ %9 = OpGroupNonUniformIAdd %v2uint %uint_3 ExclusiveScan %11
+ OpStore %res %9
+ %15 = OpLoad %v2uint %res
+ OpReturnValue %15
+ OpFunctionEnd
+%compute_main = OpFunction %void None %18
+ %19 = OpLabel
+ %20 = OpFunctionCall %v2uint %subgroupExclusiveAdd_48acea
+ %21 = OpAccessChain %_ptr_StorageBuffer_v2uint %1 %uint_0
+ OpStore %21 %20
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/48acea.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/48acea.wgsl.expected.msl
new file mode 100644
index 0000000..e981a67
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/48acea.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupExclusiveAdd_48acea() -> vec2<u32> {
+ var res : vec2<u32> = subgroupExclusiveAdd(vec2<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_48acea();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/48acea.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/48acea.wgsl.expected.spvasm
new file mode 100644
index 0000000..e2b3209
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/48acea.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupExclusiveAdd_48acea() -> vec2<u32> {
+ var res : vec2<u32> = subgroupExclusiveAdd(vec2<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_48acea();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/48acea.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/48acea.wgsl.expected.wgsl
new file mode 100644
index 0000000..d8ceb8f
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/48acea.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupExclusiveAdd_48acea() -> vec2<u32> {
+ var res : vec2<u32> = subgroupExclusiveAdd(vec2<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_48acea();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4a1568.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4a1568.wgsl
new file mode 100644
index 0000000..d67c74d
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4a1568.wgsl
@@ -0,0 +1,57 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// flags: --hlsl_shader_model 62
+
+
+enable subgroups;
+enable subgroups_f16;
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+
+// fn subgroupExclusiveAdd(value: f16) -> f16
+fn subgroupExclusiveAdd_4a1568() -> f16{
+ var res: f16 = subgroupExclusiveAdd(1.h);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_4a1568();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4a1568.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4a1568.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..b6b7732
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4a1568.wgsl.expected.dxc.hlsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupExclusiveAdd_4a1568() -> f16 {
+ var res : f16 = subgroupExclusiveAdd(1.0h);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_4a1568();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4a1568.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4a1568.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..b6b7732
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4a1568.wgsl.expected.fxc.hlsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupExclusiveAdd_4a1568() -> f16 {
+ var res : f16 = subgroupExclusiveAdd(1.0h);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_4a1568();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4a1568.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4a1568.wgsl.expected.glsl
new file mode 100644
index 0000000..fa5db62
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4a1568.wgsl.expected.glsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupExclusiveAdd_4a1568() -> f16 {
+ var res : f16 = subgroupExclusiveAdd(1.0h);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_4a1568();
+}
+
+Failed to generate: error: Unknown builtin method: 0x561d89ec2f58
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4a1568.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4a1568.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..2975207
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4a1568.wgsl.expected.ir.spvasm
@@ -0,0 +1,50 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 23
+; Schema: 0
+ OpCapability Shader
+ OpCapability Float16
+ OpCapability UniformAndStorageBuffer16BitAccess
+ OpCapability StorageBuffer16BitAccess
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveAdd_4a1568 "subgroupExclusiveAdd_4a1568"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %half = OpTypeFloat 16
+%tint_symbol_1 = OpTypeStruct %half
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %6 = OpTypeFunction %half
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+%half_0x1p_0 = OpConstant %half 0x1p+0
+%_ptr_Function_half = OpTypePointer Function %half
+ %void = OpTypeVoid
+ %17 = OpTypeFunction %void
+%_ptr_StorageBuffer_half = OpTypePointer StorageBuffer %half
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveAdd_4a1568 = OpFunction %half None %6
+ %7 = OpLabel
+ %res = OpVariable %_ptr_Function_half Function
+ %8 = OpGroupNonUniformFAdd %half %uint_3 ExclusiveScan %half_0x1p_0
+ OpStore %res %8
+ %14 = OpLoad %half %res
+ OpReturnValue %14
+ OpFunctionEnd
+%compute_main = OpFunction %void None %17
+ %18 = OpLabel
+ %19 = OpFunctionCall %half %subgroupExclusiveAdd_4a1568
+ %20 = OpAccessChain %_ptr_StorageBuffer_half %1 %uint_0
+ OpStore %20 %19
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4a1568.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4a1568.wgsl.expected.msl
new file mode 100644
index 0000000..6d99143
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4a1568.wgsl.expected.msl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupExclusiveAdd_4a1568() -> f16 {
+ var res : f16 = subgroupExclusiveAdd(1.0h);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_4a1568();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4a1568.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4a1568.wgsl.expected.spvasm
new file mode 100644
index 0000000..db08c5f
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4a1568.wgsl.expected.spvasm
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupExclusiveAdd_4a1568() -> f16 {
+ var res : f16 = subgroupExclusiveAdd(1.0h);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_4a1568();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4a1568.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4a1568.wgsl.expected.wgsl
new file mode 100644
index 0000000..93f8015
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4a1568.wgsl.expected.wgsl
@@ -0,0 +1,15 @@
+enable subgroups;
+enable subgroups_f16;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupExclusiveAdd_4a1568() -> f16 {
+ var res : f16 = subgroupExclusiveAdd(1.0h);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_4a1568();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4c8024.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4c8024.wgsl
new file mode 100644
index 0000000..3aa24b0
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4c8024.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+
+// fn subgroupExclusiveAdd(value: vec<2, f32>) -> vec<2, f32>
+fn subgroupExclusiveAdd_4c8024() -> vec2<f32>{
+ var res: vec2<f32> = subgroupExclusiveAdd(vec2<f32>(1.f));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_4c8024();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4c8024.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4c8024.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..341c439
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4c8024.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupExclusiveAdd_4c8024() -> vec2<f32> {
+ var res : vec2<f32> = subgroupExclusiveAdd(vec2<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_4c8024();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4c8024.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4c8024.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..341c439
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4c8024.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupExclusiveAdd_4c8024() -> vec2<f32> {
+ var res : vec2<f32> = subgroupExclusiveAdd(vec2<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_4c8024();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4c8024.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4c8024.wgsl.expected.glsl
new file mode 100644
index 0000000..7e0efb0
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4c8024.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupExclusiveAdd_4c8024() -> vec2<f32> {
+ var res : vec2<f32> = subgroupExclusiveAdd(vec2<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_4c8024();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55fe91648230
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4c8024.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4c8024.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..75ae109
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4c8024.wgsl.expected.ir.spvasm
@@ -0,0 +1,49 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveAdd_4c8024 "subgroupExclusiveAdd_4c8024"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %float = OpTypeFloat 32
+ %v2float = OpTypeVector %float 2
+%tint_symbol_1 = OpTypeStruct %v2float
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v2float
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %float_1 = OpConstant %float 1
+ %12 = OpConstantComposite %v2float %float_1 %float_1
+%_ptr_Function_v2float = OpTypePointer Function %v2float
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v2float = OpTypePointer StorageBuffer %v2float
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveAdd_4c8024 = OpFunction %v2float None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v2float Function
+ %9 = OpGroupNonUniformFAdd %v2float %uint_3 ExclusiveScan %12
+ OpStore %res %9
+ %16 = OpLoad %v2float %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v2float %subgroupExclusiveAdd_4c8024
+ %22 = OpAccessChain %_ptr_StorageBuffer_v2float %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4c8024.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4c8024.wgsl.expected.msl
new file mode 100644
index 0000000..738ce30
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4c8024.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupExclusiveAdd_4c8024() -> vec2<f32> {
+ var res : vec2<f32> = subgroupExclusiveAdd(vec2<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_4c8024();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4c8024.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4c8024.wgsl.expected.spvasm
new file mode 100644
index 0000000..e1947bf
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4c8024.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupExclusiveAdd_4c8024() -> vec2<f32> {
+ var res : vec2<f32> = subgroupExclusiveAdd(vec2<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_4c8024();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4c8024.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4c8024.wgsl.expected.wgsl
new file mode 100644
index 0000000..aa10d1f
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/4c8024.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupExclusiveAdd_4c8024() -> vec2<f32> {
+ var res : vec2<f32> = subgroupExclusiveAdd(vec2<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_4c8024();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/71ad0f.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/71ad0f.wgsl
new file mode 100644
index 0000000..36b2599
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/71ad0f.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+
+// fn subgroupExclusiveAdd(value: vec<4, f32>) -> vec<4, f32>
+fn subgroupExclusiveAdd_71ad0f() -> vec4<f32>{
+ var res: vec4<f32> = subgroupExclusiveAdd(vec4<f32>(1.f));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_71ad0f();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/71ad0f.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/71ad0f.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..753e3a5
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/71ad0f.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupExclusiveAdd_71ad0f() -> vec4<f32> {
+ var res : vec4<f32> = subgroupExclusiveAdd(vec4<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_71ad0f();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/71ad0f.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/71ad0f.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..753e3a5
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/71ad0f.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupExclusiveAdd_71ad0f() -> vec4<f32> {
+ var res : vec4<f32> = subgroupExclusiveAdd(vec4<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_71ad0f();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/71ad0f.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/71ad0f.wgsl.expected.glsl
new file mode 100644
index 0000000..76907a3
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/71ad0f.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupExclusiveAdd_71ad0f() -> vec4<f32> {
+ var res : vec4<f32> = subgroupExclusiveAdd(vec4<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_71ad0f();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55f312d57230
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/71ad0f.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/71ad0f.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..cd930ad
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/71ad0f.wgsl.expected.ir.spvasm
@@ -0,0 +1,49 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveAdd_71ad0f "subgroupExclusiveAdd_71ad0f"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %float = OpTypeFloat 32
+ %v4float = OpTypeVector %float 4
+%tint_symbol_1 = OpTypeStruct %v4float
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v4float
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %float_1 = OpConstant %float 1
+ %12 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveAdd_71ad0f = OpFunction %v4float None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v4float Function
+ %9 = OpGroupNonUniformFAdd %v4float %uint_3 ExclusiveScan %12
+ OpStore %res %9
+ %16 = OpLoad %v4float %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v4float %subgroupExclusiveAdd_71ad0f
+ %22 = OpAccessChain %_ptr_StorageBuffer_v4float %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/71ad0f.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/71ad0f.wgsl.expected.msl
new file mode 100644
index 0000000..186a08e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/71ad0f.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupExclusiveAdd_71ad0f() -> vec4<f32> {
+ var res : vec4<f32> = subgroupExclusiveAdd(vec4<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_71ad0f();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/71ad0f.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/71ad0f.wgsl.expected.spvasm
new file mode 100644
index 0000000..4e253d5
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/71ad0f.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupExclusiveAdd_71ad0f() -> vec4<f32> {
+ var res : vec4<f32> = subgroupExclusiveAdd(vec4<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_71ad0f();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/71ad0f.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/71ad0f.wgsl.expected.wgsl
new file mode 100644
index 0000000..5101a67
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/71ad0f.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupExclusiveAdd_71ad0f() -> vec4<f32> {
+ var res : vec4<f32> = subgroupExclusiveAdd(vec4<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_71ad0f();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/95e984.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/95e984.wgsl
new file mode 100644
index 0000000..1757a2a
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/95e984.wgsl
@@ -0,0 +1,57 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// flags: --hlsl_shader_model 62
+
+
+enable subgroups;
+enable subgroups_f16;
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+
+// fn subgroupExclusiveAdd(value: vec<4, f16>) -> vec<4, f16>
+fn subgroupExclusiveAdd_95e984() -> vec4<f16>{
+ var res: vec4<f16> = subgroupExclusiveAdd(vec4<f16>(1.h));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_95e984();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/95e984.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/95e984.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..cb6585a
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/95e984.wgsl.expected.dxc.hlsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupExclusiveAdd_95e984() -> vec4<f16> {
+ var res : vec4<f16> = subgroupExclusiveAdd(vec4<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_95e984();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/95e984.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/95e984.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..cb6585a
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/95e984.wgsl.expected.fxc.hlsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupExclusiveAdd_95e984() -> vec4<f16> {
+ var res : vec4<f16> = subgroupExclusiveAdd(vec4<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_95e984();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/95e984.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/95e984.wgsl.expected.glsl
new file mode 100644
index 0000000..46ffb13
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/95e984.wgsl.expected.glsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupExclusiveAdd_95e984() -> vec4<f16> {
+ var res : vec4<f16> = subgroupExclusiveAdd(vec4<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_95e984();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55e4dbb39230
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/95e984.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/95e984.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..93982c9
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/95e984.wgsl.expected.ir.spvasm
@@ -0,0 +1,52 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability Float16
+ OpCapability UniformAndStorageBuffer16BitAccess
+ OpCapability StorageBuffer16BitAccess
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveAdd_95e984 "subgroupExclusiveAdd_95e984"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %half = OpTypeFloat 16
+ %v4half = OpTypeVector %half 4
+%tint_symbol_1 = OpTypeStruct %v4half
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v4half
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+%half_0x1p_0 = OpConstant %half 0x1p+0
+ %12 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+%_ptr_Function_v4half = OpTypePointer Function %v4half
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v4half = OpTypePointer StorageBuffer %v4half
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveAdd_95e984 = OpFunction %v4half None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v4half Function
+ %9 = OpGroupNonUniformFAdd %v4half %uint_3 ExclusiveScan %12
+ OpStore %res %9
+ %16 = OpLoad %v4half %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v4half %subgroupExclusiveAdd_95e984
+ %22 = OpAccessChain %_ptr_StorageBuffer_v4half %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/95e984.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/95e984.wgsl.expected.msl
new file mode 100644
index 0000000..ec6b47d
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/95e984.wgsl.expected.msl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupExclusiveAdd_95e984() -> vec4<f16> {
+ var res : vec4<f16> = subgroupExclusiveAdd(vec4<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_95e984();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/95e984.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/95e984.wgsl.expected.spvasm
new file mode 100644
index 0000000..ee1f5a0
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/95e984.wgsl.expected.spvasm
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupExclusiveAdd_95e984() -> vec4<f16> {
+ var res : vec4<f16> = subgroupExclusiveAdd(vec4<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_95e984();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/95e984.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/95e984.wgsl.expected.wgsl
new file mode 100644
index 0000000..a5976af
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/95e984.wgsl.expected.wgsl
@@ -0,0 +1,15 @@
+enable subgroups;
+enable subgroups_f16;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupExclusiveAdd_95e984() -> vec4<f16> {
+ var res : vec4<f16> = subgroupExclusiveAdd(vec4<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_95e984();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/967e38.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/967e38.wgsl
new file mode 100644
index 0000000..9972262
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/967e38.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+
+// fn subgroupExclusiveAdd(value: f32) -> f32
+fn subgroupExclusiveAdd_967e38() -> f32{
+ var res: f32 = subgroupExclusiveAdd(1.f);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_967e38();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/967e38.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/967e38.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..f14c628
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/967e38.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupExclusiveAdd_967e38() -> f32 {
+ var res : f32 = subgroupExclusiveAdd(1.0f);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_967e38();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/967e38.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/967e38.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..f14c628
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/967e38.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupExclusiveAdd_967e38() -> f32 {
+ var res : f32 = subgroupExclusiveAdd(1.0f);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_967e38();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/967e38.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/967e38.wgsl.expected.glsl
new file mode 100644
index 0000000..17d7402
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/967e38.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupExclusiveAdd_967e38() -> f32 {
+ var res : f32 = subgroupExclusiveAdd(1.0f);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_967e38();
+}
+
+Failed to generate: error: Unknown builtin method: 0x557874a96f58
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/967e38.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/967e38.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..959fe4d
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/967e38.wgsl.expected.ir.spvasm
@@ -0,0 +1,47 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 23
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveAdd_967e38 "subgroupExclusiveAdd_967e38"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %float = OpTypeFloat 32
+%tint_symbol_1 = OpTypeStruct %float
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %6 = OpTypeFunction %float
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %float_1 = OpConstant %float 1
+%_ptr_Function_float = OpTypePointer Function %float
+ %void = OpTypeVoid
+ %17 = OpTypeFunction %void
+%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveAdd_967e38 = OpFunction %float None %6
+ %7 = OpLabel
+ %res = OpVariable %_ptr_Function_float Function
+ %8 = OpGroupNonUniformFAdd %float %uint_3 ExclusiveScan %float_1
+ OpStore %res %8
+ %14 = OpLoad %float %res
+ OpReturnValue %14
+ OpFunctionEnd
+%compute_main = OpFunction %void None %17
+ %18 = OpLabel
+ %19 = OpFunctionCall %float %subgroupExclusiveAdd_967e38
+ %20 = OpAccessChain %_ptr_StorageBuffer_float %1 %uint_0
+ OpStore %20 %19
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/967e38.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/967e38.wgsl.expected.msl
new file mode 100644
index 0000000..2024c8e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/967e38.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupExclusiveAdd_967e38() -> f32 {
+ var res : f32 = subgroupExclusiveAdd(1.0f);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_967e38();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/967e38.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/967e38.wgsl.expected.spvasm
new file mode 100644
index 0000000..8b3eb5a
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/967e38.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupExclusiveAdd_967e38() -> f32 {
+ var res : f32 = subgroupExclusiveAdd(1.0f);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_967e38();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/967e38.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/967e38.wgsl.expected.wgsl
new file mode 100644
index 0000000..9501cb8
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/967e38.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupExclusiveAdd_967e38() -> f32 {
+ var res : f32 = subgroupExclusiveAdd(1.0f);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_967e38();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/b0c261.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/b0c261.wgsl
new file mode 100644
index 0000000..fabbb2d
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/b0c261.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+
+// fn subgroupExclusiveAdd(value: i32) -> i32
+fn subgroupExclusiveAdd_b0c261() -> i32{
+ var res: i32 = subgroupExclusiveAdd(1i);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_b0c261();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/b0c261.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/b0c261.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..73fa73c
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/b0c261.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupExclusiveAdd_b0c261() -> i32 {
+ var res : i32 = subgroupExclusiveAdd(1i);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_b0c261();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/b0c261.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/b0c261.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..73fa73c
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/b0c261.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupExclusiveAdd_b0c261() -> i32 {
+ var res : i32 = subgroupExclusiveAdd(1i);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_b0c261();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/b0c261.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/b0c261.wgsl.expected.glsl
new file mode 100644
index 0000000..4595cb5
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/b0c261.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupExclusiveAdd_b0c261() -> i32 {
+ var res : i32 = subgroupExclusiveAdd(1i);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_b0c261();
+}
+
+Failed to generate: error: Unknown builtin method: 0x564c03b60f58
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/b0c261.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/b0c261.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..82dd8f0
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/b0c261.wgsl.expected.ir.spvasm
@@ -0,0 +1,47 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 23
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveAdd_b0c261 "subgroupExclusiveAdd_b0c261"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %int = OpTypeInt 32 1
+%tint_symbol_1 = OpTypeStruct %int
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %6 = OpTypeFunction %int
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+ %void = OpTypeVoid
+ %17 = OpTypeFunction %void
+%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveAdd_b0c261 = OpFunction %int None %6
+ %7 = OpLabel
+ %res = OpVariable %_ptr_Function_int Function
+ %8 = OpGroupNonUniformIAdd %int %uint_3 ExclusiveScan %int_1
+ OpStore %res %8
+ %14 = OpLoad %int %res
+ OpReturnValue %14
+ OpFunctionEnd
+%compute_main = OpFunction %void None %17
+ %18 = OpLabel
+ %19 = OpFunctionCall %int %subgroupExclusiveAdd_b0c261
+ %20 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
+ OpStore %20 %19
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/b0c261.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/b0c261.wgsl.expected.msl
new file mode 100644
index 0000000..625491b
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/b0c261.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupExclusiveAdd_b0c261() -> i32 {
+ var res : i32 = subgroupExclusiveAdd(1i);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_b0c261();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/b0c261.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/b0c261.wgsl.expected.spvasm
new file mode 100644
index 0000000..8272ebe
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/b0c261.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupExclusiveAdd_b0c261() -> i32 {
+ var res : i32 = subgroupExclusiveAdd(1i);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_b0c261();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/b0c261.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/b0c261.wgsl.expected.wgsl
new file mode 100644
index 0000000..5d3c496
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/b0c261.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupExclusiveAdd_b0c261() -> i32 {
+ var res : i32 = subgroupExclusiveAdd(1i);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_b0c261();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/c08160.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/c08160.wgsl
new file mode 100644
index 0000000..f249b46
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/c08160.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+
+// fn subgroupExclusiveAdd(value: vec<3, i32>) -> vec<3, i32>
+fn subgroupExclusiveAdd_c08160() -> vec3<i32>{
+ var res: vec3<i32> = subgroupExclusiveAdd(vec3<i32>(1i));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_c08160();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/c08160.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/c08160.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..c101a50
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/c08160.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupExclusiveAdd_c08160() -> vec3<i32> {
+ var res : vec3<i32> = subgroupExclusiveAdd(vec3<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_c08160();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/c08160.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/c08160.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..c101a50
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/c08160.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupExclusiveAdd_c08160() -> vec3<i32> {
+ var res : vec3<i32> = subgroupExclusiveAdd(vec3<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_c08160();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/c08160.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/c08160.wgsl.expected.glsl
new file mode 100644
index 0000000..dc8fcbd
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/c08160.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupExclusiveAdd_c08160() -> vec3<i32> {
+ var res : vec3<i32> = subgroupExclusiveAdd(vec3<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_c08160();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55d88c4a4230
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/c08160.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/c08160.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..2d52523
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/c08160.wgsl.expected.ir.spvasm
@@ -0,0 +1,49 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveAdd_c08160 "subgroupExclusiveAdd_c08160"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %int = OpTypeInt 32 1
+ %v3int = OpTypeVector %int 3
+%tint_symbol_1 = OpTypeStruct %v3int
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v3int
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %int_1 = OpConstant %int 1
+ %12 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v3int = OpTypePointer StorageBuffer %v3int
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveAdd_c08160 = OpFunction %v3int None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v3int Function
+ %9 = OpGroupNonUniformIAdd %v3int %uint_3 ExclusiveScan %12
+ OpStore %res %9
+ %16 = OpLoad %v3int %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v3int %subgroupExclusiveAdd_c08160
+ %22 = OpAccessChain %_ptr_StorageBuffer_v3int %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/c08160.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/c08160.wgsl.expected.msl
new file mode 100644
index 0000000..9429d91
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/c08160.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupExclusiveAdd_c08160() -> vec3<i32> {
+ var res : vec3<i32> = subgroupExclusiveAdd(vec3<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_c08160();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/c08160.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/c08160.wgsl.expected.spvasm
new file mode 100644
index 0000000..000de42
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/c08160.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupExclusiveAdd_c08160() -> vec3<i32> {
+ var res : vec3<i32> = subgroupExclusiveAdd(vec3<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_c08160();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/c08160.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/c08160.wgsl.expected.wgsl
new file mode 100644
index 0000000..71694ef
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/c08160.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupExclusiveAdd_c08160() -> vec3<i32> {
+ var res : vec3<i32> = subgroupExclusiveAdd(vec3<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_c08160();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/e58e23.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/e58e23.wgsl
new file mode 100644
index 0000000..1060a80
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/e58e23.wgsl
@@ -0,0 +1,57 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// flags: --hlsl_shader_model 62
+
+
+enable subgroups;
+enable subgroups_f16;
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+
+// fn subgroupExclusiveAdd(value: vec<3, f16>) -> vec<3, f16>
+fn subgroupExclusiveAdd_e58e23() -> vec3<f16>{
+ var res: vec3<f16> = subgroupExclusiveAdd(vec3<f16>(1.h));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_e58e23();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/e58e23.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/e58e23.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..5af1606
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/e58e23.wgsl.expected.dxc.hlsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupExclusiveAdd_e58e23() -> vec3<f16> {
+ var res : vec3<f16> = subgroupExclusiveAdd(vec3<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_e58e23();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/e58e23.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/e58e23.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..5af1606
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/e58e23.wgsl.expected.fxc.hlsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupExclusiveAdd_e58e23() -> vec3<f16> {
+ var res : vec3<f16> = subgroupExclusiveAdd(vec3<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_e58e23();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/e58e23.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/e58e23.wgsl.expected.glsl
new file mode 100644
index 0000000..eb20c03
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/e58e23.wgsl.expected.glsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupExclusiveAdd_e58e23() -> vec3<f16> {
+ var res : vec3<f16> = subgroupExclusiveAdd(vec3<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_e58e23();
+}
+
+Failed to generate: error: Unknown builtin method: 0x561287866230
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/e58e23.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/e58e23.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..6fbab60
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/e58e23.wgsl.expected.ir.spvasm
@@ -0,0 +1,52 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability Float16
+ OpCapability UniformAndStorageBuffer16BitAccess
+ OpCapability StorageBuffer16BitAccess
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveAdd_e58e23 "subgroupExclusiveAdd_e58e23"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %half = OpTypeFloat 16
+ %v3half = OpTypeVector %half 3
+%tint_symbol_1 = OpTypeStruct %v3half
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v3half
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+%half_0x1p_0 = OpConstant %half 0x1p+0
+ %12 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+%_ptr_Function_v3half = OpTypePointer Function %v3half
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v3half = OpTypePointer StorageBuffer %v3half
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveAdd_e58e23 = OpFunction %v3half None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v3half Function
+ %9 = OpGroupNonUniformFAdd %v3half %uint_3 ExclusiveScan %12
+ OpStore %res %9
+ %16 = OpLoad %v3half %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v3half %subgroupExclusiveAdd_e58e23
+ %22 = OpAccessChain %_ptr_StorageBuffer_v3half %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/e58e23.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/e58e23.wgsl.expected.msl
new file mode 100644
index 0000000..e8fbd40
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/e58e23.wgsl.expected.msl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupExclusiveAdd_e58e23() -> vec3<f16> {
+ var res : vec3<f16> = subgroupExclusiveAdd(vec3<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_e58e23();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/e58e23.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/e58e23.wgsl.expected.spvasm
new file mode 100644
index 0000000..f988f8c
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/e58e23.wgsl.expected.spvasm
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupExclusiveAdd_e58e23() -> vec3<f16> {
+ var res : vec3<f16> = subgroupExclusiveAdd(vec3<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_e58e23();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/e58e23.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/e58e23.wgsl.expected.wgsl
new file mode 100644
index 0000000..2f04512
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/e58e23.wgsl.expected.wgsl
@@ -0,0 +1,15 @@
+enable subgroups;
+enable subgroups_f16;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupExclusiveAdd_e58e23() -> vec3<f16> {
+ var res : vec3<f16> = subgroupExclusiveAdd(vec3<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_e58e23();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/ec300f.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/ec300f.wgsl
new file mode 100644
index 0000000..a1e0c54
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/ec300f.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+
+// fn subgroupExclusiveAdd(value: vec<4, u32>) -> vec<4, u32>
+fn subgroupExclusiveAdd_ec300f() -> vec4<u32>{
+ var res: vec4<u32> = subgroupExclusiveAdd(vec4<u32>(1u));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_ec300f();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/ec300f.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/ec300f.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..0995edf
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/ec300f.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupExclusiveAdd_ec300f() -> vec4<u32> {
+ var res : vec4<u32> = subgroupExclusiveAdd(vec4<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_ec300f();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/ec300f.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/ec300f.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..0995edf
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/ec300f.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupExclusiveAdd_ec300f() -> vec4<u32> {
+ var res : vec4<u32> = subgroupExclusiveAdd(vec4<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_ec300f();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/ec300f.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/ec300f.wgsl.expected.glsl
new file mode 100644
index 0000000..6ab9280
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/ec300f.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupExclusiveAdd_ec300f() -> vec4<u32> {
+ var res : vec4<u32> = subgroupExclusiveAdd(vec4<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_ec300f();
+}
+
+Failed to generate: error: Unknown builtin method: 0x563aab9db230
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/ec300f.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/ec300f.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..c37d727
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/ec300f.wgsl.expected.ir.spvasm
@@ -0,0 +1,48 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 24
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveAdd_ec300f "subgroupExclusiveAdd_ec300f"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %uint = OpTypeInt 32 0
+ %v4uint = OpTypeVector %uint 4
+%tint_symbol_1 = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v4uint
+ %uint_3 = OpConstant %uint 3
+ %uint_1 = OpConstant %uint 1
+ %11 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+ %void = OpTypeVoid
+ %18 = OpTypeFunction %void
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveAdd_ec300f = OpFunction %v4uint None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v4uint Function
+ %9 = OpGroupNonUniformIAdd %v4uint %uint_3 ExclusiveScan %11
+ OpStore %res %9
+ %15 = OpLoad %v4uint %res
+ OpReturnValue %15
+ OpFunctionEnd
+%compute_main = OpFunction %void None %18
+ %19 = OpLabel
+ %20 = OpFunctionCall %v4uint %subgroupExclusiveAdd_ec300f
+ %21 = OpAccessChain %_ptr_StorageBuffer_v4uint %1 %uint_0
+ OpStore %21 %20
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/ec300f.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/ec300f.wgsl.expected.msl
new file mode 100644
index 0000000..6ec76fb
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/ec300f.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupExclusiveAdd_ec300f() -> vec4<u32> {
+ var res : vec4<u32> = subgroupExclusiveAdd(vec4<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_ec300f();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/ec300f.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/ec300f.wgsl.expected.spvasm
new file mode 100644
index 0000000..8b8268f
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/ec300f.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupExclusiveAdd_ec300f() -> vec4<u32> {
+ var res : vec4<u32> = subgroupExclusiveAdd(vec4<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_ec300f();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/ec300f.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/ec300f.wgsl.expected.wgsl
new file mode 100644
index 0000000..6788744
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/ec300f.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupExclusiveAdd_ec300f() -> vec4<u32> {
+ var res : vec4<u32> = subgroupExclusiveAdd(vec4<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_ec300f();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/f0f712.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/f0f712.wgsl
new file mode 100644
index 0000000..95229e4
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/f0f712.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+
+// fn subgroupExclusiveAdd(value: vec<2, i32>) -> vec<2, i32>
+fn subgroupExclusiveAdd_f0f712() -> vec2<i32>{
+ var res: vec2<i32> = subgroupExclusiveAdd(vec2<i32>(1i));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_f0f712();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/f0f712.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/f0f712.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..20a1dff
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/f0f712.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupExclusiveAdd_f0f712() -> vec2<i32> {
+ var res : vec2<i32> = subgroupExclusiveAdd(vec2<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_f0f712();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/f0f712.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/f0f712.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..20a1dff
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/f0f712.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupExclusiveAdd_f0f712() -> vec2<i32> {
+ var res : vec2<i32> = subgroupExclusiveAdd(vec2<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_f0f712();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/f0f712.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/f0f712.wgsl.expected.glsl
new file mode 100644
index 0000000..d4b1754
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/f0f712.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupExclusiveAdd_f0f712() -> vec2<i32> {
+ var res : vec2<i32> = subgroupExclusiveAdd(vec2<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_f0f712();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55d564794230
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/f0f712.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/f0f712.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..defd206
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/f0f712.wgsl.expected.ir.spvasm
@@ -0,0 +1,49 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveAdd_f0f712 "subgroupExclusiveAdd_f0f712"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %int = OpTypeInt 32 1
+ %v2int = OpTypeVector %int 2
+%tint_symbol_1 = OpTypeStruct %v2int
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v2int
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %int_1 = OpConstant %int 1
+ %12 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v2int = OpTypePointer StorageBuffer %v2int
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveAdd_f0f712 = OpFunction %v2int None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v2int Function
+ %9 = OpGroupNonUniformIAdd %v2int %uint_3 ExclusiveScan %12
+ OpStore %res %9
+ %16 = OpLoad %v2int %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v2int %subgroupExclusiveAdd_f0f712
+ %22 = OpAccessChain %_ptr_StorageBuffer_v2int %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/f0f712.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/f0f712.wgsl.expected.msl
new file mode 100644
index 0000000..7f44aa1
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/f0f712.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupExclusiveAdd_f0f712() -> vec2<i32> {
+ var res : vec2<i32> = subgroupExclusiveAdd(vec2<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_f0f712();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/f0f712.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/f0f712.wgsl.expected.spvasm
new file mode 100644
index 0000000..941b886
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/f0f712.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupExclusiveAdd_f0f712() -> vec2<i32> {
+ var res : vec2<i32> = subgroupExclusiveAdd(vec2<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_f0f712();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveAdd/f0f712.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/f0f712.wgsl.expected.wgsl
new file mode 100644
index 0000000..b31d68d
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveAdd/f0f712.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupExclusiveAdd_f0f712() -> vec2<i32> {
+ var res : vec2<i32> = subgroupExclusiveAdd(vec2<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_f0f712();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/000b92.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/000b92.wgsl
new file mode 100644
index 0000000..b63fa18
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/000b92.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+
+// fn subgroupExclusiveMul(value: vec<4, u32>) -> vec<4, u32>
+fn subgroupExclusiveMul_000b92() -> vec4<u32>{
+ var res: vec4<u32> = subgroupExclusiveMul(vec4<u32>(1u));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_000b92();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/000b92.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/000b92.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..80c717e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/000b92.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupExclusiveMul_000b92() -> vec4<u32> {
+ var res : vec4<u32> = subgroupExclusiveMul(vec4<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_000b92();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/000b92.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/000b92.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..80c717e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/000b92.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupExclusiveMul_000b92() -> vec4<u32> {
+ var res : vec4<u32> = subgroupExclusiveMul(vec4<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_000b92();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/000b92.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/000b92.wgsl.expected.glsl
new file mode 100644
index 0000000..d0ddcc0
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/000b92.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupExclusiveMul_000b92() -> vec4<u32> {
+ var res : vec4<u32> = subgroupExclusiveMul(vec4<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_000b92();
+}
+
+Failed to generate: error: Unknown builtin method: 0x564749dbe230
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/000b92.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveMul/000b92.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..55becf4
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/000b92.wgsl.expected.ir.spvasm
@@ -0,0 +1,48 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 24
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveMul_000b92 "subgroupExclusiveMul_000b92"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %uint = OpTypeInt 32 0
+ %v4uint = OpTypeVector %uint 4
+%tint_symbol_1 = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v4uint
+ %uint_3 = OpConstant %uint 3
+ %uint_1 = OpConstant %uint 1
+ %11 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+ %void = OpTypeVoid
+ %18 = OpTypeFunction %void
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveMul_000b92 = OpFunction %v4uint None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v4uint Function
+ %9 = OpGroupNonUniformIMul %v4uint %uint_3 ExclusiveScan %11
+ OpStore %res %9
+ %15 = OpLoad %v4uint %res
+ OpReturnValue %15
+ OpFunctionEnd
+%compute_main = OpFunction %void None %18
+ %19 = OpLabel
+ %20 = OpFunctionCall %v4uint %subgroupExclusiveMul_000b92
+ %21 = OpAccessChain %_ptr_StorageBuffer_v4uint %1 %uint_0
+ OpStore %21 %20
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/000b92.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/000b92.wgsl.expected.msl
new file mode 100644
index 0000000..27162ab
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/000b92.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupExclusiveMul_000b92() -> vec4<u32> {
+ var res : vec4<u32> = subgroupExclusiveMul(vec4<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_000b92();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/000b92.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveMul/000b92.wgsl.expected.spvasm
new file mode 100644
index 0000000..df7b1f2
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/000b92.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupExclusiveMul_000b92() -> vec4<u32> {
+ var res : vec4<u32> = subgroupExclusiveMul(vec4<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_000b92();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/000b92.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/000b92.wgsl.expected.wgsl
new file mode 100644
index 0000000..6886bc4
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/000b92.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupExclusiveMul_000b92() -> vec4<u32> {
+ var res : vec4<u32> = subgroupExclusiveMul(vec4<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_000b92();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/019660.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/019660.wgsl
new file mode 100644
index 0000000..eabeb3e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/019660.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+
+// fn subgroupExclusiveMul(value: vec<4, i32>) -> vec<4, i32>
+fn subgroupExclusiveMul_019660() -> vec4<i32>{
+ var res: vec4<i32> = subgroupExclusiveMul(vec4<i32>(1i));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_019660();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/019660.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/019660.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..dd8c4cb
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/019660.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupExclusiveMul_019660() -> vec4<i32> {
+ var res : vec4<i32> = subgroupExclusiveMul(vec4<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_019660();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/019660.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/019660.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..dd8c4cb
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/019660.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupExclusiveMul_019660() -> vec4<i32> {
+ var res : vec4<i32> = subgroupExclusiveMul(vec4<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_019660();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/019660.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/019660.wgsl.expected.glsl
new file mode 100644
index 0000000..539b2bf
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/019660.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupExclusiveMul_019660() -> vec4<i32> {
+ var res : vec4<i32> = subgroupExclusiveMul(vec4<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_019660();
+}
+
+Failed to generate: error: Unknown builtin method: 0x560050cab230
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/019660.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveMul/019660.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..4991987
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/019660.wgsl.expected.ir.spvasm
@@ -0,0 +1,49 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveMul_019660 "subgroupExclusiveMul_019660"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %int = OpTypeInt 32 1
+ %v4int = OpTypeVector %int 4
+%tint_symbol_1 = OpTypeStruct %v4int
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v4int
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %int_1 = OpConstant %int 1
+ %12 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveMul_019660 = OpFunction %v4int None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v4int Function
+ %9 = OpGroupNonUniformIMul %v4int %uint_3 ExclusiveScan %12
+ OpStore %res %9
+ %16 = OpLoad %v4int %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v4int %subgroupExclusiveMul_019660
+ %22 = OpAccessChain %_ptr_StorageBuffer_v4int %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/019660.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/019660.wgsl.expected.msl
new file mode 100644
index 0000000..5f1f7ee
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/019660.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupExclusiveMul_019660() -> vec4<i32> {
+ var res : vec4<i32> = subgroupExclusiveMul(vec4<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_019660();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/019660.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveMul/019660.wgsl.expected.spvasm
new file mode 100644
index 0000000..20b6ef3
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/019660.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupExclusiveMul_019660() -> vec4<i32> {
+ var res : vec4<i32> = subgroupExclusiveMul(vec4<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_019660();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/019660.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/019660.wgsl.expected.wgsl
new file mode 100644
index 0000000..8dff29d
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/019660.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupExclusiveMul_019660() -> vec4<i32> {
+ var res : vec4<i32> = subgroupExclusiveMul(vec4<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_019660();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/0a04d5.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/0a04d5.wgsl
new file mode 100644
index 0000000..8c37ca5
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/0a04d5.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+
+// fn subgroupExclusiveMul(value: vec<3, f32>) -> vec<3, f32>
+fn subgroupExclusiveMul_0a04d5() -> vec3<f32>{
+ var res: vec3<f32> = subgroupExclusiveMul(vec3<f32>(1.f));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_0a04d5();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/0a04d5.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/0a04d5.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..d82e527
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/0a04d5.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupExclusiveMul_0a04d5() -> vec3<f32> {
+ var res : vec3<f32> = subgroupExclusiveMul(vec3<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_0a04d5();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/0a04d5.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/0a04d5.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..d82e527
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/0a04d5.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupExclusiveMul_0a04d5() -> vec3<f32> {
+ var res : vec3<f32> = subgroupExclusiveMul(vec3<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_0a04d5();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/0a04d5.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/0a04d5.wgsl.expected.glsl
new file mode 100644
index 0000000..03091e5
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/0a04d5.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupExclusiveMul_0a04d5() -> vec3<f32> {
+ var res : vec3<f32> = subgroupExclusiveMul(vec3<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_0a04d5();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55718f403230
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/0a04d5.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveMul/0a04d5.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..b97ef30
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/0a04d5.wgsl.expected.ir.spvasm
@@ -0,0 +1,49 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveMul_0a04d5 "subgroupExclusiveMul_0a04d5"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %float = OpTypeFloat 32
+ %v3float = OpTypeVector %float 3
+%tint_symbol_1 = OpTypeStruct %v3float
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v3float
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %float_1 = OpConstant %float 1
+ %12 = OpConstantComposite %v3float %float_1 %float_1 %float_1
+%_ptr_Function_v3float = OpTypePointer Function %v3float
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v3float = OpTypePointer StorageBuffer %v3float
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveMul_0a04d5 = OpFunction %v3float None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v3float Function
+ %9 = OpGroupNonUniformFMul %v3float %uint_3 ExclusiveScan %12
+ OpStore %res %9
+ %16 = OpLoad %v3float %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v3float %subgroupExclusiveMul_0a04d5
+ %22 = OpAccessChain %_ptr_StorageBuffer_v3float %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/0a04d5.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/0a04d5.wgsl.expected.msl
new file mode 100644
index 0000000..e50e55f
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/0a04d5.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupExclusiveMul_0a04d5() -> vec3<f32> {
+ var res : vec3<f32> = subgroupExclusiveMul(vec3<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_0a04d5();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/0a04d5.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveMul/0a04d5.wgsl.expected.spvasm
new file mode 100644
index 0000000..cb395d3
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/0a04d5.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupExclusiveMul_0a04d5() -> vec3<f32> {
+ var res : vec3<f32> = subgroupExclusiveMul(vec3<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_0a04d5();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/0a04d5.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/0a04d5.wgsl.expected.wgsl
new file mode 100644
index 0000000..ab6ccd0
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/0a04d5.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupExclusiveMul_0a04d5() -> vec3<f32> {
+ var res : vec3<f32> = subgroupExclusiveMul(vec3<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_0a04d5();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/13ba26.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/13ba26.wgsl
new file mode 100644
index 0000000..ff3272d
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/13ba26.wgsl
@@ -0,0 +1,57 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// flags: --hlsl_shader_model 62
+
+
+enable subgroups;
+enable subgroups_f16;
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+
+// fn subgroupExclusiveMul(value: vec<3, f16>) -> vec<3, f16>
+fn subgroupExclusiveMul_13ba26() -> vec3<f16>{
+ var res: vec3<f16> = subgroupExclusiveMul(vec3<f16>(1.h));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_13ba26();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/13ba26.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/13ba26.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..fb00194
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/13ba26.wgsl.expected.dxc.hlsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupExclusiveMul_13ba26() -> vec3<f16> {
+ var res : vec3<f16> = subgroupExclusiveMul(vec3<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_13ba26();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/13ba26.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/13ba26.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..fb00194
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/13ba26.wgsl.expected.fxc.hlsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupExclusiveMul_13ba26() -> vec3<f16> {
+ var res : vec3<f16> = subgroupExclusiveMul(vec3<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_13ba26();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/13ba26.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/13ba26.wgsl.expected.glsl
new file mode 100644
index 0000000..6fadce4
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/13ba26.wgsl.expected.glsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupExclusiveMul_13ba26() -> vec3<f16> {
+ var res : vec3<f16> = subgroupExclusiveMul(vec3<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_13ba26();
+}
+
+Failed to generate: error: Unknown builtin method: 0x564d1f8be230
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/13ba26.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveMul/13ba26.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..14cccdb
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/13ba26.wgsl.expected.ir.spvasm
@@ -0,0 +1,52 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability Float16
+ OpCapability UniformAndStorageBuffer16BitAccess
+ OpCapability StorageBuffer16BitAccess
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveMul_13ba26 "subgroupExclusiveMul_13ba26"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %half = OpTypeFloat 16
+ %v3half = OpTypeVector %half 3
+%tint_symbol_1 = OpTypeStruct %v3half
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v3half
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+%half_0x1p_0 = OpConstant %half 0x1p+0
+ %12 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+%_ptr_Function_v3half = OpTypePointer Function %v3half
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v3half = OpTypePointer StorageBuffer %v3half
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveMul_13ba26 = OpFunction %v3half None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v3half Function
+ %9 = OpGroupNonUniformFMul %v3half %uint_3 ExclusiveScan %12
+ OpStore %res %9
+ %16 = OpLoad %v3half %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v3half %subgroupExclusiveMul_13ba26
+ %22 = OpAccessChain %_ptr_StorageBuffer_v3half %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/13ba26.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/13ba26.wgsl.expected.msl
new file mode 100644
index 0000000..31a1ff5
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/13ba26.wgsl.expected.msl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupExclusiveMul_13ba26() -> vec3<f16> {
+ var res : vec3<f16> = subgroupExclusiveMul(vec3<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_13ba26();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/13ba26.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveMul/13ba26.wgsl.expected.spvasm
new file mode 100644
index 0000000..0195367
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/13ba26.wgsl.expected.spvasm
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupExclusiveMul_13ba26() -> vec3<f16> {
+ var res : vec3<f16> = subgroupExclusiveMul(vec3<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_13ba26();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/13ba26.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/13ba26.wgsl.expected.wgsl
new file mode 100644
index 0000000..662845d
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/13ba26.wgsl.expected.wgsl
@@ -0,0 +1,15 @@
+enable subgroups;
+enable subgroups_f16;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupExclusiveMul_13ba26() -> vec3<f16> {
+ var res : vec3<f16> = subgroupExclusiveMul(vec3<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_13ba26();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/25d1b9.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/25d1b9.wgsl
new file mode 100644
index 0000000..8a0cc7c
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/25d1b9.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+
+// fn subgroupExclusiveMul(value: vec<2, f32>) -> vec<2, f32>
+fn subgroupExclusiveMul_25d1b9() -> vec2<f32>{
+ var res: vec2<f32> = subgroupExclusiveMul(vec2<f32>(1.f));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_25d1b9();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/25d1b9.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/25d1b9.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..6b150a1
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/25d1b9.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupExclusiveMul_25d1b9() -> vec2<f32> {
+ var res : vec2<f32> = subgroupExclusiveMul(vec2<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_25d1b9();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/25d1b9.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/25d1b9.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..6b150a1
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/25d1b9.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupExclusiveMul_25d1b9() -> vec2<f32> {
+ var res : vec2<f32> = subgroupExclusiveMul(vec2<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_25d1b9();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/25d1b9.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/25d1b9.wgsl.expected.glsl
new file mode 100644
index 0000000..16d9a6a
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/25d1b9.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupExclusiveMul_25d1b9() -> vec2<f32> {
+ var res : vec2<f32> = subgroupExclusiveMul(vec2<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_25d1b9();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55cd11cac230
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/25d1b9.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveMul/25d1b9.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..c615bc6
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/25d1b9.wgsl.expected.ir.spvasm
@@ -0,0 +1,49 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveMul_25d1b9 "subgroupExclusiveMul_25d1b9"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %float = OpTypeFloat 32
+ %v2float = OpTypeVector %float 2
+%tint_symbol_1 = OpTypeStruct %v2float
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v2float
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %float_1 = OpConstant %float 1
+ %12 = OpConstantComposite %v2float %float_1 %float_1
+%_ptr_Function_v2float = OpTypePointer Function %v2float
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v2float = OpTypePointer StorageBuffer %v2float
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveMul_25d1b9 = OpFunction %v2float None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v2float Function
+ %9 = OpGroupNonUniformFMul %v2float %uint_3 ExclusiveScan %12
+ OpStore %res %9
+ %16 = OpLoad %v2float %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v2float %subgroupExclusiveMul_25d1b9
+ %22 = OpAccessChain %_ptr_StorageBuffer_v2float %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/25d1b9.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/25d1b9.wgsl.expected.msl
new file mode 100644
index 0000000..6f6293b
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/25d1b9.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupExclusiveMul_25d1b9() -> vec2<f32> {
+ var res : vec2<f32> = subgroupExclusiveMul(vec2<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_25d1b9();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/25d1b9.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveMul/25d1b9.wgsl.expected.spvasm
new file mode 100644
index 0000000..490d44f
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/25d1b9.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupExclusiveMul_25d1b9() -> vec2<f32> {
+ var res : vec2<f32> = subgroupExclusiveMul(vec2<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_25d1b9();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/25d1b9.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/25d1b9.wgsl.expected.wgsl
new file mode 100644
index 0000000..7ec6b85
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/25d1b9.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupExclusiveMul_25d1b9() -> vec2<f32> {
+ var res : vec2<f32> = subgroupExclusiveMul(vec2<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_25d1b9();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/4525a3.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/4525a3.wgsl
new file mode 100644
index 0000000..9253a80
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/4525a3.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+
+// fn subgroupExclusiveMul(value: vec<2, i32>) -> vec<2, i32>
+fn subgroupExclusiveMul_4525a3() -> vec2<i32>{
+ var res: vec2<i32> = subgroupExclusiveMul(vec2<i32>(1i));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_4525a3();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/4525a3.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/4525a3.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..9f3caae
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/4525a3.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupExclusiveMul_4525a3() -> vec2<i32> {
+ var res : vec2<i32> = subgroupExclusiveMul(vec2<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_4525a3();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/4525a3.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/4525a3.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..9f3caae
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/4525a3.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupExclusiveMul_4525a3() -> vec2<i32> {
+ var res : vec2<i32> = subgroupExclusiveMul(vec2<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_4525a3();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/4525a3.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/4525a3.wgsl.expected.glsl
new file mode 100644
index 0000000..6b91678
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/4525a3.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupExclusiveMul_4525a3() -> vec2<i32> {
+ var res : vec2<i32> = subgroupExclusiveMul(vec2<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_4525a3();
+}
+
+Failed to generate: error: Unknown builtin method: 0x564d514bc230
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/4525a3.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveMul/4525a3.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..0e28e8a
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/4525a3.wgsl.expected.ir.spvasm
@@ -0,0 +1,49 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveMul_4525a3 "subgroupExclusiveMul_4525a3"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %int = OpTypeInt 32 1
+ %v2int = OpTypeVector %int 2
+%tint_symbol_1 = OpTypeStruct %v2int
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v2int
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %int_1 = OpConstant %int 1
+ %12 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v2int = OpTypePointer StorageBuffer %v2int
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveMul_4525a3 = OpFunction %v2int None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v2int Function
+ %9 = OpGroupNonUniformIMul %v2int %uint_3 ExclusiveScan %12
+ OpStore %res %9
+ %16 = OpLoad %v2int %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v2int %subgroupExclusiveMul_4525a3
+ %22 = OpAccessChain %_ptr_StorageBuffer_v2int %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/4525a3.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/4525a3.wgsl.expected.msl
new file mode 100644
index 0000000..f9f0124
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/4525a3.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupExclusiveMul_4525a3() -> vec2<i32> {
+ var res : vec2<i32> = subgroupExclusiveMul(vec2<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_4525a3();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/4525a3.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveMul/4525a3.wgsl.expected.spvasm
new file mode 100644
index 0000000..e47360e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/4525a3.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupExclusiveMul_4525a3() -> vec2<i32> {
+ var res : vec2<i32> = subgroupExclusiveMul(vec2<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_4525a3();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/4525a3.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/4525a3.wgsl.expected.wgsl
new file mode 100644
index 0000000..f5f74e3
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/4525a3.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupExclusiveMul_4525a3() -> vec2<i32> {
+ var res : vec2<i32> = subgroupExclusiveMul(vec2<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_4525a3();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/6f431e.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/6f431e.wgsl
new file mode 100644
index 0000000..fc90738
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/6f431e.wgsl
@@ -0,0 +1,57 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// flags: --hlsl_shader_model 62
+
+
+enable subgroups;
+enable subgroups_f16;
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+
+// fn subgroupExclusiveMul(value: f16) -> f16
+fn subgroupExclusiveMul_6f431e() -> f16{
+ var res: f16 = subgroupExclusiveMul(1.h);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_6f431e();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/6f431e.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/6f431e.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..a398280
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/6f431e.wgsl.expected.dxc.hlsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupExclusiveMul_6f431e() -> f16 {
+ var res : f16 = subgroupExclusiveMul(1.0h);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_6f431e();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/6f431e.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/6f431e.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..a398280
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/6f431e.wgsl.expected.fxc.hlsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupExclusiveMul_6f431e() -> f16 {
+ var res : f16 = subgroupExclusiveMul(1.0h);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_6f431e();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/6f431e.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/6f431e.wgsl.expected.glsl
new file mode 100644
index 0000000..b2e4b84
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/6f431e.wgsl.expected.glsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupExclusiveMul_6f431e() -> f16 {
+ var res : f16 = subgroupExclusiveMul(1.0h);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_6f431e();
+}
+
+Failed to generate: error: Unknown builtin method: 0x5582b26f2f58
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/6f431e.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveMul/6f431e.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..6a64ec0
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/6f431e.wgsl.expected.ir.spvasm
@@ -0,0 +1,50 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 23
+; Schema: 0
+ OpCapability Shader
+ OpCapability Float16
+ OpCapability UniformAndStorageBuffer16BitAccess
+ OpCapability StorageBuffer16BitAccess
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveMul_6f431e "subgroupExclusiveMul_6f431e"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %half = OpTypeFloat 16
+%tint_symbol_1 = OpTypeStruct %half
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %6 = OpTypeFunction %half
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+%half_0x1p_0 = OpConstant %half 0x1p+0
+%_ptr_Function_half = OpTypePointer Function %half
+ %void = OpTypeVoid
+ %17 = OpTypeFunction %void
+%_ptr_StorageBuffer_half = OpTypePointer StorageBuffer %half
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveMul_6f431e = OpFunction %half None %6
+ %7 = OpLabel
+ %res = OpVariable %_ptr_Function_half Function
+ %8 = OpGroupNonUniformFMul %half %uint_3 ExclusiveScan %half_0x1p_0
+ OpStore %res %8
+ %14 = OpLoad %half %res
+ OpReturnValue %14
+ OpFunctionEnd
+%compute_main = OpFunction %void None %17
+ %18 = OpLabel
+ %19 = OpFunctionCall %half %subgroupExclusiveMul_6f431e
+ %20 = OpAccessChain %_ptr_StorageBuffer_half %1 %uint_0
+ OpStore %20 %19
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/6f431e.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/6f431e.wgsl.expected.msl
new file mode 100644
index 0000000..2d8cabe
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/6f431e.wgsl.expected.msl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupExclusiveMul_6f431e() -> f16 {
+ var res : f16 = subgroupExclusiveMul(1.0h);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_6f431e();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/6f431e.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveMul/6f431e.wgsl.expected.spvasm
new file mode 100644
index 0000000..8a7a380
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/6f431e.wgsl.expected.spvasm
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupExclusiveMul_6f431e() -> f16 {
+ var res : f16 = subgroupExclusiveMul(1.0h);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_6f431e();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/6f431e.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/6f431e.wgsl.expected.wgsl
new file mode 100644
index 0000000..ac7984a
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/6f431e.wgsl.expected.wgsl
@@ -0,0 +1,15 @@
+enable subgroups;
+enable subgroups_f16;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupExclusiveMul_6f431e() -> f16 {
+ var res : f16 = subgroupExclusiveMul(1.0h);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_6f431e();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/7b5f57.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/7b5f57.wgsl
new file mode 100644
index 0000000..37c68d1
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/7b5f57.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+
+// fn subgroupExclusiveMul(value: vec<4, f32>) -> vec<4, f32>
+fn subgroupExclusiveMul_7b5f57() -> vec4<f32>{
+ var res: vec4<f32> = subgroupExclusiveMul(vec4<f32>(1.f));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_7b5f57();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/7b5f57.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/7b5f57.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..5a8ec25
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/7b5f57.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupExclusiveMul_7b5f57() -> vec4<f32> {
+ var res : vec4<f32> = subgroupExclusiveMul(vec4<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_7b5f57();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/7b5f57.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/7b5f57.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..5a8ec25
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/7b5f57.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupExclusiveMul_7b5f57() -> vec4<f32> {
+ var res : vec4<f32> = subgroupExclusiveMul(vec4<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_7b5f57();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/7b5f57.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/7b5f57.wgsl.expected.glsl
new file mode 100644
index 0000000..ec181ca
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/7b5f57.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupExclusiveMul_7b5f57() -> vec4<f32> {
+ var res : vec4<f32> = subgroupExclusiveMul(vec4<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_7b5f57();
+}
+
+Failed to generate: error: Unknown builtin method: 0x56269c636230
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/7b5f57.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveMul/7b5f57.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..0b30683
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/7b5f57.wgsl.expected.ir.spvasm
@@ -0,0 +1,49 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveMul_7b5f57 "subgroupExclusiveMul_7b5f57"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %float = OpTypeFloat 32
+ %v4float = OpTypeVector %float 4
+%tint_symbol_1 = OpTypeStruct %v4float
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v4float
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %float_1 = OpConstant %float 1
+ %12 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveMul_7b5f57 = OpFunction %v4float None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v4float Function
+ %9 = OpGroupNonUniformFMul %v4float %uint_3 ExclusiveScan %12
+ OpStore %res %9
+ %16 = OpLoad %v4float %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v4float %subgroupExclusiveMul_7b5f57
+ %22 = OpAccessChain %_ptr_StorageBuffer_v4float %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/7b5f57.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/7b5f57.wgsl.expected.msl
new file mode 100644
index 0000000..d6e2984
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/7b5f57.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupExclusiveMul_7b5f57() -> vec4<f32> {
+ var res : vec4<f32> = subgroupExclusiveMul(vec4<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_7b5f57();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/7b5f57.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveMul/7b5f57.wgsl.expected.spvasm
new file mode 100644
index 0000000..e2129bc
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/7b5f57.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupExclusiveMul_7b5f57() -> vec4<f32> {
+ var res : vec4<f32> = subgroupExclusiveMul(vec4<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_7b5f57();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/7b5f57.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/7b5f57.wgsl.expected.wgsl
new file mode 100644
index 0000000..e641f1a
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/7b5f57.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupExclusiveMul_7b5f57() -> vec4<f32> {
+ var res : vec4<f32> = subgroupExclusiveMul(vec4<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_7b5f57();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/87f23e.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/87f23e.wgsl
new file mode 100644
index 0000000..a7e7769
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/87f23e.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+
+// fn subgroupExclusiveMul(value: vec<3, i32>) -> vec<3, i32>
+fn subgroupExclusiveMul_87f23e() -> vec3<i32>{
+ var res: vec3<i32> = subgroupExclusiveMul(vec3<i32>(1i));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_87f23e();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/87f23e.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/87f23e.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..f50364d
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/87f23e.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupExclusiveMul_87f23e() -> vec3<i32> {
+ var res : vec3<i32> = subgroupExclusiveMul(vec3<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_87f23e();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/87f23e.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/87f23e.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..f50364d
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/87f23e.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupExclusiveMul_87f23e() -> vec3<i32> {
+ var res : vec3<i32> = subgroupExclusiveMul(vec3<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_87f23e();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/87f23e.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/87f23e.wgsl.expected.glsl
new file mode 100644
index 0000000..a6bacac
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/87f23e.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupExclusiveMul_87f23e() -> vec3<i32> {
+ var res : vec3<i32> = subgroupExclusiveMul(vec3<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_87f23e();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55e0b80c2230
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/87f23e.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveMul/87f23e.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..6adecee
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/87f23e.wgsl.expected.ir.spvasm
@@ -0,0 +1,49 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveMul_87f23e "subgroupExclusiveMul_87f23e"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %int = OpTypeInt 32 1
+ %v3int = OpTypeVector %int 3
+%tint_symbol_1 = OpTypeStruct %v3int
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v3int
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %int_1 = OpConstant %int 1
+ %12 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v3int = OpTypePointer StorageBuffer %v3int
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveMul_87f23e = OpFunction %v3int None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v3int Function
+ %9 = OpGroupNonUniformIMul %v3int %uint_3 ExclusiveScan %12
+ OpStore %res %9
+ %16 = OpLoad %v3int %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v3int %subgroupExclusiveMul_87f23e
+ %22 = OpAccessChain %_ptr_StorageBuffer_v3int %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/87f23e.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/87f23e.wgsl.expected.msl
new file mode 100644
index 0000000..68c7a9d
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/87f23e.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupExclusiveMul_87f23e() -> vec3<i32> {
+ var res : vec3<i32> = subgroupExclusiveMul(vec3<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_87f23e();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/87f23e.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveMul/87f23e.wgsl.expected.spvasm
new file mode 100644
index 0000000..e633e6a
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/87f23e.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupExclusiveMul_87f23e() -> vec3<i32> {
+ var res : vec3<i32> = subgroupExclusiveMul(vec3<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_87f23e();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/87f23e.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/87f23e.wgsl.expected.wgsl
new file mode 100644
index 0000000..3ac2e2f
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/87f23e.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupExclusiveMul_87f23e() -> vec3<i32> {
+ var res : vec3<i32> = subgroupExclusiveMul(vec3<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_87f23e();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/98b2e4.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/98b2e4.wgsl
new file mode 100644
index 0000000..b713af5
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/98b2e4.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+
+// fn subgroupExclusiveMul(value: f32) -> f32
+fn subgroupExclusiveMul_98b2e4() -> f32{
+ var res: f32 = subgroupExclusiveMul(1.f);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_98b2e4();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/98b2e4.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/98b2e4.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..f9b1971
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/98b2e4.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupExclusiveMul_98b2e4() -> f32 {
+ var res : f32 = subgroupExclusiveMul(1.0f);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_98b2e4();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/98b2e4.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/98b2e4.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..f9b1971
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/98b2e4.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupExclusiveMul_98b2e4() -> f32 {
+ var res : f32 = subgroupExclusiveMul(1.0f);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_98b2e4();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/98b2e4.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/98b2e4.wgsl.expected.glsl
new file mode 100644
index 0000000..ed0e725
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/98b2e4.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupExclusiveMul_98b2e4() -> f32 {
+ var res : f32 = subgroupExclusiveMul(1.0f);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_98b2e4();
+}
+
+Failed to generate: error: Unknown builtin method: 0x563500566f58
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/98b2e4.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveMul/98b2e4.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..903118b
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/98b2e4.wgsl.expected.ir.spvasm
@@ -0,0 +1,47 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 23
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveMul_98b2e4 "subgroupExclusiveMul_98b2e4"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %float = OpTypeFloat 32
+%tint_symbol_1 = OpTypeStruct %float
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %6 = OpTypeFunction %float
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %float_1 = OpConstant %float 1
+%_ptr_Function_float = OpTypePointer Function %float
+ %void = OpTypeVoid
+ %17 = OpTypeFunction %void
+%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveMul_98b2e4 = OpFunction %float None %6
+ %7 = OpLabel
+ %res = OpVariable %_ptr_Function_float Function
+ %8 = OpGroupNonUniformFMul %float %uint_3 ExclusiveScan %float_1
+ OpStore %res %8
+ %14 = OpLoad %float %res
+ OpReturnValue %14
+ OpFunctionEnd
+%compute_main = OpFunction %void None %17
+ %18 = OpLabel
+ %19 = OpFunctionCall %float %subgroupExclusiveMul_98b2e4
+ %20 = OpAccessChain %_ptr_StorageBuffer_float %1 %uint_0
+ OpStore %20 %19
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/98b2e4.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/98b2e4.wgsl.expected.msl
new file mode 100644
index 0000000..0637e61
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/98b2e4.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupExclusiveMul_98b2e4() -> f32 {
+ var res : f32 = subgroupExclusiveMul(1.0f);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_98b2e4();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/98b2e4.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveMul/98b2e4.wgsl.expected.spvasm
new file mode 100644
index 0000000..ec55819
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/98b2e4.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupExclusiveMul_98b2e4() -> f32 {
+ var res : f32 = subgroupExclusiveMul(1.0f);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_98b2e4();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/98b2e4.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/98b2e4.wgsl.expected.wgsl
new file mode 100644
index 0000000..b402fa3
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/98b2e4.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupExclusiveMul_98b2e4() -> f32 {
+ var res : f32 = subgroupExclusiveMul(1.0f);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_98b2e4();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/a07956.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/a07956.wgsl
new file mode 100644
index 0000000..38880dc
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/a07956.wgsl
@@ -0,0 +1,57 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// flags: --hlsl_shader_model 62
+
+
+enable subgroups;
+enable subgroups_f16;
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+
+// fn subgroupExclusiveMul(value: vec<4, f16>) -> vec<4, f16>
+fn subgroupExclusiveMul_a07956() -> vec4<f16>{
+ var res: vec4<f16> = subgroupExclusiveMul(vec4<f16>(1.h));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_a07956();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/a07956.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/a07956.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..f07de8a
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/a07956.wgsl.expected.dxc.hlsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupExclusiveMul_a07956() -> vec4<f16> {
+ var res : vec4<f16> = subgroupExclusiveMul(vec4<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_a07956();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/a07956.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/a07956.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..f07de8a
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/a07956.wgsl.expected.fxc.hlsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupExclusiveMul_a07956() -> vec4<f16> {
+ var res : vec4<f16> = subgroupExclusiveMul(vec4<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_a07956();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/a07956.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/a07956.wgsl.expected.glsl
new file mode 100644
index 0000000..02f5908
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/a07956.wgsl.expected.glsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupExclusiveMul_a07956() -> vec4<f16> {
+ var res : vec4<f16> = subgroupExclusiveMul(vec4<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_a07956();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55ecad0f7230
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/a07956.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveMul/a07956.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..ec01276
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/a07956.wgsl.expected.ir.spvasm
@@ -0,0 +1,52 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability Float16
+ OpCapability UniformAndStorageBuffer16BitAccess
+ OpCapability StorageBuffer16BitAccess
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveMul_a07956 "subgroupExclusiveMul_a07956"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %half = OpTypeFloat 16
+ %v4half = OpTypeVector %half 4
+%tint_symbol_1 = OpTypeStruct %v4half
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v4half
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+%half_0x1p_0 = OpConstant %half 0x1p+0
+ %12 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+%_ptr_Function_v4half = OpTypePointer Function %v4half
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v4half = OpTypePointer StorageBuffer %v4half
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveMul_a07956 = OpFunction %v4half None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v4half Function
+ %9 = OpGroupNonUniformFMul %v4half %uint_3 ExclusiveScan %12
+ OpStore %res %9
+ %16 = OpLoad %v4half %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v4half %subgroupExclusiveMul_a07956
+ %22 = OpAccessChain %_ptr_StorageBuffer_v4half %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/a07956.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/a07956.wgsl.expected.msl
new file mode 100644
index 0000000..df73ff3
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/a07956.wgsl.expected.msl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupExclusiveMul_a07956() -> vec4<f16> {
+ var res : vec4<f16> = subgroupExclusiveMul(vec4<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_a07956();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/a07956.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveMul/a07956.wgsl.expected.spvasm
new file mode 100644
index 0000000..4cbb86b
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/a07956.wgsl.expected.spvasm
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupExclusiveMul_a07956() -> vec4<f16> {
+ var res : vec4<f16> = subgroupExclusiveMul(vec4<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_a07956();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/a07956.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/a07956.wgsl.expected.wgsl
new file mode 100644
index 0000000..b758165
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/a07956.wgsl.expected.wgsl
@@ -0,0 +1,15 @@
+enable subgroups;
+enable subgroups_f16;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupExclusiveMul_a07956() -> vec4<f16> {
+ var res : vec4<f16> = subgroupExclusiveMul(vec4<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_a07956();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/a23002.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/a23002.wgsl
new file mode 100644
index 0000000..60ac86a
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/a23002.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+
+// fn subgroupExclusiveMul(value: i32) -> i32
+fn subgroupExclusiveMul_a23002() -> i32{
+ var res: i32 = subgroupExclusiveMul(1i);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_a23002();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/a23002.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/a23002.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..bac1e2b
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/a23002.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupExclusiveMul_a23002() -> i32 {
+ var res : i32 = subgroupExclusiveMul(1i);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_a23002();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/a23002.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/a23002.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..bac1e2b
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/a23002.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupExclusiveMul_a23002() -> i32 {
+ var res : i32 = subgroupExclusiveMul(1i);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_a23002();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/a23002.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/a23002.wgsl.expected.glsl
new file mode 100644
index 0000000..b968685
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/a23002.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupExclusiveMul_a23002() -> i32 {
+ var res : i32 = subgroupExclusiveMul(1i);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_a23002();
+}
+
+Failed to generate: error: Unknown builtin method: 0x558723964f58
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/a23002.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveMul/a23002.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..4c3381b
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/a23002.wgsl.expected.ir.spvasm
@@ -0,0 +1,47 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 23
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveMul_a23002 "subgroupExclusiveMul_a23002"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %int = OpTypeInt 32 1
+%tint_symbol_1 = OpTypeStruct %int
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %6 = OpTypeFunction %int
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+ %void = OpTypeVoid
+ %17 = OpTypeFunction %void
+%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveMul_a23002 = OpFunction %int None %6
+ %7 = OpLabel
+ %res = OpVariable %_ptr_Function_int Function
+ %8 = OpGroupNonUniformIMul %int %uint_3 ExclusiveScan %int_1
+ OpStore %res %8
+ %14 = OpLoad %int %res
+ OpReturnValue %14
+ OpFunctionEnd
+%compute_main = OpFunction %void None %17
+ %18 = OpLabel
+ %19 = OpFunctionCall %int %subgroupExclusiveMul_a23002
+ %20 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
+ OpStore %20 %19
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/a23002.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/a23002.wgsl.expected.msl
new file mode 100644
index 0000000..6ea7898
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/a23002.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupExclusiveMul_a23002() -> i32 {
+ var res : i32 = subgroupExclusiveMul(1i);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_a23002();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/a23002.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveMul/a23002.wgsl.expected.spvasm
new file mode 100644
index 0000000..c117538
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/a23002.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupExclusiveMul_a23002() -> i32 {
+ var res : i32 = subgroupExclusiveMul(1i);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_a23002();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/a23002.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/a23002.wgsl.expected.wgsl
new file mode 100644
index 0000000..67f1e0c
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/a23002.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupExclusiveMul_a23002() -> i32 {
+ var res : i32 = subgroupExclusiveMul(1i);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_a23002();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/d1d490.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/d1d490.wgsl
new file mode 100644
index 0000000..fbd42ec
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/d1d490.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+
+// fn subgroupExclusiveMul(value: vec<2, u32>) -> vec<2, u32>
+fn subgroupExclusiveMul_d1d490() -> vec2<u32>{
+ var res: vec2<u32> = subgroupExclusiveMul(vec2<u32>(1u));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_d1d490();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/d1d490.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/d1d490.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..ddbb5d4
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/d1d490.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupExclusiveMul_d1d490() -> vec2<u32> {
+ var res : vec2<u32> = subgroupExclusiveMul(vec2<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_d1d490();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/d1d490.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/d1d490.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..ddbb5d4
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/d1d490.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupExclusiveMul_d1d490() -> vec2<u32> {
+ var res : vec2<u32> = subgroupExclusiveMul(vec2<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_d1d490();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/d1d490.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/d1d490.wgsl.expected.glsl
new file mode 100644
index 0000000..6ac660d
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/d1d490.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupExclusiveMul_d1d490() -> vec2<u32> {
+ var res : vec2<u32> = subgroupExclusiveMul(vec2<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_d1d490();
+}
+
+Failed to generate: error: Unknown builtin method: 0x559274ec6230
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/d1d490.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveMul/d1d490.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..914f851
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/d1d490.wgsl.expected.ir.spvasm
@@ -0,0 +1,48 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 24
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveMul_d1d490 "subgroupExclusiveMul_d1d490"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %uint = OpTypeInt 32 0
+ %v2uint = OpTypeVector %uint 2
+%tint_symbol_1 = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v2uint
+ %uint_3 = OpConstant %uint 3
+ %uint_1 = OpConstant %uint 1
+ %11 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+ %void = OpTypeVoid
+ %18 = OpTypeFunction %void
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveMul_d1d490 = OpFunction %v2uint None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function
+ %9 = OpGroupNonUniformIMul %v2uint %uint_3 ExclusiveScan %11
+ OpStore %res %9
+ %15 = OpLoad %v2uint %res
+ OpReturnValue %15
+ OpFunctionEnd
+%compute_main = OpFunction %void None %18
+ %19 = OpLabel
+ %20 = OpFunctionCall %v2uint %subgroupExclusiveMul_d1d490
+ %21 = OpAccessChain %_ptr_StorageBuffer_v2uint %1 %uint_0
+ OpStore %21 %20
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/d1d490.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/d1d490.wgsl.expected.msl
new file mode 100644
index 0000000..4516b64
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/d1d490.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupExclusiveMul_d1d490() -> vec2<u32> {
+ var res : vec2<u32> = subgroupExclusiveMul(vec2<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_d1d490();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/d1d490.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveMul/d1d490.wgsl.expected.spvasm
new file mode 100644
index 0000000..44b4444
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/d1d490.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupExclusiveMul_d1d490() -> vec2<u32> {
+ var res : vec2<u32> = subgroupExclusiveMul(vec2<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_d1d490();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/d1d490.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/d1d490.wgsl.expected.wgsl
new file mode 100644
index 0000000..6700b0f
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/d1d490.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupExclusiveMul_d1d490() -> vec2<u32> {
+ var res : vec2<u32> = subgroupExclusiveMul(vec2<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_d1d490();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/dc51f8.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/dc51f8.wgsl
new file mode 100644
index 0000000..dad4127
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/dc51f8.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+
+// fn subgroupExclusiveMul(value: u32) -> u32
+fn subgroupExclusiveMul_dc51f8() -> u32{
+ var res: u32 = subgroupExclusiveMul(1u);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_dc51f8();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/dc51f8.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/dc51f8.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..26c2244
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/dc51f8.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupExclusiveMul_dc51f8() -> u32 {
+ var res : u32 = subgroupExclusiveMul(1u);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_dc51f8();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/dc51f8.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/dc51f8.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..26c2244
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/dc51f8.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupExclusiveMul_dc51f8() -> u32 {
+ var res : u32 = subgroupExclusiveMul(1u);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_dc51f8();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/dc51f8.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/dc51f8.wgsl.expected.glsl
new file mode 100644
index 0000000..9568e02
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/dc51f8.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupExclusiveMul_dc51f8() -> u32 {
+ var res : u32 = subgroupExclusiveMul(1u);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_dc51f8();
+}
+
+Failed to generate: error: Unknown builtin method: 0x561132389f58
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/dc51f8.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveMul/dc51f8.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..60ef545
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/dc51f8.wgsl.expected.ir.spvasm
@@ -0,0 +1,46 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 22
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveMul_dc51f8 "subgroupExclusiveMul_dc51f8"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %uint = OpTypeInt 32 0
+%tint_symbol_1 = OpTypeStruct %uint
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %6 = OpTypeFunction %uint
+ %uint_3 = OpConstant %uint 3
+ %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+ %void = OpTypeVoid
+ %16 = OpTypeFunction %void
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveMul_dc51f8 = OpFunction %uint None %6
+ %7 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function
+ %8 = OpGroupNonUniformIMul %uint %uint_3 ExclusiveScan %uint_1
+ OpStore %res %8
+ %13 = OpLoad %uint %res
+ OpReturnValue %13
+ OpFunctionEnd
+%compute_main = OpFunction %void None %16
+ %17 = OpLabel
+ %18 = OpFunctionCall %uint %subgroupExclusiveMul_dc51f8
+ %19 = OpAccessChain %_ptr_StorageBuffer_uint %1 %uint_0
+ OpStore %19 %18
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/dc51f8.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/dc51f8.wgsl.expected.msl
new file mode 100644
index 0000000..e0c5ca7
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/dc51f8.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupExclusiveMul_dc51f8() -> u32 {
+ var res : u32 = subgroupExclusiveMul(1u);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_dc51f8();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/dc51f8.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveMul/dc51f8.wgsl.expected.spvasm
new file mode 100644
index 0000000..cbc2c67
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/dc51f8.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupExclusiveMul_dc51f8() -> u32 {
+ var res : u32 = subgroupExclusiveMul(1u);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_dc51f8();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/dc51f8.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/dc51f8.wgsl.expected.wgsl
new file mode 100644
index 0000000..007644c
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/dc51f8.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupExclusiveMul_dc51f8() -> u32 {
+ var res : u32 = subgroupExclusiveMul(1u);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_dc51f8();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/e88d1c.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/e88d1c.wgsl
new file mode 100644
index 0000000..9c12fa3
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/e88d1c.wgsl
@@ -0,0 +1,57 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// flags: --hlsl_shader_model 62
+
+
+enable subgroups;
+enable subgroups_f16;
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+
+// fn subgroupExclusiveMul(value: vec<2, f16>) -> vec<2, f16>
+fn subgroupExclusiveMul_e88d1c() -> vec2<f16>{
+ var res: vec2<f16> = subgroupExclusiveMul(vec2<f16>(1.h));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_e88d1c();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/e88d1c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/e88d1c.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..71a0ef2
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/e88d1c.wgsl.expected.dxc.hlsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupExclusiveMul_e88d1c() -> vec2<f16> {
+ var res : vec2<f16> = subgroupExclusiveMul(vec2<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_e88d1c();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/e88d1c.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/e88d1c.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..71a0ef2
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/e88d1c.wgsl.expected.fxc.hlsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupExclusiveMul_e88d1c() -> vec2<f16> {
+ var res : vec2<f16> = subgroupExclusiveMul(vec2<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_e88d1c();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/e88d1c.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/e88d1c.wgsl.expected.glsl
new file mode 100644
index 0000000..b474549
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/e88d1c.wgsl.expected.glsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupExclusiveMul_e88d1c() -> vec2<f16> {
+ var res : vec2<f16> = subgroupExclusiveMul(vec2<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_e88d1c();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55b923040230
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/e88d1c.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveMul/e88d1c.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..4a65136
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/e88d1c.wgsl.expected.ir.spvasm
@@ -0,0 +1,52 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability Float16
+ OpCapability UniformAndStorageBuffer16BitAccess
+ OpCapability StorageBuffer16BitAccess
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveMul_e88d1c "subgroupExclusiveMul_e88d1c"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %half = OpTypeFloat 16
+ %v2half = OpTypeVector %half 2
+%tint_symbol_1 = OpTypeStruct %v2half
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v2half
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+%half_0x1p_0 = OpConstant %half 0x1p+0
+ %12 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
+%_ptr_Function_v2half = OpTypePointer Function %v2half
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v2half = OpTypePointer StorageBuffer %v2half
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveMul_e88d1c = OpFunction %v2half None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v2half Function
+ %9 = OpGroupNonUniformFMul %v2half %uint_3 ExclusiveScan %12
+ OpStore %res %9
+ %16 = OpLoad %v2half %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v2half %subgroupExclusiveMul_e88d1c
+ %22 = OpAccessChain %_ptr_StorageBuffer_v2half %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/e88d1c.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/e88d1c.wgsl.expected.msl
new file mode 100644
index 0000000..5d6e10a
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/e88d1c.wgsl.expected.msl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupExclusiveMul_e88d1c() -> vec2<f16> {
+ var res : vec2<f16> = subgroupExclusiveMul(vec2<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_e88d1c();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/e88d1c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveMul/e88d1c.wgsl.expected.spvasm
new file mode 100644
index 0000000..9e2f46a
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/e88d1c.wgsl.expected.spvasm
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupExclusiveMul_e88d1c() -> vec2<f16> {
+ var res : vec2<f16> = subgroupExclusiveMul(vec2<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_e88d1c();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/e88d1c.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/e88d1c.wgsl.expected.wgsl
new file mode 100644
index 0000000..3829ce7
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/e88d1c.wgsl.expected.wgsl
@@ -0,0 +1,15 @@
+enable subgroups;
+enable subgroups_f16;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupExclusiveMul_e88d1c() -> vec2<f16> {
+ var res : vec2<f16> = subgroupExclusiveMul(vec2<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_e88d1c();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/f039f4.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/f039f4.wgsl
new file mode 100644
index 0000000..7a19af1
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/f039f4.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+
+// fn subgroupExclusiveMul(value: vec<3, u32>) -> vec<3, u32>
+fn subgroupExclusiveMul_f039f4() -> vec3<u32>{
+ var res: vec3<u32> = subgroupExclusiveMul(vec3<u32>(1u));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_f039f4();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/f039f4.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/f039f4.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..4dfa9b1
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/f039f4.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupExclusiveMul_f039f4() -> vec3<u32> {
+ var res : vec3<u32> = subgroupExclusiveMul(vec3<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_f039f4();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/f039f4.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/f039f4.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..4dfa9b1
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/f039f4.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupExclusiveMul_f039f4() -> vec3<u32> {
+ var res : vec3<u32> = subgroupExclusiveMul(vec3<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_f039f4();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/f039f4.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/f039f4.wgsl.expected.glsl
new file mode 100644
index 0000000..d3f21af
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/f039f4.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupExclusiveMul_f039f4() -> vec3<u32> {
+ var res : vec3<u32> = subgroupExclusiveMul(vec3<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_f039f4();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55a0d6edf230
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/f039f4.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveMul/f039f4.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..6315525
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/f039f4.wgsl.expected.ir.spvasm
@@ -0,0 +1,48 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 24
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveMul_f039f4 "subgroupExclusiveMul_f039f4"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %uint = OpTypeInt 32 0
+ %v3uint = OpTypeVector %uint 3
+%tint_symbol_1 = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v3uint
+ %uint_3 = OpConstant %uint 3
+ %uint_1 = OpConstant %uint 1
+ %11 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+ %void = OpTypeVoid
+ %18 = OpTypeFunction %void
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveMul_f039f4 = OpFunction %v3uint None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function
+ %9 = OpGroupNonUniformIMul %v3uint %uint_3 ExclusiveScan %11
+ OpStore %res %9
+ %15 = OpLoad %v3uint %res
+ OpReturnValue %15
+ OpFunctionEnd
+%compute_main = OpFunction %void None %18
+ %19 = OpLabel
+ %20 = OpFunctionCall %v3uint %subgroupExclusiveMul_f039f4
+ %21 = OpAccessChain %_ptr_StorageBuffer_v3uint %1 %uint_0
+ OpStore %21 %20
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/f039f4.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/f039f4.wgsl.expected.msl
new file mode 100644
index 0000000..23f5857
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/f039f4.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupExclusiveMul_f039f4() -> vec3<u32> {
+ var res : vec3<u32> = subgroupExclusiveMul(vec3<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_f039f4();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/f039f4.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupExclusiveMul/f039f4.wgsl.expected.spvasm
new file mode 100644
index 0000000..831a772
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/f039f4.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupExclusiveMul_f039f4() -> vec3<u32> {
+ var res : vec3<u32> = subgroupExclusiveMul(vec3<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_f039f4();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupExclusiveMul/f039f4.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupExclusiveMul/f039f4.wgsl.expected.wgsl
new file mode 100644
index 0000000..345bb00
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupExclusiveMul/f039f4.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupExclusiveMul_f039f4() -> vec3<u32> {
+ var res : vec3<u32> = subgroupExclusiveMul(vec3<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_f039f4();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMul/0de9d3.wgsl b/test/tint/builtins/gen/literal/subgroupMul/0de9d3.wgsl
new file mode 100644
index 0000000..93a37a2
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/0de9d3.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+
+// fn subgroupMul(value: f32) -> f32
+fn subgroupMul_0de9d3() -> f32{
+ var res: f32 = subgroupMul(1.f);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_0de9d3();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMul/0de9d3.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMul/0de9d3.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..0bf1362
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/0de9d3.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupMul_0de9d3() -> f32 {
+ var res : f32 = subgroupMul(1.0f);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_0de9d3();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/0de9d3.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMul/0de9d3.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..0bf1362
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/0de9d3.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupMul_0de9d3() -> f32 {
+ var res : f32 = subgroupMul(1.0f);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_0de9d3();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/0de9d3.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMul/0de9d3.wgsl.expected.glsl
new file mode 100644
index 0000000..6a92993
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/0de9d3.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupMul_0de9d3() -> f32 {
+ var res : f32 = subgroupMul(1.0f);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_0de9d3();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55802f025f58
diff --git a/test/tint/builtins/gen/literal/subgroupMul/0de9d3.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupMul/0de9d3.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..07bec15
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/0de9d3.wgsl.expected.ir.spvasm
@@ -0,0 +1,47 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 23
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupMul_0de9d3 "subgroupMul_0de9d3"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %float = OpTypeFloat 32
+%tint_symbol_1 = OpTypeStruct %float
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %6 = OpTypeFunction %float
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %float_1 = OpConstant %float 1
+%_ptr_Function_float = OpTypePointer Function %float
+ %void = OpTypeVoid
+ %17 = OpTypeFunction %void
+%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
+ %uint_0 = OpConstant %uint 0
+%subgroupMul_0de9d3 = OpFunction %float None %6
+ %7 = OpLabel
+ %res = OpVariable %_ptr_Function_float Function
+ %8 = OpGroupNonUniformFMul %float %uint_3 Reduce %float_1
+ OpStore %res %8
+ %14 = OpLoad %float %res
+ OpReturnValue %14
+ OpFunctionEnd
+%compute_main = OpFunction %void None %17
+ %18 = OpLabel
+ %19 = OpFunctionCall %float %subgroupMul_0de9d3
+ %20 = OpAccessChain %_ptr_StorageBuffer_float %1 %uint_0
+ OpStore %20 %19
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMul/0de9d3.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMul/0de9d3.wgsl.expected.msl
new file mode 100644
index 0000000..6b40369
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/0de9d3.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupMul_0de9d3() -> f32 {
+ var res : f32 = subgroupMul(1.0f);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_0de9d3();
+}
+
+Failed to generate: error: Unknown import method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/0de9d3.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMul/0de9d3.wgsl.expected.spvasm
new file mode 100644
index 0000000..0b4b10e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/0de9d3.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupMul_0de9d3() -> f32 {
+ var res : f32 = subgroupMul(1.0f);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_0de9d3();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupMul/0de9d3.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMul/0de9d3.wgsl.expected.wgsl
new file mode 100644
index 0000000..acb918e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/0de9d3.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupMul_0de9d3() -> f32 {
+ var res : f32 = subgroupMul(1.0f);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_0de9d3();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMul/2941a2.wgsl b/test/tint/builtins/gen/literal/subgroupMul/2941a2.wgsl
new file mode 100644
index 0000000..4b59b68
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/2941a2.wgsl
@@ -0,0 +1,57 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// flags: --hlsl_shader_model 62
+
+
+enable subgroups;
+enable subgroups_f16;
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+
+// fn subgroupMul(value: f16) -> f16
+fn subgroupMul_2941a2() -> f16{
+ var res: f16 = subgroupMul(1.h);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_2941a2();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMul/2941a2.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMul/2941a2.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..0f2ab75
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/2941a2.wgsl.expected.dxc.hlsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupMul_2941a2() -> f16 {
+ var res : f16 = subgroupMul(1.0h);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_2941a2();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/2941a2.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMul/2941a2.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..0f2ab75
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/2941a2.wgsl.expected.fxc.hlsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupMul_2941a2() -> f16 {
+ var res : f16 = subgroupMul(1.0h);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_2941a2();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/2941a2.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMul/2941a2.wgsl.expected.glsl
new file mode 100644
index 0000000..0138d09
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/2941a2.wgsl.expected.glsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupMul_2941a2() -> f16 {
+ var res : f16 = subgroupMul(1.0h);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_2941a2();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55ec5f3bbf58
diff --git a/test/tint/builtins/gen/literal/subgroupMul/2941a2.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupMul/2941a2.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..1ebe7f1
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/2941a2.wgsl.expected.ir.spvasm
@@ -0,0 +1,50 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 23
+; Schema: 0
+ OpCapability Shader
+ OpCapability Float16
+ OpCapability UniformAndStorageBuffer16BitAccess
+ OpCapability StorageBuffer16BitAccess
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupMul_2941a2 "subgroupMul_2941a2"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %half = OpTypeFloat 16
+%tint_symbol_1 = OpTypeStruct %half
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %6 = OpTypeFunction %half
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+%half_0x1p_0 = OpConstant %half 0x1p+0
+%_ptr_Function_half = OpTypePointer Function %half
+ %void = OpTypeVoid
+ %17 = OpTypeFunction %void
+%_ptr_StorageBuffer_half = OpTypePointer StorageBuffer %half
+ %uint_0 = OpConstant %uint 0
+%subgroupMul_2941a2 = OpFunction %half None %6
+ %7 = OpLabel
+ %res = OpVariable %_ptr_Function_half Function
+ %8 = OpGroupNonUniformFMul %half %uint_3 Reduce %half_0x1p_0
+ OpStore %res %8
+ %14 = OpLoad %half %res
+ OpReturnValue %14
+ OpFunctionEnd
+%compute_main = OpFunction %void None %17
+ %18 = OpLabel
+ %19 = OpFunctionCall %half %subgroupMul_2941a2
+ %20 = OpAccessChain %_ptr_StorageBuffer_half %1 %uint_0
+ OpStore %20 %19
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMul/2941a2.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMul/2941a2.wgsl.expected.msl
new file mode 100644
index 0000000..e6525f0
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/2941a2.wgsl.expected.msl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupMul_2941a2() -> f16 {
+ var res : f16 = subgroupMul(1.0h);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_2941a2();
+}
+
+Failed to generate: error: Unknown import method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/2941a2.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMul/2941a2.wgsl.expected.spvasm
new file mode 100644
index 0000000..751b6d4
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/2941a2.wgsl.expected.spvasm
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupMul_2941a2() -> f16 {
+ var res : f16 = subgroupMul(1.0h);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_2941a2();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupMul/2941a2.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMul/2941a2.wgsl.expected.wgsl
new file mode 100644
index 0000000..dc9a9cd
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/2941a2.wgsl.expected.wgsl
@@ -0,0 +1,15 @@
+enable subgroups;
+enable subgroups_f16;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupMul_2941a2() -> f16 {
+ var res : f16 = subgroupMul(1.0h);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_2941a2();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMul/3fe886.wgsl b/test/tint/builtins/gen/literal/subgroupMul/3fe886.wgsl
new file mode 100644
index 0000000..80edcd8
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/3fe886.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+
+// fn subgroupMul(value: i32) -> i32
+fn subgroupMul_3fe886() -> i32{
+ var res: i32 = subgroupMul(1i);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_3fe886();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMul/3fe886.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMul/3fe886.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..71a6c54
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/3fe886.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupMul_3fe886() -> i32 {
+ var res : i32 = subgroupMul(1i);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_3fe886();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/3fe886.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMul/3fe886.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..71a6c54
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/3fe886.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupMul_3fe886() -> i32 {
+ var res : i32 = subgroupMul(1i);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_3fe886();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/3fe886.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMul/3fe886.wgsl.expected.glsl
new file mode 100644
index 0000000..963024c
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/3fe886.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupMul_3fe886() -> i32 {
+ var res : i32 = subgroupMul(1i);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_3fe886();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55ff04857f58
diff --git a/test/tint/builtins/gen/literal/subgroupMul/3fe886.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupMul/3fe886.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..8a42c88
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/3fe886.wgsl.expected.ir.spvasm
@@ -0,0 +1,47 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 23
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupMul_3fe886 "subgroupMul_3fe886"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %int = OpTypeInt 32 1
+%tint_symbol_1 = OpTypeStruct %int
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %6 = OpTypeFunction %int
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+ %void = OpTypeVoid
+ %17 = OpTypeFunction %void
+%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
+ %uint_0 = OpConstant %uint 0
+%subgroupMul_3fe886 = OpFunction %int None %6
+ %7 = OpLabel
+ %res = OpVariable %_ptr_Function_int Function
+ %8 = OpGroupNonUniformIMul %int %uint_3 Reduce %int_1
+ OpStore %res %8
+ %14 = OpLoad %int %res
+ OpReturnValue %14
+ OpFunctionEnd
+%compute_main = OpFunction %void None %17
+ %18 = OpLabel
+ %19 = OpFunctionCall %int %subgroupMul_3fe886
+ %20 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
+ OpStore %20 %19
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMul/3fe886.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMul/3fe886.wgsl.expected.msl
new file mode 100644
index 0000000..dcb5c61
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/3fe886.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupMul_3fe886() -> i32 {
+ var res : i32 = subgroupMul(1i);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_3fe886();
+}
+
+Failed to generate: error: Unknown import method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/3fe886.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMul/3fe886.wgsl.expected.spvasm
new file mode 100644
index 0000000..5a9457a
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/3fe886.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupMul_3fe886() -> i32 {
+ var res : i32 = subgroupMul(1i);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_3fe886();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupMul/3fe886.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMul/3fe886.wgsl.expected.wgsl
new file mode 100644
index 0000000..879ea2a
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/3fe886.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupMul_3fe886() -> i32 {
+ var res : i32 = subgroupMul(1i);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_3fe886();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMul/4f8ee6.wgsl b/test/tint/builtins/gen/literal/subgroupMul/4f8ee6.wgsl
new file mode 100644
index 0000000..79762cf
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/4f8ee6.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+
+// fn subgroupMul(value: u32) -> u32
+fn subgroupMul_4f8ee6() -> u32{
+ var res: u32 = subgroupMul(1u);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_4f8ee6();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMul/4f8ee6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMul/4f8ee6.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..c830d75
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/4f8ee6.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupMul_4f8ee6() -> u32 {
+ var res : u32 = subgroupMul(1u);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_4f8ee6();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/4f8ee6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMul/4f8ee6.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..c830d75
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/4f8ee6.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupMul_4f8ee6() -> u32 {
+ var res : u32 = subgroupMul(1u);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_4f8ee6();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/4f8ee6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMul/4f8ee6.wgsl.expected.glsl
new file mode 100644
index 0000000..82f51ec
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/4f8ee6.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupMul_4f8ee6() -> u32 {
+ var res : u32 = subgroupMul(1u);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_4f8ee6();
+}
+
+Failed to generate: error: Unknown builtin method: 0x560b3b8daf58
diff --git a/test/tint/builtins/gen/literal/subgroupMul/4f8ee6.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupMul/4f8ee6.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..c393eab
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/4f8ee6.wgsl.expected.ir.spvasm
@@ -0,0 +1,46 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 22
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupMul_4f8ee6 "subgroupMul_4f8ee6"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %uint = OpTypeInt 32 0
+%tint_symbol_1 = OpTypeStruct %uint
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %6 = OpTypeFunction %uint
+ %uint_3 = OpConstant %uint 3
+ %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+ %void = OpTypeVoid
+ %16 = OpTypeFunction %void
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+ %uint_0 = OpConstant %uint 0
+%subgroupMul_4f8ee6 = OpFunction %uint None %6
+ %7 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function
+ %8 = OpGroupNonUniformIMul %uint %uint_3 Reduce %uint_1
+ OpStore %res %8
+ %13 = OpLoad %uint %res
+ OpReturnValue %13
+ OpFunctionEnd
+%compute_main = OpFunction %void None %16
+ %17 = OpLabel
+ %18 = OpFunctionCall %uint %subgroupMul_4f8ee6
+ %19 = OpAccessChain %_ptr_StorageBuffer_uint %1 %uint_0
+ OpStore %19 %18
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMul/4f8ee6.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMul/4f8ee6.wgsl.expected.msl
new file mode 100644
index 0000000..f98a558
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/4f8ee6.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupMul_4f8ee6() -> u32 {
+ var res : u32 = subgroupMul(1u);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_4f8ee6();
+}
+
+Failed to generate: error: Unknown import method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/4f8ee6.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMul/4f8ee6.wgsl.expected.spvasm
new file mode 100644
index 0000000..6423690
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/4f8ee6.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupMul_4f8ee6() -> u32 {
+ var res : u32 = subgroupMul(1u);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_4f8ee6();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupMul/4f8ee6.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMul/4f8ee6.wgsl.expected.wgsl
new file mode 100644
index 0000000..3138bf0
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/4f8ee6.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupMul_4f8ee6() -> u32 {
+ var res : u32 = subgroupMul(1u);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_4f8ee6();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMul/53aee2.wgsl b/test/tint/builtins/gen/literal/subgroupMul/53aee2.wgsl
new file mode 100644
index 0000000..bd2925e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/53aee2.wgsl
@@ -0,0 +1,57 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// flags: --hlsl_shader_model 62
+
+
+enable subgroups;
+enable subgroups_f16;
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+
+// fn subgroupMul(value: vec<3, f16>) -> vec<3, f16>
+fn subgroupMul_53aee2() -> vec3<f16>{
+ var res: vec3<f16> = subgroupMul(vec3<f16>(1.h));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_53aee2();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMul/53aee2.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMul/53aee2.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..3cc2754
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/53aee2.wgsl.expected.dxc.hlsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupMul_53aee2() -> vec3<f16> {
+ var res : vec3<f16> = subgroupMul(vec3<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_53aee2();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/53aee2.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMul/53aee2.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..3cc2754
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/53aee2.wgsl.expected.fxc.hlsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupMul_53aee2() -> vec3<f16> {
+ var res : vec3<f16> = subgroupMul(vec3<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_53aee2();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/53aee2.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMul/53aee2.wgsl.expected.glsl
new file mode 100644
index 0000000..d37dc33
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/53aee2.wgsl.expected.glsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupMul_53aee2() -> vec3<f16> {
+ var res : vec3<f16> = subgroupMul(vec3<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_53aee2();
+}
+
+Failed to generate: error: Unknown builtin method: 0x5624f24e6230
diff --git a/test/tint/builtins/gen/literal/subgroupMul/53aee2.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupMul/53aee2.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..c97b97f
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/53aee2.wgsl.expected.ir.spvasm
@@ -0,0 +1,52 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability Float16
+ OpCapability UniformAndStorageBuffer16BitAccess
+ OpCapability StorageBuffer16BitAccess
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupMul_53aee2 "subgroupMul_53aee2"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %half = OpTypeFloat 16
+ %v3half = OpTypeVector %half 3
+%tint_symbol_1 = OpTypeStruct %v3half
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v3half
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+%half_0x1p_0 = OpConstant %half 0x1p+0
+ %12 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+%_ptr_Function_v3half = OpTypePointer Function %v3half
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v3half = OpTypePointer StorageBuffer %v3half
+ %uint_0 = OpConstant %uint 0
+%subgroupMul_53aee2 = OpFunction %v3half None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v3half Function
+ %9 = OpGroupNonUniformFMul %v3half %uint_3 Reduce %12
+ OpStore %res %9
+ %16 = OpLoad %v3half %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v3half %subgroupMul_53aee2
+ %22 = OpAccessChain %_ptr_StorageBuffer_v3half %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMul/53aee2.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMul/53aee2.wgsl.expected.msl
new file mode 100644
index 0000000..94ace2f
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/53aee2.wgsl.expected.msl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupMul_53aee2() -> vec3<f16> {
+ var res : vec3<f16> = subgroupMul(vec3<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_53aee2();
+}
+
+Failed to generate: error: Unknown import method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/53aee2.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMul/53aee2.wgsl.expected.spvasm
new file mode 100644
index 0000000..363505d
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/53aee2.wgsl.expected.spvasm
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupMul_53aee2() -> vec3<f16> {
+ var res : vec3<f16> = subgroupMul(vec3<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_53aee2();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupMul/53aee2.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMul/53aee2.wgsl.expected.wgsl
new file mode 100644
index 0000000..7efcf73
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/53aee2.wgsl.expected.wgsl
@@ -0,0 +1,15 @@
+enable subgroups;
+enable subgroups_f16;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupMul_53aee2() -> vec3<f16> {
+ var res : vec3<f16> = subgroupMul(vec3<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_53aee2();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMul/5a8c86.wgsl b/test/tint/builtins/gen/literal/subgroupMul/5a8c86.wgsl
new file mode 100644
index 0000000..e0d3f17
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/5a8c86.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+
+// fn subgroupMul(value: vec<3, i32>) -> vec<3, i32>
+fn subgroupMul_5a8c86() -> vec3<i32>{
+ var res: vec3<i32> = subgroupMul(vec3<i32>(1i));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_5a8c86();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMul/5a8c86.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMul/5a8c86.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..d191760
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/5a8c86.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupMul_5a8c86() -> vec3<i32> {
+ var res : vec3<i32> = subgroupMul(vec3<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_5a8c86();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/5a8c86.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMul/5a8c86.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..d191760
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/5a8c86.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupMul_5a8c86() -> vec3<i32> {
+ var res : vec3<i32> = subgroupMul(vec3<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_5a8c86();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/5a8c86.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMul/5a8c86.wgsl.expected.glsl
new file mode 100644
index 0000000..fcca71b
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/5a8c86.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupMul_5a8c86() -> vec3<i32> {
+ var res : vec3<i32> = subgroupMul(vec3<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_5a8c86();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55d485901230
diff --git a/test/tint/builtins/gen/literal/subgroupMul/5a8c86.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupMul/5a8c86.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..d9ccb57
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/5a8c86.wgsl.expected.ir.spvasm
@@ -0,0 +1,49 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupMul_5a8c86 "subgroupMul_5a8c86"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %int = OpTypeInt 32 1
+ %v3int = OpTypeVector %int 3
+%tint_symbol_1 = OpTypeStruct %v3int
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v3int
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %int_1 = OpConstant %int 1
+ %12 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v3int = OpTypePointer StorageBuffer %v3int
+ %uint_0 = OpConstant %uint 0
+%subgroupMul_5a8c86 = OpFunction %v3int None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v3int Function
+ %9 = OpGroupNonUniformIMul %v3int %uint_3 Reduce %12
+ OpStore %res %9
+ %16 = OpLoad %v3int %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v3int %subgroupMul_5a8c86
+ %22 = OpAccessChain %_ptr_StorageBuffer_v3int %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMul/5a8c86.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMul/5a8c86.wgsl.expected.msl
new file mode 100644
index 0000000..05e01c9
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/5a8c86.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupMul_5a8c86() -> vec3<i32> {
+ var res : vec3<i32> = subgroupMul(vec3<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_5a8c86();
+}
+
+Failed to generate: error: Unknown import method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/5a8c86.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMul/5a8c86.wgsl.expected.spvasm
new file mode 100644
index 0000000..49cc1a4
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/5a8c86.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupMul_5a8c86() -> vec3<i32> {
+ var res : vec3<i32> = subgroupMul(vec3<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_5a8c86();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupMul/5a8c86.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMul/5a8c86.wgsl.expected.wgsl
new file mode 100644
index 0000000..01c6996
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/5a8c86.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupMul_5a8c86() -> vec3<i32> {
+ var res : vec3<i32> = subgroupMul(vec3<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_5a8c86();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMul/66c813.wgsl b/test/tint/builtins/gen/literal/subgroupMul/66c813.wgsl
new file mode 100644
index 0000000..65cd400
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/66c813.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+
+// fn subgroupMul(value: vec<4, f32>) -> vec<4, f32>
+fn subgroupMul_66c813() -> vec4<f32>{
+ var res: vec4<f32> = subgroupMul(vec4<f32>(1.f));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_66c813();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMul/66c813.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMul/66c813.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..c2d606e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/66c813.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupMul_66c813() -> vec4<f32> {
+ var res : vec4<f32> = subgroupMul(vec4<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_66c813();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/66c813.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMul/66c813.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..c2d606e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/66c813.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupMul_66c813() -> vec4<f32> {
+ var res : vec4<f32> = subgroupMul(vec4<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_66c813();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/66c813.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMul/66c813.wgsl.expected.glsl
new file mode 100644
index 0000000..e9f8a02
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/66c813.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupMul_66c813() -> vec4<f32> {
+ var res : vec4<f32> = subgroupMul(vec4<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_66c813();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55d55b683230
diff --git a/test/tint/builtins/gen/literal/subgroupMul/66c813.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupMul/66c813.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..7b7c50f
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/66c813.wgsl.expected.ir.spvasm
@@ -0,0 +1,49 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupMul_66c813 "subgroupMul_66c813"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %float = OpTypeFloat 32
+ %v4float = OpTypeVector %float 4
+%tint_symbol_1 = OpTypeStruct %v4float
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v4float
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %float_1 = OpConstant %float 1
+ %12 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+ %uint_0 = OpConstant %uint 0
+%subgroupMul_66c813 = OpFunction %v4float None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v4float Function
+ %9 = OpGroupNonUniformFMul %v4float %uint_3 Reduce %12
+ OpStore %res %9
+ %16 = OpLoad %v4float %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v4float %subgroupMul_66c813
+ %22 = OpAccessChain %_ptr_StorageBuffer_v4float %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMul/66c813.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMul/66c813.wgsl.expected.msl
new file mode 100644
index 0000000..144c23b
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/66c813.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupMul_66c813() -> vec4<f32> {
+ var res : vec4<f32> = subgroupMul(vec4<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_66c813();
+}
+
+Failed to generate: error: Unknown import method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/66c813.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMul/66c813.wgsl.expected.spvasm
new file mode 100644
index 0000000..6b7b6d9
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/66c813.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupMul_66c813() -> vec4<f32> {
+ var res : vec4<f32> = subgroupMul(vec4<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_66c813();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupMul/66c813.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMul/66c813.wgsl.expected.wgsl
new file mode 100644
index 0000000..00e7764
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/66c813.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupMul_66c813() -> vec4<f32> {
+ var res : vec4<f32> = subgroupMul(vec4<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_66c813();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMul/6aaaf3.wgsl b/test/tint/builtins/gen/literal/subgroupMul/6aaaf3.wgsl
new file mode 100644
index 0000000..6965f30
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/6aaaf3.wgsl
@@ -0,0 +1,57 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// flags: --hlsl_shader_model 62
+
+
+enable subgroups;
+enable subgroups_f16;
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+
+// fn subgroupMul(value: vec<2, f16>) -> vec<2, f16>
+fn subgroupMul_6aaaf3() -> vec2<f16>{
+ var res: vec2<f16> = subgroupMul(vec2<f16>(1.h));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_6aaaf3();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMul/6aaaf3.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMul/6aaaf3.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..3a8b145
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/6aaaf3.wgsl.expected.dxc.hlsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupMul_6aaaf3() -> vec2<f16> {
+ var res : vec2<f16> = subgroupMul(vec2<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_6aaaf3();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/6aaaf3.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMul/6aaaf3.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..3a8b145
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/6aaaf3.wgsl.expected.fxc.hlsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupMul_6aaaf3() -> vec2<f16> {
+ var res : vec2<f16> = subgroupMul(vec2<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_6aaaf3();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/6aaaf3.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMul/6aaaf3.wgsl.expected.glsl
new file mode 100644
index 0000000..2ecf478
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/6aaaf3.wgsl.expected.glsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupMul_6aaaf3() -> vec2<f16> {
+ var res : vec2<f16> = subgroupMul(vec2<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_6aaaf3();
+}
+
+Failed to generate: error: Unknown builtin method: 0x563692c08230
diff --git a/test/tint/builtins/gen/literal/subgroupMul/6aaaf3.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupMul/6aaaf3.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..a3df835
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/6aaaf3.wgsl.expected.ir.spvasm
@@ -0,0 +1,52 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability Float16
+ OpCapability UniformAndStorageBuffer16BitAccess
+ OpCapability StorageBuffer16BitAccess
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupMul_6aaaf3 "subgroupMul_6aaaf3"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %half = OpTypeFloat 16
+ %v2half = OpTypeVector %half 2
+%tint_symbol_1 = OpTypeStruct %v2half
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v2half
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+%half_0x1p_0 = OpConstant %half 0x1p+0
+ %12 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
+%_ptr_Function_v2half = OpTypePointer Function %v2half
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v2half = OpTypePointer StorageBuffer %v2half
+ %uint_0 = OpConstant %uint 0
+%subgroupMul_6aaaf3 = OpFunction %v2half None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v2half Function
+ %9 = OpGroupNonUniformFMul %v2half %uint_3 Reduce %12
+ OpStore %res %9
+ %16 = OpLoad %v2half %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v2half %subgroupMul_6aaaf3
+ %22 = OpAccessChain %_ptr_StorageBuffer_v2half %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMul/6aaaf3.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMul/6aaaf3.wgsl.expected.msl
new file mode 100644
index 0000000..23d4166
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/6aaaf3.wgsl.expected.msl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupMul_6aaaf3() -> vec2<f16> {
+ var res : vec2<f16> = subgroupMul(vec2<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_6aaaf3();
+}
+
+Failed to generate: error: Unknown import method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/6aaaf3.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMul/6aaaf3.wgsl.expected.spvasm
new file mode 100644
index 0000000..d1a7d4e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/6aaaf3.wgsl.expected.spvasm
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupMul_6aaaf3() -> vec2<f16> {
+ var res : vec2<f16> = subgroupMul(vec2<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_6aaaf3();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupMul/6aaaf3.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMul/6aaaf3.wgsl.expected.wgsl
new file mode 100644
index 0000000..0bcbc60
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/6aaaf3.wgsl.expected.wgsl
@@ -0,0 +1,15 @@
+enable subgroups;
+enable subgroups_f16;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupMul_6aaaf3() -> vec2<f16> {
+ var res : vec2<f16> = subgroupMul(vec2<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_6aaaf3();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMul/93eccd.wgsl b/test/tint/builtins/gen/literal/subgroupMul/93eccd.wgsl
new file mode 100644
index 0000000..b886da0
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/93eccd.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+
+// fn subgroupMul(value: vec<3, f32>) -> vec<3, f32>
+fn subgroupMul_93eccd() -> vec3<f32>{
+ var res: vec3<f32> = subgroupMul(vec3<f32>(1.f));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_93eccd();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMul/93eccd.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMul/93eccd.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..e3fb6f2
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/93eccd.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupMul_93eccd() -> vec3<f32> {
+ var res : vec3<f32> = subgroupMul(vec3<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_93eccd();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/93eccd.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMul/93eccd.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..e3fb6f2
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/93eccd.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupMul_93eccd() -> vec3<f32> {
+ var res : vec3<f32> = subgroupMul(vec3<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_93eccd();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/93eccd.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMul/93eccd.wgsl.expected.glsl
new file mode 100644
index 0000000..da185c7
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/93eccd.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupMul_93eccd() -> vec3<f32> {
+ var res : vec3<f32> = subgroupMul(vec3<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_93eccd();
+}
+
+Failed to generate: error: Unknown builtin method: 0x56032392e230
diff --git a/test/tint/builtins/gen/literal/subgroupMul/93eccd.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupMul/93eccd.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..d721296
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/93eccd.wgsl.expected.ir.spvasm
@@ -0,0 +1,49 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupMul_93eccd "subgroupMul_93eccd"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %float = OpTypeFloat 32
+ %v3float = OpTypeVector %float 3
+%tint_symbol_1 = OpTypeStruct %v3float
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v3float
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %float_1 = OpConstant %float 1
+ %12 = OpConstantComposite %v3float %float_1 %float_1 %float_1
+%_ptr_Function_v3float = OpTypePointer Function %v3float
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v3float = OpTypePointer StorageBuffer %v3float
+ %uint_0 = OpConstant %uint 0
+%subgroupMul_93eccd = OpFunction %v3float None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v3float Function
+ %9 = OpGroupNonUniformFMul %v3float %uint_3 Reduce %12
+ OpStore %res %9
+ %16 = OpLoad %v3float %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v3float %subgroupMul_93eccd
+ %22 = OpAccessChain %_ptr_StorageBuffer_v3float %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMul/93eccd.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMul/93eccd.wgsl.expected.msl
new file mode 100644
index 0000000..47d6184
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/93eccd.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupMul_93eccd() -> vec3<f32> {
+ var res : vec3<f32> = subgroupMul(vec3<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_93eccd();
+}
+
+Failed to generate: error: Unknown import method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/93eccd.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMul/93eccd.wgsl.expected.spvasm
new file mode 100644
index 0000000..69a879f
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/93eccd.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupMul_93eccd() -> vec3<f32> {
+ var res : vec3<f32> = subgroupMul(vec3<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_93eccd();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupMul/93eccd.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMul/93eccd.wgsl.expected.wgsl
new file mode 100644
index 0000000..b75180d
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/93eccd.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupMul_93eccd() -> vec3<f32> {
+ var res : vec3<f32> = subgroupMul(vec3<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_93eccd();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMul/d584a2.wgsl b/test/tint/builtins/gen/literal/subgroupMul/d584a2.wgsl
new file mode 100644
index 0000000..da94aff
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/d584a2.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+
+// fn subgroupMul(value: vec<2, i32>) -> vec<2, i32>
+fn subgroupMul_d584a2() -> vec2<i32>{
+ var res: vec2<i32> = subgroupMul(vec2<i32>(1i));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_d584a2();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMul/d584a2.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMul/d584a2.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..31d04e5
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/d584a2.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupMul_d584a2() -> vec2<i32> {
+ var res : vec2<i32> = subgroupMul(vec2<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_d584a2();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/d584a2.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMul/d584a2.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..31d04e5
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/d584a2.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupMul_d584a2() -> vec2<i32> {
+ var res : vec2<i32> = subgroupMul(vec2<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_d584a2();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/d584a2.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMul/d584a2.wgsl.expected.glsl
new file mode 100644
index 0000000..f3c1b94
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/d584a2.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupMul_d584a2() -> vec2<i32> {
+ var res : vec2<i32> = subgroupMul(vec2<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_d584a2();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55f27a9e7230
diff --git a/test/tint/builtins/gen/literal/subgroupMul/d584a2.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupMul/d584a2.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..61fa992
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/d584a2.wgsl.expected.ir.spvasm
@@ -0,0 +1,49 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupMul_d584a2 "subgroupMul_d584a2"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %int = OpTypeInt 32 1
+ %v2int = OpTypeVector %int 2
+%tint_symbol_1 = OpTypeStruct %v2int
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v2int
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %int_1 = OpConstant %int 1
+ %12 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v2int = OpTypePointer StorageBuffer %v2int
+ %uint_0 = OpConstant %uint 0
+%subgroupMul_d584a2 = OpFunction %v2int None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v2int Function
+ %9 = OpGroupNonUniformIMul %v2int %uint_3 Reduce %12
+ OpStore %res %9
+ %16 = OpLoad %v2int %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v2int %subgroupMul_d584a2
+ %22 = OpAccessChain %_ptr_StorageBuffer_v2int %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMul/d584a2.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMul/d584a2.wgsl.expected.msl
new file mode 100644
index 0000000..dd071f0
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/d584a2.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupMul_d584a2() -> vec2<i32> {
+ var res : vec2<i32> = subgroupMul(vec2<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_d584a2();
+}
+
+Failed to generate: error: Unknown import method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/d584a2.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMul/d584a2.wgsl.expected.spvasm
new file mode 100644
index 0000000..4e71280
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/d584a2.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupMul_d584a2() -> vec2<i32> {
+ var res : vec2<i32> = subgroupMul(vec2<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_d584a2();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupMul/d584a2.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMul/d584a2.wgsl.expected.wgsl
new file mode 100644
index 0000000..9555042
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/d584a2.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupMul_d584a2() -> vec2<i32> {
+ var res : vec2<i32> = subgroupMul(vec2<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_d584a2();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMul/dc672a.wgsl b/test/tint/builtins/gen/literal/subgroupMul/dc672a.wgsl
new file mode 100644
index 0000000..7d0f661
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/dc672a.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+
+// fn subgroupMul(value: vec<2, u32>) -> vec<2, u32>
+fn subgroupMul_dc672a() -> vec2<u32>{
+ var res: vec2<u32> = subgroupMul(vec2<u32>(1u));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_dc672a();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMul/dc672a.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMul/dc672a.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..a29a867
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/dc672a.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupMul_dc672a() -> vec2<u32> {
+ var res : vec2<u32> = subgroupMul(vec2<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_dc672a();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/dc672a.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMul/dc672a.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..a29a867
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/dc672a.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupMul_dc672a() -> vec2<u32> {
+ var res : vec2<u32> = subgroupMul(vec2<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_dc672a();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/dc672a.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMul/dc672a.wgsl.expected.glsl
new file mode 100644
index 0000000..9344d26
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/dc672a.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupMul_dc672a() -> vec2<u32> {
+ var res : vec2<u32> = subgroupMul(vec2<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_dc672a();
+}
+
+Failed to generate: error: Unknown builtin method: 0x5598fc2f7230
diff --git a/test/tint/builtins/gen/literal/subgroupMul/dc672a.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupMul/dc672a.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..68fbd6c
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/dc672a.wgsl.expected.ir.spvasm
@@ -0,0 +1,48 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 24
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupMul_dc672a "subgroupMul_dc672a"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %uint = OpTypeInt 32 0
+ %v2uint = OpTypeVector %uint 2
+%tint_symbol_1 = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v2uint
+ %uint_3 = OpConstant %uint 3
+ %uint_1 = OpConstant %uint 1
+ %11 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+ %void = OpTypeVoid
+ %18 = OpTypeFunction %void
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+ %uint_0 = OpConstant %uint 0
+%subgroupMul_dc672a = OpFunction %v2uint None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function
+ %9 = OpGroupNonUniformIMul %v2uint %uint_3 Reduce %11
+ OpStore %res %9
+ %15 = OpLoad %v2uint %res
+ OpReturnValue %15
+ OpFunctionEnd
+%compute_main = OpFunction %void None %18
+ %19 = OpLabel
+ %20 = OpFunctionCall %v2uint %subgroupMul_dc672a
+ %21 = OpAccessChain %_ptr_StorageBuffer_v2uint %1 %uint_0
+ OpStore %21 %20
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMul/dc672a.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMul/dc672a.wgsl.expected.msl
new file mode 100644
index 0000000..e14a785
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/dc672a.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupMul_dc672a() -> vec2<u32> {
+ var res : vec2<u32> = subgroupMul(vec2<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_dc672a();
+}
+
+Failed to generate: error: Unknown import method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/dc672a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMul/dc672a.wgsl.expected.spvasm
new file mode 100644
index 0000000..723ce79
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/dc672a.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupMul_dc672a() -> vec2<u32> {
+ var res : vec2<u32> = subgroupMul(vec2<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_dc672a();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupMul/dc672a.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMul/dc672a.wgsl.expected.wgsl
new file mode 100644
index 0000000..d71b937
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/dc672a.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupMul_dc672a() -> vec2<u32> {
+ var res : vec2<u32> = subgroupMul(vec2<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_dc672a();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMul/dd1333.wgsl b/test/tint/builtins/gen/literal/subgroupMul/dd1333.wgsl
new file mode 100644
index 0000000..fa8936a
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/dd1333.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+
+// fn subgroupMul(value: vec<4, u32>) -> vec<4, u32>
+fn subgroupMul_dd1333() -> vec4<u32>{
+ var res: vec4<u32> = subgroupMul(vec4<u32>(1u));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_dd1333();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMul/dd1333.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMul/dd1333.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..1adfcaa
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/dd1333.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupMul_dd1333() -> vec4<u32> {
+ var res : vec4<u32> = subgroupMul(vec4<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_dd1333();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/dd1333.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMul/dd1333.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..1adfcaa
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/dd1333.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupMul_dd1333() -> vec4<u32> {
+ var res : vec4<u32> = subgroupMul(vec4<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_dd1333();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/dd1333.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMul/dd1333.wgsl.expected.glsl
new file mode 100644
index 0000000..be200de
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/dd1333.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupMul_dd1333() -> vec4<u32> {
+ var res : vec4<u32> = subgroupMul(vec4<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_dd1333();
+}
+
+Failed to generate: error: Unknown builtin method: 0x559e4ef60230
diff --git a/test/tint/builtins/gen/literal/subgroupMul/dd1333.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupMul/dd1333.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..2244b8a
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/dd1333.wgsl.expected.ir.spvasm
@@ -0,0 +1,48 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 24
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupMul_dd1333 "subgroupMul_dd1333"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %uint = OpTypeInt 32 0
+ %v4uint = OpTypeVector %uint 4
+%tint_symbol_1 = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v4uint
+ %uint_3 = OpConstant %uint 3
+ %uint_1 = OpConstant %uint 1
+ %11 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+ %void = OpTypeVoid
+ %18 = OpTypeFunction %void
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+ %uint_0 = OpConstant %uint 0
+%subgroupMul_dd1333 = OpFunction %v4uint None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v4uint Function
+ %9 = OpGroupNonUniformIMul %v4uint %uint_3 Reduce %11
+ OpStore %res %9
+ %15 = OpLoad %v4uint %res
+ OpReturnValue %15
+ OpFunctionEnd
+%compute_main = OpFunction %void None %18
+ %19 = OpLabel
+ %20 = OpFunctionCall %v4uint %subgroupMul_dd1333
+ %21 = OpAccessChain %_ptr_StorageBuffer_v4uint %1 %uint_0
+ OpStore %21 %20
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMul/dd1333.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMul/dd1333.wgsl.expected.msl
new file mode 100644
index 0000000..cfcf008
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/dd1333.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupMul_dd1333() -> vec4<u32> {
+ var res : vec4<u32> = subgroupMul(vec4<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_dd1333();
+}
+
+Failed to generate: error: Unknown import method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/dd1333.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMul/dd1333.wgsl.expected.spvasm
new file mode 100644
index 0000000..8b32adf
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/dd1333.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupMul_dd1333() -> vec4<u32> {
+ var res : vec4<u32> = subgroupMul(vec4<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_dd1333();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupMul/dd1333.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMul/dd1333.wgsl.expected.wgsl
new file mode 100644
index 0000000..f0df27d
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/dd1333.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupMul_dd1333() -> vec4<u32> {
+ var res : vec4<u32> = subgroupMul(vec4<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_dd1333();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMul/f2ac5b.wgsl b/test/tint/builtins/gen/literal/subgroupMul/f2ac5b.wgsl
new file mode 100644
index 0000000..69ccbae
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/f2ac5b.wgsl
@@ -0,0 +1,57 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// flags: --hlsl_shader_model 62
+
+
+enable subgroups;
+enable subgroups_f16;
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+
+// fn subgroupMul(value: vec<4, f16>) -> vec<4, f16>
+fn subgroupMul_f2ac5b() -> vec4<f16>{
+ var res: vec4<f16> = subgroupMul(vec4<f16>(1.h));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_f2ac5b();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMul/f2ac5b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMul/f2ac5b.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..746e8bd
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/f2ac5b.wgsl.expected.dxc.hlsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupMul_f2ac5b() -> vec4<f16> {
+ var res : vec4<f16> = subgroupMul(vec4<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_f2ac5b();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/f2ac5b.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMul/f2ac5b.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..746e8bd
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/f2ac5b.wgsl.expected.fxc.hlsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupMul_f2ac5b() -> vec4<f16> {
+ var res : vec4<f16> = subgroupMul(vec4<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_f2ac5b();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/f2ac5b.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMul/f2ac5b.wgsl.expected.glsl
new file mode 100644
index 0000000..224f72b
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/f2ac5b.wgsl.expected.glsl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupMul_f2ac5b() -> vec4<f16> {
+ var res : vec4<f16> = subgroupMul(vec4<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_f2ac5b();
+}
+
+Failed to generate: error: Unknown builtin method: 0x5573551d6230
diff --git a/test/tint/builtins/gen/literal/subgroupMul/f2ac5b.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupMul/f2ac5b.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..d169a02
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/f2ac5b.wgsl.expected.ir.spvasm
@@ -0,0 +1,52 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability Float16
+ OpCapability UniformAndStorageBuffer16BitAccess
+ OpCapability StorageBuffer16BitAccess
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupMul_f2ac5b "subgroupMul_f2ac5b"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %half = OpTypeFloat 16
+ %v4half = OpTypeVector %half 4
+%tint_symbol_1 = OpTypeStruct %v4half
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v4half
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+%half_0x1p_0 = OpConstant %half 0x1p+0
+ %12 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+%_ptr_Function_v4half = OpTypePointer Function %v4half
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v4half = OpTypePointer StorageBuffer %v4half
+ %uint_0 = OpConstant %uint 0
+%subgroupMul_f2ac5b = OpFunction %v4half None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v4half Function
+ %9 = OpGroupNonUniformFMul %v4half %uint_3 Reduce %12
+ OpStore %res %9
+ %16 = OpLoad %v4half %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v4half %subgroupMul_f2ac5b
+ %22 = OpAccessChain %_ptr_StorageBuffer_v4half %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMul/f2ac5b.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMul/f2ac5b.wgsl.expected.msl
new file mode 100644
index 0000000..ca31b4e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/f2ac5b.wgsl.expected.msl
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupMul_f2ac5b() -> vec4<f16> {
+ var res : vec4<f16> = subgroupMul(vec4<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_f2ac5b();
+}
+
+Failed to generate: error: Unknown import method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/f2ac5b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMul/f2ac5b.wgsl.expected.spvasm
new file mode 100644
index 0000000..8c4d090
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/f2ac5b.wgsl.expected.spvasm
@@ -0,0 +1,18 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupMul_f2ac5b() -> vec4<f16> {
+ var res : vec4<f16> = subgroupMul(vec4<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_f2ac5b();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupMul/f2ac5b.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMul/f2ac5b.wgsl.expected.wgsl
new file mode 100644
index 0000000..92516a7
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/f2ac5b.wgsl.expected.wgsl
@@ -0,0 +1,15 @@
+enable subgroups;
+enable subgroups_f16;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupMul_f2ac5b() -> vec4<f16> {
+ var res : vec4<f16> = subgroupMul(vec4<f16>(1.0h));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_f2ac5b();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMul/f78398.wgsl b/test/tint/builtins/gen/literal/subgroupMul/f78398.wgsl
new file mode 100644
index 0000000..02e3822
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/f78398.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+
+// fn subgroupMul(value: vec<2, f32>) -> vec<2, f32>
+fn subgroupMul_f78398() -> vec2<f32>{
+ var res: vec2<f32> = subgroupMul(vec2<f32>(1.f));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_f78398();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMul/f78398.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMul/f78398.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..72c4d6e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/f78398.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupMul_f78398() -> vec2<f32> {
+ var res : vec2<f32> = subgroupMul(vec2<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_f78398();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/f78398.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMul/f78398.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..72c4d6e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/f78398.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupMul_f78398() -> vec2<f32> {
+ var res : vec2<f32> = subgroupMul(vec2<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_f78398();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/f78398.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMul/f78398.wgsl.expected.glsl
new file mode 100644
index 0000000..3e56db2
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/f78398.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupMul_f78398() -> vec2<f32> {
+ var res : vec2<f32> = subgroupMul(vec2<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_f78398();
+}
+
+Failed to generate: error: Unknown builtin method: 0x5602e75bf230
diff --git a/test/tint/builtins/gen/literal/subgroupMul/f78398.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupMul/f78398.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..e74bf52
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/f78398.wgsl.expected.ir.spvasm
@@ -0,0 +1,49 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupMul_f78398 "subgroupMul_f78398"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %float = OpTypeFloat 32
+ %v2float = OpTypeVector %float 2
+%tint_symbol_1 = OpTypeStruct %v2float
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v2float
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %float_1 = OpConstant %float 1
+ %12 = OpConstantComposite %v2float %float_1 %float_1
+%_ptr_Function_v2float = OpTypePointer Function %v2float
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v2float = OpTypePointer StorageBuffer %v2float
+ %uint_0 = OpConstant %uint 0
+%subgroupMul_f78398 = OpFunction %v2float None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v2float Function
+ %9 = OpGroupNonUniformFMul %v2float %uint_3 Reduce %12
+ OpStore %res %9
+ %16 = OpLoad %v2float %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v2float %subgroupMul_f78398
+ %22 = OpAccessChain %_ptr_StorageBuffer_v2float %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMul/f78398.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMul/f78398.wgsl.expected.msl
new file mode 100644
index 0000000..74d265c
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/f78398.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupMul_f78398() -> vec2<f32> {
+ var res : vec2<f32> = subgroupMul(vec2<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_f78398();
+}
+
+Failed to generate: error: Unknown import method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/f78398.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMul/f78398.wgsl.expected.spvasm
new file mode 100644
index 0000000..ef5ad25
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/f78398.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupMul_f78398() -> vec2<f32> {
+ var res : vec2<f32> = subgroupMul(vec2<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_f78398();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupMul/f78398.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMul/f78398.wgsl.expected.wgsl
new file mode 100644
index 0000000..e2fbcb7
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/f78398.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupMul_f78398() -> vec2<f32> {
+ var res : vec2<f32> = subgroupMul(vec2<f32>(1.0f));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_f78398();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMul/fa781b.wgsl b/test/tint/builtins/gen/literal/subgroupMul/fa781b.wgsl
new file mode 100644
index 0000000..01e1e5f
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/fa781b.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+
+// fn subgroupMul(value: vec<3, u32>) -> vec<3, u32>
+fn subgroupMul_fa781b() -> vec3<u32>{
+ var res: vec3<u32> = subgroupMul(vec3<u32>(1u));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_fa781b();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMul/fa781b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMul/fa781b.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..396f278
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/fa781b.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupMul_fa781b() -> vec3<u32> {
+ var res : vec3<u32> = subgroupMul(vec3<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_fa781b();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/fa781b.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMul/fa781b.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..396f278
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/fa781b.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupMul_fa781b() -> vec3<u32> {
+ var res : vec3<u32> = subgroupMul(vec3<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_fa781b();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/fa781b.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMul/fa781b.wgsl.expected.glsl
new file mode 100644
index 0000000..a3e126c
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/fa781b.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupMul_fa781b() -> vec3<u32> {
+ var res : vec3<u32> = subgroupMul(vec3<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_fa781b();
+}
+
+Failed to generate: error: Unknown builtin method: 0x561707d10230
diff --git a/test/tint/builtins/gen/literal/subgroupMul/fa781b.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupMul/fa781b.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..b069441
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/fa781b.wgsl.expected.ir.spvasm
@@ -0,0 +1,48 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 24
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupMul_fa781b "subgroupMul_fa781b"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %uint = OpTypeInt 32 0
+ %v3uint = OpTypeVector %uint 3
+%tint_symbol_1 = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v3uint
+ %uint_3 = OpConstant %uint 3
+ %uint_1 = OpConstant %uint 1
+ %11 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+ %void = OpTypeVoid
+ %18 = OpTypeFunction %void
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+ %uint_0 = OpConstant %uint 0
+%subgroupMul_fa781b = OpFunction %v3uint None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function
+ %9 = OpGroupNonUniformIMul %v3uint %uint_3 Reduce %11
+ OpStore %res %9
+ %15 = OpLoad %v3uint %res
+ OpReturnValue %15
+ OpFunctionEnd
+%compute_main = OpFunction %void None %18
+ %19 = OpLabel
+ %20 = OpFunctionCall %v3uint %subgroupMul_fa781b
+ %21 = OpAccessChain %_ptr_StorageBuffer_v3uint %1 %uint_0
+ OpStore %21 %20
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMul/fa781b.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMul/fa781b.wgsl.expected.msl
new file mode 100644
index 0000000..59c2e0e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/fa781b.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupMul_fa781b() -> vec3<u32> {
+ var res : vec3<u32> = subgroupMul(vec3<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_fa781b();
+}
+
+Failed to generate: error: Unknown import method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/fa781b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMul/fa781b.wgsl.expected.spvasm
new file mode 100644
index 0000000..bcea504
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/fa781b.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupMul_fa781b() -> vec3<u32> {
+ var res : vec3<u32> = subgroupMul(vec3<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_fa781b();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupMul/fa781b.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMul/fa781b.wgsl.expected.wgsl
new file mode 100644
index 0000000..5ba0cd0
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/fa781b.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupMul_fa781b() -> vec3<u32> {
+ var res : vec3<u32> = subgroupMul(vec3<u32>(1u));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_fa781b();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMul/fab258.wgsl b/test/tint/builtins/gen/literal/subgroupMul/fab258.wgsl
new file mode 100644
index 0000000..de3b1ca
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/fab258.wgsl
@@ -0,0 +1,50 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+
+// fn subgroupMul(value: vec<4, i32>) -> vec<4, i32>
+fn subgroupMul_fab258() -> vec4<i32>{
+ var res: vec4<i32> = subgroupMul(vec4<i32>(1i));
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_fab258();
+}
diff --git a/test/tint/builtins/gen/literal/subgroupMul/fab258.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/subgroupMul/fab258.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..d244cf6
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/fab258.wgsl.expected.dxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupMul_fab258() -> vec4<i32> {
+ var res : vec4<i32> = subgroupMul(vec4<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_fab258();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/fab258.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/subgroupMul/fab258.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..d244cf6
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/fab258.wgsl.expected.fxc.hlsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupMul_fab258() -> vec4<i32> {
+ var res : vec4<i32> = subgroupMul(vec4<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_fab258();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/fab258.wgsl.expected.glsl b/test/tint/builtins/gen/literal/subgroupMul/fab258.wgsl.expected.glsl
new file mode 100644
index 0000000..95f557f
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/fab258.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupMul_fab258() -> vec4<i32> {
+ var res : vec4<i32> = subgroupMul(vec4<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_fab258();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55c8d4965230
diff --git a/test/tint/builtins/gen/literal/subgroupMul/fab258.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/literal/subgroupMul/fab258.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..e368728
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/fab258.wgsl.expected.ir.spvasm
@@ -0,0 +1,49 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupMul_fab258 "subgroupMul_fab258"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %int = OpTypeInt 32 1
+ %v4int = OpTypeVector %int 4
+%tint_symbol_1 = OpTypeStruct %v4int
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v4int
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %int_1 = OpConstant %int 1
+ %12 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+ %uint_0 = OpConstant %uint 0
+%subgroupMul_fab258 = OpFunction %v4int None %7
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_v4int Function
+ %9 = OpGroupNonUniformIMul %v4int %uint_3 Reduce %12
+ OpStore %res %9
+ %16 = OpLoad %v4int %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %v4int %subgroupMul_fab258
+ %22 = OpAccessChain %_ptr_StorageBuffer_v4int %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupMul/fab258.wgsl.expected.msl b/test/tint/builtins/gen/literal/subgroupMul/fab258.wgsl.expected.msl
new file mode 100644
index 0000000..14338ac
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/fab258.wgsl.expected.msl
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupMul_fab258() -> vec4<i32> {
+ var res : vec4<i32> = subgroupMul(vec4<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_fab258();
+}
+
+Failed to generate: error: Unknown import method: subgroupMul
diff --git a/test/tint/builtins/gen/literal/subgroupMul/fab258.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupMul/fab258.wgsl.expected.spvasm
new file mode 100644
index 0000000..f6a8324
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/fab258.wgsl.expected.spvasm
@@ -0,0 +1,16 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupMul_fab258() -> vec4<i32> {
+ var res : vec4<i32> = subgroupMul(vec4<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_fab258();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/literal/subgroupMul/fab258.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/subgroupMul/fab258.wgsl.expected.wgsl
new file mode 100644
index 0000000..6265261
--- /dev/null
+++ b/test/tint/builtins/gen/literal/subgroupMul/fab258.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupMul_fab258() -> vec4<i32> {
+ var res : vec4<i32> = subgroupMul(vec4<i32>(1i));
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_fab258();
+}
diff --git a/test/tint/builtins/gen/var/subgroupAdd/0dd12a.wgsl b/test/tint/builtins/gen/var/subgroupAdd/0dd12a.wgsl
new file mode 100644
index 0000000..44abdc7
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/0dd12a.wgsl
@@ -0,0 +1,58 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// flags: --hlsl_shader_model 62
+
+
+enable subgroups;
+enable subgroups_f16;
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+
+// fn subgroupAdd(value: vec<3, f16>) -> vec<3, f16>
+fn subgroupAdd_0dd12a() -> vec3<f16>{
+ var arg_0 = vec3<f16>(1.h);
+ var res: vec3<f16> = subgroupAdd(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_0dd12a();
+}
diff --git a/test/tint/builtins/gen/var/subgroupAdd/0dd12a.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupAdd/0dd12a.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..67c5e1a
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/0dd12a.wgsl.expected.dxc.hlsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupAdd_0dd12a() -> vec3<f16> {
+ var arg_0 = vec3<f16>(1.0h);
+ var res : vec3<f16> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_0dd12a();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/0dd12a.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupAdd/0dd12a.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..67c5e1a
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/0dd12a.wgsl.expected.fxc.hlsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupAdd_0dd12a() -> vec3<f16> {
+ var arg_0 = vec3<f16>(1.0h);
+ var res : vec3<f16> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_0dd12a();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/0dd12a.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupAdd/0dd12a.wgsl.expected.glsl
new file mode 100644
index 0000000..bec78f5
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/0dd12a.wgsl.expected.glsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupAdd_0dd12a() -> vec3<f16> {
+ var arg_0 = vec3<f16>(1.0h);
+ var res : vec3<f16> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_0dd12a();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55f37e46e498
diff --git a/test/tint/builtins/gen/var/subgroupAdd/0dd12a.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupAdd/0dd12a.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..09d5a07
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/0dd12a.wgsl.expected.ir.spvasm
@@ -0,0 +1,56 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability Float16
+ OpCapability UniformAndStorageBuffer16BitAccess
+ OpCapability StorageBuffer16BitAccess
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupAdd_0dd12a "subgroupAdd_0dd12a"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %half = OpTypeFloat 16
+ %v3half = OpTypeVector %half 3
+%tint_symbol_1 = OpTypeStruct %v3half
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v3half
+%_ptr_Function_v3half = OpTypePointer Function %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+ %11 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v3half = OpTypePointer StorageBuffer %v3half
+ %uint_0 = OpConstant %uint 0
+%subgroupAdd_0dd12a = OpFunction %v3half None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v3half Function
+ %res = OpVariable %_ptr_Function_v3half Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v3half %arg_0
+ %14 = OpGroupNonUniformFAdd %v3half %uint_3 Reduce %13
+ OpStore %res %14
+ %18 = OpLoad %v3half %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v3half %subgroupAdd_0dd12a
+ %24 = OpAccessChain %_ptr_StorageBuffer_v3half %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/0dd12a.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupAdd/0dd12a.wgsl.expected.msl
new file mode 100644
index 0000000..63f8572
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/0dd12a.wgsl.expected.msl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupAdd_0dd12a() -> vec3<f16> {
+ var arg_0 = vec3<f16>(1.0h);
+ var res : vec3<f16> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_0dd12a();
+}
+
+Failed to generate: error: Unknown import method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/0dd12a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupAdd/0dd12a.wgsl.expected.spvasm
new file mode 100644
index 0000000..1df66f8
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/0dd12a.wgsl.expected.spvasm
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupAdd_0dd12a() -> vec3<f16> {
+ var arg_0 = vec3<f16>(1.0h);
+ var res : vec3<f16> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_0dd12a();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupAdd/0dd12a.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupAdd/0dd12a.wgsl.expected.wgsl
new file mode 100644
index 0000000..866c6ff
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/0dd12a.wgsl.expected.wgsl
@@ -0,0 +1,16 @@
+enable subgroups;
+enable subgroups_f16;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupAdd_0dd12a() -> vec3<f16> {
+ var arg_0 = vec3<f16>(1.0h);
+ var res : vec3<f16> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_0dd12a();
+}
diff --git a/test/tint/builtins/gen/var/subgroupAdd/1280c8.wgsl b/test/tint/builtins/gen/var/subgroupAdd/1280c8.wgsl
new file mode 100644
index 0000000..f6a86b9
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/1280c8.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+
+// fn subgroupAdd(value: vec<2, u32>) -> vec<2, u32>
+fn subgroupAdd_1280c8() -> vec2<u32>{
+ var arg_0 = vec2<u32>(1u);
+ var res: vec2<u32> = subgroupAdd(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_1280c8();
+}
diff --git a/test/tint/builtins/gen/var/subgroupAdd/1280c8.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupAdd/1280c8.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..8ceea8f
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/1280c8.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupAdd_1280c8() -> vec2<u32> {
+ var arg_0 = vec2<u32>(1u);
+ var res : vec2<u32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_1280c8();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/1280c8.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupAdd/1280c8.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..8ceea8f
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/1280c8.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupAdd_1280c8() -> vec2<u32> {
+ var arg_0 = vec2<u32>(1u);
+ var res : vec2<u32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_1280c8();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/1280c8.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupAdd/1280c8.wgsl.expected.glsl
new file mode 100644
index 0000000..161ff59
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/1280c8.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupAdd_1280c8() -> vec2<u32> {
+ var arg_0 = vec2<u32>(1u);
+ var res : vec2<u32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_1280c8();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55b45ab07498
diff --git a/test/tint/builtins/gen/var/subgroupAdd/1280c8.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupAdd/1280c8.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..6454991
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/1280c8.wgsl.expected.ir.spvasm
@@ -0,0 +1,52 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 26
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupAdd_1280c8 "subgroupAdd_1280c8"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %uint = OpTypeInt 32 0
+ %v2uint = OpTypeVector %uint 2
+%tint_symbol_1 = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v2uint
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+ %uint_1 = OpConstant %uint 1
+ %11 = OpConstantComposite %v2uint %uint_1 %uint_1
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %20 = OpTypeFunction %void
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+ %uint_0 = OpConstant %uint 0
+%subgroupAdd_1280c8 = OpFunction %v2uint None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v2uint Function
+ %res = OpVariable %_ptr_Function_v2uint Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v2uint %arg_0
+ %14 = OpGroupNonUniformIAdd %v2uint %uint_3 Reduce %13
+ OpStore %res %14
+ %17 = OpLoad %v2uint %res
+ OpReturnValue %17
+ OpFunctionEnd
+%compute_main = OpFunction %void None %20
+ %21 = OpLabel
+ %22 = OpFunctionCall %v2uint %subgroupAdd_1280c8
+ %23 = OpAccessChain %_ptr_StorageBuffer_v2uint %1 %uint_0
+ OpStore %23 %22
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/1280c8.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupAdd/1280c8.wgsl.expected.msl
new file mode 100644
index 0000000..eb7fe05
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/1280c8.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupAdd_1280c8() -> vec2<u32> {
+ var arg_0 = vec2<u32>(1u);
+ var res : vec2<u32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_1280c8();
+}
+
+Failed to generate: error: Unknown import method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/1280c8.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupAdd/1280c8.wgsl.expected.spvasm
new file mode 100644
index 0000000..fa214e3
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/1280c8.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupAdd_1280c8() -> vec2<u32> {
+ var arg_0 = vec2<u32>(1u);
+ var res : vec2<u32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_1280c8();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupAdd/1280c8.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupAdd/1280c8.wgsl.expected.wgsl
new file mode 100644
index 0000000..5965c9a
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/1280c8.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupAdd_1280c8() -> vec2<u32> {
+ var arg_0 = vec2<u32>(1u);
+ var res : vec2<u32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_1280c8();
+}
diff --git a/test/tint/builtins/gen/var/subgroupAdd/1eb429.wgsl b/test/tint/builtins/gen/var/subgroupAdd/1eb429.wgsl
new file mode 100644
index 0000000..7e4c4df
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/1eb429.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+
+// fn subgroupAdd(value: vec<2, i32>) -> vec<2, i32>
+fn subgroupAdd_1eb429() -> vec2<i32>{
+ var arg_0 = vec2<i32>(1i);
+ var res: vec2<i32> = subgroupAdd(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_1eb429();
+}
diff --git a/test/tint/builtins/gen/var/subgroupAdd/1eb429.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupAdd/1eb429.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..010b8d5
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/1eb429.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupAdd_1eb429() -> vec2<i32> {
+ var arg_0 = vec2<i32>(1i);
+ var res : vec2<i32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_1eb429();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/1eb429.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupAdd/1eb429.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..010b8d5
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/1eb429.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupAdd_1eb429() -> vec2<i32> {
+ var arg_0 = vec2<i32>(1i);
+ var res : vec2<i32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_1eb429();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/1eb429.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupAdd/1eb429.wgsl.expected.glsl
new file mode 100644
index 0000000..22f4fc4
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/1eb429.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupAdd_1eb429() -> vec2<i32> {
+ var arg_0 = vec2<i32>(1i);
+ var res : vec2<i32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_1eb429();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55946b0af498
diff --git a/test/tint/builtins/gen/var/subgroupAdd/1eb429.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupAdd/1eb429.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..99a1652
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/1eb429.wgsl.expected.ir.spvasm
@@ -0,0 +1,53 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupAdd_1eb429 "subgroupAdd_1eb429"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %int = OpTypeInt 32 1
+ %v2int = OpTypeVector %int 2
+%tint_symbol_1 = OpTypeStruct %v2int
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v2int
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+ %int_1 = OpConstant %int 1
+ %11 = OpConstantComposite %v2int %int_1 %int_1
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v2int = OpTypePointer StorageBuffer %v2int
+ %uint_0 = OpConstant %uint 0
+%subgroupAdd_1eb429 = OpFunction %v2int None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v2int Function
+ %res = OpVariable %_ptr_Function_v2int Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v2int %arg_0
+ %14 = OpGroupNonUniformIAdd %v2int %uint_3 Reduce %13
+ OpStore %res %14
+ %18 = OpLoad %v2int %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v2int %subgroupAdd_1eb429
+ %24 = OpAccessChain %_ptr_StorageBuffer_v2int %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/1eb429.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupAdd/1eb429.wgsl.expected.msl
new file mode 100644
index 0000000..89fc8e0
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/1eb429.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupAdd_1eb429() -> vec2<i32> {
+ var arg_0 = vec2<i32>(1i);
+ var res : vec2<i32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_1eb429();
+}
+
+Failed to generate: error: Unknown import method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/1eb429.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupAdd/1eb429.wgsl.expected.spvasm
new file mode 100644
index 0000000..b4ed161
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/1eb429.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupAdd_1eb429() -> vec2<i32> {
+ var arg_0 = vec2<i32>(1i);
+ var res : vec2<i32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_1eb429();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupAdd/1eb429.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupAdd/1eb429.wgsl.expected.wgsl
new file mode 100644
index 0000000..24bf129
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/1eb429.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupAdd_1eb429() -> vec2<i32> {
+ var arg_0 = vec2<i32>(1i);
+ var res : vec2<i32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_1eb429();
+}
diff --git a/test/tint/builtins/gen/var/subgroupAdd/225207.wgsl b/test/tint/builtins/gen/var/subgroupAdd/225207.wgsl
new file mode 100644
index 0000000..35dc012
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/225207.wgsl
@@ -0,0 +1,58 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// flags: --hlsl_shader_model 62
+
+
+enable subgroups;
+enable subgroups_f16;
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+
+// fn subgroupAdd(value: f16) -> f16
+fn subgroupAdd_225207() -> f16{
+ var arg_0 = 1.h;
+ var res: f16 = subgroupAdd(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_225207();
+}
diff --git a/test/tint/builtins/gen/var/subgroupAdd/225207.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupAdd/225207.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..a03cfe5
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/225207.wgsl.expected.dxc.hlsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupAdd_225207() -> f16 {
+ var arg_0 = 1.0h;
+ var res : f16 = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_225207();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/225207.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupAdd/225207.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..a03cfe5
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/225207.wgsl.expected.fxc.hlsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupAdd_225207() -> f16 {
+ var arg_0 = 1.0h;
+ var res : f16 = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_225207();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/225207.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupAdd/225207.wgsl.expected.glsl
new file mode 100644
index 0000000..a1bdb20
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/225207.wgsl.expected.glsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupAdd_225207() -> f16 {
+ var arg_0 = 1.0h;
+ var res : f16 = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_225207();
+}
+
+Failed to generate: error: Unknown builtin method: 0x561b5474e1c0
diff --git a/test/tint/builtins/gen/var/subgroupAdd/225207.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupAdd/225207.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..bb09c70
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/225207.wgsl.expected.ir.spvasm
@@ -0,0 +1,54 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability Float16
+ OpCapability UniformAndStorageBuffer16BitAccess
+ OpCapability StorageBuffer16BitAccess
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupAdd_225207 "subgroupAdd_225207"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %half = OpTypeFloat 16
+%tint_symbol_1 = OpTypeStruct %half
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %6 = OpTypeFunction %half
+%_ptr_Function_half = OpTypePointer Function %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_half = OpTypePointer StorageBuffer %half
+ %uint_0 = OpConstant %uint 0
+%subgroupAdd_225207 = OpFunction %half None %6
+ %7 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_half Function
+ %res = OpVariable %_ptr_Function_half Function
+ OpStore %arg_0 %half_0x1p_0
+ %11 = OpLoad %half %arg_0
+ %12 = OpGroupNonUniformFAdd %half %uint_3 Reduce %11
+ OpStore %res %12
+ %16 = OpLoad %half %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %half %subgroupAdd_225207
+ %22 = OpAccessChain %_ptr_StorageBuffer_half %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/225207.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupAdd/225207.wgsl.expected.msl
new file mode 100644
index 0000000..e32e38c
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/225207.wgsl.expected.msl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupAdd_225207() -> f16 {
+ var arg_0 = 1.0h;
+ var res : f16 = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_225207();
+}
+
+Failed to generate: error: Unknown import method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/225207.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupAdd/225207.wgsl.expected.spvasm
new file mode 100644
index 0000000..f4708df
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/225207.wgsl.expected.spvasm
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupAdd_225207() -> f16 {
+ var arg_0 = 1.0h;
+ var res : f16 = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_225207();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupAdd/225207.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupAdd/225207.wgsl.expected.wgsl
new file mode 100644
index 0000000..6f9cafa
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/225207.wgsl.expected.wgsl
@@ -0,0 +1,16 @@
+enable subgroups;
+enable subgroups_f16;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupAdd_225207() -> f16 {
+ var arg_0 = 1.0h;
+ var res : f16 = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_225207();
+}
diff --git a/test/tint/builtins/gen/var/subgroupAdd/22d041.wgsl b/test/tint/builtins/gen/var/subgroupAdd/22d041.wgsl
new file mode 100644
index 0000000..703ce46
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/22d041.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+
+// fn subgroupAdd(value: vec<3, i32>) -> vec<3, i32>
+fn subgroupAdd_22d041() -> vec3<i32>{
+ var arg_0 = vec3<i32>(1i);
+ var res: vec3<i32> = subgroupAdd(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_22d041();
+}
diff --git a/test/tint/builtins/gen/var/subgroupAdd/22d041.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupAdd/22d041.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..c2863c1
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/22d041.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupAdd_22d041() -> vec3<i32> {
+ var arg_0 = vec3<i32>(1i);
+ var res : vec3<i32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_22d041();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/22d041.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupAdd/22d041.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..c2863c1
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/22d041.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupAdd_22d041() -> vec3<i32> {
+ var arg_0 = vec3<i32>(1i);
+ var res : vec3<i32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_22d041();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/22d041.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupAdd/22d041.wgsl.expected.glsl
new file mode 100644
index 0000000..e472af3
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/22d041.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupAdd_22d041() -> vec3<i32> {
+ var arg_0 = vec3<i32>(1i);
+ var res : vec3<i32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_22d041();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55fb1e161498
diff --git a/test/tint/builtins/gen/var/subgroupAdd/22d041.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupAdd/22d041.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..a0cc82d
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/22d041.wgsl.expected.ir.spvasm
@@ -0,0 +1,53 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupAdd_22d041 "subgroupAdd_22d041"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %int = OpTypeInt 32 1
+ %v3int = OpTypeVector %int 3
+%tint_symbol_1 = OpTypeStruct %v3int
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v3int
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+ %int_1 = OpConstant %int 1
+ %11 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v3int = OpTypePointer StorageBuffer %v3int
+ %uint_0 = OpConstant %uint 0
+%subgroupAdd_22d041 = OpFunction %v3int None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v3int Function
+ %res = OpVariable %_ptr_Function_v3int Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v3int %arg_0
+ %14 = OpGroupNonUniformIAdd %v3int %uint_3 Reduce %13
+ OpStore %res %14
+ %18 = OpLoad %v3int %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v3int %subgroupAdd_22d041
+ %24 = OpAccessChain %_ptr_StorageBuffer_v3int %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/22d041.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupAdd/22d041.wgsl.expected.msl
new file mode 100644
index 0000000..22c1efe
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/22d041.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupAdd_22d041() -> vec3<i32> {
+ var arg_0 = vec3<i32>(1i);
+ var res : vec3<i32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_22d041();
+}
+
+Failed to generate: error: Unknown import method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/22d041.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupAdd/22d041.wgsl.expected.spvasm
new file mode 100644
index 0000000..483ef4d
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/22d041.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupAdd_22d041() -> vec3<i32> {
+ var arg_0 = vec3<i32>(1i);
+ var res : vec3<i32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_22d041();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupAdd/22d041.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupAdd/22d041.wgsl.expected.wgsl
new file mode 100644
index 0000000..ec35a9b
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/22d041.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupAdd_22d041() -> vec3<i32> {
+ var arg_0 = vec3<i32>(1i);
+ var res : vec3<i32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_22d041();
+}
diff --git a/test/tint/builtins/gen/var/subgroupAdd/28db2c.wgsl b/test/tint/builtins/gen/var/subgroupAdd/28db2c.wgsl
new file mode 100644
index 0000000..2450d74
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/28db2c.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+
+// fn subgroupAdd(value: vec<4, i32>) -> vec<4, i32>
+fn subgroupAdd_28db2c() -> vec4<i32>{
+ var arg_0 = vec4<i32>(1i);
+ var res: vec4<i32> = subgroupAdd(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_28db2c();
+}
diff --git a/test/tint/builtins/gen/var/subgroupAdd/28db2c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupAdd/28db2c.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..2b140e3
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/28db2c.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupAdd_28db2c() -> vec4<i32> {
+ var arg_0 = vec4<i32>(1i);
+ var res : vec4<i32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_28db2c();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/28db2c.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupAdd/28db2c.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..2b140e3
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/28db2c.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupAdd_28db2c() -> vec4<i32> {
+ var arg_0 = vec4<i32>(1i);
+ var res : vec4<i32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_28db2c();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/28db2c.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupAdd/28db2c.wgsl.expected.glsl
new file mode 100644
index 0000000..12c7c20
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/28db2c.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupAdd_28db2c() -> vec4<i32> {
+ var arg_0 = vec4<i32>(1i);
+ var res : vec4<i32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_28db2c();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55d6fa3e3498
diff --git a/test/tint/builtins/gen/var/subgroupAdd/28db2c.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupAdd/28db2c.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..9973971
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/28db2c.wgsl.expected.ir.spvasm
@@ -0,0 +1,53 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupAdd_28db2c "subgroupAdd_28db2c"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %int = OpTypeInt 32 1
+ %v4int = OpTypeVector %int 4
+%tint_symbol_1 = OpTypeStruct %v4int
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v4int
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+ %int_1 = OpConstant %int 1
+ %11 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+ %uint_0 = OpConstant %uint 0
+%subgroupAdd_28db2c = OpFunction %v4int None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v4int Function
+ %res = OpVariable %_ptr_Function_v4int Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v4int %arg_0
+ %14 = OpGroupNonUniformIAdd %v4int %uint_3 Reduce %13
+ OpStore %res %14
+ %18 = OpLoad %v4int %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v4int %subgroupAdd_28db2c
+ %24 = OpAccessChain %_ptr_StorageBuffer_v4int %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/28db2c.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupAdd/28db2c.wgsl.expected.msl
new file mode 100644
index 0000000..2291caf
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/28db2c.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupAdd_28db2c() -> vec4<i32> {
+ var arg_0 = vec4<i32>(1i);
+ var res : vec4<i32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_28db2c();
+}
+
+Failed to generate: error: Unknown import method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/28db2c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupAdd/28db2c.wgsl.expected.spvasm
new file mode 100644
index 0000000..2d9e663
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/28db2c.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupAdd_28db2c() -> vec4<i32> {
+ var arg_0 = vec4<i32>(1i);
+ var res : vec4<i32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_28db2c();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupAdd/28db2c.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupAdd/28db2c.wgsl.expected.wgsl
new file mode 100644
index 0000000..ddeadb3
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/28db2c.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupAdd_28db2c() -> vec4<i32> {
+ var arg_0 = vec4<i32>(1i);
+ var res : vec4<i32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_28db2c();
+}
diff --git a/test/tint/builtins/gen/var/subgroupAdd/2ab40a.wgsl b/test/tint/builtins/gen/var/subgroupAdd/2ab40a.wgsl
new file mode 100644
index 0000000..4cb689b
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/2ab40a.wgsl
@@ -0,0 +1,58 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// flags: --hlsl_shader_model 62
+
+
+enable subgroups;
+enable subgroups_f16;
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+
+// fn subgroupAdd(value: vec<4, f16>) -> vec<4, f16>
+fn subgroupAdd_2ab40a() -> vec4<f16>{
+ var arg_0 = vec4<f16>(1.h);
+ var res: vec4<f16> = subgroupAdd(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_2ab40a();
+}
diff --git a/test/tint/builtins/gen/var/subgroupAdd/2ab40a.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupAdd/2ab40a.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..c3c98c2
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/2ab40a.wgsl.expected.dxc.hlsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupAdd_2ab40a() -> vec4<f16> {
+ var arg_0 = vec4<f16>(1.0h);
+ var res : vec4<f16> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_2ab40a();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/2ab40a.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupAdd/2ab40a.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..c3c98c2
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/2ab40a.wgsl.expected.fxc.hlsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupAdd_2ab40a() -> vec4<f16> {
+ var arg_0 = vec4<f16>(1.0h);
+ var res : vec4<f16> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_2ab40a();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/2ab40a.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupAdd/2ab40a.wgsl.expected.glsl
new file mode 100644
index 0000000..6916b3f
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/2ab40a.wgsl.expected.glsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupAdd_2ab40a() -> vec4<f16> {
+ var arg_0 = vec4<f16>(1.0h);
+ var res : vec4<f16> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_2ab40a();
+}
+
+Failed to generate: error: Unknown builtin method: 0x5555f4340498
diff --git a/test/tint/builtins/gen/var/subgroupAdd/2ab40a.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupAdd/2ab40a.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..62aa04e
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/2ab40a.wgsl.expected.ir.spvasm
@@ -0,0 +1,56 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability Float16
+ OpCapability UniformAndStorageBuffer16BitAccess
+ OpCapability StorageBuffer16BitAccess
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupAdd_2ab40a "subgroupAdd_2ab40a"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %half = OpTypeFloat 16
+ %v4half = OpTypeVector %half 4
+%tint_symbol_1 = OpTypeStruct %v4half
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v4half
+%_ptr_Function_v4half = OpTypePointer Function %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+ %11 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v4half = OpTypePointer StorageBuffer %v4half
+ %uint_0 = OpConstant %uint 0
+%subgroupAdd_2ab40a = OpFunction %v4half None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v4half Function
+ %res = OpVariable %_ptr_Function_v4half Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v4half %arg_0
+ %14 = OpGroupNonUniformFAdd %v4half %uint_3 Reduce %13
+ OpStore %res %14
+ %18 = OpLoad %v4half %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v4half %subgroupAdd_2ab40a
+ %24 = OpAccessChain %_ptr_StorageBuffer_v4half %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/2ab40a.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupAdd/2ab40a.wgsl.expected.msl
new file mode 100644
index 0000000..32da36d
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/2ab40a.wgsl.expected.msl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupAdd_2ab40a() -> vec4<f16> {
+ var arg_0 = vec4<f16>(1.0h);
+ var res : vec4<f16> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_2ab40a();
+}
+
+Failed to generate: error: Unknown import method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/2ab40a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupAdd/2ab40a.wgsl.expected.spvasm
new file mode 100644
index 0000000..3b60e2f
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/2ab40a.wgsl.expected.spvasm
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupAdd_2ab40a() -> vec4<f16> {
+ var arg_0 = vec4<f16>(1.0h);
+ var res : vec4<f16> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_2ab40a();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupAdd/2ab40a.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupAdd/2ab40a.wgsl.expected.wgsl
new file mode 100644
index 0000000..3f02f03
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/2ab40a.wgsl.expected.wgsl
@@ -0,0 +1,16 @@
+enable subgroups;
+enable subgroups_f16;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupAdd_2ab40a() -> vec4<f16> {
+ var arg_0 = vec4<f16>(1.0h);
+ var res : vec4<f16> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_2ab40a();
+}
diff --git a/test/tint/builtins/gen/var/subgroupAdd/3854ae.wgsl b/test/tint/builtins/gen/var/subgroupAdd/3854ae.wgsl
new file mode 100644
index 0000000..3fe8521
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/3854ae.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+
+// fn subgroupAdd(value: f32) -> f32
+fn subgroupAdd_3854ae() -> f32{
+ var arg_0 = 1.f;
+ var res: f32 = subgroupAdd(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_3854ae();
+}
diff --git a/test/tint/builtins/gen/var/subgroupAdd/3854ae.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupAdd/3854ae.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..18ebba9
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/3854ae.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupAdd_3854ae() -> f32 {
+ var arg_0 = 1.0f;
+ var res : f32 = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_3854ae();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/3854ae.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupAdd/3854ae.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..18ebba9
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/3854ae.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupAdd_3854ae() -> f32 {
+ var arg_0 = 1.0f;
+ var res : f32 = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_3854ae();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/3854ae.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupAdd/3854ae.wgsl.expected.glsl
new file mode 100644
index 0000000..b74e790
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/3854ae.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupAdd_3854ae() -> f32 {
+ var arg_0 = 1.0f;
+ var res : f32 = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_3854ae();
+}
+
+Failed to generate: error: Unknown builtin method: 0x555aee42c1c0
diff --git a/test/tint/builtins/gen/var/subgroupAdd/3854ae.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupAdd/3854ae.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..96e316e
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/3854ae.wgsl.expected.ir.spvasm
@@ -0,0 +1,51 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupAdd_3854ae "subgroupAdd_3854ae"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %float = OpTypeFloat 32
+%tint_symbol_1 = OpTypeStruct %float
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %6 = OpTypeFunction %float
+%_ptr_Function_float = OpTypePointer Function %float
+ %float_1 = OpConstant %float 1
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
+ %uint_0 = OpConstant %uint 0
+%subgroupAdd_3854ae = OpFunction %float None %6
+ %7 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_float Function
+ %res = OpVariable %_ptr_Function_float Function
+ OpStore %arg_0 %float_1
+ %11 = OpLoad %float %arg_0
+ %12 = OpGroupNonUniformFAdd %float %uint_3 Reduce %11
+ OpStore %res %12
+ %16 = OpLoad %float %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %float %subgroupAdd_3854ae
+ %22 = OpAccessChain %_ptr_StorageBuffer_float %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/3854ae.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupAdd/3854ae.wgsl.expected.msl
new file mode 100644
index 0000000..c514cf2
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/3854ae.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupAdd_3854ae() -> f32 {
+ var arg_0 = 1.0f;
+ var res : f32 = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_3854ae();
+}
+
+Failed to generate: error: Unknown import method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/3854ae.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupAdd/3854ae.wgsl.expected.spvasm
new file mode 100644
index 0000000..4bf0eed
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/3854ae.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupAdd_3854ae() -> f32 {
+ var arg_0 = 1.0f;
+ var res : f32 = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_3854ae();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupAdd/3854ae.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupAdd/3854ae.wgsl.expected.wgsl
new file mode 100644
index 0000000..e734b1c
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/3854ae.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupAdd_3854ae() -> f32 {
+ var arg_0 = 1.0f;
+ var res : f32 = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_3854ae();
+}
diff --git a/test/tint/builtins/gen/var/subgroupAdd/6587ff.wgsl b/test/tint/builtins/gen/var/subgroupAdd/6587ff.wgsl
new file mode 100644
index 0000000..9092817
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/6587ff.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+
+// fn subgroupAdd(value: vec<3, u32>) -> vec<3, u32>
+fn subgroupAdd_6587ff() -> vec3<u32>{
+ var arg_0 = vec3<u32>(1u);
+ var res: vec3<u32> = subgroupAdd(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_6587ff();
+}
diff --git a/test/tint/builtins/gen/var/subgroupAdd/6587ff.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupAdd/6587ff.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..e990a7a
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/6587ff.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupAdd_6587ff() -> vec3<u32> {
+ var arg_0 = vec3<u32>(1u);
+ var res : vec3<u32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_6587ff();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/6587ff.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupAdd/6587ff.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..e990a7a
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/6587ff.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupAdd_6587ff() -> vec3<u32> {
+ var arg_0 = vec3<u32>(1u);
+ var res : vec3<u32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_6587ff();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/6587ff.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupAdd/6587ff.wgsl.expected.glsl
new file mode 100644
index 0000000..36b1cf1
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/6587ff.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupAdd_6587ff() -> vec3<u32> {
+ var arg_0 = vec3<u32>(1u);
+ var res : vec3<u32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_6587ff();
+}
+
+Failed to generate: error: Unknown builtin method: 0x564b566c2498
diff --git a/test/tint/builtins/gen/var/subgroupAdd/6587ff.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupAdd/6587ff.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..2d8cca7
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/6587ff.wgsl.expected.ir.spvasm
@@ -0,0 +1,52 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 26
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupAdd_6587ff "subgroupAdd_6587ff"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %uint = OpTypeInt 32 0
+ %v3uint = OpTypeVector %uint 3
+%tint_symbol_1 = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v3uint
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+ %uint_1 = OpConstant %uint 1
+ %11 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %20 = OpTypeFunction %void
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+ %uint_0 = OpConstant %uint 0
+%subgroupAdd_6587ff = OpFunction %v3uint None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v3uint Function
+ %res = OpVariable %_ptr_Function_v3uint Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v3uint %arg_0
+ %14 = OpGroupNonUniformIAdd %v3uint %uint_3 Reduce %13
+ OpStore %res %14
+ %17 = OpLoad %v3uint %res
+ OpReturnValue %17
+ OpFunctionEnd
+%compute_main = OpFunction %void None %20
+ %21 = OpLabel
+ %22 = OpFunctionCall %v3uint %subgroupAdd_6587ff
+ %23 = OpAccessChain %_ptr_StorageBuffer_v3uint %1 %uint_0
+ OpStore %23 %22
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/6587ff.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupAdd/6587ff.wgsl.expected.msl
new file mode 100644
index 0000000..ebe62fd
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/6587ff.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupAdd_6587ff() -> vec3<u32> {
+ var arg_0 = vec3<u32>(1u);
+ var res : vec3<u32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_6587ff();
+}
+
+Failed to generate: error: Unknown import method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/6587ff.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupAdd/6587ff.wgsl.expected.spvasm
new file mode 100644
index 0000000..8ccd432
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/6587ff.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupAdd_6587ff() -> vec3<u32> {
+ var arg_0 = vec3<u32>(1u);
+ var res : vec3<u32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_6587ff();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupAdd/6587ff.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupAdd/6587ff.wgsl.expected.wgsl
new file mode 100644
index 0000000..05e6427
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/6587ff.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupAdd_6587ff() -> vec3<u32> {
+ var arg_0 = vec3<u32>(1u);
+ var res : vec3<u32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_6587ff();
+}
diff --git a/test/tint/builtins/gen/var/subgroupAdd/7d1215.wgsl b/test/tint/builtins/gen/var/subgroupAdd/7d1215.wgsl
new file mode 100644
index 0000000..8f9a254
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/7d1215.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+
+// fn subgroupAdd(value: vec<3, f32>) -> vec<3, f32>
+fn subgroupAdd_7d1215() -> vec3<f32>{
+ var arg_0 = vec3<f32>(1.f);
+ var res: vec3<f32> = subgroupAdd(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_7d1215();
+}
diff --git a/test/tint/builtins/gen/var/subgroupAdd/7d1215.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupAdd/7d1215.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..0e48d2f
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/7d1215.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupAdd_7d1215() -> vec3<f32> {
+ var arg_0 = vec3<f32>(1.0f);
+ var res : vec3<f32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_7d1215();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/7d1215.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupAdd/7d1215.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..0e48d2f
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/7d1215.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupAdd_7d1215() -> vec3<f32> {
+ var arg_0 = vec3<f32>(1.0f);
+ var res : vec3<f32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_7d1215();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/7d1215.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupAdd/7d1215.wgsl.expected.glsl
new file mode 100644
index 0000000..a52d5df
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/7d1215.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupAdd_7d1215() -> vec3<f32> {
+ var arg_0 = vec3<f32>(1.0f);
+ var res : vec3<f32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_7d1215();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55bf8e8e2498
diff --git a/test/tint/builtins/gen/var/subgroupAdd/7d1215.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupAdd/7d1215.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..1a7857b
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/7d1215.wgsl.expected.ir.spvasm
@@ -0,0 +1,53 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupAdd_7d1215 "subgroupAdd_7d1215"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %float = OpTypeFloat 32
+ %v3float = OpTypeVector %float 3
+%tint_symbol_1 = OpTypeStruct %v3float
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v3float
+%_ptr_Function_v3float = OpTypePointer Function %v3float
+ %float_1 = OpConstant %float 1
+ %11 = OpConstantComposite %v3float %float_1 %float_1 %float_1
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v3float = OpTypePointer StorageBuffer %v3float
+ %uint_0 = OpConstant %uint 0
+%subgroupAdd_7d1215 = OpFunction %v3float None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v3float Function
+ %res = OpVariable %_ptr_Function_v3float Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v3float %arg_0
+ %14 = OpGroupNonUniformFAdd %v3float %uint_3 Reduce %13
+ OpStore %res %14
+ %18 = OpLoad %v3float %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v3float %subgroupAdd_7d1215
+ %24 = OpAccessChain %_ptr_StorageBuffer_v3float %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/7d1215.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupAdd/7d1215.wgsl.expected.msl
new file mode 100644
index 0000000..fe19d42
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/7d1215.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupAdd_7d1215() -> vec3<f32> {
+ var arg_0 = vec3<f32>(1.0f);
+ var res : vec3<f32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_7d1215();
+}
+
+Failed to generate: error: Unknown import method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/7d1215.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupAdd/7d1215.wgsl.expected.spvasm
new file mode 100644
index 0000000..64d19e5
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/7d1215.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupAdd_7d1215() -> vec3<f32> {
+ var arg_0 = vec3<f32>(1.0f);
+ var res : vec3<f32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_7d1215();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupAdd/7d1215.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupAdd/7d1215.wgsl.expected.wgsl
new file mode 100644
index 0000000..185a86a
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/7d1215.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupAdd_7d1215() -> vec3<f32> {
+ var arg_0 = vec3<f32>(1.0f);
+ var res : vec3<f32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_7d1215();
+}
diff --git a/test/tint/builtins/gen/var/subgroupAdd/8f4c15.wgsl b/test/tint/builtins/gen/var/subgroupAdd/8f4c15.wgsl
new file mode 100644
index 0000000..d6bcd62
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/8f4c15.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+
+// fn subgroupAdd(value: vec<4, f32>) -> vec<4, f32>
+fn subgroupAdd_8f4c15() -> vec4<f32>{
+ var arg_0 = vec4<f32>(1.f);
+ var res: vec4<f32> = subgroupAdd(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_8f4c15();
+}
diff --git a/test/tint/builtins/gen/var/subgroupAdd/8f4c15.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupAdd/8f4c15.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..5c30b6b
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/8f4c15.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupAdd_8f4c15() -> vec4<f32> {
+ var arg_0 = vec4<f32>(1.0f);
+ var res : vec4<f32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_8f4c15();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/8f4c15.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupAdd/8f4c15.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..5c30b6b
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/8f4c15.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupAdd_8f4c15() -> vec4<f32> {
+ var arg_0 = vec4<f32>(1.0f);
+ var res : vec4<f32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_8f4c15();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/8f4c15.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupAdd/8f4c15.wgsl.expected.glsl
new file mode 100644
index 0000000..220d2a9
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/8f4c15.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupAdd_8f4c15() -> vec4<f32> {
+ var arg_0 = vec4<f32>(1.0f);
+ var res : vec4<f32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_8f4c15();
+}
+
+Failed to generate: error: Unknown builtin method: 0x56522e4cc498
diff --git a/test/tint/builtins/gen/var/subgroupAdd/8f4c15.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupAdd/8f4c15.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..f6c4bd6
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/8f4c15.wgsl.expected.ir.spvasm
@@ -0,0 +1,53 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupAdd_8f4c15 "subgroupAdd_8f4c15"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %float = OpTypeFloat 32
+ %v4float = OpTypeVector %float 4
+%tint_symbol_1 = OpTypeStruct %v4float
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v4float
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %float_1 = OpConstant %float 1
+ %11 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+ %uint_0 = OpConstant %uint 0
+%subgroupAdd_8f4c15 = OpFunction %v4float None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v4float Function
+ %res = OpVariable %_ptr_Function_v4float Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v4float %arg_0
+ %14 = OpGroupNonUniformFAdd %v4float %uint_3 Reduce %13
+ OpStore %res %14
+ %18 = OpLoad %v4float %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v4float %subgroupAdd_8f4c15
+ %24 = OpAccessChain %_ptr_StorageBuffer_v4float %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/8f4c15.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupAdd/8f4c15.wgsl.expected.msl
new file mode 100644
index 0000000..91d85c7
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/8f4c15.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupAdd_8f4c15() -> vec4<f32> {
+ var arg_0 = vec4<f32>(1.0f);
+ var res : vec4<f32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_8f4c15();
+}
+
+Failed to generate: error: Unknown import method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/8f4c15.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupAdd/8f4c15.wgsl.expected.spvasm
new file mode 100644
index 0000000..921a70b
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/8f4c15.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupAdd_8f4c15() -> vec4<f32> {
+ var arg_0 = vec4<f32>(1.0f);
+ var res : vec4<f32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_8f4c15();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupAdd/8f4c15.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupAdd/8f4c15.wgsl.expected.wgsl
new file mode 100644
index 0000000..4d4007c
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/8f4c15.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupAdd_8f4c15() -> vec4<f32> {
+ var arg_0 = vec4<f32>(1.0f);
+ var res : vec4<f32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_8f4c15();
+}
diff --git a/test/tint/builtins/gen/var/subgroupAdd/b61df7.wgsl b/test/tint/builtins/gen/var/subgroupAdd/b61df7.wgsl
new file mode 100644
index 0000000..3273f11
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/b61df7.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+
+// fn subgroupAdd(value: u32) -> u32
+fn subgroupAdd_b61df7() -> u32{
+ var arg_0 = 1u;
+ var res: u32 = subgroupAdd(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_b61df7();
+}
diff --git a/test/tint/builtins/gen/var/subgroupAdd/b61df7.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupAdd/b61df7.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..2f31034
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/b61df7.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupAdd_b61df7() -> u32 {
+ var arg_0 = 1u;
+ var res : u32 = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_b61df7();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/b61df7.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupAdd/b61df7.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..2f31034
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/b61df7.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupAdd_b61df7() -> u32 {
+ var arg_0 = 1u;
+ var res : u32 = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_b61df7();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/b61df7.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupAdd/b61df7.wgsl.expected.glsl
new file mode 100644
index 0000000..52fd510
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/b61df7.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupAdd_b61df7() -> u32 {
+ var arg_0 = 1u;
+ var res : u32 = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_b61df7();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55af5f0241c0
diff --git a/test/tint/builtins/gen/var/subgroupAdd/b61df7.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupAdd/b61df7.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..efef906
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/b61df7.wgsl.expected.ir.spvasm
@@ -0,0 +1,50 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 24
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupAdd_b61df7 "subgroupAdd_b61df7"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %uint = OpTypeInt 32 0
+%tint_symbol_1 = OpTypeStruct %uint
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %6 = OpTypeFunction %uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+ %uint_1 = OpConstant %uint 1
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %18 = OpTypeFunction %void
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+ %uint_0 = OpConstant %uint 0
+%subgroupAdd_b61df7 = OpFunction %uint None %6
+ %7 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_uint Function
+ %res = OpVariable %_ptr_Function_uint Function
+ OpStore %arg_0 %uint_1
+ %11 = OpLoad %uint %arg_0
+ %12 = OpGroupNonUniformIAdd %uint %uint_3 Reduce %11
+ OpStore %res %12
+ %15 = OpLoad %uint %res
+ OpReturnValue %15
+ OpFunctionEnd
+%compute_main = OpFunction %void None %18
+ %19 = OpLabel
+ %20 = OpFunctionCall %uint %subgroupAdd_b61df7
+ %21 = OpAccessChain %_ptr_StorageBuffer_uint %1 %uint_0
+ OpStore %21 %20
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/b61df7.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupAdd/b61df7.wgsl.expected.msl
new file mode 100644
index 0000000..8f92832
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/b61df7.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupAdd_b61df7() -> u32 {
+ var arg_0 = 1u;
+ var res : u32 = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_b61df7();
+}
+
+Failed to generate: error: Unknown import method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/b61df7.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupAdd/b61df7.wgsl.expected.spvasm
new file mode 100644
index 0000000..0bfb152
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/b61df7.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupAdd_b61df7() -> u32 {
+ var arg_0 = 1u;
+ var res : u32 = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_b61df7();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupAdd/b61df7.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupAdd/b61df7.wgsl.expected.wgsl
new file mode 100644
index 0000000..500321d
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/b61df7.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupAdd_b61df7() -> u32 {
+ var arg_0 = 1u;
+ var res : u32 = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_b61df7();
+}
diff --git a/test/tint/builtins/gen/var/subgroupAdd/ba53f9.wgsl b/test/tint/builtins/gen/var/subgroupAdd/ba53f9.wgsl
new file mode 100644
index 0000000..7b54bc7
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/ba53f9.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+
+// fn subgroupAdd(value: i32) -> i32
+fn subgroupAdd_ba53f9() -> i32{
+ var arg_0 = 1i;
+ var res: i32 = subgroupAdd(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_ba53f9();
+}
diff --git a/test/tint/builtins/gen/var/subgroupAdd/ba53f9.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupAdd/ba53f9.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..4fba320
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/ba53f9.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupAdd_ba53f9() -> i32 {
+ var arg_0 = 1i;
+ var res : i32 = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_ba53f9();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/ba53f9.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupAdd/ba53f9.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..4fba320
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/ba53f9.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupAdd_ba53f9() -> i32 {
+ var arg_0 = 1i;
+ var res : i32 = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_ba53f9();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/ba53f9.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupAdd/ba53f9.wgsl.expected.glsl
new file mode 100644
index 0000000..c4ee40c
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/ba53f9.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupAdd_ba53f9() -> i32 {
+ var arg_0 = 1i;
+ var res : i32 = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_ba53f9();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55aba00661c0
diff --git a/test/tint/builtins/gen/var/subgroupAdd/ba53f9.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupAdd/ba53f9.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..ef98369
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/ba53f9.wgsl.expected.ir.spvasm
@@ -0,0 +1,51 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupAdd_ba53f9 "subgroupAdd_ba53f9"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %int = OpTypeInt 32 1
+%tint_symbol_1 = OpTypeStruct %int
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %6 = OpTypeFunction %int
+%_ptr_Function_int = OpTypePointer Function %int
+ %int_1 = OpConstant %int 1
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
+ %uint_0 = OpConstant %uint 0
+%subgroupAdd_ba53f9 = OpFunction %int None %6
+ %7 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_int Function
+ %res = OpVariable %_ptr_Function_int Function
+ OpStore %arg_0 %int_1
+ %11 = OpLoad %int %arg_0
+ %12 = OpGroupNonUniformIAdd %int %uint_3 Reduce %11
+ OpStore %res %12
+ %16 = OpLoad %int %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %int %subgroupAdd_ba53f9
+ %22 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/ba53f9.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupAdd/ba53f9.wgsl.expected.msl
new file mode 100644
index 0000000..7b5d0f8
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/ba53f9.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupAdd_ba53f9() -> i32 {
+ var arg_0 = 1i;
+ var res : i32 = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_ba53f9();
+}
+
+Failed to generate: error: Unknown import method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/ba53f9.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupAdd/ba53f9.wgsl.expected.spvasm
new file mode 100644
index 0000000..9052c8d
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/ba53f9.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupAdd_ba53f9() -> i32 {
+ var arg_0 = 1i;
+ var res : i32 = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_ba53f9();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupAdd/ba53f9.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupAdd/ba53f9.wgsl.expected.wgsl
new file mode 100644
index 0000000..e16a0bb
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/ba53f9.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupAdd_ba53f9() -> i32 {
+ var arg_0 = 1i;
+ var res : i32 = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_ba53f9();
+}
diff --git a/test/tint/builtins/gen/var/subgroupAdd/cae1ed.wgsl b/test/tint/builtins/gen/var/subgroupAdd/cae1ed.wgsl
new file mode 100644
index 0000000..cb7089f
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/cae1ed.wgsl
@@ -0,0 +1,58 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// flags: --hlsl_shader_model 62
+
+
+enable subgroups;
+enable subgroups_f16;
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+
+// fn subgroupAdd(value: vec<2, f16>) -> vec<2, f16>
+fn subgroupAdd_cae1ed() -> vec2<f16>{
+ var arg_0 = vec2<f16>(1.h);
+ var res: vec2<f16> = subgroupAdd(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_cae1ed();
+}
diff --git a/test/tint/builtins/gen/var/subgroupAdd/cae1ed.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupAdd/cae1ed.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..e318190
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/cae1ed.wgsl.expected.dxc.hlsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupAdd_cae1ed() -> vec2<f16> {
+ var arg_0 = vec2<f16>(1.0h);
+ var res : vec2<f16> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_cae1ed();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/cae1ed.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupAdd/cae1ed.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..e318190
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/cae1ed.wgsl.expected.fxc.hlsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupAdd_cae1ed() -> vec2<f16> {
+ var arg_0 = vec2<f16>(1.0h);
+ var res : vec2<f16> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_cae1ed();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/cae1ed.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupAdd/cae1ed.wgsl.expected.glsl
new file mode 100644
index 0000000..babbdae
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/cae1ed.wgsl.expected.glsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupAdd_cae1ed() -> vec2<f16> {
+ var arg_0 = vec2<f16>(1.0h);
+ var res : vec2<f16> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_cae1ed();
+}
+
+Failed to generate: error: Unknown builtin method: 0x5566b1a32498
diff --git a/test/tint/builtins/gen/var/subgroupAdd/cae1ed.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupAdd/cae1ed.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..296d362
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/cae1ed.wgsl.expected.ir.spvasm
@@ -0,0 +1,56 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability Float16
+ OpCapability UniformAndStorageBuffer16BitAccess
+ OpCapability StorageBuffer16BitAccess
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupAdd_cae1ed "subgroupAdd_cae1ed"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %half = OpTypeFloat 16
+ %v2half = OpTypeVector %half 2
+%tint_symbol_1 = OpTypeStruct %v2half
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v2half
+%_ptr_Function_v2half = OpTypePointer Function %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+ %11 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v2half = OpTypePointer StorageBuffer %v2half
+ %uint_0 = OpConstant %uint 0
+%subgroupAdd_cae1ed = OpFunction %v2half None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v2half Function
+ %res = OpVariable %_ptr_Function_v2half Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v2half %arg_0
+ %14 = OpGroupNonUniformFAdd %v2half %uint_3 Reduce %13
+ OpStore %res %14
+ %18 = OpLoad %v2half %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v2half %subgroupAdd_cae1ed
+ %24 = OpAccessChain %_ptr_StorageBuffer_v2half %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/cae1ed.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupAdd/cae1ed.wgsl.expected.msl
new file mode 100644
index 0000000..db4dc6f
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/cae1ed.wgsl.expected.msl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupAdd_cae1ed() -> vec2<f16> {
+ var arg_0 = vec2<f16>(1.0h);
+ var res : vec2<f16> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_cae1ed();
+}
+
+Failed to generate: error: Unknown import method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/cae1ed.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupAdd/cae1ed.wgsl.expected.spvasm
new file mode 100644
index 0000000..abb00d7
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/cae1ed.wgsl.expected.spvasm
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupAdd_cae1ed() -> vec2<f16> {
+ var arg_0 = vec2<f16>(1.0h);
+ var res : vec2<f16> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_cae1ed();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupAdd/cae1ed.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupAdd/cae1ed.wgsl.expected.wgsl
new file mode 100644
index 0000000..35ea3e3
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/cae1ed.wgsl.expected.wgsl
@@ -0,0 +1,16 @@
+enable subgroups;
+enable subgroups_f16;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupAdd_cae1ed() -> vec2<f16> {
+ var arg_0 = vec2<f16>(1.0h);
+ var res : vec2<f16> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_cae1ed();
+}
diff --git a/test/tint/builtins/gen/var/subgroupAdd/dcf73f.wgsl b/test/tint/builtins/gen/var/subgroupAdd/dcf73f.wgsl
new file mode 100644
index 0000000..a016310
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/dcf73f.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+
+// fn subgroupAdd(value: vec<2, f32>) -> vec<2, f32>
+fn subgroupAdd_dcf73f() -> vec2<f32>{
+ var arg_0 = vec2<f32>(1.f);
+ var res: vec2<f32> = subgroupAdd(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_dcf73f();
+}
diff --git a/test/tint/builtins/gen/var/subgroupAdd/dcf73f.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupAdd/dcf73f.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..ef58a9c
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/dcf73f.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupAdd_dcf73f() -> vec2<f32> {
+ var arg_0 = vec2<f32>(1.0f);
+ var res : vec2<f32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_dcf73f();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/dcf73f.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupAdd/dcf73f.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..ef58a9c
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/dcf73f.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupAdd_dcf73f() -> vec2<f32> {
+ var arg_0 = vec2<f32>(1.0f);
+ var res : vec2<f32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_dcf73f();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/dcf73f.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupAdd/dcf73f.wgsl.expected.glsl
new file mode 100644
index 0000000..af8c0b0
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/dcf73f.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupAdd_dcf73f() -> vec2<f32> {
+ var arg_0 = vec2<f32>(1.0f);
+ var res : vec2<f32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_dcf73f();
+}
+
+Failed to generate: error: Unknown builtin method: 0x5602751cd498
diff --git a/test/tint/builtins/gen/var/subgroupAdd/dcf73f.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupAdd/dcf73f.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..d633250
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/dcf73f.wgsl.expected.ir.spvasm
@@ -0,0 +1,53 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupAdd_dcf73f "subgroupAdd_dcf73f"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %float = OpTypeFloat 32
+ %v2float = OpTypeVector %float 2
+%tint_symbol_1 = OpTypeStruct %v2float
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v2float
+%_ptr_Function_v2float = OpTypePointer Function %v2float
+ %float_1 = OpConstant %float 1
+ %11 = OpConstantComposite %v2float %float_1 %float_1
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v2float = OpTypePointer StorageBuffer %v2float
+ %uint_0 = OpConstant %uint 0
+%subgroupAdd_dcf73f = OpFunction %v2float None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v2float Function
+ %res = OpVariable %_ptr_Function_v2float Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v2float %arg_0
+ %14 = OpGroupNonUniformFAdd %v2float %uint_3 Reduce %13
+ OpStore %res %14
+ %18 = OpLoad %v2float %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v2float %subgroupAdd_dcf73f
+ %24 = OpAccessChain %_ptr_StorageBuffer_v2float %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/dcf73f.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupAdd/dcf73f.wgsl.expected.msl
new file mode 100644
index 0000000..74a2d5a
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/dcf73f.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupAdd_dcf73f() -> vec2<f32> {
+ var arg_0 = vec2<f32>(1.0f);
+ var res : vec2<f32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_dcf73f();
+}
+
+Failed to generate: error: Unknown import method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/dcf73f.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupAdd/dcf73f.wgsl.expected.spvasm
new file mode 100644
index 0000000..307a053
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/dcf73f.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupAdd_dcf73f() -> vec2<f32> {
+ var arg_0 = vec2<f32>(1.0f);
+ var res : vec2<f32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_dcf73f();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupAdd/dcf73f.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupAdd/dcf73f.wgsl.expected.wgsl
new file mode 100644
index 0000000..57e4751
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/dcf73f.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupAdd_dcf73f() -> vec2<f32> {
+ var arg_0 = vec2<f32>(1.0f);
+ var res : vec2<f32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_dcf73f();
+}
diff --git a/test/tint/builtins/gen/var/subgroupAdd/fbc357.wgsl b/test/tint/builtins/gen/var/subgroupAdd/fbc357.wgsl
new file mode 100644
index 0000000..68d2266
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/fbc357.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+
+// fn subgroupAdd(value: vec<4, u32>) -> vec<4, u32>
+fn subgroupAdd_fbc357() -> vec4<u32>{
+ var arg_0 = vec4<u32>(1u);
+ var res: vec4<u32> = subgroupAdd(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_fbc357();
+}
diff --git a/test/tint/builtins/gen/var/subgroupAdd/fbc357.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupAdd/fbc357.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..bd40244
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/fbc357.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupAdd_fbc357() -> vec4<u32> {
+ var arg_0 = vec4<u32>(1u);
+ var res : vec4<u32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_fbc357();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/fbc357.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupAdd/fbc357.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..bd40244
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/fbc357.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupAdd_fbc357() -> vec4<u32> {
+ var arg_0 = vec4<u32>(1u);
+ var res : vec4<u32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_fbc357();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/fbc357.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupAdd/fbc357.wgsl.expected.glsl
new file mode 100644
index 0000000..b35e5f25
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/fbc357.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupAdd_fbc357() -> vec4<u32> {
+ var arg_0 = vec4<u32>(1u);
+ var res : vec4<u32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_fbc357();
+}
+
+Failed to generate: error: Unknown builtin method: 0x558d35130498
diff --git a/test/tint/builtins/gen/var/subgroupAdd/fbc357.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupAdd/fbc357.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..b2b92c7
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/fbc357.wgsl.expected.ir.spvasm
@@ -0,0 +1,52 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 26
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupAdd_fbc357 "subgroupAdd_fbc357"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %uint = OpTypeInt 32 0
+ %v4uint = OpTypeVector %uint 4
+%tint_symbol_1 = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v4uint
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+ %uint_1 = OpConstant %uint 1
+ %11 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %20 = OpTypeFunction %void
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+ %uint_0 = OpConstant %uint 0
+%subgroupAdd_fbc357 = OpFunction %v4uint None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v4uint Function
+ %res = OpVariable %_ptr_Function_v4uint Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v4uint %arg_0
+ %14 = OpGroupNonUniformIAdd %v4uint %uint_3 Reduce %13
+ OpStore %res %14
+ %17 = OpLoad %v4uint %res
+ OpReturnValue %17
+ OpFunctionEnd
+%compute_main = OpFunction %void None %20
+ %21 = OpLabel
+ %22 = OpFunctionCall %v4uint %subgroupAdd_fbc357
+ %23 = OpAccessChain %_ptr_StorageBuffer_v4uint %1 %uint_0
+ OpStore %23 %22
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/fbc357.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupAdd/fbc357.wgsl.expected.msl
new file mode 100644
index 0000000..f2915ee
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/fbc357.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupAdd_fbc357() -> vec4<u32> {
+ var arg_0 = vec4<u32>(1u);
+ var res : vec4<u32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_fbc357();
+}
+
+Failed to generate: error: Unknown import method: subgroupAdd
diff --git a/test/tint/builtins/gen/var/subgroupAdd/fbc357.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupAdd/fbc357.wgsl.expected.spvasm
new file mode 100644
index 0000000..b45755e
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/fbc357.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupAdd_fbc357() -> vec4<u32> {
+ var arg_0 = vec4<u32>(1u);
+ var res : vec4<u32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_fbc357();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupAdd/fbc357.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupAdd/fbc357.wgsl.expected.wgsl
new file mode 100644
index 0000000..c2aef0d
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupAdd/fbc357.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupAdd_fbc357() -> vec4<u32> {
+ var arg_0 = vec4<u32>(1u);
+ var res : vec4<u32> = subgroupAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupAdd_fbc357();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/01de08.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/01de08.wgsl
new file mode 100644
index 0000000..004ec07
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/01de08.wgsl
@@ -0,0 +1,58 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// flags: --hlsl_shader_model 62
+
+
+enable subgroups;
+enable subgroups_f16;
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+
+// fn subgroupExclusiveAdd(value: vec<2, f16>) -> vec<2, f16>
+fn subgroupExclusiveAdd_01de08() -> vec2<f16>{
+ var arg_0 = vec2<f16>(1.h);
+ var res: vec2<f16> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_01de08();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/01de08.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/01de08.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..23357a9
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/01de08.wgsl.expected.dxc.hlsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupExclusiveAdd_01de08() -> vec2<f16> {
+ var arg_0 = vec2<f16>(1.0h);
+ var res : vec2<f16> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_01de08();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/01de08.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/01de08.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..23357a9
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/01de08.wgsl.expected.fxc.hlsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupExclusiveAdd_01de08() -> vec2<f16> {
+ var arg_0 = vec2<f16>(1.0h);
+ var res : vec2<f16> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_01de08();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/01de08.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/01de08.wgsl.expected.glsl
new file mode 100644
index 0000000..7f8f116
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/01de08.wgsl.expected.glsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupExclusiveAdd_01de08() -> vec2<f16> {
+ var arg_0 = vec2<f16>(1.0h);
+ var res : vec2<f16> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_01de08();
+}
+
+Failed to generate: error: Unknown builtin method: 0x56285a826498
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/01de08.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveAdd/01de08.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..c77e8eb
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/01de08.wgsl.expected.ir.spvasm
@@ -0,0 +1,56 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability Float16
+ OpCapability UniformAndStorageBuffer16BitAccess
+ OpCapability StorageBuffer16BitAccess
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveAdd_01de08 "subgroupExclusiveAdd_01de08"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %half = OpTypeFloat 16
+ %v2half = OpTypeVector %half 2
+%tint_symbol_1 = OpTypeStruct %v2half
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v2half
+%_ptr_Function_v2half = OpTypePointer Function %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+ %11 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v2half = OpTypePointer StorageBuffer %v2half
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveAdd_01de08 = OpFunction %v2half None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v2half Function
+ %res = OpVariable %_ptr_Function_v2half Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v2half %arg_0
+ %14 = OpGroupNonUniformFAdd %v2half %uint_3 ExclusiveScan %13
+ OpStore %res %14
+ %18 = OpLoad %v2half %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v2half %subgroupExclusiveAdd_01de08
+ %24 = OpAccessChain %_ptr_StorageBuffer_v2half %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/01de08.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/01de08.wgsl.expected.msl
new file mode 100644
index 0000000..8465ca0
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/01de08.wgsl.expected.msl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupExclusiveAdd_01de08() -> vec2<f16> {
+ var arg_0 = vec2<f16>(1.0h);
+ var res : vec2<f16> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_01de08();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/01de08.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveAdd/01de08.wgsl.expected.spvasm
new file mode 100644
index 0000000..b9fd364
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/01de08.wgsl.expected.spvasm
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupExclusiveAdd_01de08() -> vec2<f16> {
+ var arg_0 = vec2<f16>(1.0h);
+ var res : vec2<f16> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_01de08();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/01de08.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/01de08.wgsl.expected.wgsl
new file mode 100644
index 0000000..2c7b2a4
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/01de08.wgsl.expected.wgsl
@@ -0,0 +1,16 @@
+enable subgroups;
+enable subgroups_f16;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupExclusiveAdd_01de08() -> vec2<f16> {
+ var arg_0 = vec2<f16>(1.0h);
+ var res : vec2<f16> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_01de08();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/0ff95a.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/0ff95a.wgsl
new file mode 100644
index 0000000..89da969
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/0ff95a.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+
+// fn subgroupExclusiveAdd(value: vec<3, u32>) -> vec<3, u32>
+fn subgroupExclusiveAdd_0ff95a() -> vec3<u32>{
+ var arg_0 = vec3<u32>(1u);
+ var res: vec3<u32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_0ff95a();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/0ff95a.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/0ff95a.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..2c38a5d
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/0ff95a.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupExclusiveAdd_0ff95a() -> vec3<u32> {
+ var arg_0 = vec3<u32>(1u);
+ var res : vec3<u32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_0ff95a();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/0ff95a.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/0ff95a.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..2c38a5d
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/0ff95a.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupExclusiveAdd_0ff95a() -> vec3<u32> {
+ var arg_0 = vec3<u32>(1u);
+ var res : vec3<u32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_0ff95a();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/0ff95a.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/0ff95a.wgsl.expected.glsl
new file mode 100644
index 0000000..0eeca42
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/0ff95a.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupExclusiveAdd_0ff95a() -> vec3<u32> {
+ var arg_0 = vec3<u32>(1u);
+ var res : vec3<u32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_0ff95a();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55a06c1ae498
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/0ff95a.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveAdd/0ff95a.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..4707d54
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/0ff95a.wgsl.expected.ir.spvasm
@@ -0,0 +1,52 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 26
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveAdd_0ff95a "subgroupExclusiveAdd_0ff95a"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %uint = OpTypeInt 32 0
+ %v3uint = OpTypeVector %uint 3
+%tint_symbol_1 = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v3uint
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+ %uint_1 = OpConstant %uint 1
+ %11 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %20 = OpTypeFunction %void
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveAdd_0ff95a = OpFunction %v3uint None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v3uint Function
+ %res = OpVariable %_ptr_Function_v3uint Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v3uint %arg_0
+ %14 = OpGroupNonUniformIAdd %v3uint %uint_3 ExclusiveScan %13
+ OpStore %res %14
+ %17 = OpLoad %v3uint %res
+ OpReturnValue %17
+ OpFunctionEnd
+%compute_main = OpFunction %void None %20
+ %21 = OpLabel
+ %22 = OpFunctionCall %v3uint %subgroupExclusiveAdd_0ff95a
+ %23 = OpAccessChain %_ptr_StorageBuffer_v3uint %1 %uint_0
+ OpStore %23 %22
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/0ff95a.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/0ff95a.wgsl.expected.msl
new file mode 100644
index 0000000..a3d2cc1
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/0ff95a.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupExclusiveAdd_0ff95a() -> vec3<u32> {
+ var arg_0 = vec3<u32>(1u);
+ var res : vec3<u32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_0ff95a();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/0ff95a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveAdd/0ff95a.wgsl.expected.spvasm
new file mode 100644
index 0000000..0ad2889
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/0ff95a.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupExclusiveAdd_0ff95a() -> vec3<u32> {
+ var arg_0 = vec3<u32>(1u);
+ var res : vec3<u32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_0ff95a();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/0ff95a.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/0ff95a.wgsl.expected.wgsl
new file mode 100644
index 0000000..1b2db54
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/0ff95a.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupExclusiveAdd_0ff95a() -> vec3<u32> {
+ var arg_0 = vec3<u32>(1u);
+ var res : vec3<u32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_0ff95a();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/406ab4.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/406ab4.wgsl
new file mode 100644
index 0000000..8e504cb
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/406ab4.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+
+// fn subgroupExclusiveAdd(value: vec<4, i32>) -> vec<4, i32>
+fn subgroupExclusiveAdd_406ab4() -> vec4<i32>{
+ var arg_0 = vec4<i32>(1i);
+ var res: vec4<i32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_406ab4();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/406ab4.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/406ab4.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..960112b
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/406ab4.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupExclusiveAdd_406ab4() -> vec4<i32> {
+ var arg_0 = vec4<i32>(1i);
+ var res : vec4<i32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_406ab4();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/406ab4.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/406ab4.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..960112b
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/406ab4.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupExclusiveAdd_406ab4() -> vec4<i32> {
+ var arg_0 = vec4<i32>(1i);
+ var res : vec4<i32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_406ab4();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/406ab4.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/406ab4.wgsl.expected.glsl
new file mode 100644
index 0000000..d7d5776
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/406ab4.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupExclusiveAdd_406ab4() -> vec4<i32> {
+ var arg_0 = vec4<i32>(1i);
+ var res : vec4<i32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_406ab4();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55719630d498
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/406ab4.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveAdd/406ab4.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..b82b0b1
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/406ab4.wgsl.expected.ir.spvasm
@@ -0,0 +1,53 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveAdd_406ab4 "subgroupExclusiveAdd_406ab4"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %int = OpTypeInt 32 1
+ %v4int = OpTypeVector %int 4
+%tint_symbol_1 = OpTypeStruct %v4int
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v4int
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+ %int_1 = OpConstant %int 1
+ %11 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveAdd_406ab4 = OpFunction %v4int None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v4int Function
+ %res = OpVariable %_ptr_Function_v4int Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v4int %arg_0
+ %14 = OpGroupNonUniformIAdd %v4int %uint_3 ExclusiveScan %13
+ OpStore %res %14
+ %18 = OpLoad %v4int %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v4int %subgroupExclusiveAdd_406ab4
+ %24 = OpAccessChain %_ptr_StorageBuffer_v4int %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/406ab4.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/406ab4.wgsl.expected.msl
new file mode 100644
index 0000000..3abc1a2
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/406ab4.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupExclusiveAdd_406ab4() -> vec4<i32> {
+ var arg_0 = vec4<i32>(1i);
+ var res : vec4<i32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_406ab4();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/406ab4.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveAdd/406ab4.wgsl.expected.spvasm
new file mode 100644
index 0000000..bfdb00c
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/406ab4.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupExclusiveAdd_406ab4() -> vec4<i32> {
+ var arg_0 = vec4<i32>(1i);
+ var res : vec4<i32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_406ab4();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/406ab4.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/406ab4.wgsl.expected.wgsl
new file mode 100644
index 0000000..e0dadd9
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/406ab4.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupExclusiveAdd_406ab4() -> vec4<i32> {
+ var arg_0 = vec4<i32>(1i);
+ var res : vec4<i32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_406ab4();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/41cfde.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/41cfde.wgsl
new file mode 100644
index 0000000..670475c
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/41cfde.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+
+// fn subgroupExclusiveAdd(value: vec<3, f32>) -> vec<3, f32>
+fn subgroupExclusiveAdd_41cfde() -> vec3<f32>{
+ var arg_0 = vec3<f32>(1.f);
+ var res: vec3<f32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_41cfde();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/41cfde.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/41cfde.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..c871f46
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/41cfde.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupExclusiveAdd_41cfde() -> vec3<f32> {
+ var arg_0 = vec3<f32>(1.0f);
+ var res : vec3<f32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_41cfde();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/41cfde.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/41cfde.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..c871f46
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/41cfde.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupExclusiveAdd_41cfde() -> vec3<f32> {
+ var arg_0 = vec3<f32>(1.0f);
+ var res : vec3<f32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_41cfde();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/41cfde.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/41cfde.wgsl.expected.glsl
new file mode 100644
index 0000000..ad2ca51
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/41cfde.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupExclusiveAdd_41cfde() -> vec3<f32> {
+ var arg_0 = vec3<f32>(1.0f);
+ var res : vec3<f32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_41cfde();
+}
+
+Failed to generate: error: Unknown builtin method: 0x559892947498
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/41cfde.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveAdd/41cfde.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..dfa9503
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/41cfde.wgsl.expected.ir.spvasm
@@ -0,0 +1,53 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveAdd_41cfde "subgroupExclusiveAdd_41cfde"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %float = OpTypeFloat 32
+ %v3float = OpTypeVector %float 3
+%tint_symbol_1 = OpTypeStruct %v3float
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v3float
+%_ptr_Function_v3float = OpTypePointer Function %v3float
+ %float_1 = OpConstant %float 1
+ %11 = OpConstantComposite %v3float %float_1 %float_1 %float_1
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v3float = OpTypePointer StorageBuffer %v3float
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveAdd_41cfde = OpFunction %v3float None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v3float Function
+ %res = OpVariable %_ptr_Function_v3float Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v3float %arg_0
+ %14 = OpGroupNonUniformFAdd %v3float %uint_3 ExclusiveScan %13
+ OpStore %res %14
+ %18 = OpLoad %v3float %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v3float %subgroupExclusiveAdd_41cfde
+ %24 = OpAccessChain %_ptr_StorageBuffer_v3float %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/41cfde.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/41cfde.wgsl.expected.msl
new file mode 100644
index 0000000..be32974
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/41cfde.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupExclusiveAdd_41cfde() -> vec3<f32> {
+ var arg_0 = vec3<f32>(1.0f);
+ var res : vec3<f32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_41cfde();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/41cfde.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveAdd/41cfde.wgsl.expected.spvasm
new file mode 100644
index 0000000..6aab45e
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/41cfde.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupExclusiveAdd_41cfde() -> vec3<f32> {
+ var arg_0 = vec3<f32>(1.0f);
+ var res : vec3<f32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_41cfde();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/41cfde.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/41cfde.wgsl.expected.wgsl
new file mode 100644
index 0000000..4d60979
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/41cfde.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupExclusiveAdd_41cfde() -> vec3<f32> {
+ var arg_0 = vec3<f32>(1.0f);
+ var res : vec3<f32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_41cfde();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/42684c.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/42684c.wgsl
new file mode 100644
index 0000000..7aa6753
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/42684c.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+
+// fn subgroupExclusiveAdd(value: u32) -> u32
+fn subgroupExclusiveAdd_42684c() -> u32{
+ var arg_0 = 1u;
+ var res: u32 = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_42684c();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/42684c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/42684c.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..8899c08
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/42684c.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupExclusiveAdd_42684c() -> u32 {
+ var arg_0 = 1u;
+ var res : u32 = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_42684c();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/42684c.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/42684c.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..8899c08
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/42684c.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupExclusiveAdd_42684c() -> u32 {
+ var arg_0 = 1u;
+ var res : u32 = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_42684c();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/42684c.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/42684c.wgsl.expected.glsl
new file mode 100644
index 0000000..21dad03
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/42684c.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupExclusiveAdd_42684c() -> u32 {
+ var arg_0 = 1u;
+ var res : u32 = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_42684c();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55ac6c5a21c0
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/42684c.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveAdd/42684c.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..2c0c3b6
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/42684c.wgsl.expected.ir.spvasm
@@ -0,0 +1,50 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 24
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveAdd_42684c "subgroupExclusiveAdd_42684c"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %uint = OpTypeInt 32 0
+%tint_symbol_1 = OpTypeStruct %uint
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %6 = OpTypeFunction %uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+ %uint_1 = OpConstant %uint 1
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %18 = OpTypeFunction %void
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveAdd_42684c = OpFunction %uint None %6
+ %7 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_uint Function
+ %res = OpVariable %_ptr_Function_uint Function
+ OpStore %arg_0 %uint_1
+ %11 = OpLoad %uint %arg_0
+ %12 = OpGroupNonUniformIAdd %uint %uint_3 ExclusiveScan %11
+ OpStore %res %12
+ %15 = OpLoad %uint %res
+ OpReturnValue %15
+ OpFunctionEnd
+%compute_main = OpFunction %void None %18
+ %19 = OpLabel
+ %20 = OpFunctionCall %uint %subgroupExclusiveAdd_42684c
+ %21 = OpAccessChain %_ptr_StorageBuffer_uint %1 %uint_0
+ OpStore %21 %20
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/42684c.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/42684c.wgsl.expected.msl
new file mode 100644
index 0000000..3fe11de
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/42684c.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupExclusiveAdd_42684c() -> u32 {
+ var arg_0 = 1u;
+ var res : u32 = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_42684c();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/42684c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveAdd/42684c.wgsl.expected.spvasm
new file mode 100644
index 0000000..1d06a32
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/42684c.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupExclusiveAdd_42684c() -> u32 {
+ var arg_0 = 1u;
+ var res : u32 = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_42684c();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/42684c.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/42684c.wgsl.expected.wgsl
new file mode 100644
index 0000000..22763e2
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/42684c.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupExclusiveAdd_42684c() -> u32 {
+ var arg_0 = 1u;
+ var res : u32 = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_42684c();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/48acea.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/48acea.wgsl
new file mode 100644
index 0000000..21cbc54
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/48acea.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+
+// fn subgroupExclusiveAdd(value: vec<2, u32>) -> vec<2, u32>
+fn subgroupExclusiveAdd_48acea() -> vec2<u32>{
+ var arg_0 = vec2<u32>(1u);
+ var res: vec2<u32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_48acea();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/48acea.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/48acea.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..d87599c
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/48acea.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupExclusiveAdd_48acea() -> vec2<u32> {
+ var arg_0 = vec2<u32>(1u);
+ var res : vec2<u32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_48acea();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/48acea.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/48acea.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..d87599c
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/48acea.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupExclusiveAdd_48acea() -> vec2<u32> {
+ var arg_0 = vec2<u32>(1u);
+ var res : vec2<u32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_48acea();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/48acea.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/48acea.wgsl.expected.glsl
new file mode 100644
index 0000000..da873ec
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/48acea.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupExclusiveAdd_48acea() -> vec2<u32> {
+ var arg_0 = vec2<u32>(1u);
+ var res : vec2<u32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_48acea();
+}
+
+Failed to generate: error: Unknown builtin method: 0x561a7c779498
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/48acea.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveAdd/48acea.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..900d532
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/48acea.wgsl.expected.ir.spvasm
@@ -0,0 +1,52 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 26
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveAdd_48acea "subgroupExclusiveAdd_48acea"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %uint = OpTypeInt 32 0
+ %v2uint = OpTypeVector %uint 2
+%tint_symbol_1 = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v2uint
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+ %uint_1 = OpConstant %uint 1
+ %11 = OpConstantComposite %v2uint %uint_1 %uint_1
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %20 = OpTypeFunction %void
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveAdd_48acea = OpFunction %v2uint None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v2uint Function
+ %res = OpVariable %_ptr_Function_v2uint Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v2uint %arg_0
+ %14 = OpGroupNonUniformIAdd %v2uint %uint_3 ExclusiveScan %13
+ OpStore %res %14
+ %17 = OpLoad %v2uint %res
+ OpReturnValue %17
+ OpFunctionEnd
+%compute_main = OpFunction %void None %20
+ %21 = OpLabel
+ %22 = OpFunctionCall %v2uint %subgroupExclusiveAdd_48acea
+ %23 = OpAccessChain %_ptr_StorageBuffer_v2uint %1 %uint_0
+ OpStore %23 %22
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/48acea.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/48acea.wgsl.expected.msl
new file mode 100644
index 0000000..26eab9d
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/48acea.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupExclusiveAdd_48acea() -> vec2<u32> {
+ var arg_0 = vec2<u32>(1u);
+ var res : vec2<u32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_48acea();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/48acea.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveAdd/48acea.wgsl.expected.spvasm
new file mode 100644
index 0000000..92557df
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/48acea.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupExclusiveAdd_48acea() -> vec2<u32> {
+ var arg_0 = vec2<u32>(1u);
+ var res : vec2<u32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_48acea();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/48acea.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/48acea.wgsl.expected.wgsl
new file mode 100644
index 0000000..6666825
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/48acea.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupExclusiveAdd_48acea() -> vec2<u32> {
+ var arg_0 = vec2<u32>(1u);
+ var res : vec2<u32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_48acea();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/4a1568.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/4a1568.wgsl
new file mode 100644
index 0000000..6aa312a
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/4a1568.wgsl
@@ -0,0 +1,58 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// flags: --hlsl_shader_model 62
+
+
+enable subgroups;
+enable subgroups_f16;
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+
+// fn subgroupExclusiveAdd(value: f16) -> f16
+fn subgroupExclusiveAdd_4a1568() -> f16{
+ var arg_0 = 1.h;
+ var res: f16 = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_4a1568();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/4a1568.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/4a1568.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..668d020
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/4a1568.wgsl.expected.dxc.hlsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupExclusiveAdd_4a1568() -> f16 {
+ var arg_0 = 1.0h;
+ var res : f16 = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_4a1568();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/4a1568.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/4a1568.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..668d020
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/4a1568.wgsl.expected.fxc.hlsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupExclusiveAdd_4a1568() -> f16 {
+ var arg_0 = 1.0h;
+ var res : f16 = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_4a1568();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/4a1568.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/4a1568.wgsl.expected.glsl
new file mode 100644
index 0000000..5bd9574
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/4a1568.wgsl.expected.glsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupExclusiveAdd_4a1568() -> f16 {
+ var arg_0 = 1.0h;
+ var res : f16 = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_4a1568();
+}
+
+Failed to generate: error: Unknown builtin method: 0x5562d2ee61c0
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/4a1568.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveAdd/4a1568.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..5b77ea1
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/4a1568.wgsl.expected.ir.spvasm
@@ -0,0 +1,54 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability Float16
+ OpCapability UniformAndStorageBuffer16BitAccess
+ OpCapability StorageBuffer16BitAccess
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveAdd_4a1568 "subgroupExclusiveAdd_4a1568"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %half = OpTypeFloat 16
+%tint_symbol_1 = OpTypeStruct %half
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %6 = OpTypeFunction %half
+%_ptr_Function_half = OpTypePointer Function %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_half = OpTypePointer StorageBuffer %half
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveAdd_4a1568 = OpFunction %half None %6
+ %7 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_half Function
+ %res = OpVariable %_ptr_Function_half Function
+ OpStore %arg_0 %half_0x1p_0
+ %11 = OpLoad %half %arg_0
+ %12 = OpGroupNonUniformFAdd %half %uint_3 ExclusiveScan %11
+ OpStore %res %12
+ %16 = OpLoad %half %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %half %subgroupExclusiveAdd_4a1568
+ %22 = OpAccessChain %_ptr_StorageBuffer_half %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/4a1568.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/4a1568.wgsl.expected.msl
new file mode 100644
index 0000000..bd94553
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/4a1568.wgsl.expected.msl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupExclusiveAdd_4a1568() -> f16 {
+ var arg_0 = 1.0h;
+ var res : f16 = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_4a1568();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/4a1568.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveAdd/4a1568.wgsl.expected.spvasm
new file mode 100644
index 0000000..214dd22
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/4a1568.wgsl.expected.spvasm
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupExclusiveAdd_4a1568() -> f16 {
+ var arg_0 = 1.0h;
+ var res : f16 = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_4a1568();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/4a1568.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/4a1568.wgsl.expected.wgsl
new file mode 100644
index 0000000..c545af7
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/4a1568.wgsl.expected.wgsl
@@ -0,0 +1,16 @@
+enable subgroups;
+enable subgroups_f16;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupExclusiveAdd_4a1568() -> f16 {
+ var arg_0 = 1.0h;
+ var res : f16 = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_4a1568();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/4c8024.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/4c8024.wgsl
new file mode 100644
index 0000000..24eab59
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/4c8024.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+
+// fn subgroupExclusiveAdd(value: vec<2, f32>) -> vec<2, f32>
+fn subgroupExclusiveAdd_4c8024() -> vec2<f32>{
+ var arg_0 = vec2<f32>(1.f);
+ var res: vec2<f32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_4c8024();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/4c8024.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/4c8024.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..d185b85
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/4c8024.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupExclusiveAdd_4c8024() -> vec2<f32> {
+ var arg_0 = vec2<f32>(1.0f);
+ var res : vec2<f32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_4c8024();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/4c8024.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/4c8024.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..d185b85
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/4c8024.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupExclusiveAdd_4c8024() -> vec2<f32> {
+ var arg_0 = vec2<f32>(1.0f);
+ var res : vec2<f32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_4c8024();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/4c8024.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/4c8024.wgsl.expected.glsl
new file mode 100644
index 0000000..f18aee8
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/4c8024.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupExclusiveAdd_4c8024() -> vec2<f32> {
+ var arg_0 = vec2<f32>(1.0f);
+ var res : vec2<f32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_4c8024();
+}
+
+Failed to generate: error: Unknown builtin method: 0x5557cf2e8498
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/4c8024.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveAdd/4c8024.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..268b0c1
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/4c8024.wgsl.expected.ir.spvasm
@@ -0,0 +1,53 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveAdd_4c8024 "subgroupExclusiveAdd_4c8024"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %float = OpTypeFloat 32
+ %v2float = OpTypeVector %float 2
+%tint_symbol_1 = OpTypeStruct %v2float
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v2float
+%_ptr_Function_v2float = OpTypePointer Function %v2float
+ %float_1 = OpConstant %float 1
+ %11 = OpConstantComposite %v2float %float_1 %float_1
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v2float = OpTypePointer StorageBuffer %v2float
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveAdd_4c8024 = OpFunction %v2float None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v2float Function
+ %res = OpVariable %_ptr_Function_v2float Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v2float %arg_0
+ %14 = OpGroupNonUniformFAdd %v2float %uint_3 ExclusiveScan %13
+ OpStore %res %14
+ %18 = OpLoad %v2float %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v2float %subgroupExclusiveAdd_4c8024
+ %24 = OpAccessChain %_ptr_StorageBuffer_v2float %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/4c8024.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/4c8024.wgsl.expected.msl
new file mode 100644
index 0000000..f2f27f8
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/4c8024.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupExclusiveAdd_4c8024() -> vec2<f32> {
+ var arg_0 = vec2<f32>(1.0f);
+ var res : vec2<f32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_4c8024();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/4c8024.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveAdd/4c8024.wgsl.expected.spvasm
new file mode 100644
index 0000000..8a393de
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/4c8024.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupExclusiveAdd_4c8024() -> vec2<f32> {
+ var arg_0 = vec2<f32>(1.0f);
+ var res : vec2<f32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_4c8024();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/4c8024.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/4c8024.wgsl.expected.wgsl
new file mode 100644
index 0000000..31fb327
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/4c8024.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupExclusiveAdd_4c8024() -> vec2<f32> {
+ var arg_0 = vec2<f32>(1.0f);
+ var res : vec2<f32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_4c8024();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/71ad0f.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/71ad0f.wgsl
new file mode 100644
index 0000000..bf42d39
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/71ad0f.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+
+// fn subgroupExclusiveAdd(value: vec<4, f32>) -> vec<4, f32>
+fn subgroupExclusiveAdd_71ad0f() -> vec4<f32>{
+ var arg_0 = vec4<f32>(1.f);
+ var res: vec4<f32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_71ad0f();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/71ad0f.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/71ad0f.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..2e815e7
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/71ad0f.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupExclusiveAdd_71ad0f() -> vec4<f32> {
+ var arg_0 = vec4<f32>(1.0f);
+ var res : vec4<f32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_71ad0f();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/71ad0f.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/71ad0f.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..2e815e7
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/71ad0f.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupExclusiveAdd_71ad0f() -> vec4<f32> {
+ var arg_0 = vec4<f32>(1.0f);
+ var res : vec4<f32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_71ad0f();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/71ad0f.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/71ad0f.wgsl.expected.glsl
new file mode 100644
index 0000000..d80085c
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/71ad0f.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupExclusiveAdd_71ad0f() -> vec4<f32> {
+ var arg_0 = vec4<f32>(1.0f);
+ var res : vec4<f32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_71ad0f();
+}
+
+Failed to generate: error: Unknown builtin method: 0x558ce57b7498
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/71ad0f.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveAdd/71ad0f.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..17268f3
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/71ad0f.wgsl.expected.ir.spvasm
@@ -0,0 +1,53 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveAdd_71ad0f "subgroupExclusiveAdd_71ad0f"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %float = OpTypeFloat 32
+ %v4float = OpTypeVector %float 4
+%tint_symbol_1 = OpTypeStruct %v4float
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v4float
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %float_1 = OpConstant %float 1
+ %11 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveAdd_71ad0f = OpFunction %v4float None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v4float Function
+ %res = OpVariable %_ptr_Function_v4float Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v4float %arg_0
+ %14 = OpGroupNonUniformFAdd %v4float %uint_3 ExclusiveScan %13
+ OpStore %res %14
+ %18 = OpLoad %v4float %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v4float %subgroupExclusiveAdd_71ad0f
+ %24 = OpAccessChain %_ptr_StorageBuffer_v4float %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/71ad0f.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/71ad0f.wgsl.expected.msl
new file mode 100644
index 0000000..3b41db4
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/71ad0f.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupExclusiveAdd_71ad0f() -> vec4<f32> {
+ var arg_0 = vec4<f32>(1.0f);
+ var res : vec4<f32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_71ad0f();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/71ad0f.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveAdd/71ad0f.wgsl.expected.spvasm
new file mode 100644
index 0000000..2d47642
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/71ad0f.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupExclusiveAdd_71ad0f() -> vec4<f32> {
+ var arg_0 = vec4<f32>(1.0f);
+ var res : vec4<f32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_71ad0f();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/71ad0f.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/71ad0f.wgsl.expected.wgsl
new file mode 100644
index 0000000..c56ce34
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/71ad0f.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupExclusiveAdd_71ad0f() -> vec4<f32> {
+ var arg_0 = vec4<f32>(1.0f);
+ var res : vec4<f32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_71ad0f();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/95e984.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/95e984.wgsl
new file mode 100644
index 0000000..e9f6325
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/95e984.wgsl
@@ -0,0 +1,58 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// flags: --hlsl_shader_model 62
+
+
+enable subgroups;
+enable subgroups_f16;
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+
+// fn subgroupExclusiveAdd(value: vec<4, f16>) -> vec<4, f16>
+fn subgroupExclusiveAdd_95e984() -> vec4<f16>{
+ var arg_0 = vec4<f16>(1.h);
+ var res: vec4<f16> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_95e984();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/95e984.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/95e984.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..f369a10
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/95e984.wgsl.expected.dxc.hlsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupExclusiveAdd_95e984() -> vec4<f16> {
+ var arg_0 = vec4<f16>(1.0h);
+ var res : vec4<f16> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_95e984();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/95e984.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/95e984.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..f369a10
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/95e984.wgsl.expected.fxc.hlsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupExclusiveAdd_95e984() -> vec4<f16> {
+ var arg_0 = vec4<f16>(1.0h);
+ var res : vec4<f16> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_95e984();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/95e984.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/95e984.wgsl.expected.glsl
new file mode 100644
index 0000000..99b2bbf
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/95e984.wgsl.expected.glsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupExclusiveAdd_95e984() -> vec4<f16> {
+ var arg_0 = vec4<f16>(1.0h);
+ var res : vec4<f16> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_95e984();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55aefb5c8498
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/95e984.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveAdd/95e984.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..101cedb
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/95e984.wgsl.expected.ir.spvasm
@@ -0,0 +1,56 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability Float16
+ OpCapability UniformAndStorageBuffer16BitAccess
+ OpCapability StorageBuffer16BitAccess
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveAdd_95e984 "subgroupExclusiveAdd_95e984"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %half = OpTypeFloat 16
+ %v4half = OpTypeVector %half 4
+%tint_symbol_1 = OpTypeStruct %v4half
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v4half
+%_ptr_Function_v4half = OpTypePointer Function %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+ %11 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v4half = OpTypePointer StorageBuffer %v4half
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveAdd_95e984 = OpFunction %v4half None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v4half Function
+ %res = OpVariable %_ptr_Function_v4half Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v4half %arg_0
+ %14 = OpGroupNonUniformFAdd %v4half %uint_3 ExclusiveScan %13
+ OpStore %res %14
+ %18 = OpLoad %v4half %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v4half %subgroupExclusiveAdd_95e984
+ %24 = OpAccessChain %_ptr_StorageBuffer_v4half %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/95e984.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/95e984.wgsl.expected.msl
new file mode 100644
index 0000000..03f0913
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/95e984.wgsl.expected.msl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupExclusiveAdd_95e984() -> vec4<f16> {
+ var arg_0 = vec4<f16>(1.0h);
+ var res : vec4<f16> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_95e984();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/95e984.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveAdd/95e984.wgsl.expected.spvasm
new file mode 100644
index 0000000..6353f24
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/95e984.wgsl.expected.spvasm
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupExclusiveAdd_95e984() -> vec4<f16> {
+ var arg_0 = vec4<f16>(1.0h);
+ var res : vec4<f16> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_95e984();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/95e984.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/95e984.wgsl.expected.wgsl
new file mode 100644
index 0000000..c2137ba
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/95e984.wgsl.expected.wgsl
@@ -0,0 +1,16 @@
+enable subgroups;
+enable subgroups_f16;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupExclusiveAdd_95e984() -> vec4<f16> {
+ var arg_0 = vec4<f16>(1.0h);
+ var res : vec4<f16> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_95e984();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/967e38.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/967e38.wgsl
new file mode 100644
index 0000000..f8a412d
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/967e38.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+
+// fn subgroupExclusiveAdd(value: f32) -> f32
+fn subgroupExclusiveAdd_967e38() -> f32{
+ var arg_0 = 1.f;
+ var res: f32 = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_967e38();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/967e38.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/967e38.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..765bafd
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/967e38.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupExclusiveAdd_967e38() -> f32 {
+ var arg_0 = 1.0f;
+ var res : f32 = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_967e38();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/967e38.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/967e38.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..765bafd
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/967e38.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupExclusiveAdd_967e38() -> f32 {
+ var arg_0 = 1.0f;
+ var res : f32 = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_967e38();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/967e38.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/967e38.wgsl.expected.glsl
new file mode 100644
index 0000000..869a7e5
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/967e38.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupExclusiveAdd_967e38() -> f32 {
+ var arg_0 = 1.0f;
+ var res : f32 = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_967e38();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55e4355c61c0
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/967e38.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveAdd/967e38.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..64e26e5
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/967e38.wgsl.expected.ir.spvasm
@@ -0,0 +1,51 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveAdd_967e38 "subgroupExclusiveAdd_967e38"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %float = OpTypeFloat 32
+%tint_symbol_1 = OpTypeStruct %float
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %6 = OpTypeFunction %float
+%_ptr_Function_float = OpTypePointer Function %float
+ %float_1 = OpConstant %float 1
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveAdd_967e38 = OpFunction %float None %6
+ %7 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_float Function
+ %res = OpVariable %_ptr_Function_float Function
+ OpStore %arg_0 %float_1
+ %11 = OpLoad %float %arg_0
+ %12 = OpGroupNonUniformFAdd %float %uint_3 ExclusiveScan %11
+ OpStore %res %12
+ %16 = OpLoad %float %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %float %subgroupExclusiveAdd_967e38
+ %22 = OpAccessChain %_ptr_StorageBuffer_float %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/967e38.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/967e38.wgsl.expected.msl
new file mode 100644
index 0000000..f1eaf40
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/967e38.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupExclusiveAdd_967e38() -> f32 {
+ var arg_0 = 1.0f;
+ var res : f32 = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_967e38();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/967e38.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveAdd/967e38.wgsl.expected.spvasm
new file mode 100644
index 0000000..49e5f61
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/967e38.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupExclusiveAdd_967e38() -> f32 {
+ var arg_0 = 1.0f;
+ var res : f32 = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_967e38();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/967e38.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/967e38.wgsl.expected.wgsl
new file mode 100644
index 0000000..2268fcc
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/967e38.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupExclusiveAdd_967e38() -> f32 {
+ var arg_0 = 1.0f;
+ var res : f32 = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_967e38();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/b0c261.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/b0c261.wgsl
new file mode 100644
index 0000000..47f5f56
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/b0c261.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+
+// fn subgroupExclusiveAdd(value: i32) -> i32
+fn subgroupExclusiveAdd_b0c261() -> i32{
+ var arg_0 = 1i;
+ var res: i32 = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_b0c261();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/b0c261.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/b0c261.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..bbcfeb7
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/b0c261.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupExclusiveAdd_b0c261() -> i32 {
+ var arg_0 = 1i;
+ var res : i32 = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_b0c261();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/b0c261.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/b0c261.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..bbcfeb7
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/b0c261.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupExclusiveAdd_b0c261() -> i32 {
+ var arg_0 = 1i;
+ var res : i32 = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_b0c261();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/b0c261.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/b0c261.wgsl.expected.glsl
new file mode 100644
index 0000000..0b73cc9
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/b0c261.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupExclusiveAdd_b0c261() -> i32 {
+ var arg_0 = 1i;
+ var res : i32 = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_b0c261();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55cff0f391c0
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/b0c261.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveAdd/b0c261.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..0acd590
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/b0c261.wgsl.expected.ir.spvasm
@@ -0,0 +1,51 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveAdd_b0c261 "subgroupExclusiveAdd_b0c261"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %int = OpTypeInt 32 1
+%tint_symbol_1 = OpTypeStruct %int
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %6 = OpTypeFunction %int
+%_ptr_Function_int = OpTypePointer Function %int
+ %int_1 = OpConstant %int 1
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveAdd_b0c261 = OpFunction %int None %6
+ %7 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_int Function
+ %res = OpVariable %_ptr_Function_int Function
+ OpStore %arg_0 %int_1
+ %11 = OpLoad %int %arg_0
+ %12 = OpGroupNonUniformIAdd %int %uint_3 ExclusiveScan %11
+ OpStore %res %12
+ %16 = OpLoad %int %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %int %subgroupExclusiveAdd_b0c261
+ %22 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/b0c261.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/b0c261.wgsl.expected.msl
new file mode 100644
index 0000000..5abe3d9
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/b0c261.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupExclusiveAdd_b0c261() -> i32 {
+ var arg_0 = 1i;
+ var res : i32 = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_b0c261();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/b0c261.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveAdd/b0c261.wgsl.expected.spvasm
new file mode 100644
index 0000000..86e2147
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/b0c261.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupExclusiveAdd_b0c261() -> i32 {
+ var arg_0 = 1i;
+ var res : i32 = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_b0c261();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/b0c261.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/b0c261.wgsl.expected.wgsl
new file mode 100644
index 0000000..7bd9a71
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/b0c261.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupExclusiveAdd_b0c261() -> i32 {
+ var arg_0 = 1i;
+ var res : i32 = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_b0c261();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/c08160.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/c08160.wgsl
new file mode 100644
index 0000000..ef2cbb6
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/c08160.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+
+// fn subgroupExclusiveAdd(value: vec<3, i32>) -> vec<3, i32>
+fn subgroupExclusiveAdd_c08160() -> vec3<i32>{
+ var arg_0 = vec3<i32>(1i);
+ var res: vec3<i32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_c08160();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/c08160.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/c08160.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..461164a
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/c08160.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupExclusiveAdd_c08160() -> vec3<i32> {
+ var arg_0 = vec3<i32>(1i);
+ var res : vec3<i32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_c08160();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/c08160.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/c08160.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..461164a
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/c08160.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupExclusiveAdd_c08160() -> vec3<i32> {
+ var arg_0 = vec3<i32>(1i);
+ var res : vec3<i32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_c08160();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/c08160.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/c08160.wgsl.expected.glsl
new file mode 100644
index 0000000..fbcc083
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/c08160.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupExclusiveAdd_c08160() -> vec3<i32> {
+ var arg_0 = vec3<i32>(1i);
+ var res : vec3<i32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_c08160();
+}
+
+Failed to generate: error: Unknown builtin method: 0x563e505b2498
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/c08160.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveAdd/c08160.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..d164307
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/c08160.wgsl.expected.ir.spvasm
@@ -0,0 +1,53 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveAdd_c08160 "subgroupExclusiveAdd_c08160"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %int = OpTypeInt 32 1
+ %v3int = OpTypeVector %int 3
+%tint_symbol_1 = OpTypeStruct %v3int
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v3int
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+ %int_1 = OpConstant %int 1
+ %11 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v3int = OpTypePointer StorageBuffer %v3int
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveAdd_c08160 = OpFunction %v3int None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v3int Function
+ %res = OpVariable %_ptr_Function_v3int Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v3int %arg_0
+ %14 = OpGroupNonUniformIAdd %v3int %uint_3 ExclusiveScan %13
+ OpStore %res %14
+ %18 = OpLoad %v3int %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v3int %subgroupExclusiveAdd_c08160
+ %24 = OpAccessChain %_ptr_StorageBuffer_v3int %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/c08160.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/c08160.wgsl.expected.msl
new file mode 100644
index 0000000..be2ef8a
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/c08160.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupExclusiveAdd_c08160() -> vec3<i32> {
+ var arg_0 = vec3<i32>(1i);
+ var res : vec3<i32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_c08160();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/c08160.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveAdd/c08160.wgsl.expected.spvasm
new file mode 100644
index 0000000..19bc7f0
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/c08160.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupExclusiveAdd_c08160() -> vec3<i32> {
+ var arg_0 = vec3<i32>(1i);
+ var res : vec3<i32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_c08160();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/c08160.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/c08160.wgsl.expected.wgsl
new file mode 100644
index 0000000..03bb9b0
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/c08160.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupExclusiveAdd_c08160() -> vec3<i32> {
+ var arg_0 = vec3<i32>(1i);
+ var res : vec3<i32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_c08160();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/e58e23.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/e58e23.wgsl
new file mode 100644
index 0000000..615b2be
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/e58e23.wgsl
@@ -0,0 +1,58 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// flags: --hlsl_shader_model 62
+
+
+enable subgroups;
+enable subgroups_f16;
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+
+// fn subgroupExclusiveAdd(value: vec<3, f16>) -> vec<3, f16>
+fn subgroupExclusiveAdd_e58e23() -> vec3<f16>{
+ var arg_0 = vec3<f16>(1.h);
+ var res: vec3<f16> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_e58e23();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/e58e23.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/e58e23.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..6f17795
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/e58e23.wgsl.expected.dxc.hlsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupExclusiveAdd_e58e23() -> vec3<f16> {
+ var arg_0 = vec3<f16>(1.0h);
+ var res : vec3<f16> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_e58e23();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/e58e23.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/e58e23.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..6f17795
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/e58e23.wgsl.expected.fxc.hlsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupExclusiveAdd_e58e23() -> vec3<f16> {
+ var arg_0 = vec3<f16>(1.0h);
+ var res : vec3<f16> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_e58e23();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/e58e23.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/e58e23.wgsl.expected.glsl
new file mode 100644
index 0000000..973c065
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/e58e23.wgsl.expected.glsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupExclusiveAdd_e58e23() -> vec3<f16> {
+ var arg_0 = vec3<f16>(1.0h);
+ var res : vec3<f16> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_e58e23();
+}
+
+Failed to generate: error: Unknown builtin method: 0x558ff6290498
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/e58e23.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveAdd/e58e23.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..31be3ad
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/e58e23.wgsl.expected.ir.spvasm
@@ -0,0 +1,56 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability Float16
+ OpCapability UniformAndStorageBuffer16BitAccess
+ OpCapability StorageBuffer16BitAccess
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveAdd_e58e23 "subgroupExclusiveAdd_e58e23"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %half = OpTypeFloat 16
+ %v3half = OpTypeVector %half 3
+%tint_symbol_1 = OpTypeStruct %v3half
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v3half
+%_ptr_Function_v3half = OpTypePointer Function %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+ %11 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v3half = OpTypePointer StorageBuffer %v3half
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveAdd_e58e23 = OpFunction %v3half None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v3half Function
+ %res = OpVariable %_ptr_Function_v3half Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v3half %arg_0
+ %14 = OpGroupNonUniformFAdd %v3half %uint_3 ExclusiveScan %13
+ OpStore %res %14
+ %18 = OpLoad %v3half %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v3half %subgroupExclusiveAdd_e58e23
+ %24 = OpAccessChain %_ptr_StorageBuffer_v3half %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/e58e23.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/e58e23.wgsl.expected.msl
new file mode 100644
index 0000000..7ab69fc
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/e58e23.wgsl.expected.msl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupExclusiveAdd_e58e23() -> vec3<f16> {
+ var arg_0 = vec3<f16>(1.0h);
+ var res : vec3<f16> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_e58e23();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/e58e23.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveAdd/e58e23.wgsl.expected.spvasm
new file mode 100644
index 0000000..fcf8833
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/e58e23.wgsl.expected.spvasm
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupExclusiveAdd_e58e23() -> vec3<f16> {
+ var arg_0 = vec3<f16>(1.0h);
+ var res : vec3<f16> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_e58e23();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/e58e23.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/e58e23.wgsl.expected.wgsl
new file mode 100644
index 0000000..f721dfa
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/e58e23.wgsl.expected.wgsl
@@ -0,0 +1,16 @@
+enable subgroups;
+enable subgroups_f16;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupExclusiveAdd_e58e23() -> vec3<f16> {
+ var arg_0 = vec3<f16>(1.0h);
+ var res : vec3<f16> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_e58e23();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/ec300f.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/ec300f.wgsl
new file mode 100644
index 0000000..69ea42c
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/ec300f.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+
+// fn subgroupExclusiveAdd(value: vec<4, u32>) -> vec<4, u32>
+fn subgroupExclusiveAdd_ec300f() -> vec4<u32>{
+ var arg_0 = vec4<u32>(1u);
+ var res: vec4<u32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_ec300f();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/ec300f.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/ec300f.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..3bd8fda
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/ec300f.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupExclusiveAdd_ec300f() -> vec4<u32> {
+ var arg_0 = vec4<u32>(1u);
+ var res : vec4<u32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_ec300f();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/ec300f.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/ec300f.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..3bd8fda
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/ec300f.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupExclusiveAdd_ec300f() -> vec4<u32> {
+ var arg_0 = vec4<u32>(1u);
+ var res : vec4<u32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_ec300f();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/ec300f.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/ec300f.wgsl.expected.glsl
new file mode 100644
index 0000000..e07cfba
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/ec300f.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupExclusiveAdd_ec300f() -> vec4<u32> {
+ var arg_0 = vec4<u32>(1u);
+ var res : vec4<u32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_ec300f();
+}
+
+Failed to generate: error: Unknown builtin method: 0x559ae072e498
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/ec300f.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveAdd/ec300f.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..d994ed5
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/ec300f.wgsl.expected.ir.spvasm
@@ -0,0 +1,52 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 26
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveAdd_ec300f "subgroupExclusiveAdd_ec300f"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %uint = OpTypeInt 32 0
+ %v4uint = OpTypeVector %uint 4
+%tint_symbol_1 = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v4uint
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+ %uint_1 = OpConstant %uint 1
+ %11 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %20 = OpTypeFunction %void
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveAdd_ec300f = OpFunction %v4uint None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v4uint Function
+ %res = OpVariable %_ptr_Function_v4uint Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v4uint %arg_0
+ %14 = OpGroupNonUniformIAdd %v4uint %uint_3 ExclusiveScan %13
+ OpStore %res %14
+ %17 = OpLoad %v4uint %res
+ OpReturnValue %17
+ OpFunctionEnd
+%compute_main = OpFunction %void None %20
+ %21 = OpLabel
+ %22 = OpFunctionCall %v4uint %subgroupExclusiveAdd_ec300f
+ %23 = OpAccessChain %_ptr_StorageBuffer_v4uint %1 %uint_0
+ OpStore %23 %22
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/ec300f.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/ec300f.wgsl.expected.msl
new file mode 100644
index 0000000..3566b44
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/ec300f.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupExclusiveAdd_ec300f() -> vec4<u32> {
+ var arg_0 = vec4<u32>(1u);
+ var res : vec4<u32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_ec300f();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/ec300f.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveAdd/ec300f.wgsl.expected.spvasm
new file mode 100644
index 0000000..f8f5204
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/ec300f.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupExclusiveAdd_ec300f() -> vec4<u32> {
+ var arg_0 = vec4<u32>(1u);
+ var res : vec4<u32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_ec300f();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/ec300f.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/ec300f.wgsl.expected.wgsl
new file mode 100644
index 0000000..5be5e9d
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/ec300f.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupExclusiveAdd_ec300f() -> vec4<u32> {
+ var arg_0 = vec4<u32>(1u);
+ var res : vec4<u32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_ec300f();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/f0f712.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/f0f712.wgsl
new file mode 100644
index 0000000..9dceb5b
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/f0f712.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+
+// fn subgroupExclusiveAdd(value: vec<2, i32>) -> vec<2, i32>
+fn subgroupExclusiveAdd_f0f712() -> vec2<i32>{
+ var arg_0 = vec2<i32>(1i);
+ var res: vec2<i32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_f0f712();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/f0f712.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/f0f712.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..65d99ca
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/f0f712.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupExclusiveAdd_f0f712() -> vec2<i32> {
+ var arg_0 = vec2<i32>(1i);
+ var res : vec2<i32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_f0f712();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/f0f712.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/f0f712.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..65d99ca
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/f0f712.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupExclusiveAdd_f0f712() -> vec2<i32> {
+ var arg_0 = vec2<i32>(1i);
+ var res : vec2<i32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_f0f712();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/f0f712.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/f0f712.wgsl.expected.glsl
new file mode 100644
index 0000000..f47dbb1
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/f0f712.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupExclusiveAdd_f0f712() -> vec2<i32> {
+ var arg_0 = vec2<i32>(1i);
+ var res : vec2<i32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_f0f712();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55ea4fc49498
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/f0f712.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveAdd/f0f712.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..835ab8e
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/f0f712.wgsl.expected.ir.spvasm
@@ -0,0 +1,53 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveAdd_f0f712 "subgroupExclusiveAdd_f0f712"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %int = OpTypeInt 32 1
+ %v2int = OpTypeVector %int 2
+%tint_symbol_1 = OpTypeStruct %v2int
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v2int
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+ %int_1 = OpConstant %int 1
+ %11 = OpConstantComposite %v2int %int_1 %int_1
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v2int = OpTypePointer StorageBuffer %v2int
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveAdd_f0f712 = OpFunction %v2int None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v2int Function
+ %res = OpVariable %_ptr_Function_v2int Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v2int %arg_0
+ %14 = OpGroupNonUniformIAdd %v2int %uint_3 ExclusiveScan %13
+ OpStore %res %14
+ %18 = OpLoad %v2int %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v2int %subgroupExclusiveAdd_f0f712
+ %24 = OpAccessChain %_ptr_StorageBuffer_v2int %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/f0f712.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/f0f712.wgsl.expected.msl
new file mode 100644
index 0000000..c09fb2e
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/f0f712.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupExclusiveAdd_f0f712() -> vec2<i32> {
+ var arg_0 = vec2<i32>(1i);
+ var res : vec2<i32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_f0f712();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveAdd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/f0f712.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveAdd/f0f712.wgsl.expected.spvasm
new file mode 100644
index 0000000..d2d1644
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/f0f712.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupExclusiveAdd_f0f712() -> vec2<i32> {
+ var arg_0 = vec2<i32>(1i);
+ var res : vec2<i32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_f0f712();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveAdd/f0f712.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveAdd/f0f712.wgsl.expected.wgsl
new file mode 100644
index 0000000..7638459
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveAdd/f0f712.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupExclusiveAdd_f0f712() -> vec2<i32> {
+ var arg_0 = vec2<i32>(1i);
+ var res : vec2<i32> = subgroupExclusiveAdd(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveAdd_f0f712();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/000b92.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/000b92.wgsl
new file mode 100644
index 0000000..edc81eb
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/000b92.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+
+// fn subgroupExclusiveMul(value: vec<4, u32>) -> vec<4, u32>
+fn subgroupExclusiveMul_000b92() -> vec4<u32>{
+ var arg_0 = vec4<u32>(1u);
+ var res: vec4<u32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_000b92();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/000b92.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/000b92.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..8077fe1
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/000b92.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupExclusiveMul_000b92() -> vec4<u32> {
+ var arg_0 = vec4<u32>(1u);
+ var res : vec4<u32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_000b92();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/000b92.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/000b92.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..8077fe1
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/000b92.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupExclusiveMul_000b92() -> vec4<u32> {
+ var arg_0 = vec4<u32>(1u);
+ var res : vec4<u32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_000b92();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/000b92.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/000b92.wgsl.expected.glsl
new file mode 100644
index 0000000..7e8ca25
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/000b92.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupExclusiveMul_000b92() -> vec4<u32> {
+ var arg_0 = vec4<u32>(1u);
+ var res : vec4<u32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_000b92();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55ad0f807498
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/000b92.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveMul/000b92.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..13241ac
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/000b92.wgsl.expected.ir.spvasm
@@ -0,0 +1,52 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 26
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveMul_000b92 "subgroupExclusiveMul_000b92"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %uint = OpTypeInt 32 0
+ %v4uint = OpTypeVector %uint 4
+%tint_symbol_1 = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v4uint
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+ %uint_1 = OpConstant %uint 1
+ %11 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %20 = OpTypeFunction %void
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveMul_000b92 = OpFunction %v4uint None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v4uint Function
+ %res = OpVariable %_ptr_Function_v4uint Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v4uint %arg_0
+ %14 = OpGroupNonUniformIMul %v4uint %uint_3 ExclusiveScan %13
+ OpStore %res %14
+ %17 = OpLoad %v4uint %res
+ OpReturnValue %17
+ OpFunctionEnd
+%compute_main = OpFunction %void None %20
+ %21 = OpLabel
+ %22 = OpFunctionCall %v4uint %subgroupExclusiveMul_000b92
+ %23 = OpAccessChain %_ptr_StorageBuffer_v4uint %1 %uint_0
+ OpStore %23 %22
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/000b92.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupExclusiveMul/000b92.wgsl.expected.msl
new file mode 100644
index 0000000..61bfb7f
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/000b92.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupExclusiveMul_000b92() -> vec4<u32> {
+ var arg_0 = vec4<u32>(1u);
+ var res : vec4<u32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_000b92();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/000b92.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveMul/000b92.wgsl.expected.spvasm
new file mode 100644
index 0000000..46df7a8
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/000b92.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupExclusiveMul_000b92() -> vec4<u32> {
+ var arg_0 = vec4<u32>(1u);
+ var res : vec4<u32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_000b92();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/000b92.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/000b92.wgsl.expected.wgsl
new file mode 100644
index 0000000..52ac098
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/000b92.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupExclusiveMul_000b92() -> vec4<u32> {
+ var arg_0 = vec4<u32>(1u);
+ var res : vec4<u32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_000b92();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/019660.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/019660.wgsl
new file mode 100644
index 0000000..6935c6f
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/019660.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+
+// fn subgroupExclusiveMul(value: vec<4, i32>) -> vec<4, i32>
+fn subgroupExclusiveMul_019660() -> vec4<i32>{
+ var arg_0 = vec4<i32>(1i);
+ var res: vec4<i32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_019660();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/019660.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/019660.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..903fc46
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/019660.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupExclusiveMul_019660() -> vec4<i32> {
+ var arg_0 = vec4<i32>(1i);
+ var res : vec4<i32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_019660();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/019660.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/019660.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..903fc46
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/019660.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupExclusiveMul_019660() -> vec4<i32> {
+ var arg_0 = vec4<i32>(1i);
+ var res : vec4<i32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_019660();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/019660.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/019660.wgsl.expected.glsl
new file mode 100644
index 0000000..9b9823c
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/019660.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupExclusiveMul_019660() -> vec4<i32> {
+ var arg_0 = vec4<i32>(1i);
+ var res : vec4<i32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_019660();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55a5e9c4d498
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/019660.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveMul/019660.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..bfec245
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/019660.wgsl.expected.ir.spvasm
@@ -0,0 +1,53 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveMul_019660 "subgroupExclusiveMul_019660"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %int = OpTypeInt 32 1
+ %v4int = OpTypeVector %int 4
+%tint_symbol_1 = OpTypeStruct %v4int
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v4int
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+ %int_1 = OpConstant %int 1
+ %11 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveMul_019660 = OpFunction %v4int None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v4int Function
+ %res = OpVariable %_ptr_Function_v4int Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v4int %arg_0
+ %14 = OpGroupNonUniformIMul %v4int %uint_3 ExclusiveScan %13
+ OpStore %res %14
+ %18 = OpLoad %v4int %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v4int %subgroupExclusiveMul_019660
+ %24 = OpAccessChain %_ptr_StorageBuffer_v4int %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/019660.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupExclusiveMul/019660.wgsl.expected.msl
new file mode 100644
index 0000000..f5b82ff
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/019660.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupExclusiveMul_019660() -> vec4<i32> {
+ var arg_0 = vec4<i32>(1i);
+ var res : vec4<i32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_019660();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/019660.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveMul/019660.wgsl.expected.spvasm
new file mode 100644
index 0000000..9a347c8
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/019660.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupExclusiveMul_019660() -> vec4<i32> {
+ var arg_0 = vec4<i32>(1i);
+ var res : vec4<i32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_019660();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/019660.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/019660.wgsl.expected.wgsl
new file mode 100644
index 0000000..3f9d6f6
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/019660.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupExclusiveMul_019660() -> vec4<i32> {
+ var arg_0 = vec4<i32>(1i);
+ var res : vec4<i32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_019660();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/0a04d5.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/0a04d5.wgsl
new file mode 100644
index 0000000..a6efd4a
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/0a04d5.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+
+// fn subgroupExclusiveMul(value: vec<3, f32>) -> vec<3, f32>
+fn subgroupExclusiveMul_0a04d5() -> vec3<f32>{
+ var arg_0 = vec3<f32>(1.f);
+ var res: vec3<f32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_0a04d5();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/0a04d5.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/0a04d5.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..f555773
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/0a04d5.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupExclusiveMul_0a04d5() -> vec3<f32> {
+ var arg_0 = vec3<f32>(1.0f);
+ var res : vec3<f32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_0a04d5();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/0a04d5.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/0a04d5.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..f555773
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/0a04d5.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupExclusiveMul_0a04d5() -> vec3<f32> {
+ var arg_0 = vec3<f32>(1.0f);
+ var res : vec3<f32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_0a04d5();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/0a04d5.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/0a04d5.wgsl.expected.glsl
new file mode 100644
index 0000000..ea74266
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/0a04d5.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupExclusiveMul_0a04d5() -> vec3<f32> {
+ var arg_0 = vec3<f32>(1.0f);
+ var res : vec3<f32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_0a04d5();
+}
+
+Failed to generate: error: Unknown builtin method: 0x556f4f9bb498
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/0a04d5.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveMul/0a04d5.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..90c0079
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/0a04d5.wgsl.expected.ir.spvasm
@@ -0,0 +1,53 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveMul_0a04d5 "subgroupExclusiveMul_0a04d5"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %float = OpTypeFloat 32
+ %v3float = OpTypeVector %float 3
+%tint_symbol_1 = OpTypeStruct %v3float
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v3float
+%_ptr_Function_v3float = OpTypePointer Function %v3float
+ %float_1 = OpConstant %float 1
+ %11 = OpConstantComposite %v3float %float_1 %float_1 %float_1
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v3float = OpTypePointer StorageBuffer %v3float
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveMul_0a04d5 = OpFunction %v3float None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v3float Function
+ %res = OpVariable %_ptr_Function_v3float Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v3float %arg_0
+ %14 = OpGroupNonUniformFMul %v3float %uint_3 ExclusiveScan %13
+ OpStore %res %14
+ %18 = OpLoad %v3float %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v3float %subgroupExclusiveMul_0a04d5
+ %24 = OpAccessChain %_ptr_StorageBuffer_v3float %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/0a04d5.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupExclusiveMul/0a04d5.wgsl.expected.msl
new file mode 100644
index 0000000..312b6ac
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/0a04d5.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupExclusiveMul_0a04d5() -> vec3<f32> {
+ var arg_0 = vec3<f32>(1.0f);
+ var res : vec3<f32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_0a04d5();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/0a04d5.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveMul/0a04d5.wgsl.expected.spvasm
new file mode 100644
index 0000000..05b3b38
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/0a04d5.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupExclusiveMul_0a04d5() -> vec3<f32> {
+ var arg_0 = vec3<f32>(1.0f);
+ var res : vec3<f32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_0a04d5();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/0a04d5.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/0a04d5.wgsl.expected.wgsl
new file mode 100644
index 0000000..fac07aa
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/0a04d5.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupExclusiveMul_0a04d5() -> vec3<f32> {
+ var arg_0 = vec3<f32>(1.0f);
+ var res : vec3<f32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_0a04d5();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/13ba26.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/13ba26.wgsl
new file mode 100644
index 0000000..f69e7e1
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/13ba26.wgsl
@@ -0,0 +1,58 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// flags: --hlsl_shader_model 62
+
+
+enable subgroups;
+enable subgroups_f16;
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+
+// fn subgroupExclusiveMul(value: vec<3, f16>) -> vec<3, f16>
+fn subgroupExclusiveMul_13ba26() -> vec3<f16>{
+ var arg_0 = vec3<f16>(1.h);
+ var res: vec3<f16> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_13ba26();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/13ba26.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/13ba26.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..2113d1c
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/13ba26.wgsl.expected.dxc.hlsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupExclusiveMul_13ba26() -> vec3<f16> {
+ var arg_0 = vec3<f16>(1.0h);
+ var res : vec3<f16> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_13ba26();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/13ba26.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/13ba26.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..2113d1c
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/13ba26.wgsl.expected.fxc.hlsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupExclusiveMul_13ba26() -> vec3<f16> {
+ var arg_0 = vec3<f16>(1.0h);
+ var res : vec3<f16> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_13ba26();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/13ba26.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/13ba26.wgsl.expected.glsl
new file mode 100644
index 0000000..6046b8a
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/13ba26.wgsl.expected.glsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupExclusiveMul_13ba26() -> vec3<f16> {
+ var arg_0 = vec3<f16>(1.0h);
+ var res : vec3<f16> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_13ba26();
+}
+
+Failed to generate: error: Unknown builtin method: 0x561956f6a498
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/13ba26.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveMul/13ba26.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..ab1a320
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/13ba26.wgsl.expected.ir.spvasm
@@ -0,0 +1,56 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability Float16
+ OpCapability UniformAndStorageBuffer16BitAccess
+ OpCapability StorageBuffer16BitAccess
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveMul_13ba26 "subgroupExclusiveMul_13ba26"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %half = OpTypeFloat 16
+ %v3half = OpTypeVector %half 3
+%tint_symbol_1 = OpTypeStruct %v3half
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v3half
+%_ptr_Function_v3half = OpTypePointer Function %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+ %11 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v3half = OpTypePointer StorageBuffer %v3half
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveMul_13ba26 = OpFunction %v3half None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v3half Function
+ %res = OpVariable %_ptr_Function_v3half Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v3half %arg_0
+ %14 = OpGroupNonUniformFMul %v3half %uint_3 ExclusiveScan %13
+ OpStore %res %14
+ %18 = OpLoad %v3half %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v3half %subgroupExclusiveMul_13ba26
+ %24 = OpAccessChain %_ptr_StorageBuffer_v3half %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/13ba26.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupExclusiveMul/13ba26.wgsl.expected.msl
new file mode 100644
index 0000000..8e249c8
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/13ba26.wgsl.expected.msl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupExclusiveMul_13ba26() -> vec3<f16> {
+ var arg_0 = vec3<f16>(1.0h);
+ var res : vec3<f16> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_13ba26();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/13ba26.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveMul/13ba26.wgsl.expected.spvasm
new file mode 100644
index 0000000..ba603b3
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/13ba26.wgsl.expected.spvasm
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupExclusiveMul_13ba26() -> vec3<f16> {
+ var arg_0 = vec3<f16>(1.0h);
+ var res : vec3<f16> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_13ba26();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/13ba26.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/13ba26.wgsl.expected.wgsl
new file mode 100644
index 0000000..e578d2e
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/13ba26.wgsl.expected.wgsl
@@ -0,0 +1,16 @@
+enable subgroups;
+enable subgroups_f16;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupExclusiveMul_13ba26() -> vec3<f16> {
+ var arg_0 = vec3<f16>(1.0h);
+ var res : vec3<f16> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_13ba26();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/25d1b9.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/25d1b9.wgsl
new file mode 100644
index 0000000..086f855
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/25d1b9.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+
+// fn subgroupExclusiveMul(value: vec<2, f32>) -> vec<2, f32>
+fn subgroupExclusiveMul_25d1b9() -> vec2<f32>{
+ var arg_0 = vec2<f32>(1.f);
+ var res: vec2<f32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_25d1b9();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/25d1b9.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/25d1b9.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..a24737c
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/25d1b9.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupExclusiveMul_25d1b9() -> vec2<f32> {
+ var arg_0 = vec2<f32>(1.0f);
+ var res : vec2<f32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_25d1b9();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/25d1b9.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/25d1b9.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..a24737c
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/25d1b9.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupExclusiveMul_25d1b9() -> vec2<f32> {
+ var arg_0 = vec2<f32>(1.0f);
+ var res : vec2<f32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_25d1b9();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/25d1b9.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/25d1b9.wgsl.expected.glsl
new file mode 100644
index 0000000..22aa42b
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/25d1b9.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupExclusiveMul_25d1b9() -> vec2<f32> {
+ var arg_0 = vec2<f32>(1.0f);
+ var res : vec2<f32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_25d1b9();
+}
+
+Failed to generate: error: Unknown builtin method: 0x558e0d30e498
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/25d1b9.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveMul/25d1b9.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..19841fe
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/25d1b9.wgsl.expected.ir.spvasm
@@ -0,0 +1,53 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveMul_25d1b9 "subgroupExclusiveMul_25d1b9"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %float = OpTypeFloat 32
+ %v2float = OpTypeVector %float 2
+%tint_symbol_1 = OpTypeStruct %v2float
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v2float
+%_ptr_Function_v2float = OpTypePointer Function %v2float
+ %float_1 = OpConstant %float 1
+ %11 = OpConstantComposite %v2float %float_1 %float_1
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v2float = OpTypePointer StorageBuffer %v2float
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveMul_25d1b9 = OpFunction %v2float None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v2float Function
+ %res = OpVariable %_ptr_Function_v2float Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v2float %arg_0
+ %14 = OpGroupNonUniformFMul %v2float %uint_3 ExclusiveScan %13
+ OpStore %res %14
+ %18 = OpLoad %v2float %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v2float %subgroupExclusiveMul_25d1b9
+ %24 = OpAccessChain %_ptr_StorageBuffer_v2float %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/25d1b9.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupExclusiveMul/25d1b9.wgsl.expected.msl
new file mode 100644
index 0000000..9de1725
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/25d1b9.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupExclusiveMul_25d1b9() -> vec2<f32> {
+ var arg_0 = vec2<f32>(1.0f);
+ var res : vec2<f32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_25d1b9();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/25d1b9.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveMul/25d1b9.wgsl.expected.spvasm
new file mode 100644
index 0000000..e39ebc5
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/25d1b9.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupExclusiveMul_25d1b9() -> vec2<f32> {
+ var arg_0 = vec2<f32>(1.0f);
+ var res : vec2<f32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_25d1b9();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/25d1b9.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/25d1b9.wgsl.expected.wgsl
new file mode 100644
index 0000000..94c2622
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/25d1b9.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupExclusiveMul_25d1b9() -> vec2<f32> {
+ var arg_0 = vec2<f32>(1.0f);
+ var res : vec2<f32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_25d1b9();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/4525a3.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/4525a3.wgsl
new file mode 100644
index 0000000..a55c613
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/4525a3.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+
+// fn subgroupExclusiveMul(value: vec<2, i32>) -> vec<2, i32>
+fn subgroupExclusiveMul_4525a3() -> vec2<i32>{
+ var arg_0 = vec2<i32>(1i);
+ var res: vec2<i32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_4525a3();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/4525a3.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/4525a3.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..59aeba3
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/4525a3.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupExclusiveMul_4525a3() -> vec2<i32> {
+ var arg_0 = vec2<i32>(1i);
+ var res : vec2<i32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_4525a3();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/4525a3.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/4525a3.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..59aeba3
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/4525a3.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupExclusiveMul_4525a3() -> vec2<i32> {
+ var arg_0 = vec2<i32>(1i);
+ var res : vec2<i32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_4525a3();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/4525a3.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/4525a3.wgsl.expected.glsl
new file mode 100644
index 0000000..8af1063
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/4525a3.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupExclusiveMul_4525a3() -> vec2<i32> {
+ var arg_0 = vec2<i32>(1i);
+ var res : vec2<i32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_4525a3();
+}
+
+Failed to generate: error: Unknown builtin method: 0x557707c4d498
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/4525a3.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveMul/4525a3.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..75282e9
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/4525a3.wgsl.expected.ir.spvasm
@@ -0,0 +1,53 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveMul_4525a3 "subgroupExclusiveMul_4525a3"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %int = OpTypeInt 32 1
+ %v2int = OpTypeVector %int 2
+%tint_symbol_1 = OpTypeStruct %v2int
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v2int
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+ %int_1 = OpConstant %int 1
+ %11 = OpConstantComposite %v2int %int_1 %int_1
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v2int = OpTypePointer StorageBuffer %v2int
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveMul_4525a3 = OpFunction %v2int None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v2int Function
+ %res = OpVariable %_ptr_Function_v2int Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v2int %arg_0
+ %14 = OpGroupNonUniformIMul %v2int %uint_3 ExclusiveScan %13
+ OpStore %res %14
+ %18 = OpLoad %v2int %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v2int %subgroupExclusiveMul_4525a3
+ %24 = OpAccessChain %_ptr_StorageBuffer_v2int %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/4525a3.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupExclusiveMul/4525a3.wgsl.expected.msl
new file mode 100644
index 0000000..ddf8812
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/4525a3.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupExclusiveMul_4525a3() -> vec2<i32> {
+ var arg_0 = vec2<i32>(1i);
+ var res : vec2<i32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_4525a3();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/4525a3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveMul/4525a3.wgsl.expected.spvasm
new file mode 100644
index 0000000..43fa5b7
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/4525a3.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupExclusiveMul_4525a3() -> vec2<i32> {
+ var arg_0 = vec2<i32>(1i);
+ var res : vec2<i32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_4525a3();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/4525a3.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/4525a3.wgsl.expected.wgsl
new file mode 100644
index 0000000..7478681
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/4525a3.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupExclusiveMul_4525a3() -> vec2<i32> {
+ var arg_0 = vec2<i32>(1i);
+ var res : vec2<i32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_4525a3();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/6f431e.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/6f431e.wgsl
new file mode 100644
index 0000000..100e4c3
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/6f431e.wgsl
@@ -0,0 +1,58 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// flags: --hlsl_shader_model 62
+
+
+enable subgroups;
+enable subgroups_f16;
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+
+// fn subgroupExclusiveMul(value: f16) -> f16
+fn subgroupExclusiveMul_6f431e() -> f16{
+ var arg_0 = 1.h;
+ var res: f16 = subgroupExclusiveMul(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_6f431e();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/6f431e.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/6f431e.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..834420a
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/6f431e.wgsl.expected.dxc.hlsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupExclusiveMul_6f431e() -> f16 {
+ var arg_0 = 1.0h;
+ var res : f16 = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_6f431e();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/6f431e.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/6f431e.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..834420a
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/6f431e.wgsl.expected.fxc.hlsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupExclusiveMul_6f431e() -> f16 {
+ var arg_0 = 1.0h;
+ var res : f16 = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_6f431e();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/6f431e.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/6f431e.wgsl.expected.glsl
new file mode 100644
index 0000000..e346be2
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/6f431e.wgsl.expected.glsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupExclusiveMul_6f431e() -> f16 {
+ var arg_0 = 1.0h;
+ var res : f16 = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_6f431e();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55ff1110e1c0
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/6f431e.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveMul/6f431e.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..54d81b8
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/6f431e.wgsl.expected.ir.spvasm
@@ -0,0 +1,54 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability Float16
+ OpCapability UniformAndStorageBuffer16BitAccess
+ OpCapability StorageBuffer16BitAccess
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveMul_6f431e "subgroupExclusiveMul_6f431e"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %half = OpTypeFloat 16
+%tint_symbol_1 = OpTypeStruct %half
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %6 = OpTypeFunction %half
+%_ptr_Function_half = OpTypePointer Function %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_half = OpTypePointer StorageBuffer %half
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveMul_6f431e = OpFunction %half None %6
+ %7 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_half Function
+ %res = OpVariable %_ptr_Function_half Function
+ OpStore %arg_0 %half_0x1p_0
+ %11 = OpLoad %half %arg_0
+ %12 = OpGroupNonUniformFMul %half %uint_3 ExclusiveScan %11
+ OpStore %res %12
+ %16 = OpLoad %half %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %half %subgroupExclusiveMul_6f431e
+ %22 = OpAccessChain %_ptr_StorageBuffer_half %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/6f431e.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupExclusiveMul/6f431e.wgsl.expected.msl
new file mode 100644
index 0000000..c968d5c
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/6f431e.wgsl.expected.msl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupExclusiveMul_6f431e() -> f16 {
+ var arg_0 = 1.0h;
+ var res : f16 = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_6f431e();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/6f431e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveMul/6f431e.wgsl.expected.spvasm
new file mode 100644
index 0000000..35f5216
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/6f431e.wgsl.expected.spvasm
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupExclusiveMul_6f431e() -> f16 {
+ var arg_0 = 1.0h;
+ var res : f16 = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_6f431e();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/6f431e.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/6f431e.wgsl.expected.wgsl
new file mode 100644
index 0000000..44f49b0
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/6f431e.wgsl.expected.wgsl
@@ -0,0 +1,16 @@
+enable subgroups;
+enable subgroups_f16;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupExclusiveMul_6f431e() -> f16 {
+ var arg_0 = 1.0h;
+ var res : f16 = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_6f431e();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/7b5f57.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/7b5f57.wgsl
new file mode 100644
index 0000000..2170ef6
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/7b5f57.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+
+// fn subgroupExclusiveMul(value: vec<4, f32>) -> vec<4, f32>
+fn subgroupExclusiveMul_7b5f57() -> vec4<f32>{
+ var arg_0 = vec4<f32>(1.f);
+ var res: vec4<f32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_7b5f57();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/7b5f57.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/7b5f57.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..b76dca3
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/7b5f57.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupExclusiveMul_7b5f57() -> vec4<f32> {
+ var arg_0 = vec4<f32>(1.0f);
+ var res : vec4<f32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_7b5f57();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/7b5f57.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/7b5f57.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..b76dca3
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/7b5f57.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupExclusiveMul_7b5f57() -> vec4<f32> {
+ var arg_0 = vec4<f32>(1.0f);
+ var res : vec4<f32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_7b5f57();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/7b5f57.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/7b5f57.wgsl.expected.glsl
new file mode 100644
index 0000000..5022e47
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/7b5f57.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupExclusiveMul_7b5f57() -> vec4<f32> {
+ var arg_0 = vec4<f32>(1.0f);
+ var res : vec4<f32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_7b5f57();
+}
+
+Failed to generate: error: Unknown builtin method: 0x56405c4ee498
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/7b5f57.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveMul/7b5f57.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..505754f
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/7b5f57.wgsl.expected.ir.spvasm
@@ -0,0 +1,53 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveMul_7b5f57 "subgroupExclusiveMul_7b5f57"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %float = OpTypeFloat 32
+ %v4float = OpTypeVector %float 4
+%tint_symbol_1 = OpTypeStruct %v4float
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v4float
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %float_1 = OpConstant %float 1
+ %11 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveMul_7b5f57 = OpFunction %v4float None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v4float Function
+ %res = OpVariable %_ptr_Function_v4float Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v4float %arg_0
+ %14 = OpGroupNonUniformFMul %v4float %uint_3 ExclusiveScan %13
+ OpStore %res %14
+ %18 = OpLoad %v4float %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v4float %subgroupExclusiveMul_7b5f57
+ %24 = OpAccessChain %_ptr_StorageBuffer_v4float %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/7b5f57.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupExclusiveMul/7b5f57.wgsl.expected.msl
new file mode 100644
index 0000000..411d1eb
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/7b5f57.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupExclusiveMul_7b5f57() -> vec4<f32> {
+ var arg_0 = vec4<f32>(1.0f);
+ var res : vec4<f32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_7b5f57();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/7b5f57.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveMul/7b5f57.wgsl.expected.spvasm
new file mode 100644
index 0000000..ff10e3e
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/7b5f57.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupExclusiveMul_7b5f57() -> vec4<f32> {
+ var arg_0 = vec4<f32>(1.0f);
+ var res : vec4<f32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_7b5f57();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/7b5f57.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/7b5f57.wgsl.expected.wgsl
new file mode 100644
index 0000000..adbfaa9
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/7b5f57.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupExclusiveMul_7b5f57() -> vec4<f32> {
+ var arg_0 = vec4<f32>(1.0f);
+ var res : vec4<f32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_7b5f57();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/87f23e.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/87f23e.wgsl
new file mode 100644
index 0000000..74f856f
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/87f23e.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+
+// fn subgroupExclusiveMul(value: vec<3, i32>) -> vec<3, i32>
+fn subgroupExclusiveMul_87f23e() -> vec3<i32>{
+ var arg_0 = vec3<i32>(1i);
+ var res: vec3<i32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_87f23e();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/87f23e.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/87f23e.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..0a07cd1
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/87f23e.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupExclusiveMul_87f23e() -> vec3<i32> {
+ var arg_0 = vec3<i32>(1i);
+ var res : vec3<i32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_87f23e();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/87f23e.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/87f23e.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..0a07cd1
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/87f23e.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupExclusiveMul_87f23e() -> vec3<i32> {
+ var arg_0 = vec3<i32>(1i);
+ var res : vec3<i32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_87f23e();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/87f23e.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/87f23e.wgsl.expected.glsl
new file mode 100644
index 0000000..8abf126
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/87f23e.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupExclusiveMul_87f23e() -> vec3<i32> {
+ var arg_0 = vec3<i32>(1i);
+ var res : vec3<i32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_87f23e();
+}
+
+Failed to generate: error: Unknown builtin method: 0x559158a7b498
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/87f23e.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveMul/87f23e.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..c3930f8
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/87f23e.wgsl.expected.ir.spvasm
@@ -0,0 +1,53 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveMul_87f23e "subgroupExclusiveMul_87f23e"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %int = OpTypeInt 32 1
+ %v3int = OpTypeVector %int 3
+%tint_symbol_1 = OpTypeStruct %v3int
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v3int
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+ %int_1 = OpConstant %int 1
+ %11 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v3int = OpTypePointer StorageBuffer %v3int
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveMul_87f23e = OpFunction %v3int None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v3int Function
+ %res = OpVariable %_ptr_Function_v3int Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v3int %arg_0
+ %14 = OpGroupNonUniformIMul %v3int %uint_3 ExclusiveScan %13
+ OpStore %res %14
+ %18 = OpLoad %v3int %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v3int %subgroupExclusiveMul_87f23e
+ %24 = OpAccessChain %_ptr_StorageBuffer_v3int %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/87f23e.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupExclusiveMul/87f23e.wgsl.expected.msl
new file mode 100644
index 0000000..2625eeb
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/87f23e.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupExclusiveMul_87f23e() -> vec3<i32> {
+ var arg_0 = vec3<i32>(1i);
+ var res : vec3<i32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_87f23e();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/87f23e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveMul/87f23e.wgsl.expected.spvasm
new file mode 100644
index 0000000..27a82c3
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/87f23e.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupExclusiveMul_87f23e() -> vec3<i32> {
+ var arg_0 = vec3<i32>(1i);
+ var res : vec3<i32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_87f23e();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/87f23e.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/87f23e.wgsl.expected.wgsl
new file mode 100644
index 0000000..283dc48
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/87f23e.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupExclusiveMul_87f23e() -> vec3<i32> {
+ var arg_0 = vec3<i32>(1i);
+ var res : vec3<i32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_87f23e();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/98b2e4.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/98b2e4.wgsl
new file mode 100644
index 0000000..0af0217
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/98b2e4.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+
+// fn subgroupExclusiveMul(value: f32) -> f32
+fn subgroupExclusiveMul_98b2e4() -> f32{
+ var arg_0 = 1.f;
+ var res: f32 = subgroupExclusiveMul(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_98b2e4();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/98b2e4.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/98b2e4.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..9225c29
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/98b2e4.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupExclusiveMul_98b2e4() -> f32 {
+ var arg_0 = 1.0f;
+ var res : f32 = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_98b2e4();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/98b2e4.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/98b2e4.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..9225c29
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/98b2e4.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupExclusiveMul_98b2e4() -> f32 {
+ var arg_0 = 1.0f;
+ var res : f32 = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_98b2e4();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/98b2e4.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/98b2e4.wgsl.expected.glsl
new file mode 100644
index 0000000..8664630
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/98b2e4.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupExclusiveMul_98b2e4() -> f32 {
+ var arg_0 = 1.0f;
+ var res : f32 = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_98b2e4();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55e68cc5f1c0
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/98b2e4.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveMul/98b2e4.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..9a6aab1
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/98b2e4.wgsl.expected.ir.spvasm
@@ -0,0 +1,51 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveMul_98b2e4 "subgroupExclusiveMul_98b2e4"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %float = OpTypeFloat 32
+%tint_symbol_1 = OpTypeStruct %float
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %6 = OpTypeFunction %float
+%_ptr_Function_float = OpTypePointer Function %float
+ %float_1 = OpConstant %float 1
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveMul_98b2e4 = OpFunction %float None %6
+ %7 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_float Function
+ %res = OpVariable %_ptr_Function_float Function
+ OpStore %arg_0 %float_1
+ %11 = OpLoad %float %arg_0
+ %12 = OpGroupNonUniformFMul %float %uint_3 ExclusiveScan %11
+ OpStore %res %12
+ %16 = OpLoad %float %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %float %subgroupExclusiveMul_98b2e4
+ %22 = OpAccessChain %_ptr_StorageBuffer_float %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/98b2e4.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupExclusiveMul/98b2e4.wgsl.expected.msl
new file mode 100644
index 0000000..6f57f57
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/98b2e4.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupExclusiveMul_98b2e4() -> f32 {
+ var arg_0 = 1.0f;
+ var res : f32 = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_98b2e4();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/98b2e4.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveMul/98b2e4.wgsl.expected.spvasm
new file mode 100644
index 0000000..1176d69
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/98b2e4.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupExclusiveMul_98b2e4() -> f32 {
+ var arg_0 = 1.0f;
+ var res : f32 = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_98b2e4();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/98b2e4.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/98b2e4.wgsl.expected.wgsl
new file mode 100644
index 0000000..fcff88d
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/98b2e4.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupExclusiveMul_98b2e4() -> f32 {
+ var arg_0 = 1.0f;
+ var res : f32 = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_98b2e4();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/a07956.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/a07956.wgsl
new file mode 100644
index 0000000..1d4161f
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/a07956.wgsl
@@ -0,0 +1,58 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// flags: --hlsl_shader_model 62
+
+
+enable subgroups;
+enable subgroups_f16;
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+
+// fn subgroupExclusiveMul(value: vec<4, f16>) -> vec<4, f16>
+fn subgroupExclusiveMul_a07956() -> vec4<f16>{
+ var arg_0 = vec4<f16>(1.h);
+ var res: vec4<f16> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_a07956();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/a07956.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/a07956.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..415e1c8
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/a07956.wgsl.expected.dxc.hlsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupExclusiveMul_a07956() -> vec4<f16> {
+ var arg_0 = vec4<f16>(1.0h);
+ var res : vec4<f16> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_a07956();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/a07956.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/a07956.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..415e1c8
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/a07956.wgsl.expected.fxc.hlsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupExclusiveMul_a07956() -> vec4<f16> {
+ var arg_0 = vec4<f16>(1.0h);
+ var res : vec4<f16> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_a07956();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/a07956.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/a07956.wgsl.expected.glsl
new file mode 100644
index 0000000..46724e7
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/a07956.wgsl.expected.glsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupExclusiveMul_a07956() -> vec4<f16> {
+ var arg_0 = vec4<f16>(1.0h);
+ var res : vec4<f16> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_a07956();
+}
+
+Failed to generate: error: Unknown builtin method: 0x562a65679498
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/a07956.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveMul/a07956.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..8578f53
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/a07956.wgsl.expected.ir.spvasm
@@ -0,0 +1,56 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability Float16
+ OpCapability UniformAndStorageBuffer16BitAccess
+ OpCapability StorageBuffer16BitAccess
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveMul_a07956 "subgroupExclusiveMul_a07956"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %half = OpTypeFloat 16
+ %v4half = OpTypeVector %half 4
+%tint_symbol_1 = OpTypeStruct %v4half
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v4half
+%_ptr_Function_v4half = OpTypePointer Function %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+ %11 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v4half = OpTypePointer StorageBuffer %v4half
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveMul_a07956 = OpFunction %v4half None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v4half Function
+ %res = OpVariable %_ptr_Function_v4half Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v4half %arg_0
+ %14 = OpGroupNonUniformFMul %v4half %uint_3 ExclusiveScan %13
+ OpStore %res %14
+ %18 = OpLoad %v4half %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v4half %subgroupExclusiveMul_a07956
+ %24 = OpAccessChain %_ptr_StorageBuffer_v4half %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/a07956.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupExclusiveMul/a07956.wgsl.expected.msl
new file mode 100644
index 0000000..e854a59
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/a07956.wgsl.expected.msl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupExclusiveMul_a07956() -> vec4<f16> {
+ var arg_0 = vec4<f16>(1.0h);
+ var res : vec4<f16> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_a07956();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/a07956.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveMul/a07956.wgsl.expected.spvasm
new file mode 100644
index 0000000..eaea123
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/a07956.wgsl.expected.spvasm
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupExclusiveMul_a07956() -> vec4<f16> {
+ var arg_0 = vec4<f16>(1.0h);
+ var res : vec4<f16> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_a07956();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/a07956.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/a07956.wgsl.expected.wgsl
new file mode 100644
index 0000000..3863fba
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/a07956.wgsl.expected.wgsl
@@ -0,0 +1,16 @@
+enable subgroups;
+enable subgroups_f16;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupExclusiveMul_a07956() -> vec4<f16> {
+ var arg_0 = vec4<f16>(1.0h);
+ var res : vec4<f16> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_a07956();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/a23002.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/a23002.wgsl
new file mode 100644
index 0000000..cde0de0
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/a23002.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+
+// fn subgroupExclusiveMul(value: i32) -> i32
+fn subgroupExclusiveMul_a23002() -> i32{
+ var arg_0 = 1i;
+ var res: i32 = subgroupExclusiveMul(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_a23002();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/a23002.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/a23002.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..f5e56c7
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/a23002.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupExclusiveMul_a23002() -> i32 {
+ var arg_0 = 1i;
+ var res : i32 = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_a23002();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/a23002.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/a23002.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..f5e56c7
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/a23002.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupExclusiveMul_a23002() -> i32 {
+ var arg_0 = 1i;
+ var res : i32 = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_a23002();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/a23002.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/a23002.wgsl.expected.glsl
new file mode 100644
index 0000000..0a64c93
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/a23002.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupExclusiveMul_a23002() -> i32 {
+ var arg_0 = 1i;
+ var res : i32 = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_a23002();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55f26f1e01c0
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/a23002.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveMul/a23002.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..5171785
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/a23002.wgsl.expected.ir.spvasm
@@ -0,0 +1,51 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveMul_a23002 "subgroupExclusiveMul_a23002"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %int = OpTypeInt 32 1
+%tint_symbol_1 = OpTypeStruct %int
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %6 = OpTypeFunction %int
+%_ptr_Function_int = OpTypePointer Function %int
+ %int_1 = OpConstant %int 1
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveMul_a23002 = OpFunction %int None %6
+ %7 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_int Function
+ %res = OpVariable %_ptr_Function_int Function
+ OpStore %arg_0 %int_1
+ %11 = OpLoad %int %arg_0
+ %12 = OpGroupNonUniformIMul %int %uint_3 ExclusiveScan %11
+ OpStore %res %12
+ %16 = OpLoad %int %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %int %subgroupExclusiveMul_a23002
+ %22 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/a23002.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupExclusiveMul/a23002.wgsl.expected.msl
new file mode 100644
index 0000000..f426a9f
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/a23002.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupExclusiveMul_a23002() -> i32 {
+ var arg_0 = 1i;
+ var res : i32 = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_a23002();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/a23002.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveMul/a23002.wgsl.expected.spvasm
new file mode 100644
index 0000000..5406dca
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/a23002.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupExclusiveMul_a23002() -> i32 {
+ var arg_0 = 1i;
+ var res : i32 = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_a23002();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/a23002.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/a23002.wgsl.expected.wgsl
new file mode 100644
index 0000000..3fe8ce7
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/a23002.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupExclusiveMul_a23002() -> i32 {
+ var arg_0 = 1i;
+ var res : i32 = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_a23002();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/d1d490.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/d1d490.wgsl
new file mode 100644
index 0000000..a715ab2
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/d1d490.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+
+// fn subgroupExclusiveMul(value: vec<2, u32>) -> vec<2, u32>
+fn subgroupExclusiveMul_d1d490() -> vec2<u32>{
+ var arg_0 = vec2<u32>(1u);
+ var res: vec2<u32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_d1d490();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/d1d490.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/d1d490.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..09b7cad
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/d1d490.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupExclusiveMul_d1d490() -> vec2<u32> {
+ var arg_0 = vec2<u32>(1u);
+ var res : vec2<u32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_d1d490();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/d1d490.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/d1d490.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..09b7cad
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/d1d490.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupExclusiveMul_d1d490() -> vec2<u32> {
+ var arg_0 = vec2<u32>(1u);
+ var res : vec2<u32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_d1d490();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/d1d490.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/d1d490.wgsl.expected.glsl
new file mode 100644
index 0000000..498c555
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/d1d490.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupExclusiveMul_d1d490() -> vec2<u32> {
+ var arg_0 = vec2<u32>(1u);
+ var res : vec2<u32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_d1d490();
+}
+
+Failed to generate: error: Unknown builtin method: 0x560cebc18498
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/d1d490.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveMul/d1d490.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..cb16d42
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/d1d490.wgsl.expected.ir.spvasm
@@ -0,0 +1,52 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 26
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveMul_d1d490 "subgroupExclusiveMul_d1d490"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %uint = OpTypeInt 32 0
+ %v2uint = OpTypeVector %uint 2
+%tint_symbol_1 = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v2uint
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+ %uint_1 = OpConstant %uint 1
+ %11 = OpConstantComposite %v2uint %uint_1 %uint_1
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %20 = OpTypeFunction %void
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveMul_d1d490 = OpFunction %v2uint None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v2uint Function
+ %res = OpVariable %_ptr_Function_v2uint Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v2uint %arg_0
+ %14 = OpGroupNonUniformIMul %v2uint %uint_3 ExclusiveScan %13
+ OpStore %res %14
+ %17 = OpLoad %v2uint %res
+ OpReturnValue %17
+ OpFunctionEnd
+%compute_main = OpFunction %void None %20
+ %21 = OpLabel
+ %22 = OpFunctionCall %v2uint %subgroupExclusiveMul_d1d490
+ %23 = OpAccessChain %_ptr_StorageBuffer_v2uint %1 %uint_0
+ OpStore %23 %22
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/d1d490.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupExclusiveMul/d1d490.wgsl.expected.msl
new file mode 100644
index 0000000..6910712
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/d1d490.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupExclusiveMul_d1d490() -> vec2<u32> {
+ var arg_0 = vec2<u32>(1u);
+ var res : vec2<u32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_d1d490();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/d1d490.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveMul/d1d490.wgsl.expected.spvasm
new file mode 100644
index 0000000..d028baa
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/d1d490.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupExclusiveMul_d1d490() -> vec2<u32> {
+ var arg_0 = vec2<u32>(1u);
+ var res : vec2<u32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_d1d490();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/d1d490.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/d1d490.wgsl.expected.wgsl
new file mode 100644
index 0000000..deae988
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/d1d490.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupExclusiveMul_d1d490() -> vec2<u32> {
+ var arg_0 = vec2<u32>(1u);
+ var res : vec2<u32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_d1d490();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/dc51f8.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/dc51f8.wgsl
new file mode 100644
index 0000000..2a9c561
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/dc51f8.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+
+// fn subgroupExclusiveMul(value: u32) -> u32
+fn subgroupExclusiveMul_dc51f8() -> u32{
+ var arg_0 = 1u;
+ var res: u32 = subgroupExclusiveMul(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_dc51f8();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/dc51f8.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/dc51f8.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..943b22d
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/dc51f8.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupExclusiveMul_dc51f8() -> u32 {
+ var arg_0 = 1u;
+ var res : u32 = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_dc51f8();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/dc51f8.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/dc51f8.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..943b22d
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/dc51f8.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupExclusiveMul_dc51f8() -> u32 {
+ var arg_0 = 1u;
+ var res : u32 = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_dc51f8();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/dc51f8.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/dc51f8.wgsl.expected.glsl
new file mode 100644
index 0000000..95e8d56
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/dc51f8.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupExclusiveMul_dc51f8() -> u32 {
+ var arg_0 = 1u;
+ var res : u32 = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_dc51f8();
+}
+
+Failed to generate: error: Unknown builtin method: 0x555e0184a1c0
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/dc51f8.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveMul/dc51f8.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..4371ff8
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/dc51f8.wgsl.expected.ir.spvasm
@@ -0,0 +1,50 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 24
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveMul_dc51f8 "subgroupExclusiveMul_dc51f8"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %uint = OpTypeInt 32 0
+%tint_symbol_1 = OpTypeStruct %uint
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %6 = OpTypeFunction %uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+ %uint_1 = OpConstant %uint 1
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %18 = OpTypeFunction %void
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveMul_dc51f8 = OpFunction %uint None %6
+ %7 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_uint Function
+ %res = OpVariable %_ptr_Function_uint Function
+ OpStore %arg_0 %uint_1
+ %11 = OpLoad %uint %arg_0
+ %12 = OpGroupNonUniformIMul %uint %uint_3 ExclusiveScan %11
+ OpStore %res %12
+ %15 = OpLoad %uint %res
+ OpReturnValue %15
+ OpFunctionEnd
+%compute_main = OpFunction %void None %18
+ %19 = OpLabel
+ %20 = OpFunctionCall %uint %subgroupExclusiveMul_dc51f8
+ %21 = OpAccessChain %_ptr_StorageBuffer_uint %1 %uint_0
+ OpStore %21 %20
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/dc51f8.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupExclusiveMul/dc51f8.wgsl.expected.msl
new file mode 100644
index 0000000..2b41b7d
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/dc51f8.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupExclusiveMul_dc51f8() -> u32 {
+ var arg_0 = 1u;
+ var res : u32 = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_dc51f8();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/dc51f8.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveMul/dc51f8.wgsl.expected.spvasm
new file mode 100644
index 0000000..37bb095
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/dc51f8.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupExclusiveMul_dc51f8() -> u32 {
+ var arg_0 = 1u;
+ var res : u32 = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_dc51f8();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/dc51f8.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/dc51f8.wgsl.expected.wgsl
new file mode 100644
index 0000000..9b1e24b
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/dc51f8.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupExclusiveMul_dc51f8() -> u32 {
+ var arg_0 = 1u;
+ var res : u32 = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_dc51f8();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/e88d1c.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/e88d1c.wgsl
new file mode 100644
index 0000000..b7eef93
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/e88d1c.wgsl
@@ -0,0 +1,58 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// flags: --hlsl_shader_model 62
+
+
+enable subgroups;
+enable subgroups_f16;
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+
+// fn subgroupExclusiveMul(value: vec<2, f16>) -> vec<2, f16>
+fn subgroupExclusiveMul_e88d1c() -> vec2<f16>{
+ var arg_0 = vec2<f16>(1.h);
+ var res: vec2<f16> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_e88d1c();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/e88d1c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/e88d1c.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..5af7543
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/e88d1c.wgsl.expected.dxc.hlsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupExclusiveMul_e88d1c() -> vec2<f16> {
+ var arg_0 = vec2<f16>(1.0h);
+ var res : vec2<f16> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_e88d1c();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/e88d1c.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/e88d1c.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..5af7543
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/e88d1c.wgsl.expected.fxc.hlsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupExclusiveMul_e88d1c() -> vec2<f16> {
+ var arg_0 = vec2<f16>(1.0h);
+ var res : vec2<f16> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_e88d1c();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/e88d1c.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/e88d1c.wgsl.expected.glsl
new file mode 100644
index 0000000..365ebd7
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/e88d1c.wgsl.expected.glsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupExclusiveMul_e88d1c() -> vec2<f16> {
+ var arg_0 = vec2<f16>(1.0h);
+ var res : vec2<f16> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_e88d1c();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55b7c2e97498
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/e88d1c.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveMul/e88d1c.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..60ddc02
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/e88d1c.wgsl.expected.ir.spvasm
@@ -0,0 +1,56 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability Float16
+ OpCapability UniformAndStorageBuffer16BitAccess
+ OpCapability StorageBuffer16BitAccess
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveMul_e88d1c "subgroupExclusiveMul_e88d1c"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %half = OpTypeFloat 16
+ %v2half = OpTypeVector %half 2
+%tint_symbol_1 = OpTypeStruct %v2half
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v2half
+%_ptr_Function_v2half = OpTypePointer Function %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+ %11 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v2half = OpTypePointer StorageBuffer %v2half
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveMul_e88d1c = OpFunction %v2half None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v2half Function
+ %res = OpVariable %_ptr_Function_v2half Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v2half %arg_0
+ %14 = OpGroupNonUniformFMul %v2half %uint_3 ExclusiveScan %13
+ OpStore %res %14
+ %18 = OpLoad %v2half %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v2half %subgroupExclusiveMul_e88d1c
+ %24 = OpAccessChain %_ptr_StorageBuffer_v2half %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/e88d1c.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupExclusiveMul/e88d1c.wgsl.expected.msl
new file mode 100644
index 0000000..3e97a2f
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/e88d1c.wgsl.expected.msl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupExclusiveMul_e88d1c() -> vec2<f16> {
+ var arg_0 = vec2<f16>(1.0h);
+ var res : vec2<f16> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_e88d1c();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/e88d1c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveMul/e88d1c.wgsl.expected.spvasm
new file mode 100644
index 0000000..878c15f
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/e88d1c.wgsl.expected.spvasm
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupExclusiveMul_e88d1c() -> vec2<f16> {
+ var arg_0 = vec2<f16>(1.0h);
+ var res : vec2<f16> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_e88d1c();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/e88d1c.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/e88d1c.wgsl.expected.wgsl
new file mode 100644
index 0000000..6854af4
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/e88d1c.wgsl.expected.wgsl
@@ -0,0 +1,16 @@
+enable subgroups;
+enable subgroups_f16;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupExclusiveMul_e88d1c() -> vec2<f16> {
+ var arg_0 = vec2<f16>(1.0h);
+ var res : vec2<f16> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_e88d1c();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/f039f4.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/f039f4.wgsl
new file mode 100644
index 0000000..c3f8f80
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/f039f4.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+
+// fn subgroupExclusiveMul(value: vec<3, u32>) -> vec<3, u32>
+fn subgroupExclusiveMul_f039f4() -> vec3<u32>{
+ var arg_0 = vec3<u32>(1u);
+ var res: vec3<u32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_f039f4();
+}
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/f039f4.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/f039f4.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..356cf8c
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/f039f4.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupExclusiveMul_f039f4() -> vec3<u32> {
+ var arg_0 = vec3<u32>(1u);
+ var res : vec3<u32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_f039f4();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/f039f4.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/f039f4.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..356cf8c
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/f039f4.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupExclusiveMul_f039f4() -> vec3<u32> {
+ var arg_0 = vec3<u32>(1u);
+ var res : vec3<u32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_f039f4();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/f039f4.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/f039f4.wgsl.expected.glsl
new file mode 100644
index 0000000..21425e2
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/f039f4.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupExclusiveMul_f039f4() -> vec3<u32> {
+ var arg_0 = vec3<u32>(1u);
+ var res : vec3<u32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_f039f4();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55a89b4c4498
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/f039f4.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveMul/f039f4.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..870fbbc
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/f039f4.wgsl.expected.ir.spvasm
@@ -0,0 +1,52 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 26
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupExclusiveMul_f039f4 "subgroupExclusiveMul_f039f4"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %uint = OpTypeInt 32 0
+ %v3uint = OpTypeVector %uint 3
+%tint_symbol_1 = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v3uint
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+ %uint_1 = OpConstant %uint 1
+ %11 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %20 = OpTypeFunction %void
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+ %uint_0 = OpConstant %uint 0
+%subgroupExclusiveMul_f039f4 = OpFunction %v3uint None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v3uint Function
+ %res = OpVariable %_ptr_Function_v3uint Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v3uint %arg_0
+ %14 = OpGroupNonUniformIMul %v3uint %uint_3 ExclusiveScan %13
+ OpStore %res %14
+ %17 = OpLoad %v3uint %res
+ OpReturnValue %17
+ OpFunctionEnd
+%compute_main = OpFunction %void None %20
+ %21 = OpLabel
+ %22 = OpFunctionCall %v3uint %subgroupExclusiveMul_f039f4
+ %23 = OpAccessChain %_ptr_StorageBuffer_v3uint %1 %uint_0
+ OpStore %23 %22
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/f039f4.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupExclusiveMul/f039f4.wgsl.expected.msl
new file mode 100644
index 0000000..fff2956
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/f039f4.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupExclusiveMul_f039f4() -> vec3<u32> {
+ var arg_0 = vec3<u32>(1u);
+ var res : vec3<u32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_f039f4();
+}
+
+Failed to generate: error: Unknown import method: subgroupExclusiveMul
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/f039f4.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupExclusiveMul/f039f4.wgsl.expected.spvasm
new file mode 100644
index 0000000..fb69a0d
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/f039f4.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupExclusiveMul_f039f4() -> vec3<u32> {
+ var arg_0 = vec3<u32>(1u);
+ var res : vec3<u32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_f039f4();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupExclusiveMul/f039f4.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupExclusiveMul/f039f4.wgsl.expected.wgsl
new file mode 100644
index 0000000..0f8a49f
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupExclusiveMul/f039f4.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupExclusiveMul_f039f4() -> vec3<u32> {
+ var arg_0 = vec3<u32>(1u);
+ var res : vec3<u32> = subgroupExclusiveMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupExclusiveMul_f039f4();
+}
diff --git a/test/tint/builtins/gen/var/subgroupMul/0de9d3.wgsl b/test/tint/builtins/gen/var/subgroupMul/0de9d3.wgsl
new file mode 100644
index 0000000..116be2c
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/0de9d3.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+
+// fn subgroupMul(value: f32) -> f32
+fn subgroupMul_0de9d3() -> f32{
+ var arg_0 = 1.f;
+ var res: f32 = subgroupMul(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_0de9d3();
+}
diff --git a/test/tint/builtins/gen/var/subgroupMul/0de9d3.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMul/0de9d3.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..186db08
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/0de9d3.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupMul_0de9d3() -> f32 {
+ var arg_0 = 1.0f;
+ var res : f32 = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_0de9d3();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/0de9d3.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMul/0de9d3.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..186db08
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/0de9d3.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupMul_0de9d3() -> f32 {
+ var arg_0 = 1.0f;
+ var res : f32 = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_0de9d3();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/0de9d3.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMul/0de9d3.wgsl.expected.glsl
new file mode 100644
index 0000000..776a290
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/0de9d3.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupMul_0de9d3() -> f32 {
+ var arg_0 = 1.0f;
+ var res : f32 = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_0de9d3();
+}
+
+Failed to generate: error: Unknown builtin method: 0x5652d5c8e1c0
diff --git a/test/tint/builtins/gen/var/subgroupMul/0de9d3.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupMul/0de9d3.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..5b5dd5d
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/0de9d3.wgsl.expected.ir.spvasm
@@ -0,0 +1,51 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupMul_0de9d3 "subgroupMul_0de9d3"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %float = OpTypeFloat 32
+%tint_symbol_1 = OpTypeStruct %float
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %6 = OpTypeFunction %float
+%_ptr_Function_float = OpTypePointer Function %float
+ %float_1 = OpConstant %float 1
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
+ %uint_0 = OpConstant %uint 0
+%subgroupMul_0de9d3 = OpFunction %float None %6
+ %7 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_float Function
+ %res = OpVariable %_ptr_Function_float Function
+ OpStore %arg_0 %float_1
+ %11 = OpLoad %float %arg_0
+ %12 = OpGroupNonUniformFMul %float %uint_3 Reduce %11
+ OpStore %res %12
+ %16 = OpLoad %float %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %float %subgroupMul_0de9d3
+ %22 = OpAccessChain %_ptr_StorageBuffer_float %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMul/0de9d3.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMul/0de9d3.wgsl.expected.msl
new file mode 100644
index 0000000..9f88e9f
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/0de9d3.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupMul_0de9d3() -> f32 {
+ var arg_0 = 1.0f;
+ var res : f32 = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_0de9d3();
+}
+
+Failed to generate: error: Unknown import method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/0de9d3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMul/0de9d3.wgsl.expected.spvasm
new file mode 100644
index 0000000..f680508
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/0de9d3.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupMul_0de9d3() -> f32 {
+ var arg_0 = 1.0f;
+ var res : f32 = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_0de9d3();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupMul/0de9d3.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMul/0de9d3.wgsl.expected.wgsl
new file mode 100644
index 0000000..de750ce
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/0de9d3.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f32;
+
+fn subgroupMul_0de9d3() -> f32 {
+ var arg_0 = 1.0f;
+ var res : f32 = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_0de9d3();
+}
diff --git a/test/tint/builtins/gen/var/subgroupMul/2941a2.wgsl b/test/tint/builtins/gen/var/subgroupMul/2941a2.wgsl
new file mode 100644
index 0000000..c295e47
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/2941a2.wgsl
@@ -0,0 +1,58 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// flags: --hlsl_shader_model 62
+
+
+enable subgroups;
+enable subgroups_f16;
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+
+// fn subgroupMul(value: f16) -> f16
+fn subgroupMul_2941a2() -> f16{
+ var arg_0 = 1.h;
+ var res: f16 = subgroupMul(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_2941a2();
+}
diff --git a/test/tint/builtins/gen/var/subgroupMul/2941a2.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMul/2941a2.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..c2279ea
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/2941a2.wgsl.expected.dxc.hlsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupMul_2941a2() -> f16 {
+ var arg_0 = 1.0h;
+ var res : f16 = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_2941a2();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/2941a2.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMul/2941a2.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..c2279ea
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/2941a2.wgsl.expected.fxc.hlsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupMul_2941a2() -> f16 {
+ var arg_0 = 1.0h;
+ var res : f16 = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_2941a2();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/2941a2.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMul/2941a2.wgsl.expected.glsl
new file mode 100644
index 0000000..2cbfd33
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/2941a2.wgsl.expected.glsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupMul_2941a2() -> f16 {
+ var arg_0 = 1.0h;
+ var res : f16 = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_2941a2();
+}
+
+Failed to generate: error: Unknown builtin method: 0x5589c34621c0
diff --git a/test/tint/builtins/gen/var/subgroupMul/2941a2.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupMul/2941a2.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..1db82c2
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/2941a2.wgsl.expected.ir.spvasm
@@ -0,0 +1,54 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability Float16
+ OpCapability UniformAndStorageBuffer16BitAccess
+ OpCapability StorageBuffer16BitAccess
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupMul_2941a2 "subgroupMul_2941a2"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %half = OpTypeFloat 16
+%tint_symbol_1 = OpTypeStruct %half
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %6 = OpTypeFunction %half
+%_ptr_Function_half = OpTypePointer Function %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_half = OpTypePointer StorageBuffer %half
+ %uint_0 = OpConstant %uint 0
+%subgroupMul_2941a2 = OpFunction %half None %6
+ %7 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_half Function
+ %res = OpVariable %_ptr_Function_half Function
+ OpStore %arg_0 %half_0x1p_0
+ %11 = OpLoad %half %arg_0
+ %12 = OpGroupNonUniformFMul %half %uint_3 Reduce %11
+ OpStore %res %12
+ %16 = OpLoad %half %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %half %subgroupMul_2941a2
+ %22 = OpAccessChain %_ptr_StorageBuffer_half %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMul/2941a2.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMul/2941a2.wgsl.expected.msl
new file mode 100644
index 0000000..d552977
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/2941a2.wgsl.expected.msl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupMul_2941a2() -> f16 {
+ var arg_0 = 1.0h;
+ var res : f16 = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_2941a2();
+}
+
+Failed to generate: error: Unknown import method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/2941a2.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMul/2941a2.wgsl.expected.spvasm
new file mode 100644
index 0000000..6840707
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/2941a2.wgsl.expected.spvasm
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupMul_2941a2() -> f16 {
+ var arg_0 = 1.0h;
+ var res : f16 = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_2941a2();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupMul/2941a2.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMul/2941a2.wgsl.expected.wgsl
new file mode 100644
index 0000000..f37a7f7
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/2941a2.wgsl.expected.wgsl
@@ -0,0 +1,16 @@
+enable subgroups;
+enable subgroups_f16;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : f16;
+
+fn subgroupMul_2941a2() -> f16 {
+ var arg_0 = 1.0h;
+ var res : f16 = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_2941a2();
+}
diff --git a/test/tint/builtins/gen/var/subgroupMul/3fe886.wgsl b/test/tint/builtins/gen/var/subgroupMul/3fe886.wgsl
new file mode 100644
index 0000000..c2cebd3
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/3fe886.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+
+// fn subgroupMul(value: i32) -> i32
+fn subgroupMul_3fe886() -> i32{
+ var arg_0 = 1i;
+ var res: i32 = subgroupMul(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_3fe886();
+}
diff --git a/test/tint/builtins/gen/var/subgroupMul/3fe886.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMul/3fe886.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..85f489c
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/3fe886.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupMul_3fe886() -> i32 {
+ var arg_0 = 1i;
+ var res : i32 = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_3fe886();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/3fe886.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMul/3fe886.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..85f489c
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/3fe886.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupMul_3fe886() -> i32 {
+ var arg_0 = 1i;
+ var res : i32 = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_3fe886();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/3fe886.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMul/3fe886.wgsl.expected.glsl
new file mode 100644
index 0000000..3bffb0a
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/3fe886.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupMul_3fe886() -> i32 {
+ var arg_0 = 1i;
+ var res : i32 = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_3fe886();
+}
+
+Failed to generate: error: Unknown builtin method: 0x56028c5131c0
diff --git a/test/tint/builtins/gen/var/subgroupMul/3fe886.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupMul/3fe886.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..397ec3a
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/3fe886.wgsl.expected.ir.spvasm
@@ -0,0 +1,51 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 25
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupMul_3fe886 "subgroupMul_3fe886"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %int = OpTypeInt 32 1
+%tint_symbol_1 = OpTypeStruct %int
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %6 = OpTypeFunction %int
+%_ptr_Function_int = OpTypePointer Function %int
+ %int_1 = OpConstant %int 1
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %19 = OpTypeFunction %void
+%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
+ %uint_0 = OpConstant %uint 0
+%subgroupMul_3fe886 = OpFunction %int None %6
+ %7 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_int Function
+ %res = OpVariable %_ptr_Function_int Function
+ OpStore %arg_0 %int_1
+ %11 = OpLoad %int %arg_0
+ %12 = OpGroupNonUniformIMul %int %uint_3 Reduce %11
+ OpStore %res %12
+ %16 = OpLoad %int %res
+ OpReturnValue %16
+ OpFunctionEnd
+%compute_main = OpFunction %void None %19
+ %20 = OpLabel
+ %21 = OpFunctionCall %int %subgroupMul_3fe886
+ %22 = OpAccessChain %_ptr_StorageBuffer_int %1 %uint_0
+ OpStore %22 %21
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMul/3fe886.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMul/3fe886.wgsl.expected.msl
new file mode 100644
index 0000000..65b222f
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/3fe886.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupMul_3fe886() -> i32 {
+ var arg_0 = 1i;
+ var res : i32 = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_3fe886();
+}
+
+Failed to generate: error: Unknown import method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/3fe886.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMul/3fe886.wgsl.expected.spvasm
new file mode 100644
index 0000000..489a9a3
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/3fe886.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupMul_3fe886() -> i32 {
+ var arg_0 = 1i;
+ var res : i32 = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_3fe886();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupMul/3fe886.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMul/3fe886.wgsl.expected.wgsl
new file mode 100644
index 0000000..c06f0b8
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/3fe886.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : i32;
+
+fn subgroupMul_3fe886() -> i32 {
+ var arg_0 = 1i;
+ var res : i32 = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_3fe886();
+}
diff --git a/test/tint/builtins/gen/var/subgroupMul/4f8ee6.wgsl b/test/tint/builtins/gen/var/subgroupMul/4f8ee6.wgsl
new file mode 100644
index 0000000..8e682e9
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/4f8ee6.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+
+// fn subgroupMul(value: u32) -> u32
+fn subgroupMul_4f8ee6() -> u32{
+ var arg_0 = 1u;
+ var res: u32 = subgroupMul(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_4f8ee6();
+}
diff --git a/test/tint/builtins/gen/var/subgroupMul/4f8ee6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMul/4f8ee6.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..1e59b2d
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/4f8ee6.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupMul_4f8ee6() -> u32 {
+ var arg_0 = 1u;
+ var res : u32 = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_4f8ee6();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/4f8ee6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMul/4f8ee6.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..1e59b2d
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/4f8ee6.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupMul_4f8ee6() -> u32 {
+ var arg_0 = 1u;
+ var res : u32 = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_4f8ee6();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/4f8ee6.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMul/4f8ee6.wgsl.expected.glsl
new file mode 100644
index 0000000..1355671
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/4f8ee6.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupMul_4f8ee6() -> u32 {
+ var arg_0 = 1u;
+ var res : u32 = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_4f8ee6();
+}
+
+Failed to generate: error: Unknown builtin method: 0x563a0811d1c0
diff --git a/test/tint/builtins/gen/var/subgroupMul/4f8ee6.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupMul/4f8ee6.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..5708853
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/4f8ee6.wgsl.expected.ir.spvasm
@@ -0,0 +1,50 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 24
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupMul_4f8ee6 "subgroupMul_4f8ee6"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %uint = OpTypeInt 32 0
+%tint_symbol_1 = OpTypeStruct %uint
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %6 = OpTypeFunction %uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+ %uint_1 = OpConstant %uint 1
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %18 = OpTypeFunction %void
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+ %uint_0 = OpConstant %uint 0
+%subgroupMul_4f8ee6 = OpFunction %uint None %6
+ %7 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_uint Function
+ %res = OpVariable %_ptr_Function_uint Function
+ OpStore %arg_0 %uint_1
+ %11 = OpLoad %uint %arg_0
+ %12 = OpGroupNonUniformIMul %uint %uint_3 Reduce %11
+ OpStore %res %12
+ %15 = OpLoad %uint %res
+ OpReturnValue %15
+ OpFunctionEnd
+%compute_main = OpFunction %void None %18
+ %19 = OpLabel
+ %20 = OpFunctionCall %uint %subgroupMul_4f8ee6
+ %21 = OpAccessChain %_ptr_StorageBuffer_uint %1 %uint_0
+ OpStore %21 %20
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMul/4f8ee6.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMul/4f8ee6.wgsl.expected.msl
new file mode 100644
index 0000000..b5fbc62
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/4f8ee6.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupMul_4f8ee6() -> u32 {
+ var arg_0 = 1u;
+ var res : u32 = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_4f8ee6();
+}
+
+Failed to generate: error: Unknown import method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/4f8ee6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMul/4f8ee6.wgsl.expected.spvasm
new file mode 100644
index 0000000..5310a1f
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/4f8ee6.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupMul_4f8ee6() -> u32 {
+ var arg_0 = 1u;
+ var res : u32 = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_4f8ee6();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupMul/4f8ee6.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMul/4f8ee6.wgsl.expected.wgsl
new file mode 100644
index 0000000..0ec9f44
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/4f8ee6.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
+
+fn subgroupMul_4f8ee6() -> u32 {
+ var arg_0 = 1u;
+ var res : u32 = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_4f8ee6();
+}
diff --git a/test/tint/builtins/gen/var/subgroupMul/53aee2.wgsl b/test/tint/builtins/gen/var/subgroupMul/53aee2.wgsl
new file mode 100644
index 0000000..e21be2a
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/53aee2.wgsl
@@ -0,0 +1,58 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// flags: --hlsl_shader_model 62
+
+
+enable subgroups;
+enable subgroups_f16;
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+
+// fn subgroupMul(value: vec<3, f16>) -> vec<3, f16>
+fn subgroupMul_53aee2() -> vec3<f16>{
+ var arg_0 = vec3<f16>(1.h);
+ var res: vec3<f16> = subgroupMul(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_53aee2();
+}
diff --git a/test/tint/builtins/gen/var/subgroupMul/53aee2.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMul/53aee2.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..966c32c
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/53aee2.wgsl.expected.dxc.hlsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupMul_53aee2() -> vec3<f16> {
+ var arg_0 = vec3<f16>(1.0h);
+ var res : vec3<f16> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_53aee2();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/53aee2.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMul/53aee2.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..966c32c
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/53aee2.wgsl.expected.fxc.hlsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupMul_53aee2() -> vec3<f16> {
+ var arg_0 = vec3<f16>(1.0h);
+ var res : vec3<f16> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_53aee2();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/53aee2.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMul/53aee2.wgsl.expected.glsl
new file mode 100644
index 0000000..b66f499
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/53aee2.wgsl.expected.glsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupMul_53aee2() -> vec3<f16> {
+ var arg_0 = vec3<f16>(1.0h);
+ var res : vec3<f16> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_53aee2();
+}
+
+Failed to generate: error: Unknown builtin method: 0x555836574498
diff --git a/test/tint/builtins/gen/var/subgroupMul/53aee2.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupMul/53aee2.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..6d15028
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/53aee2.wgsl.expected.ir.spvasm
@@ -0,0 +1,56 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability Float16
+ OpCapability UniformAndStorageBuffer16BitAccess
+ OpCapability StorageBuffer16BitAccess
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupMul_53aee2 "subgroupMul_53aee2"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %half = OpTypeFloat 16
+ %v3half = OpTypeVector %half 3
+%tint_symbol_1 = OpTypeStruct %v3half
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v3half
+%_ptr_Function_v3half = OpTypePointer Function %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+ %11 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v3half = OpTypePointer StorageBuffer %v3half
+ %uint_0 = OpConstant %uint 0
+%subgroupMul_53aee2 = OpFunction %v3half None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v3half Function
+ %res = OpVariable %_ptr_Function_v3half Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v3half %arg_0
+ %14 = OpGroupNonUniformFMul %v3half %uint_3 Reduce %13
+ OpStore %res %14
+ %18 = OpLoad %v3half %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v3half %subgroupMul_53aee2
+ %24 = OpAccessChain %_ptr_StorageBuffer_v3half %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMul/53aee2.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMul/53aee2.wgsl.expected.msl
new file mode 100644
index 0000000..e557cd2
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/53aee2.wgsl.expected.msl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupMul_53aee2() -> vec3<f16> {
+ var arg_0 = vec3<f16>(1.0h);
+ var res : vec3<f16> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_53aee2();
+}
+
+Failed to generate: error: Unknown import method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/53aee2.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMul/53aee2.wgsl.expected.spvasm
new file mode 100644
index 0000000..15846deb
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/53aee2.wgsl.expected.spvasm
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupMul_53aee2() -> vec3<f16> {
+ var arg_0 = vec3<f16>(1.0h);
+ var res : vec3<f16> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_53aee2();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupMul/53aee2.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMul/53aee2.wgsl.expected.wgsl
new file mode 100644
index 0000000..3a3b549
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/53aee2.wgsl.expected.wgsl
@@ -0,0 +1,16 @@
+enable subgroups;
+enable subgroups_f16;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f16>;
+
+fn subgroupMul_53aee2() -> vec3<f16> {
+ var arg_0 = vec3<f16>(1.0h);
+ var res : vec3<f16> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_53aee2();
+}
diff --git a/test/tint/builtins/gen/var/subgroupMul/5a8c86.wgsl b/test/tint/builtins/gen/var/subgroupMul/5a8c86.wgsl
new file mode 100644
index 0000000..1f9dece
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/5a8c86.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+
+// fn subgroupMul(value: vec<3, i32>) -> vec<3, i32>
+fn subgroupMul_5a8c86() -> vec3<i32>{
+ var arg_0 = vec3<i32>(1i);
+ var res: vec3<i32> = subgroupMul(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_5a8c86();
+}
diff --git a/test/tint/builtins/gen/var/subgroupMul/5a8c86.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMul/5a8c86.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..004d4a7
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/5a8c86.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupMul_5a8c86() -> vec3<i32> {
+ var arg_0 = vec3<i32>(1i);
+ var res : vec3<i32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_5a8c86();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/5a8c86.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMul/5a8c86.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..004d4a7
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/5a8c86.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupMul_5a8c86() -> vec3<i32> {
+ var arg_0 = vec3<i32>(1i);
+ var res : vec3<i32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_5a8c86();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/5a8c86.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMul/5a8c86.wgsl.expected.glsl
new file mode 100644
index 0000000..3122f6b
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/5a8c86.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupMul_5a8c86() -> vec3<i32> {
+ var arg_0 = vec3<i32>(1i);
+ var res : vec3<i32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_5a8c86();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55ece80b8498
diff --git a/test/tint/builtins/gen/var/subgroupMul/5a8c86.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupMul/5a8c86.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..eb63ab5
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/5a8c86.wgsl.expected.ir.spvasm
@@ -0,0 +1,53 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupMul_5a8c86 "subgroupMul_5a8c86"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %int = OpTypeInt 32 1
+ %v3int = OpTypeVector %int 3
+%tint_symbol_1 = OpTypeStruct %v3int
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v3int
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+ %int_1 = OpConstant %int 1
+ %11 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v3int = OpTypePointer StorageBuffer %v3int
+ %uint_0 = OpConstant %uint 0
+%subgroupMul_5a8c86 = OpFunction %v3int None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v3int Function
+ %res = OpVariable %_ptr_Function_v3int Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v3int %arg_0
+ %14 = OpGroupNonUniformIMul %v3int %uint_3 Reduce %13
+ OpStore %res %14
+ %18 = OpLoad %v3int %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v3int %subgroupMul_5a8c86
+ %24 = OpAccessChain %_ptr_StorageBuffer_v3int %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMul/5a8c86.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMul/5a8c86.wgsl.expected.msl
new file mode 100644
index 0000000..bbbeffa
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/5a8c86.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupMul_5a8c86() -> vec3<i32> {
+ var arg_0 = vec3<i32>(1i);
+ var res : vec3<i32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_5a8c86();
+}
+
+Failed to generate: error: Unknown import method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/5a8c86.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMul/5a8c86.wgsl.expected.spvasm
new file mode 100644
index 0000000..248cde4
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/5a8c86.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupMul_5a8c86() -> vec3<i32> {
+ var arg_0 = vec3<i32>(1i);
+ var res : vec3<i32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_5a8c86();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupMul/5a8c86.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMul/5a8c86.wgsl.expected.wgsl
new file mode 100644
index 0000000..1ac3e08
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/5a8c86.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<i32>;
+
+fn subgroupMul_5a8c86() -> vec3<i32> {
+ var arg_0 = vec3<i32>(1i);
+ var res : vec3<i32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_5a8c86();
+}
diff --git a/test/tint/builtins/gen/var/subgroupMul/66c813.wgsl b/test/tint/builtins/gen/var/subgroupMul/66c813.wgsl
new file mode 100644
index 0000000..0ddf3cc
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/66c813.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+
+// fn subgroupMul(value: vec<4, f32>) -> vec<4, f32>
+fn subgroupMul_66c813() -> vec4<f32>{
+ var arg_0 = vec4<f32>(1.f);
+ var res: vec4<f32> = subgroupMul(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_66c813();
+}
diff --git a/test/tint/builtins/gen/var/subgroupMul/66c813.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMul/66c813.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..6eb5b59
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/66c813.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupMul_66c813() -> vec4<f32> {
+ var arg_0 = vec4<f32>(1.0f);
+ var res : vec4<f32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_66c813();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/66c813.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMul/66c813.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..6eb5b59
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/66c813.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupMul_66c813() -> vec4<f32> {
+ var arg_0 = vec4<f32>(1.0f);
+ var res : vec4<f32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_66c813();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/66c813.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMul/66c813.wgsl.expected.glsl
new file mode 100644
index 0000000..0d19e59
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/66c813.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupMul_66c813() -> vec4<f32> {
+ var arg_0 = vec4<f32>(1.0f);
+ var res : vec4<f32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_66c813();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55c0b5031498
diff --git a/test/tint/builtins/gen/var/subgroupMul/66c813.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupMul/66c813.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..1efcf37
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/66c813.wgsl.expected.ir.spvasm
@@ -0,0 +1,53 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupMul_66c813 "subgroupMul_66c813"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %float = OpTypeFloat 32
+ %v4float = OpTypeVector %float 4
+%tint_symbol_1 = OpTypeStruct %v4float
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v4float
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %float_1 = OpConstant %float 1
+ %11 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+ %uint_0 = OpConstant %uint 0
+%subgroupMul_66c813 = OpFunction %v4float None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v4float Function
+ %res = OpVariable %_ptr_Function_v4float Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v4float %arg_0
+ %14 = OpGroupNonUniformFMul %v4float %uint_3 Reduce %13
+ OpStore %res %14
+ %18 = OpLoad %v4float %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v4float %subgroupMul_66c813
+ %24 = OpAccessChain %_ptr_StorageBuffer_v4float %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMul/66c813.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMul/66c813.wgsl.expected.msl
new file mode 100644
index 0000000..a8affac
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/66c813.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupMul_66c813() -> vec4<f32> {
+ var arg_0 = vec4<f32>(1.0f);
+ var res : vec4<f32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_66c813();
+}
+
+Failed to generate: error: Unknown import method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/66c813.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMul/66c813.wgsl.expected.spvasm
new file mode 100644
index 0000000..24e75ba
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/66c813.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupMul_66c813() -> vec4<f32> {
+ var arg_0 = vec4<f32>(1.0f);
+ var res : vec4<f32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_66c813();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupMul/66c813.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMul/66c813.wgsl.expected.wgsl
new file mode 100644
index 0000000..c0131ca
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/66c813.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
+
+fn subgroupMul_66c813() -> vec4<f32> {
+ var arg_0 = vec4<f32>(1.0f);
+ var res : vec4<f32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_66c813();
+}
diff --git a/test/tint/builtins/gen/var/subgroupMul/6aaaf3.wgsl b/test/tint/builtins/gen/var/subgroupMul/6aaaf3.wgsl
new file mode 100644
index 0000000..dabbad9
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/6aaaf3.wgsl
@@ -0,0 +1,58 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// flags: --hlsl_shader_model 62
+
+
+enable subgroups;
+enable subgroups_f16;
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+
+// fn subgroupMul(value: vec<2, f16>) -> vec<2, f16>
+fn subgroupMul_6aaaf3() -> vec2<f16>{
+ var arg_0 = vec2<f16>(1.h);
+ var res: vec2<f16> = subgroupMul(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_6aaaf3();
+}
diff --git a/test/tint/builtins/gen/var/subgroupMul/6aaaf3.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMul/6aaaf3.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..14c275e
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/6aaaf3.wgsl.expected.dxc.hlsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupMul_6aaaf3() -> vec2<f16> {
+ var arg_0 = vec2<f16>(1.0h);
+ var res : vec2<f16> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_6aaaf3();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/6aaaf3.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMul/6aaaf3.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..14c275e
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/6aaaf3.wgsl.expected.fxc.hlsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupMul_6aaaf3() -> vec2<f16> {
+ var arg_0 = vec2<f16>(1.0h);
+ var res : vec2<f16> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_6aaaf3();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/6aaaf3.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMul/6aaaf3.wgsl.expected.glsl
new file mode 100644
index 0000000..90909c6
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/6aaaf3.wgsl.expected.glsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupMul_6aaaf3() -> vec2<f16> {
+ var arg_0 = vec2<f16>(1.0h);
+ var res : vec2<f16> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_6aaaf3();
+}
+
+Failed to generate: error: Unknown builtin method: 0x561f79118498
diff --git a/test/tint/builtins/gen/var/subgroupMul/6aaaf3.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupMul/6aaaf3.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..2ed763a
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/6aaaf3.wgsl.expected.ir.spvasm
@@ -0,0 +1,56 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability Float16
+ OpCapability UniformAndStorageBuffer16BitAccess
+ OpCapability StorageBuffer16BitAccess
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupMul_6aaaf3 "subgroupMul_6aaaf3"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %half = OpTypeFloat 16
+ %v2half = OpTypeVector %half 2
+%tint_symbol_1 = OpTypeStruct %v2half
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v2half
+%_ptr_Function_v2half = OpTypePointer Function %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+ %11 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v2half = OpTypePointer StorageBuffer %v2half
+ %uint_0 = OpConstant %uint 0
+%subgroupMul_6aaaf3 = OpFunction %v2half None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v2half Function
+ %res = OpVariable %_ptr_Function_v2half Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v2half %arg_0
+ %14 = OpGroupNonUniformFMul %v2half %uint_3 Reduce %13
+ OpStore %res %14
+ %18 = OpLoad %v2half %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v2half %subgroupMul_6aaaf3
+ %24 = OpAccessChain %_ptr_StorageBuffer_v2half %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMul/6aaaf3.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMul/6aaaf3.wgsl.expected.msl
new file mode 100644
index 0000000..29fa3bd
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/6aaaf3.wgsl.expected.msl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupMul_6aaaf3() -> vec2<f16> {
+ var arg_0 = vec2<f16>(1.0h);
+ var res : vec2<f16> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_6aaaf3();
+}
+
+Failed to generate: error: Unknown import method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/6aaaf3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMul/6aaaf3.wgsl.expected.spvasm
new file mode 100644
index 0000000..e075ecf
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/6aaaf3.wgsl.expected.spvasm
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupMul_6aaaf3() -> vec2<f16> {
+ var arg_0 = vec2<f16>(1.0h);
+ var res : vec2<f16> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_6aaaf3();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupMul/6aaaf3.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMul/6aaaf3.wgsl.expected.wgsl
new file mode 100644
index 0000000..ff04f0e
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/6aaaf3.wgsl.expected.wgsl
@@ -0,0 +1,16 @@
+enable subgroups;
+enable subgroups_f16;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f16>;
+
+fn subgroupMul_6aaaf3() -> vec2<f16> {
+ var arg_0 = vec2<f16>(1.0h);
+ var res : vec2<f16> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_6aaaf3();
+}
diff --git a/test/tint/builtins/gen/var/subgroupMul/93eccd.wgsl b/test/tint/builtins/gen/var/subgroupMul/93eccd.wgsl
new file mode 100644
index 0000000..7bf11a4
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/93eccd.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+
+// fn subgroupMul(value: vec<3, f32>) -> vec<3, f32>
+fn subgroupMul_93eccd() -> vec3<f32>{
+ var arg_0 = vec3<f32>(1.f);
+ var res: vec3<f32> = subgroupMul(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_93eccd();
+}
diff --git a/test/tint/builtins/gen/var/subgroupMul/93eccd.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMul/93eccd.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..060f40f
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/93eccd.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupMul_93eccd() -> vec3<f32> {
+ var arg_0 = vec3<f32>(1.0f);
+ var res : vec3<f32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_93eccd();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/93eccd.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMul/93eccd.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..060f40f
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/93eccd.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupMul_93eccd() -> vec3<f32> {
+ var arg_0 = vec3<f32>(1.0f);
+ var res : vec3<f32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_93eccd();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/93eccd.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMul/93eccd.wgsl.expected.glsl
new file mode 100644
index 0000000..20fec53
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/93eccd.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupMul_93eccd() -> vec3<f32> {
+ var arg_0 = vec3<f32>(1.0f);
+ var res : vec3<f32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_93eccd();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55fc01367498
diff --git a/test/tint/builtins/gen/var/subgroupMul/93eccd.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupMul/93eccd.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..376c3ba
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/93eccd.wgsl.expected.ir.spvasm
@@ -0,0 +1,53 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupMul_93eccd "subgroupMul_93eccd"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %float = OpTypeFloat 32
+ %v3float = OpTypeVector %float 3
+%tint_symbol_1 = OpTypeStruct %v3float
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v3float
+%_ptr_Function_v3float = OpTypePointer Function %v3float
+ %float_1 = OpConstant %float 1
+ %11 = OpConstantComposite %v3float %float_1 %float_1 %float_1
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v3float = OpTypePointer StorageBuffer %v3float
+ %uint_0 = OpConstant %uint 0
+%subgroupMul_93eccd = OpFunction %v3float None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v3float Function
+ %res = OpVariable %_ptr_Function_v3float Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v3float %arg_0
+ %14 = OpGroupNonUniformFMul %v3float %uint_3 Reduce %13
+ OpStore %res %14
+ %18 = OpLoad %v3float %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v3float %subgroupMul_93eccd
+ %24 = OpAccessChain %_ptr_StorageBuffer_v3float %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMul/93eccd.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMul/93eccd.wgsl.expected.msl
new file mode 100644
index 0000000..3d6217f
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/93eccd.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupMul_93eccd() -> vec3<f32> {
+ var arg_0 = vec3<f32>(1.0f);
+ var res : vec3<f32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_93eccd();
+}
+
+Failed to generate: error: Unknown import method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/93eccd.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMul/93eccd.wgsl.expected.spvasm
new file mode 100644
index 0000000..c68ce95
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/93eccd.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupMul_93eccd() -> vec3<f32> {
+ var arg_0 = vec3<f32>(1.0f);
+ var res : vec3<f32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_93eccd();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupMul/93eccd.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMul/93eccd.wgsl.expected.wgsl
new file mode 100644
index 0000000..f6c42d8
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/93eccd.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<f32>;
+
+fn subgroupMul_93eccd() -> vec3<f32> {
+ var arg_0 = vec3<f32>(1.0f);
+ var res : vec3<f32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_93eccd();
+}
diff --git a/test/tint/builtins/gen/var/subgroupMul/d584a2.wgsl b/test/tint/builtins/gen/var/subgroupMul/d584a2.wgsl
new file mode 100644
index 0000000..caa487a
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/d584a2.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+
+// fn subgroupMul(value: vec<2, i32>) -> vec<2, i32>
+fn subgroupMul_d584a2() -> vec2<i32>{
+ var arg_0 = vec2<i32>(1i);
+ var res: vec2<i32> = subgroupMul(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_d584a2();
+}
diff --git a/test/tint/builtins/gen/var/subgroupMul/d584a2.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMul/d584a2.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..1043c32
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/d584a2.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupMul_d584a2() -> vec2<i32> {
+ var arg_0 = vec2<i32>(1i);
+ var res : vec2<i32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_d584a2();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/d584a2.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMul/d584a2.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..1043c32
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/d584a2.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupMul_d584a2() -> vec2<i32> {
+ var arg_0 = vec2<i32>(1i);
+ var res : vec2<i32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_d584a2();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/d584a2.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMul/d584a2.wgsl.expected.glsl
new file mode 100644
index 0000000..d659d82
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/d584a2.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupMul_d584a2() -> vec2<i32> {
+ var arg_0 = vec2<i32>(1i);
+ var res : vec2<i32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_d584a2();
+}
+
+Failed to generate: error: Unknown builtin method: 0x563ccb18e498
diff --git a/test/tint/builtins/gen/var/subgroupMul/d584a2.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupMul/d584a2.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..ee512ad
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/d584a2.wgsl.expected.ir.spvasm
@@ -0,0 +1,53 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupMul_d584a2 "subgroupMul_d584a2"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %int = OpTypeInt 32 1
+ %v2int = OpTypeVector %int 2
+%tint_symbol_1 = OpTypeStruct %v2int
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v2int
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+ %int_1 = OpConstant %int 1
+ %11 = OpConstantComposite %v2int %int_1 %int_1
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v2int = OpTypePointer StorageBuffer %v2int
+ %uint_0 = OpConstant %uint 0
+%subgroupMul_d584a2 = OpFunction %v2int None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v2int Function
+ %res = OpVariable %_ptr_Function_v2int Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v2int %arg_0
+ %14 = OpGroupNonUniformIMul %v2int %uint_3 Reduce %13
+ OpStore %res %14
+ %18 = OpLoad %v2int %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v2int %subgroupMul_d584a2
+ %24 = OpAccessChain %_ptr_StorageBuffer_v2int %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMul/d584a2.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMul/d584a2.wgsl.expected.msl
new file mode 100644
index 0000000..dcc93b4
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/d584a2.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupMul_d584a2() -> vec2<i32> {
+ var arg_0 = vec2<i32>(1i);
+ var res : vec2<i32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_d584a2();
+}
+
+Failed to generate: error: Unknown import method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/d584a2.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMul/d584a2.wgsl.expected.spvasm
new file mode 100644
index 0000000..f0bc6d8
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/d584a2.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupMul_d584a2() -> vec2<i32> {
+ var arg_0 = vec2<i32>(1i);
+ var res : vec2<i32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_d584a2();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupMul/d584a2.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMul/d584a2.wgsl.expected.wgsl
new file mode 100644
index 0000000..2f5f836
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/d584a2.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<i32>;
+
+fn subgroupMul_d584a2() -> vec2<i32> {
+ var arg_0 = vec2<i32>(1i);
+ var res : vec2<i32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_d584a2();
+}
diff --git a/test/tint/builtins/gen/var/subgroupMul/dc672a.wgsl b/test/tint/builtins/gen/var/subgroupMul/dc672a.wgsl
new file mode 100644
index 0000000..7599523
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/dc672a.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+
+// fn subgroupMul(value: vec<2, u32>) -> vec<2, u32>
+fn subgroupMul_dc672a() -> vec2<u32>{
+ var arg_0 = vec2<u32>(1u);
+ var res: vec2<u32> = subgroupMul(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_dc672a();
+}
diff --git a/test/tint/builtins/gen/var/subgroupMul/dc672a.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMul/dc672a.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..48a080e
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/dc672a.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupMul_dc672a() -> vec2<u32> {
+ var arg_0 = vec2<u32>(1u);
+ var res : vec2<u32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_dc672a();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/dc672a.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMul/dc672a.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..48a080e
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/dc672a.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupMul_dc672a() -> vec2<u32> {
+ var arg_0 = vec2<u32>(1u);
+ var res : vec2<u32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_dc672a();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/dc672a.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMul/dc672a.wgsl.expected.glsl
new file mode 100644
index 0000000..bd00261
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/dc672a.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupMul_dc672a() -> vec2<u32> {
+ var arg_0 = vec2<u32>(1u);
+ var res : vec2<u32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_dc672a();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55c7f9845498
diff --git a/test/tint/builtins/gen/var/subgroupMul/dc672a.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupMul/dc672a.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..d639042
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/dc672a.wgsl.expected.ir.spvasm
@@ -0,0 +1,52 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 26
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupMul_dc672a "subgroupMul_dc672a"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %uint = OpTypeInt 32 0
+ %v2uint = OpTypeVector %uint 2
+%tint_symbol_1 = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v2uint
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+ %uint_1 = OpConstant %uint 1
+ %11 = OpConstantComposite %v2uint %uint_1 %uint_1
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %20 = OpTypeFunction %void
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+ %uint_0 = OpConstant %uint 0
+%subgroupMul_dc672a = OpFunction %v2uint None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v2uint Function
+ %res = OpVariable %_ptr_Function_v2uint Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v2uint %arg_0
+ %14 = OpGroupNonUniformIMul %v2uint %uint_3 Reduce %13
+ OpStore %res %14
+ %17 = OpLoad %v2uint %res
+ OpReturnValue %17
+ OpFunctionEnd
+%compute_main = OpFunction %void None %20
+ %21 = OpLabel
+ %22 = OpFunctionCall %v2uint %subgroupMul_dc672a
+ %23 = OpAccessChain %_ptr_StorageBuffer_v2uint %1 %uint_0
+ OpStore %23 %22
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMul/dc672a.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMul/dc672a.wgsl.expected.msl
new file mode 100644
index 0000000..abd0f5d
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/dc672a.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupMul_dc672a() -> vec2<u32> {
+ var arg_0 = vec2<u32>(1u);
+ var res : vec2<u32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_dc672a();
+}
+
+Failed to generate: error: Unknown import method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/dc672a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMul/dc672a.wgsl.expected.spvasm
new file mode 100644
index 0000000..703dc6d
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/dc672a.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupMul_dc672a() -> vec2<u32> {
+ var arg_0 = vec2<u32>(1u);
+ var res : vec2<u32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_dc672a();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupMul/dc672a.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMul/dc672a.wgsl.expected.wgsl
new file mode 100644
index 0000000..30e8d6f
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/dc672a.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
+
+fn subgroupMul_dc672a() -> vec2<u32> {
+ var arg_0 = vec2<u32>(1u);
+ var res : vec2<u32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_dc672a();
+}
diff --git a/test/tint/builtins/gen/var/subgroupMul/dd1333.wgsl b/test/tint/builtins/gen/var/subgroupMul/dd1333.wgsl
new file mode 100644
index 0000000..ed91483
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/dd1333.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+
+// fn subgroupMul(value: vec<4, u32>) -> vec<4, u32>
+fn subgroupMul_dd1333() -> vec4<u32>{
+ var arg_0 = vec4<u32>(1u);
+ var res: vec4<u32> = subgroupMul(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_dd1333();
+}
diff --git a/test/tint/builtins/gen/var/subgroupMul/dd1333.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMul/dd1333.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..cb314f0
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/dd1333.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupMul_dd1333() -> vec4<u32> {
+ var arg_0 = vec4<u32>(1u);
+ var res : vec4<u32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_dd1333();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/dd1333.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMul/dd1333.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..cb314f0
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/dd1333.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupMul_dd1333() -> vec4<u32> {
+ var arg_0 = vec4<u32>(1u);
+ var res : vec4<u32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_dd1333();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/dd1333.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMul/dd1333.wgsl.expected.glsl
new file mode 100644
index 0000000..84ecb95
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/dd1333.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupMul_dd1333() -> vec4<u32> {
+ var arg_0 = vec4<u32>(1u);
+ var res : vec4<u32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_dd1333();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55c63ee3b498
diff --git a/test/tint/builtins/gen/var/subgroupMul/dd1333.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupMul/dd1333.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..687cf9b
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/dd1333.wgsl.expected.ir.spvasm
@@ -0,0 +1,52 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 26
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupMul_dd1333 "subgroupMul_dd1333"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %uint = OpTypeInt 32 0
+ %v4uint = OpTypeVector %uint 4
+%tint_symbol_1 = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v4uint
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+ %uint_1 = OpConstant %uint 1
+ %11 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %20 = OpTypeFunction %void
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+ %uint_0 = OpConstant %uint 0
+%subgroupMul_dd1333 = OpFunction %v4uint None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v4uint Function
+ %res = OpVariable %_ptr_Function_v4uint Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v4uint %arg_0
+ %14 = OpGroupNonUniformIMul %v4uint %uint_3 Reduce %13
+ OpStore %res %14
+ %17 = OpLoad %v4uint %res
+ OpReturnValue %17
+ OpFunctionEnd
+%compute_main = OpFunction %void None %20
+ %21 = OpLabel
+ %22 = OpFunctionCall %v4uint %subgroupMul_dd1333
+ %23 = OpAccessChain %_ptr_StorageBuffer_v4uint %1 %uint_0
+ OpStore %23 %22
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMul/dd1333.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMul/dd1333.wgsl.expected.msl
new file mode 100644
index 0000000..f716ad0
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/dd1333.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupMul_dd1333() -> vec4<u32> {
+ var arg_0 = vec4<u32>(1u);
+ var res : vec4<u32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_dd1333();
+}
+
+Failed to generate: error: Unknown import method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/dd1333.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMul/dd1333.wgsl.expected.spvasm
new file mode 100644
index 0000000..4387baf
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/dd1333.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupMul_dd1333() -> vec4<u32> {
+ var arg_0 = vec4<u32>(1u);
+ var res : vec4<u32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_dd1333();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupMul/dd1333.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMul/dd1333.wgsl.expected.wgsl
new file mode 100644
index 0000000..0775e48
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/dd1333.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
+
+fn subgroupMul_dd1333() -> vec4<u32> {
+ var arg_0 = vec4<u32>(1u);
+ var res : vec4<u32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_dd1333();
+}
diff --git a/test/tint/builtins/gen/var/subgroupMul/f2ac5b.wgsl b/test/tint/builtins/gen/var/subgroupMul/f2ac5b.wgsl
new file mode 100644
index 0000000..3466241
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/f2ac5b.wgsl
@@ -0,0 +1,58 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// flags: --hlsl_shader_model 62
+
+
+enable subgroups;
+enable subgroups_f16;
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+
+// fn subgroupMul(value: vec<4, f16>) -> vec<4, f16>
+fn subgroupMul_f2ac5b() -> vec4<f16>{
+ var arg_0 = vec4<f16>(1.h);
+ var res: vec4<f16> = subgroupMul(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_f2ac5b();
+}
diff --git a/test/tint/builtins/gen/var/subgroupMul/f2ac5b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMul/f2ac5b.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..c63f071
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/f2ac5b.wgsl.expected.dxc.hlsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupMul_f2ac5b() -> vec4<f16> {
+ var arg_0 = vec4<f16>(1.0h);
+ var res : vec4<f16> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_f2ac5b();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/f2ac5b.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMul/f2ac5b.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..c63f071
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/f2ac5b.wgsl.expected.fxc.hlsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupMul_f2ac5b() -> vec4<f16> {
+ var arg_0 = vec4<f16>(1.0h);
+ var res : vec4<f16> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_f2ac5b();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/f2ac5b.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMul/f2ac5b.wgsl.expected.glsl
new file mode 100644
index 0000000..2ce277a
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/f2ac5b.wgsl.expected.glsl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupMul_f2ac5b() -> vec4<f16> {
+ var arg_0 = vec4<f16>(1.0h);
+ var res : vec4<f16> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_f2ac5b();
+}
+
+Failed to generate: error: Unknown builtin method: 0x5624f8e9d498
diff --git a/test/tint/builtins/gen/var/subgroupMul/f2ac5b.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupMul/f2ac5b.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..5ce9e45
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/f2ac5b.wgsl.expected.ir.spvasm
@@ -0,0 +1,56 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability Float16
+ OpCapability UniformAndStorageBuffer16BitAccess
+ OpCapability StorageBuffer16BitAccess
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupMul_f2ac5b "subgroupMul_f2ac5b"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %half = OpTypeFloat 16
+ %v4half = OpTypeVector %half 4
+%tint_symbol_1 = OpTypeStruct %v4half
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v4half
+%_ptr_Function_v4half = OpTypePointer Function %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+ %11 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v4half = OpTypePointer StorageBuffer %v4half
+ %uint_0 = OpConstant %uint 0
+%subgroupMul_f2ac5b = OpFunction %v4half None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v4half Function
+ %res = OpVariable %_ptr_Function_v4half Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v4half %arg_0
+ %14 = OpGroupNonUniformFMul %v4half %uint_3 Reduce %13
+ OpStore %res %14
+ %18 = OpLoad %v4half %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v4half %subgroupMul_f2ac5b
+ %24 = OpAccessChain %_ptr_StorageBuffer_v4half %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMul/f2ac5b.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMul/f2ac5b.wgsl.expected.msl
new file mode 100644
index 0000000..ea66a94
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/f2ac5b.wgsl.expected.msl
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupMul_f2ac5b() -> vec4<f16> {
+ var arg_0 = vec4<f16>(1.0h);
+ var res : vec4<f16> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_f2ac5b();
+}
+
+Failed to generate: error: Unknown import method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/f2ac5b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMul/f2ac5b.wgsl.expected.spvasm
new file mode 100644
index 0000000..d85f116
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/f2ac5b.wgsl.expected.spvasm
@@ -0,0 +1,19 @@
+SKIP: FAILED
+
+
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupMul_f2ac5b() -> vec4<f16> {
+ var arg_0 = vec4<f16>(1.0h);
+ var res : vec4<f16> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_f2ac5b();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupMul/f2ac5b.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMul/f2ac5b.wgsl.expected.wgsl
new file mode 100644
index 0000000..4a26ccd
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/f2ac5b.wgsl.expected.wgsl
@@ -0,0 +1,16 @@
+enable subgroups;
+enable subgroups_f16;
+enable f16;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<f16>;
+
+fn subgroupMul_f2ac5b() -> vec4<f16> {
+ var arg_0 = vec4<f16>(1.0h);
+ var res : vec4<f16> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_f2ac5b();
+}
diff --git a/test/tint/builtins/gen/var/subgroupMul/f78398.wgsl b/test/tint/builtins/gen/var/subgroupMul/f78398.wgsl
new file mode 100644
index 0000000..884ed87
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/f78398.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+
+// fn subgroupMul(value: vec<2, f32>) -> vec<2, f32>
+fn subgroupMul_f78398() -> vec2<f32>{
+ var arg_0 = vec2<f32>(1.f);
+ var res: vec2<f32> = subgroupMul(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_f78398();
+}
diff --git a/test/tint/builtins/gen/var/subgroupMul/f78398.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMul/f78398.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..b126694
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/f78398.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupMul_f78398() -> vec2<f32> {
+ var arg_0 = vec2<f32>(1.0f);
+ var res : vec2<f32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_f78398();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/f78398.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMul/f78398.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..b126694
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/f78398.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupMul_f78398() -> vec2<f32> {
+ var arg_0 = vec2<f32>(1.0f);
+ var res : vec2<f32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_f78398();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/f78398.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMul/f78398.wgsl.expected.glsl
new file mode 100644
index 0000000..23fee8a
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/f78398.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupMul_f78398() -> vec2<f32> {
+ var arg_0 = vec2<f32>(1.0f);
+ var res : vec2<f32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_f78398();
+}
+
+Failed to generate: error: Unknown builtin method: 0x558c86103498
diff --git a/test/tint/builtins/gen/var/subgroupMul/f78398.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupMul/f78398.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..e9df1f5e4
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/f78398.wgsl.expected.ir.spvasm
@@ -0,0 +1,53 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupMul_f78398 "subgroupMul_f78398"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %float = OpTypeFloat 32
+ %v2float = OpTypeVector %float 2
+%tint_symbol_1 = OpTypeStruct %v2float
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v2float
+%_ptr_Function_v2float = OpTypePointer Function %v2float
+ %float_1 = OpConstant %float 1
+ %11 = OpConstantComposite %v2float %float_1 %float_1
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v2float = OpTypePointer StorageBuffer %v2float
+ %uint_0 = OpConstant %uint 0
+%subgroupMul_f78398 = OpFunction %v2float None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v2float Function
+ %res = OpVariable %_ptr_Function_v2float Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v2float %arg_0
+ %14 = OpGroupNonUniformFMul %v2float %uint_3 Reduce %13
+ OpStore %res %14
+ %18 = OpLoad %v2float %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v2float %subgroupMul_f78398
+ %24 = OpAccessChain %_ptr_StorageBuffer_v2float %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMul/f78398.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMul/f78398.wgsl.expected.msl
new file mode 100644
index 0000000..6e8b845
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/f78398.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupMul_f78398() -> vec2<f32> {
+ var arg_0 = vec2<f32>(1.0f);
+ var res : vec2<f32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_f78398();
+}
+
+Failed to generate: error: Unknown import method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/f78398.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMul/f78398.wgsl.expected.spvasm
new file mode 100644
index 0000000..5a1fc58
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/f78398.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupMul_f78398() -> vec2<f32> {
+ var arg_0 = vec2<f32>(1.0f);
+ var res : vec2<f32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_f78398();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupMul/f78398.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMul/f78398.wgsl.expected.wgsl
new file mode 100644
index 0000000..ea86df2
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/f78398.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<f32>;
+
+fn subgroupMul_f78398() -> vec2<f32> {
+ var arg_0 = vec2<f32>(1.0f);
+ var res : vec2<f32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_f78398();
+}
diff --git a/test/tint/builtins/gen/var/subgroupMul/fa781b.wgsl b/test/tint/builtins/gen/var/subgroupMul/fa781b.wgsl
new file mode 100644
index 0000000..c092801
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/fa781b.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+
+// fn subgroupMul(value: vec<3, u32>) -> vec<3, u32>
+fn subgroupMul_fa781b() -> vec3<u32>{
+ var arg_0 = vec3<u32>(1u);
+ var res: vec3<u32> = subgroupMul(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_fa781b();
+}
diff --git a/test/tint/builtins/gen/var/subgroupMul/fa781b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMul/fa781b.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..2e1da41
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/fa781b.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupMul_fa781b() -> vec3<u32> {
+ var arg_0 = vec3<u32>(1u);
+ var res : vec3<u32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_fa781b();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/fa781b.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMul/fa781b.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..2e1da41
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/fa781b.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupMul_fa781b() -> vec3<u32> {
+ var arg_0 = vec3<u32>(1u);
+ var res : vec3<u32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_fa781b();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/fa781b.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMul/fa781b.wgsl.expected.glsl
new file mode 100644
index 0000000..dc918b2
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/fa781b.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupMul_fa781b() -> vec3<u32> {
+ var arg_0 = vec3<u32>(1u);
+ var res : vec3<u32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_fa781b();
+}
+
+Failed to generate: error: Unknown builtin method: 0x562286129498
diff --git a/test/tint/builtins/gen/var/subgroupMul/fa781b.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupMul/fa781b.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..5f2e953
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/fa781b.wgsl.expected.ir.spvasm
@@ -0,0 +1,52 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 26
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupMul_fa781b "subgroupMul_fa781b"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %uint = OpTypeInt 32 0
+ %v3uint = OpTypeVector %uint 3
+%tint_symbol_1 = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v3uint
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+ %uint_1 = OpConstant %uint 1
+ %11 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %20 = OpTypeFunction %void
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+ %uint_0 = OpConstant %uint 0
+%subgroupMul_fa781b = OpFunction %v3uint None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v3uint Function
+ %res = OpVariable %_ptr_Function_v3uint Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v3uint %arg_0
+ %14 = OpGroupNonUniformIMul %v3uint %uint_3 Reduce %13
+ OpStore %res %14
+ %17 = OpLoad %v3uint %res
+ OpReturnValue %17
+ OpFunctionEnd
+%compute_main = OpFunction %void None %20
+ %21 = OpLabel
+ %22 = OpFunctionCall %v3uint %subgroupMul_fa781b
+ %23 = OpAccessChain %_ptr_StorageBuffer_v3uint %1 %uint_0
+ OpStore %23 %22
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMul/fa781b.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMul/fa781b.wgsl.expected.msl
new file mode 100644
index 0000000..bf91419
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/fa781b.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupMul_fa781b() -> vec3<u32> {
+ var arg_0 = vec3<u32>(1u);
+ var res : vec3<u32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_fa781b();
+}
+
+Failed to generate: error: Unknown import method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/fa781b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMul/fa781b.wgsl.expected.spvasm
new file mode 100644
index 0000000..f48340a
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/fa781b.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupMul_fa781b() -> vec3<u32> {
+ var arg_0 = vec3<u32>(1u);
+ var res : vec3<u32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_fa781b();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupMul/fa781b.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMul/fa781b.wgsl.expected.wgsl
new file mode 100644
index 0000000..5c55d4d
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/fa781b.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
+
+fn subgroupMul_fa781b() -> vec3<u32> {
+ var arg_0 = vec3<u32>(1u);
+ var res : vec3<u32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_fa781b();
+}
diff --git a/test/tint/builtins/gen/var/subgroupMul/fab258.wgsl b/test/tint/builtins/gen/var/subgroupMul/fab258.wgsl
new file mode 100644
index 0000000..fa90908
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/fab258.wgsl
@@ -0,0 +1,51 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by 'tools/src/cmd/gen' using the template:
+// test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+enable subgroups;
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+
+// fn subgroupMul(value: vec<4, i32>) -> vec<4, i32>
+fn subgroupMul_fab258() -> vec4<i32>{
+ var arg_0 = vec4<i32>(1i);
+ var res: vec4<i32> = subgroupMul(arg_0);
+ return res;
+}
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_fab258();
+}
diff --git a/test/tint/builtins/gen/var/subgroupMul/fab258.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/subgroupMul/fab258.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..9552fa0
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/fab258.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupMul_fab258() -> vec4<i32> {
+ var arg_0 = vec4<i32>(1i);
+ var res : vec4<i32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_fab258();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/fab258.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/subgroupMul/fab258.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..9552fa0
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/fab258.wgsl.expected.fxc.hlsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupMul_fab258() -> vec4<i32> {
+ var arg_0 = vec4<i32>(1i);
+ var res : vec4<i32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_fab258();
+}
+
+Failed to generate: error: Unknown builtin method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/fab258.wgsl.expected.glsl b/test/tint/builtins/gen/var/subgroupMul/fab258.wgsl.expected.glsl
new file mode 100644
index 0000000..83d5dbe
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/fab258.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupMul_fab258() -> vec4<i32> {
+ var arg_0 = vec4<i32>(1i);
+ var res : vec4<i32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_fab258();
+}
+
+Failed to generate: error: Unknown builtin method: 0x55f7efd1d498
diff --git a/test/tint/builtins/gen/var/subgroupMul/fab258.wgsl.expected.ir.spvasm b/test/tint/builtins/gen/var/subgroupMul/fab258.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..ba500bb
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/fab258.wgsl.expected.ir.spvasm
@@ -0,0 +1,53 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformArithmetic
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpMemberName %tint_symbol_1 0 "tint_symbol"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %subgroupMul_fab258 "subgroupMul_fab258"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpMemberDecorate %tint_symbol_1 0 Offset 0
+ OpDecorate %tint_symbol_1 Block
+ OpDecorate %1 DescriptorSet 0
+ OpDecorate %1 Binding 0
+ %int = OpTypeInt 32 1
+ %v4int = OpTypeVector %int 4
+%tint_symbol_1 = OpTypeStruct %v4int
+%_ptr_StorageBuffer_tint_symbol_1 = OpTypePointer StorageBuffer %tint_symbol_1
+ %1 = OpVariable %_ptr_StorageBuffer_tint_symbol_1 StorageBuffer
+ %7 = OpTypeFunction %v4int
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+ %int_1 = OpConstant %int 1
+ %11 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+ %uint = OpTypeInt 32 0
+ %uint_3 = OpConstant %uint 3
+ %void = OpTypeVoid
+ %21 = OpTypeFunction %void
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+ %uint_0 = OpConstant %uint 0
+%subgroupMul_fab258 = OpFunction %v4int None %7
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v4int Function
+ %res = OpVariable %_ptr_Function_v4int Function
+ OpStore %arg_0 %11
+ %13 = OpLoad %v4int %arg_0
+ %14 = OpGroupNonUniformIMul %v4int %uint_3 Reduce %13
+ OpStore %res %14
+ %18 = OpLoad %v4int %res
+ OpReturnValue %18
+ OpFunctionEnd
+%compute_main = OpFunction %void None %21
+ %22 = OpLabel
+ %23 = OpFunctionCall %v4int %subgroupMul_fab258
+ %24 = OpAccessChain %_ptr_StorageBuffer_v4int %1 %uint_0
+ OpStore %24 %23
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupMul/fab258.wgsl.expected.msl b/test/tint/builtins/gen/var/subgroupMul/fab258.wgsl.expected.msl
new file mode 100644
index 0000000..aefb640
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/fab258.wgsl.expected.msl
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupMul_fab258() -> vec4<i32> {
+ var arg_0 = vec4<i32>(1i);
+ var res : vec4<i32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_fab258();
+}
+
+Failed to generate: error: Unknown import method: subgroupMul
diff --git a/test/tint/builtins/gen/var/subgroupMul/fab258.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupMul/fab258.wgsl.expected.spvasm
new file mode 100644
index 0000000..dab8a39
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/fab258.wgsl.expected.spvasm
@@ -0,0 +1,17 @@
+SKIP: FAILED
+
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupMul_fab258() -> vec4<i32> {
+ var arg_0 = vec4<i32>(1i);
+ var res : vec4<i32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_fab258();
+}
+
+Failed to generate:
diff --git a/test/tint/builtins/gen/var/subgroupMul/fab258.wgsl.expected.wgsl b/test/tint/builtins/gen/var/subgroupMul/fab258.wgsl.expected.wgsl
new file mode 100644
index 0000000..154a2f3
--- /dev/null
+++ b/test/tint/builtins/gen/var/subgroupMul/fab258.wgsl.expected.wgsl
@@ -0,0 +1,14 @@
+enable subgroups;
+
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
+
+fn subgroupMul_fab258() -> vec4<i32> {
+ var arg_0 = vec4<i32>(1i);
+ var res : vec4<i32> = subgroupMul(arg_0);
+ return res;
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+ prevent_dce = subgroupMul_fab258();
+}