test: Add case for tint:977
Bug: tint:977
Change-Id: I50778c6e1778717c0ad9b02b2ea25b13c4a3da97
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/58065
Auto-Submit: Ben Clayton <bclayton@google.com>
Reviewed-by: Antonio Maiorano <amaiorano@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
diff --git a/test/bug/tint/977.spvasm b/test/bug/tint/977.spvasm
new file mode 100644
index 0000000..dfd5ab6
--- /dev/null
+++ b/test/bug/tint/977.spvasm
@@ -0,0 +1,153 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 82
+; Schema: 0
+ OpCapability Shader
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %main "main" %gl_GlobalInvocationID
+ OpExecutionMode %main LocalSize 1 1 1
+ OpSource GLSL 450
+ OpName %main "main"
+ OpName %binaryOperation_f1_f1_ "binaryOperation(f1;f1;"
+ OpName %a "a"
+ OpName %b "b"
+ OpName %index "index"
+ OpName %gl_GlobalInvocationID "gl_GlobalInvocationID"
+ OpName %a_0 "a"
+ OpName %ResultMatrix "ResultMatrix"
+ OpMemberName %ResultMatrix 0 "numbers"
+ OpName %resultMatrix "resultMatrix"
+ OpName %param "param"
+ OpName %param_0 "param"
+ OpName %FirstMatrix "FirstMatrix"
+ OpMemberName %FirstMatrix 0 "numbers"
+ OpName %firstMatrix "firstMatrix"
+ OpName %SecondMatrix "SecondMatrix"
+ OpMemberName %SecondMatrix 0 "numbers"
+ OpName %secondMatrix "secondMatrix"
+ OpName %Uniforms "Uniforms"
+ OpMemberName %Uniforms 0 "NAN"
+ OpMemberName %Uniforms 1 "sizeA"
+ OpMemberName %Uniforms 2 "sizeB"
+ OpName %_ ""
+ OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId
+ OpDecorate %_runtimearr_float ArrayStride 4
+ OpMemberDecorate %ResultMatrix 0 Offset 0
+ OpDecorate %ResultMatrix BufferBlock
+ OpDecorate %resultMatrix DescriptorSet 0
+ OpDecorate %resultMatrix Binding 2
+ OpDecorate %_runtimearr_float_0 ArrayStride 4
+ OpMemberDecorate %FirstMatrix 0 NonWritable
+ OpMemberDecorate %FirstMatrix 0 Offset 0
+ OpDecorate %FirstMatrix BufferBlock
+ OpDecorate %firstMatrix DescriptorSet 0
+ OpDecorate %firstMatrix Binding 0
+ OpDecorate %_runtimearr_float_1 ArrayStride 4
+ OpMemberDecorate %SecondMatrix 0 NonWritable
+ OpMemberDecorate %SecondMatrix 0 Offset 0
+ OpDecorate %SecondMatrix BufferBlock
+ OpDecorate %secondMatrix DescriptorSet 0
+ OpDecorate %secondMatrix Binding 1
+ OpMemberDecorate %Uniforms 0 Offset 0
+ OpMemberDecorate %Uniforms 1 Offset 4
+ OpMemberDecorate %Uniforms 2 Offset 8
+ OpDecorate %Uniforms Block
+ OpDecorate %_ DescriptorSet 0
+ OpDecorate %_ Binding 3
+ %void = OpTypeVoid
+ %3 = OpTypeFunction %void
+ %float = OpTypeFloat 32
+ %_ptr_Function_float = OpTypePointer Function %float
+ %8 = OpTypeFunction %float %_ptr_Function_float %_ptr_Function_float
+ %float_0 = OpConstant %float 0
+ %bool = OpTypeBool
+ %float_1 = OpConstant %float 1
+ %float_2 = OpConstant %float 2
+ %int = OpTypeInt 32 1
+ %_ptr_Function_int = OpTypePointer Function %int
+ %uint = OpTypeInt 32 0
+ %v3uint = OpTypeVector %uint 3
+ %_ptr_Input_v3uint = OpTypePointer Input %v3uint
+ %gl_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input
+ %uint_0 = OpConstant %uint 0
+ %_ptr_Input_uint = OpTypePointer Input %uint
+ %int_n10 = OpConstant %int -10
+ %_runtimearr_float = OpTypeRuntimeArray %float
+ %ResultMatrix = OpTypeStruct %_runtimearr_float
+%_ptr_Uniform_ResultMatrix = OpTypePointer Uniform %ResultMatrix
+ %resultMatrix = OpVariable %_ptr_Uniform_ResultMatrix Uniform
+ %int_0 = OpConstant %int 0
+ %float_n4 = OpConstant %float -4
+ %float_n3 = OpConstant %float -3
+ %_ptr_Uniform_float = OpTypePointer Uniform %float
+ %_runtimearr_float_0 = OpTypeRuntimeArray %float
+ %FirstMatrix = OpTypeStruct %_runtimearr_float_0
+ %_ptr_Uniform_FirstMatrix = OpTypePointer Uniform %FirstMatrix
+ %firstMatrix = OpVariable %_ptr_Uniform_FirstMatrix Uniform
+ %_runtimearr_float_1 = OpTypeRuntimeArray %float
+ %SecondMatrix = OpTypeStruct %_runtimearr_float_1
+%_ptr_Uniform_SecondMatrix = OpTypePointer Uniform %SecondMatrix
+ %secondMatrix = OpVariable %_ptr_Uniform_SecondMatrix Uniform
+ %Uniforms = OpTypeStruct %float %int %int
+ %_ptr_Uniform_Uniforms = OpTypePointer Uniform %Uniforms
+ %_ = OpVariable %_ptr_Uniform_Uniforms Uniform
+ %main = OpFunction %void None %3
+ %5 = OpLabel
+ %index = OpVariable %_ptr_Function_int Function
+ %a_0 = OpVariable %_ptr_Function_int Function
+ %param = OpVariable %_ptr_Function_float Function
+ %param_0 = OpVariable %_ptr_Function_float Function
+ %53 = OpAccessChain %_ptr_Input_uint %gl_GlobalInvocationID %uint_0
+ %54 = OpLoad %uint %53
+ %55 = OpBitcast %int %54
+ OpStore %index %55
+ OpStore %a_0 %int_n10
+ %63 = OpLoad %int %index
+ OpStore %param %float_n4
+ OpStore %param_0 %float_n3
+ %68 = OpFunctionCall %float %binaryOperation_f1_f1_ %param %param_0
+ %70 = OpAccessChain %_ptr_Uniform_float %resultMatrix %int_0 %63
+ OpStore %70 %68
+ OpReturn
+ OpFunctionEnd
+ %binaryOperation_f1_f1_ = OpFunction %float None %8
+ %a = OpFunctionParameter %_ptr_Function_float
+ %b = OpFunctionParameter %_ptr_Function_float
+ %12 = OpLabel
+ %26 = OpVariable %_ptr_Function_float Function
+ %13 = OpLoad %float %b
+ %16 = OpFOrdEqual %bool %13 %float_0
+ OpSelectionMerge %18 None
+ OpBranchConditional %16 %17 %18
+ %17 = OpLabel
+ OpReturnValue %float_1
+ %18 = OpLabel
+ %21 = OpLoad %float %b
+ %23 = OpFMod %float %21 %float_2
+ %24 = OpExtInst %float %1 Round %23
+ %25 = OpFUnordNotEqual %bool %24 %float_1
+ OpSelectionMerge %28 None
+ OpBranchConditional %25 %27 %33
+ %27 = OpLabel
+ %29 = OpLoad %float %a
+ %30 = OpExtInst %float %1 FAbs %29
+ %31 = OpLoad %float %b
+ %32 = OpExtInst %float %1 Pow %30 %31
+ OpStore %26 %32
+ OpBranch %28
+ %33 = OpLabel
+ %34 = OpLoad %float %a
+ %35 = OpExtInst %float %1 FSign %34
+ %36 = OpLoad %float %a
+ %37 = OpExtInst %float %1 FAbs %36
+ %38 = OpLoad %float %b
+ %39 = OpExtInst %float %1 Pow %37 %38
+ %40 = OpFMul %float %35 %39
+ OpStore %26 %40
+ OpBranch %28
+ %28 = OpLabel
+ %41 = OpLoad %float %26
+ OpReturnValue %41
+ OpFunctionEnd
diff --git a/test/bug/tint/977.spvasm.expected.hlsl b/test/bug/tint/977.spvasm.expected.hlsl
new file mode 100644
index 0000000..c37348c
--- /dev/null
+++ b/test/bug/tint/977.spvasm.expected.hlsl
@@ -0,0 +1,55 @@
+static uint3 gl_GlobalInvocationID = uint3(0u, 0u, 0u);
+RWByteAddressBuffer resultMatrix : register(u2, space0);
+ByteAddressBuffer firstMatrix : register(t0, space0);
+ByteAddressBuffer secondMatrix : register(t1, space0);
+cbuffer cbuffer_x_46 : register(b3, space0) {
+ uint4 x_46[1];
+};
+
+float binaryOperation_f1_f1_(inout float a, inout float b) {
+ float x_26 = 0.0f;
+ const float x_13 = b;
+ if ((x_13 == 0.0f)) {
+ return 1.0f;
+ }
+ const float x_21 = b;
+ if (!((round((x_21 % 2.0f)) == 1.0f))) {
+ const float x_29 = a;
+ const float x_31 = b;
+ x_26 = pow(abs(x_29), x_31);
+ } else {
+ const float x_34 = a;
+ const float x_36 = a;
+ const float x_38 = b;
+ x_26 = (sign(x_34) * pow(abs(x_36), x_38));
+ }
+ return x_26;
+}
+
+void main_1() {
+ int index = 0;
+ int a_1 = 0;
+ float param = 0.0f;
+ float param_1 = 0.0f;
+ const uint x_54 = gl_GlobalInvocationID.x;
+ index = asint(x_54);
+ a_1 = -10;
+ const int x_63 = index;
+ param = -4.0f;
+ param_1 = -3.0f;
+ const float x_68 = binaryOperation_f1_f1_(param, param_1);
+ resultMatrix.Store((4u * uint(x_63)), asuint(x_68));
+ return;
+}
+
+struct tint_symbol_1 {
+ uint3 gl_GlobalInvocationID_param : SV_DispatchThreadID;
+};
+
+[numthreads(1, 1, 1)]
+void main(tint_symbol_1 tint_symbol) {
+ const uint3 gl_GlobalInvocationID_param = tint_symbol.gl_GlobalInvocationID_param;
+ gl_GlobalInvocationID = gl_GlobalInvocationID_param;
+ main_1();
+ return;
+}
diff --git a/test/bug/tint/977.spvasm.expected.msl b/test/bug/tint/977.spvasm.expected.msl
new file mode 100644
index 0000000..9662b93
--- /dev/null
+++ b/test/bug/tint/977.spvasm.expected.msl
@@ -0,0 +1,71 @@
+SKIP: FAILED
+
+#include <metal_stdlib>
+
+using namespace metal;
+struct ResultMatrix {
+ /* 0x0000 */ float numbers[1];
+};
+struct FirstMatrix {
+ /* 0x0000 */ float numbers[1];
+};
+struct SecondMatrix {
+ /* 0x0000 */ float numbers[1];
+};
+struct Uniforms {
+ /* 0x0000 */ float tint_symbol;
+ /* 0x0004 */ int sizeA;
+ /* 0x0008 */ int sizeB;
+};
+
+float binaryOperation_f1_f1_(thread float* const a, thread float* const b) {
+ float x_26 = 0.0f;
+ float const x_13 = *(b);
+ if ((x_13 == 0.0f)) {
+ return 1.0f;
+ }
+ float const x_21 = *(b);
+ if (!((rint((x_21 % 2.0f)) == 1.0f))) {
+ float const x_29 = *(a);
+ float const x_31 = *(b);
+ x_26 = pow(fabs(x_29), x_31);
+ } else {
+ float const x_34 = *(a);
+ float const x_36 = *(a);
+ float const x_38 = *(b);
+ x_26 = (sign(x_34) * pow(fabs(x_36), x_38));
+ }
+ float const x_41 = x_26;
+ return x_41;
+}
+
+void main_1(device ResultMatrix& resultMatrix, thread uint3* const tint_symbol_3) {
+ int index = 0;
+ int a_1 = 0;
+ float param = 0.0f;
+ float param_1 = 0.0f;
+ uint const x_54 = (*(tint_symbol_3)).x;
+ index = as_type<int>(x_54);
+ a_1 = -10;
+ int const x_63 = index;
+ param = -4.0f;
+ param_1 = -3.0f;
+ float const x_68 = binaryOperation_f1_f1_(&(param), &(param_1));
+ resultMatrix.numbers[x_63] = x_68;
+ return;
+}
+
+kernel void tint_symbol_1(uint3 gl_GlobalInvocationID_param [[thread_position_in_grid]], device ResultMatrix& resultMatrix [[buffer(2)]]) {
+ thread uint3 tint_symbol_4 = 0u;
+ tint_symbol_4 = gl_GlobalInvocationID_param;
+ main_1(resultMatrix, &(tint_symbol_4));
+ return;
+}
+
+Compilation failed:
+
+program_source:26:21: error: invalid operands to binary expression ('const float' and 'float')
+ if (!((rint((x_21 % 2.0f)) == 1.0f))) {
+ ~~~~ ^ ~~~~
+
+
diff --git a/test/bug/tint/977.spvasm.expected.spvasm b/test/bug/tint/977.spvasm.expected.spvasm
new file mode 100644
index 0000000..76dd37d
--- /dev/null
+++ b/test/bug/tint/977.spvasm.expected.spvasm
@@ -0,0 +1,164 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 95
+; Schema: 0
+ OpCapability Shader
+ %43 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %main "main" %tint_symbol
+ OpExecutionMode %main LocalSize 1 1 1
+ OpName %gl_GlobalInvocationID "gl_GlobalInvocationID"
+ OpName %ResultMatrix "ResultMatrix"
+ OpMemberName %ResultMatrix 0 "numbers"
+ OpName %resultMatrix "resultMatrix"
+ OpName %FirstMatrix "FirstMatrix"
+ OpMemberName %FirstMatrix 0 "numbers"
+ OpName %firstMatrix "firstMatrix"
+ OpName %SecondMatrix "SecondMatrix"
+ OpMemberName %SecondMatrix 0 "numbers"
+ OpName %secondMatrix "secondMatrix"
+ OpName %Uniforms "Uniforms"
+ OpMemberName %Uniforms 0 "NAN"
+ OpMemberName %Uniforms 1 "sizeA"
+ OpMemberName %Uniforms 2 "sizeB"
+ OpName %x_46 "x_46"
+ OpName %tint_symbol "tint_symbol"
+ OpName %binaryOperation_f1_f1_ "binaryOperation_f1_f1_"
+ OpName %a "a"
+ OpName %b "b"
+ OpName %x_26 "x_26"
+ OpName %main_1 "main_1"
+ OpName %index "index"
+ OpName %a_1 "a_1"
+ OpName %param "param"
+ OpName %param_1 "param_1"
+ OpName %main "main"
+ OpDecorate %ResultMatrix Block
+ OpMemberDecorate %ResultMatrix 0 Offset 0
+ OpDecorate %_runtimearr_float ArrayStride 4
+ OpDecorate %resultMatrix DescriptorSet 0
+ OpDecorate %resultMatrix Binding 2
+ OpDecorate %FirstMatrix Block
+ OpMemberDecorate %FirstMatrix 0 Offset 0
+ OpDecorate %firstMatrix NonWritable
+ OpDecorate %firstMatrix DescriptorSet 0
+ OpDecorate %firstMatrix Binding 0
+ OpDecorate %SecondMatrix Block
+ OpMemberDecorate %SecondMatrix 0 Offset 0
+ OpDecorate %secondMatrix NonWritable
+ OpDecorate %secondMatrix DescriptorSet 0
+ OpDecorate %secondMatrix Binding 1
+ OpDecorate %Uniforms Block
+ OpMemberDecorate %Uniforms 0 Offset 0
+ OpMemberDecorate %Uniforms 1 Offset 4
+ OpMemberDecorate %Uniforms 2 Offset 8
+ OpDecorate %x_46 NonWritable
+ OpDecorate %x_46 DescriptorSet 0
+ OpDecorate %x_46 Binding 3
+ OpDecorate %tint_symbol BuiltIn GlobalInvocationId
+ %uint = OpTypeInt 32 0
+ %v3uint = OpTypeVector %uint 3
+%_ptr_Private_v3uint = OpTypePointer Private %v3uint
+ %5 = OpConstantNull %v3uint
+%gl_GlobalInvocationID = OpVariable %_ptr_Private_v3uint Private %5
+ %float = OpTypeFloat 32
+%_runtimearr_float = OpTypeRuntimeArray %float
+%ResultMatrix = OpTypeStruct %_runtimearr_float
+%_ptr_StorageBuffer_ResultMatrix = OpTypePointer StorageBuffer %ResultMatrix
+%resultMatrix = OpVariable %_ptr_StorageBuffer_ResultMatrix StorageBuffer
+%FirstMatrix = OpTypeStruct %_runtimearr_float
+%_ptr_StorageBuffer_FirstMatrix = OpTypePointer StorageBuffer %FirstMatrix
+%firstMatrix = OpVariable %_ptr_StorageBuffer_FirstMatrix StorageBuffer
+%SecondMatrix = OpTypeStruct %_runtimearr_float
+%_ptr_StorageBuffer_SecondMatrix = OpTypePointer StorageBuffer %SecondMatrix
+%secondMatrix = OpVariable %_ptr_StorageBuffer_SecondMatrix StorageBuffer
+ %int = OpTypeInt 32 1
+ %Uniforms = OpTypeStruct %float %int %int
+%_ptr_Uniform_Uniforms = OpTypePointer Uniform %Uniforms
+ %x_46 = OpVariable %_ptr_Uniform_Uniforms Uniform
+%_ptr_Input_v3uint = OpTypePointer Input %v3uint
+%tint_symbol = OpVariable %_ptr_Input_v3uint Input
+%_ptr_Function_float = OpTypePointer Function %float
+ %23 = OpTypeFunction %float %_ptr_Function_float %_ptr_Function_float
+ %30 = OpConstantNull %float
+ %float_0 = OpConstant %float 0
+ %bool = OpTypeBool
+ %float_1 = OpConstant %float 1
+ %float_2 = OpConstant %float 2
+ %void = OpTypeVoid
+ %67 = OpTypeFunction %void
+%_ptr_Function_int = OpTypePointer Function %int
+ %73 = OpConstantNull %int
+ %uint_0 = OpConstant %uint 0
+%_ptr_Private_uint = OpTypePointer Private %uint
+ %int_n10 = OpConstant %int -10
+ %float_n4 = OpConstant %float -4
+ %float_n3 = OpConstant %float -3
+%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
+%binaryOperation_f1_f1_ = OpFunction %float None %23
+ %a = OpFunctionParameter %_ptr_Function_float
+ %b = OpFunctionParameter %_ptr_Function_float
+ %28 = OpLabel
+ %x_26 = OpVariable %_ptr_Function_float Function %30
+ %32 = OpLoad %float %b
+ %34 = OpFOrdEqual %bool %32 %float_0
+ OpSelectionMerge %36 None
+ OpBranchConditional %34 %37 %36
+ %37 = OpLabel
+ OpReturnValue %float_1
+ %36 = OpLabel
+ %40 = OpLoad %float %b
+ %45 = OpFMod %float %40 %float_2
+ %42 = OpExtInst %float %43 RoundEven %45
+ %46 = OpFOrdEqual %bool %42 %float_1
+ %41 = OpLogicalNot %bool %46
+ OpSelectionMerge %47 None
+ OpBranchConditional %41 %48 %49
+ %48 = OpLabel
+ %51 = OpLoad %float %a
+ %53 = OpLoad %float %b
+ %55 = OpExtInst %float %43 FAbs %51
+ %54 = OpExtInst %float %43 Pow %55 %53
+ OpStore %x_26 %54
+ OpBranch %47
+ %49 = OpLabel
+ %57 = OpLoad %float %a
+ %59 = OpLoad %float %a
+ %61 = OpLoad %float %b
+ %62 = OpExtInst %float %43 FSign %57
+ %64 = OpExtInst %float %43 FAbs %59
+ %63 = OpExtInst %float %43 Pow %64 %61
+ %65 = OpFMul %float %62 %63
+ OpStore %x_26 %65
+ OpBranch %47
+ %47 = OpLabel
+ %66 = OpLoad %float %x_26
+ OpReturnValue %66
+ OpFunctionEnd
+ %main_1 = OpFunction %void None %67
+ %70 = OpLabel
+ %index = OpVariable %_ptr_Function_int Function %73
+ %a_1 = OpVariable %_ptr_Function_int Function %73
+ %param = OpVariable %_ptr_Function_float Function %30
+ %param_1 = OpVariable %_ptr_Function_float Function %30
+ %79 = OpAccessChain %_ptr_Private_uint %gl_GlobalInvocationID %uint_0
+ %80 = OpLoad %uint %79
+ %81 = OpBitcast %int %80
+ OpStore %index %81
+ OpStore %a_1 %int_n10
+ %83 = OpLoad %int %index
+ OpStore %param %float_n4
+ OpStore %param_1 %float_n3
+ %86 = OpFunctionCall %float %binaryOperation_f1_f1_ %param %param_1
+ %90 = OpAccessChain %_ptr_StorageBuffer_float %resultMatrix %uint_0 %83
+ OpStore %90 %86
+ OpReturn
+ OpFunctionEnd
+ %main = OpFunction %void None %67
+ %92 = OpLabel
+ %93 = OpLoad %v3uint %tint_symbol
+ OpStore %gl_GlobalInvocationID %93
+ %94 = OpFunctionCall %void %main_1
+ OpReturn
+ OpFunctionEnd
diff --git a/test/bug/tint/977.spvasm.expected.wgsl b/test/bug/tint/977.spvasm.expected.wgsl
new file mode 100644
index 0000000..b9f67d4
--- /dev/null
+++ b/test/bug/tint/977.spvasm.expected.wgsl
@@ -0,0 +1,80 @@
+type RTArr = [[stride(4)]] array<f32>;
+
+type RTArr_1 = [[stride(4)]] array<f32>;
+
+[[block]]
+struct ResultMatrix {
+ numbers : RTArr_1;
+};
+
+type RTArr_2 = [[stride(4)]] array<f32>;
+
+[[block]]
+struct FirstMatrix {
+ numbers : RTArr_1;
+};
+
+[[block]]
+struct SecondMatrix {
+ numbers : RTArr_1;
+};
+
+[[block]]
+struct Uniforms {
+ NAN : f32;
+ sizeA : i32;
+ sizeB : i32;
+};
+
+var<private> gl_GlobalInvocationID : vec3<u32>;
+
+[[group(0), binding(2)]] var<storage, read_write> resultMatrix : ResultMatrix;
+
+[[group(0), binding(0)]] var<storage, read> firstMatrix : FirstMatrix;
+
+[[group(0), binding(1)]] var<storage, read> secondMatrix : SecondMatrix;
+
+[[group(0), binding(3)]] var<uniform> x_46 : Uniforms;
+
+fn binaryOperation_f1_f1_(a : ptr<function, f32>, b : ptr<function, f32>) -> f32 {
+ var x_26 : f32;
+ let x_13 : f32 = *(b);
+ if ((x_13 == 0.0)) {
+ return 1.0;
+ }
+ let x_21 : f32 = *(b);
+ if (!((round((x_21 % 2.0)) == 1.0))) {
+ let x_29 : f32 = *(a);
+ let x_31 : f32 = *(b);
+ x_26 = pow(abs(x_29), x_31);
+ } else {
+ let x_34 : f32 = *(a);
+ let x_36 : f32 = *(a);
+ let x_38 : f32 = *(b);
+ x_26 = (sign(x_34) * pow(abs(x_36), x_38));
+ }
+ let x_41 : f32 = x_26;
+ return x_41;
+}
+
+fn main_1() {
+ var index : i32;
+ var a_1 : i32;
+ var param : f32;
+ var param_1 : f32;
+ let x_54 : u32 = gl_GlobalInvocationID.x;
+ index = bitcast<i32>(x_54);
+ a_1 = -10;
+ let x_63 : i32 = index;
+ param = -4.0;
+ param_1 = -3.0;
+ let x_68 : f32 = binaryOperation_f1_f1_(&(param), &(param_1));
+ resultMatrix.numbers[x_63] = x_68;
+ return;
+}
+
+[[stage(compute), workgroup_size(1, 1, 1)]]
+fn main([[builtin(global_invocation_id)]] gl_GlobalInvocationID_param : vec3<u32>) {
+ gl_GlobalInvocationID = gl_GlobalInvocationID_param;
+ main_1();
+}