spir-v writer support for subgroupBroadcast
Bug: tint:2041
Change-Id: Ib7e8da8bb73dae9e6254fde506601e0285bffa99
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/151582
Commit-Queue: David Neto <dneto@google.com>
Reviewed-by: James Price <jrprice@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Auto-Submit: David Neto <dneto@google.com>
diff --git a/src/tint/lang/spirv/writer/ast_printer/builder.cc b/src/tint/lang/spirv/writer/ast_printer/builder.cc
index 27fe8b4..9756664 100644
--- a/src/tint/lang/spirv/writer/ast_printer/builder.cc
+++ b/src/tint/lang/spirv/writer/ast_printer/builder.cc
@@ -2574,6 +2574,19 @@
}
return result_id;
}
+ case core::Function::kSubgroupBroadcast: {
+ module_.PushCapability(SpvCapabilityGroupNonUniformBallot);
+ auto first_param_id = get_arg_as_value_id(0);
+ auto second_param_id = get_arg_as_value_id(1);
+ if (!push_function_inst(
+ spv::Op::OpGroupNonUniformBroadcast,
+ {Operand(result_type_id), result,
+ Operand(GenerateConstantIfNeeded(ScalarConstant::U32(SpvScopeSubgroup))),
+ Operand(first_param_id), Operand(second_param_id)})) {
+ return 0;
+ }
+ return result_id;
+ }
default: {
auto inst_id = builtin_to_glsl_method(builtin);
if (inst_id == 0) {
diff --git a/src/tint/lang/spirv/writer/builtin_test.cc b/src/tint/lang/spirv/writer/builtin_test.cc
index a725e1a..7e51a65 100644
--- a/src/tint/lang/spirv/writer/builtin_test.cc
+++ b/src/tint/lang/spirv/writer/builtin_test.cc
@@ -1786,6 +1786,45 @@
EXPECT_INST("%result = OpGroupNonUniformBallot %v4uint %uint_3 %true");
}
+TEST_F(SpirvWriterTest, Builtin_SubgroupBroadcastValueF32) {
+ auto* func = b.Function("foo", ty.f32());
+ b.Append(func->Block(), [&] {
+ auto* result = b.Call(ty.f32(), core::Function::kSubgroupBroadcast, 1_f, 0_u);
+ mod.SetName(result, "result");
+ b.Return(func, result);
+ });
+
+ ASSERT_TRUE(Generate()) << Error() << output_;
+ EXPECT_INST("OpCapability GroupNonUniformBallot");
+ EXPECT_INST("%result = OpGroupNonUniformBroadcast %float %uint_3 %float_1 %uint_0");
+}
+
+TEST_F(SpirvWriterTest, Builtin_SubgroupBroadcastValueI32) {
+ auto* func = b.Function("foo", ty.i32());
+ b.Append(func->Block(), [&] {
+ auto* result = b.Call(ty.i32(), core::Function::kSubgroupBroadcast, 1_i, 0_u);
+ mod.SetName(result, "result");
+ b.Return(func, result);
+ });
+
+ ASSERT_TRUE(Generate()) << Error() << output_;
+ EXPECT_INST("OpCapability GroupNonUniformBallot");
+ EXPECT_INST("%result = OpGroupNonUniformBroadcast %int %uint_3 %int_1 %uint_0");
+}
+
+TEST_F(SpirvWriterTest, Builtin_SubgroupBroadcastValueU32) {
+ auto* func = b.Function("foo", ty.u32());
+ b.Append(func->Block(), [&] {
+ auto* result = b.Call(ty.u32(), core::Function::kSubgroupBroadcast, 1_u, 0_u);
+ mod.SetName(result, "result");
+ b.Return(func, result);
+ });
+
+ ASSERT_TRUE(Generate()) << Error() << output_;
+ EXPECT_INST("OpCapability GroupNonUniformBallot");
+ EXPECT_INST("%result = OpGroupNonUniformBroadcast %uint %uint_3 %uint_1 %uint_0");
+}
+
TEST_F(SpirvWriterTest, Builtin_ArrayLength) {
auto* var = b.Var("var", ty.ptr(storage, ty.runtime_array(ty.i32())));
var->SetBindingPoint(0, 0);
diff --git a/src/tint/lang/spirv/writer/printer/printer.cc b/src/tint/lang/spirv/writer/printer/printer.cc
index 2b882ee..5708fef 100644
--- a/src/tint/lang/spirv/writer/printer/printer.cc
+++ b/src/tint/lang/spirv/writer/printer/printer.cc
@@ -1402,6 +1402,11 @@
operands.push_back(Constant(ir_->constant_values.Get(u32(spv::Scope::Subgroup))));
operands.push_back(Constant(ir_->constant_values.Get(true)));
break;
+ case core::Function::kSubgroupBroadcast:
+ module_.PushCapability(SpvCapabilityGroupNonUniformBallot);
+ op = spv::Op::OpGroupNonUniformBroadcast;
+ operands.push_back(Constant(ir_->constant_values.Get(u32(spv::Scope::Subgroup))));
+ break;
case core::Function::kTan:
glsl_ext_inst(GLSLstd450Tan);
break;
diff --git a/test/tint/builtins/gen/literal/subgroupBroadcast/08beca.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupBroadcast/08beca.wgsl.expected.spvasm
index eed3359..ef0d6b0 100644
--- a/test/tint/builtins/gen/literal/subgroupBroadcast/08beca.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupBroadcast/08beca.wgsl.expected.spvasm
@@ -1,9 +1,49 @@
-SKIP: FAILED
-
-/build/dawn/src/tint/lang/spirv/writer/ast_printer/builder.cc:2580 internal compiler error: unknown method subgroupBroadcast
-********************************************************************
-* The tint shader compiler has encountered an unexpected error. *
-* *
-* Please help us fix this issue by submitting a bug report at *
-* crbug.com/tint with the source program that triggered the bug. *
-********************************************************************
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 24
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformBallot
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpName %prevent_dce_block "prevent_dce_block"
+ OpMemberName %prevent_dce_block 0 "inner"
+ OpName %prevent_dce "prevent_dce"
+ OpName %subgroupBroadcast_08beca "subgroupBroadcast_08beca"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpDecorate %prevent_dce_block Block
+ OpMemberDecorate %prevent_dce_block 0 Offset 0
+ OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce Binding 0
+ %float = OpTypeFloat 32
+%prevent_dce_block = OpTypeStruct %float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+ %void = OpTypeVoid
+ %5 = OpTypeFunction %void
+ %float_1 = OpConstant %float 1
+ %uint = OpTypeInt 32 0
+ %uint_1 = OpConstant %uint 1
+ %uint_3 = OpConstant %uint 3
+%_ptr_Function_float = OpTypePointer Function %float
+ %16 = OpConstantNull %float
+ %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
+%subgroupBroadcast_08beca = OpFunction %void None %5
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_float Function %16
+ %9 = OpGroupNonUniformBroadcast %float %uint_3 %float_1 %uint_1
+ OpStore %res %9
+ %19 = OpAccessChain %_ptr_StorageBuffer_float %prevent_dce %uint_0
+ %20 = OpLoad %float %res
+ OpStore %19 %20
+ OpReturn
+ OpFunctionEnd
+%compute_main = OpFunction %void None %5
+ %22 = OpLabel
+ %23 = OpFunctionCall %void %subgroupBroadcast_08beca
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupBroadcast/1d79c7.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupBroadcast/1d79c7.wgsl.expected.spvasm
index eed3359..23742d2 100644
--- a/test/tint/builtins/gen/literal/subgroupBroadcast/1d79c7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupBroadcast/1d79c7.wgsl.expected.spvasm
@@ -1,9 +1,49 @@
-SKIP: FAILED
-
-/build/dawn/src/tint/lang/spirv/writer/ast_printer/builder.cc:2580 internal compiler error: unknown method subgroupBroadcast
-********************************************************************
-* The tint shader compiler has encountered an unexpected error. *
-* *
-* Please help us fix this issue by submitting a bug report at *
-* crbug.com/tint with the source program that triggered the bug. *
-********************************************************************
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 24
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformBallot
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpName %prevent_dce_block "prevent_dce_block"
+ OpMemberName %prevent_dce_block 0 "inner"
+ OpName %prevent_dce "prevent_dce"
+ OpName %subgroupBroadcast_1d79c7 "subgroupBroadcast_1d79c7"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpDecorate %prevent_dce_block Block
+ OpMemberDecorate %prevent_dce_block 0 Offset 0
+ OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce Binding 0
+ %int = OpTypeInt 32 1
+%prevent_dce_block = OpTypeStruct %int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+ %void = OpTypeVoid
+ %5 = OpTypeFunction %void
+ %int_1 = OpConstant %int 1
+ %uint = OpTypeInt 32 0
+ %uint_1 = OpConstant %uint 1
+ %uint_3 = OpConstant %uint 3
+%_ptr_Function_int = OpTypePointer Function %int
+ %16 = OpConstantNull %int
+ %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
+%subgroupBroadcast_1d79c7 = OpFunction %void None %5
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_int Function %16
+ %9 = OpGroupNonUniformBroadcast %int %uint_3 %int_1 %uint_1
+ OpStore %res %9
+ %19 = OpAccessChain %_ptr_StorageBuffer_int %prevent_dce %uint_0
+ %20 = OpLoad %int %res
+ OpStore %19 %20
+ OpReturn
+ OpFunctionEnd
+%compute_main = OpFunction %void None %5
+ %22 = OpLabel
+ %23 = OpFunctionCall %void %subgroupBroadcast_1d79c7
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/subgroupBroadcast/c36fe1.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/subgroupBroadcast/c36fe1.wgsl.expected.spvasm
index eed3359..acfbb61 100644
--- a/test/tint/builtins/gen/literal/subgroupBroadcast/c36fe1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/subgroupBroadcast/c36fe1.wgsl.expected.spvasm
@@ -1,9 +1,47 @@
-SKIP: FAILED
-
-/build/dawn/src/tint/lang/spirv/writer/ast_printer/builder.cc:2580 internal compiler error: unknown method subgroupBroadcast
-********************************************************************
-* The tint shader compiler has encountered an unexpected error. *
-* *
-* Please help us fix this issue by submitting a bug report at *
-* crbug.com/tint with the source program that triggered the bug. *
-********************************************************************
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 22
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformBallot
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpName %prevent_dce_block "prevent_dce_block"
+ OpMemberName %prevent_dce_block 0 "inner"
+ OpName %prevent_dce "prevent_dce"
+ OpName %subgroupBroadcast_c36fe1 "subgroupBroadcast_c36fe1"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpDecorate %prevent_dce_block Block
+ OpMemberDecorate %prevent_dce_block 0 Offset 0
+ OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce Binding 0
+ %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+ %void = OpTypeVoid
+ %5 = OpTypeFunction %void
+ %uint_1 = OpConstant %uint 1
+ %uint_3 = OpConstant %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+ %14 = OpConstantNull %uint
+ %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+%subgroupBroadcast_c36fe1 = OpFunction %void None %5
+ %8 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %14
+ %9 = OpGroupNonUniformBroadcast %uint %uint_3 %uint_1 %uint_1
+ OpStore %res %9
+ %17 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %18 = OpLoad %uint %res
+ OpStore %17 %18
+ OpReturn
+ OpFunctionEnd
+%compute_main = OpFunction %void None %5
+ %20 = OpLabel
+ %21 = OpFunctionCall %void %subgroupBroadcast_c36fe1
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupBroadcast/08beca.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupBroadcast/08beca.wgsl.expected.spvasm
index eed3359..73537ab 100644
--- a/test/tint/builtins/gen/var/subgroupBroadcast/08beca.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupBroadcast/08beca.wgsl.expected.spvasm
@@ -1,9 +1,53 @@
-SKIP: FAILED
-
-/build/dawn/src/tint/lang/spirv/writer/ast_printer/builder.cc:2580 internal compiler error: unknown method subgroupBroadcast
-********************************************************************
-* The tint shader compiler has encountered an unexpected error. *
-* *
-* Please help us fix this issue by submitting a bug report at *
-* crbug.com/tint with the source program that triggered the bug. *
-********************************************************************
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 26
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformBallot
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpName %prevent_dce_block "prevent_dce_block"
+ OpMemberName %prevent_dce_block 0 "inner"
+ OpName %prevent_dce "prevent_dce"
+ OpName %subgroupBroadcast_08beca "subgroupBroadcast_08beca"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpDecorate %prevent_dce_block Block
+ OpMemberDecorate %prevent_dce_block 0 Offset 0
+ OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce Binding 0
+ %float = OpTypeFloat 32
+%prevent_dce_block = OpTypeStruct %float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+ %void = OpTypeVoid
+ %5 = OpTypeFunction %void
+ %float_1 = OpConstant %float 1
+%_ptr_Function_float = OpTypePointer Function %float
+ %12 = OpConstantNull %float
+ %uint = OpTypeInt 32 0
+ %uint_1 = OpConstant %uint 1
+ %uint_3 = OpConstant %uint 3
+ %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
+%subgroupBroadcast_08beca = OpFunction %void None %5
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_float Function %12
+ %res = OpVariable %_ptr_Function_float Function %12
+ OpStore %arg_0 %float_1
+ %14 = OpLoad %float %arg_0
+ %13 = OpGroupNonUniformBroadcast %float %uint_3 %14 %uint_1
+ OpStore %res %13
+ %21 = OpAccessChain %_ptr_StorageBuffer_float %prevent_dce %uint_0
+ %22 = OpLoad %float %res
+ OpStore %21 %22
+ OpReturn
+ OpFunctionEnd
+%compute_main = OpFunction %void None %5
+ %24 = OpLabel
+ %25 = OpFunctionCall %void %subgroupBroadcast_08beca
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupBroadcast/1d79c7.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupBroadcast/1d79c7.wgsl.expected.spvasm
index eed3359..fae8d7d 100644
--- a/test/tint/builtins/gen/var/subgroupBroadcast/1d79c7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupBroadcast/1d79c7.wgsl.expected.spvasm
@@ -1,9 +1,53 @@
-SKIP: FAILED
-
-/build/dawn/src/tint/lang/spirv/writer/ast_printer/builder.cc:2580 internal compiler error: unknown method subgroupBroadcast
-********************************************************************
-* The tint shader compiler has encountered an unexpected error. *
-* *
-* Please help us fix this issue by submitting a bug report at *
-* crbug.com/tint with the source program that triggered the bug. *
-********************************************************************
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 26
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformBallot
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpName %prevent_dce_block "prevent_dce_block"
+ OpMemberName %prevent_dce_block 0 "inner"
+ OpName %prevent_dce "prevent_dce"
+ OpName %subgroupBroadcast_1d79c7 "subgroupBroadcast_1d79c7"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpDecorate %prevent_dce_block Block
+ OpMemberDecorate %prevent_dce_block 0 Offset 0
+ OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce Binding 0
+ %int = OpTypeInt 32 1
+%prevent_dce_block = OpTypeStruct %int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+ %void = OpTypeVoid
+ %5 = OpTypeFunction %void
+ %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+ %12 = OpConstantNull %int
+ %uint = OpTypeInt 32 0
+ %uint_1 = OpConstant %uint 1
+ %uint_3 = OpConstant %uint 3
+ %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
+%subgroupBroadcast_1d79c7 = OpFunction %void None %5
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_int Function %12
+ %res = OpVariable %_ptr_Function_int Function %12
+ OpStore %arg_0 %int_1
+ %14 = OpLoad %int %arg_0
+ %13 = OpGroupNonUniformBroadcast %int %uint_3 %14 %uint_1
+ OpStore %res %13
+ %21 = OpAccessChain %_ptr_StorageBuffer_int %prevent_dce %uint_0
+ %22 = OpLoad %int %res
+ OpStore %21 %22
+ OpReturn
+ OpFunctionEnd
+%compute_main = OpFunction %void None %5
+ %24 = OpLabel
+ %25 = OpFunctionCall %void %subgroupBroadcast_1d79c7
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/subgroupBroadcast/c36fe1.wgsl.expected.spvasm b/test/tint/builtins/gen/var/subgroupBroadcast/c36fe1.wgsl.expected.spvasm
index eed3359..265e766 100644
--- a/test/tint/builtins/gen/var/subgroupBroadcast/c36fe1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/subgroupBroadcast/c36fe1.wgsl.expected.spvasm
@@ -1,9 +1,51 @@
-SKIP: FAILED
-
-/build/dawn/src/tint/lang/spirv/writer/ast_printer/builder.cc:2580 internal compiler error: unknown method subgroupBroadcast
-********************************************************************
-* The tint shader compiler has encountered an unexpected error. *
-* *
-* Please help us fix this issue by submitting a bug report at *
-* crbug.com/tint with the source program that triggered the bug. *
-********************************************************************
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 24
+; Schema: 0
+ OpCapability Shader
+ OpCapability GroupNonUniformBallot
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %compute_main "compute_main"
+ OpExecutionMode %compute_main LocalSize 1 1 1
+ OpName %prevent_dce_block "prevent_dce_block"
+ OpMemberName %prevent_dce_block 0 "inner"
+ OpName %prevent_dce "prevent_dce"
+ OpName %subgroupBroadcast_c36fe1 "subgroupBroadcast_c36fe1"
+ OpName %arg_0 "arg_0"
+ OpName %res "res"
+ OpName %compute_main "compute_main"
+ OpDecorate %prevent_dce_block Block
+ OpMemberDecorate %prevent_dce_block 0 Offset 0
+ OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce Binding 0
+ %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+ %void = OpTypeVoid
+ %5 = OpTypeFunction %void
+ %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+ %12 = OpConstantNull %uint
+ %uint_3 = OpConstant %uint 3
+ %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+%subgroupBroadcast_c36fe1 = OpFunction %void None %5
+ %8 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_uint Function %12
+ %res = OpVariable %_ptr_Function_uint Function %12
+ OpStore %arg_0 %uint_1
+ %14 = OpLoad %uint %arg_0
+ %13 = OpGroupNonUniformBroadcast %uint %uint_3 %14 %uint_1
+ OpStore %res %13
+ %19 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %20 = OpLoad %uint %res
+ OpStore %19 %20
+ OpReturn
+ OpFunctionEnd
+%compute_main = OpFunction %void None %5
+ %22 = OpLabel
+ %23 = OpFunctionCall %void %subgroupBroadcast_c36fe1
+ OpReturn
+ OpFunctionEnd