[spirv] Generate IR expectations.

This CL generates the expectations for the SPIR-V IR backend.

Bug: 354711610
Change-Id: I70b32c31e9c99637f20abc3299874cec49cb1d0e
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/201274
Reviewed-by: Antonio Maiorano <amaiorano@google.com>
Commit-Queue: dan sinclair <dsinclair@chromium.org>
diff --git a/test/tint/array/assign_to_workgroup_var.wgsl.expected.ir.spvasm b/test/tint/array/assign_to_workgroup_var.wgsl.expected.ir.spvasm
new file mode 100644
index 0000000..2bfea5d
--- /dev/null
+++ b/test/tint/array/assign_to_workgroup_var.wgsl.expected.ir.spvasm
@@ -0,0 +1,200 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 1
+; Bound: 113
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint GLCompute %main "main" %main_local_invocation_index_Input
+               OpExecutionMode %main LocalSize 1 1 1
+               OpName %src_private "src_private"
+               OpName %src_workgroup "src_workgroup"
+               OpMemberName %S 0 "arr"
+               OpName %S "S"
+               OpMemberName %tint_symbol_1 0 "tint_symbol"
+               OpName %tint_symbol_1 "tint_symbol_1"
+               OpMemberName %tint_symbol_3 0 "tint_symbol_2"
+               OpName %tint_symbol_3 "tint_symbol_3"
+               OpName %dst "dst"
+               OpName %dst_nested "dst_nested"
+               OpName %main_local_invocation_index_Input "main_local_invocation_index_Input"
+               OpName %ret_arr "ret_arr"
+               OpName %ret_struct_arr "ret_struct_arr"
+               OpName %foo "foo"
+               OpName %src_param "src_param"
+               OpName %src_function "src_function"
+               OpName %src_let "src_let"
+               OpName %src_nested "src_nested"
+               OpName %main_inner "main_inner"
+               OpName %tint_local_index "tint_local_index"
+               OpName %src_let "val"
+               OpName %main "main"
+               OpDecorate %_arr_v4int_uint_4 ArrayStride 16
+               OpMemberDecorate %S 0 Offset 0
+               OpMemberDecorate %tint_symbol_1 0 Offset 0
+               OpDecorate %tint_symbol_1 Block
+               OpDecorate %11 DescriptorSet 0
+               OpDecorate %11 Binding 0
+               OpDecorate %11 NonWritable
+               OpMemberDecorate %tint_symbol_3 0 Offset 0
+               OpDecorate %tint_symbol_3 Block
+               OpDecorate %15 DescriptorSet 0
+               OpDecorate %15 Binding 1
+               OpDecorate %_arr_int_uint_2 ArrayStride 4
+               OpDecorate %_arr__arr_int_uint_2_uint_3 ArrayStride 8
+               OpDecorate %_arr__arr__arr_int_uint_2_uint_3_uint_4 ArrayStride 24
+               OpDecorate %main_local_invocation_index_Input BuiltIn LocalInvocationIndex
+        %int = OpTypeInt 32 1
+      %v4int = OpTypeVector %int 4
+       %uint = OpTypeInt 32 0
+     %uint_4 = OpConstant %uint 4
+%_arr_v4int_uint_4 = OpTypeArray %v4int %uint_4
+%_ptr_Private__arr_v4int_uint_4 = OpTypePointer Private %_arr_v4int_uint_4
+    %src_let = OpConstantNull %_arr_v4int_uint_4
+%src_private = OpVariable %_ptr_Private__arr_v4int_uint_4 Private %src_let
+%_ptr_Workgroup__arr_v4int_uint_4 = OpTypePointer Workgroup %_arr_v4int_uint_4
+%src_workgroup = OpVariable %_ptr_Workgroup__arr_v4int_uint_4 Workgroup
+          %S = OpTypeStruct %_arr_v4int_uint_4
+%tint_symbol_1 = OpTypeStruct %S
+%_ptr_Uniform_tint_symbol_1 = OpTypePointer Uniform %tint_symbol_1
+         %11 = OpVariable %_ptr_Uniform_tint_symbol_1 Uniform
+%tint_symbol_3 = OpTypeStruct %S
+%_ptr_StorageBuffer_tint_symbol_3 = OpTypePointer StorageBuffer %tint_symbol_3
+         %15 = OpVariable %_ptr_StorageBuffer_tint_symbol_3 StorageBuffer
+        %dst = OpVariable %_ptr_Workgroup__arr_v4int_uint_4 Workgroup
+     %uint_2 = OpConstant %uint 2
+%_arr_int_uint_2 = OpTypeArray %int %uint_2
+     %uint_3 = OpConstant %uint 3
+%_arr__arr_int_uint_2_uint_3 = OpTypeArray %_arr_int_uint_2 %uint_3
+%_arr__arr__arr_int_uint_2_uint_3_uint_4 = OpTypeArray %_arr__arr_int_uint_2_uint_3 %uint_4
+%_ptr_Workgroup__arr__arr__arr_int_uint_2_uint_3_uint_4 = OpTypePointer Workgroup %_arr__arr__arr_int_uint_2_uint_3_uint_4
+ %dst_nested = OpVariable %_ptr_Workgroup__arr__arr__arr_int_uint_2_uint_3_uint_4 Workgroup
+%_ptr_Input_uint = OpTypePointer Input %uint
+%main_local_invocation_index_Input = OpVariable %_ptr_Input_uint Input
+         %29 = OpTypeFunction %_arr_v4int_uint_4
+         %32 = OpTypeFunction %S
+         %34 = OpConstantNull %S
+       %void = OpTypeVoid
+         %38 = OpTypeFunction %void %_arr_v4int_uint_4
+%_ptr_Function__arr_v4int_uint_4 = OpTypePointer Function %_arr_v4int_uint_4
+      %int_1 = OpConstant %int 1
+         %43 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+      %int_2 = OpConstant %int 2
+         %45 = OpConstantComposite %v4int %int_2 %int_2 %int_2 %int_2
+      %int_3 = OpConstant %int 3
+         %47 = OpConstantComposite %v4int %int_3 %int_3 %int_3 %int_3
+         %42 = OpConstantComposite %_arr_v4int_uint_4 %43 %45 %47 %47
+%_ptr_Uniform__arr_v4int_uint_4 = OpTypePointer Uniform %_arr_v4int_uint_4
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer__arr_v4int_uint_4 = OpTypePointer StorageBuffer %_arr_v4int_uint_4
+%_ptr_Function__arr__arr__arr_int_uint_2_uint_3_uint_4 = OpTypePointer Function %_arr__arr__arr_int_uint_2_uint_3_uint_4
+         %64 = OpConstantNull %_arr__arr__arr_int_uint_2_uint_3_uint_4
+         %68 = OpTypeFunction %void %uint
+       %bool = OpTypeBool
+%_ptr_Workgroup_v4int = OpTypePointer Workgroup %v4int
+         %83 = OpConstantNull %v4int
+     %uint_1 = OpConstant %uint 1
+    %uint_24 = OpConstant %uint 24
+     %uint_6 = OpConstant %uint 6
+%_ptr_Workgroup_int = OpTypePointer Workgroup %int
+      %int_0 = OpConstant %int 0
+   %uint_264 = OpConstant %uint 264
+        %109 = OpTypeFunction %void
+    %ret_arr = OpFunction %_arr_v4int_uint_4 None %29
+         %30 = OpLabel
+               OpReturnValue %src_let
+               OpFunctionEnd
+%ret_struct_arr = OpFunction %S None %32
+         %33 = OpLabel
+               OpReturnValue %34
+               OpFunctionEnd
+        %foo = OpFunction %void None %38
+  %src_param = OpFunctionParameter %_arr_v4int_uint_4
+         %39 = OpLabel
+%src_function = OpVariable %_ptr_Function__arr_v4int_uint_4 Function %src_let
+ %src_nested = OpVariable %_ptr_Function__arr__arr__arr_int_uint_2_uint_3_uint_4 Function %64
+               OpStore %dst %42
+               OpStore %dst %src_param
+         %49 = OpFunctionCall %_arr_v4int_uint_4 %ret_arr
+               OpStore %dst %49
+               OpStore %dst %src_let
+         %50 = OpLoad %_arr_v4int_uint_4 %src_function
+               OpStore %dst %50
+         %51 = OpLoad %_arr_v4int_uint_4 %src_private
+               OpStore %dst %51
+         %52 = OpLoad %_arr_v4int_uint_4 %src_workgroup
+               OpStore %dst %52
+         %53 = OpFunctionCall %S %ret_struct_arr
+         %54 = OpCompositeExtract %_arr_v4int_uint_4 %53 0
+               OpStore %dst %54
+         %55 = OpAccessChain %_ptr_Uniform__arr_v4int_uint_4 %11 %uint_0 %uint_0
+         %58 = OpLoad %_arr_v4int_uint_4 %55
+               OpStore %dst %58
+         %59 = OpAccessChain %_ptr_StorageBuffer__arr_v4int_uint_4 %15 %uint_0 %uint_0
+         %61 = OpLoad %_arr_v4int_uint_4 %59
+               OpStore %dst %61
+         %65 = OpLoad %_arr__arr__arr_int_uint_2_uint_3_uint_4 %src_nested
+               OpStore %dst_nested %65
+               OpReturn
+               OpFunctionEnd
+ %main_inner = OpFunction %void None %68
+%tint_local_index = OpFunctionParameter %uint
+         %69 = OpLabel
+               OpBranch %70
+         %70 = OpLabel
+               OpBranch %73
+         %73 = OpLabel
+         %75 = OpPhi %uint %tint_local_index %70 %76 %72
+               OpLoopMerge %74 %72 None
+               OpBranch %71
+         %71 = OpLabel
+         %77 = OpUGreaterThanEqual %bool %75 %uint_4
+               OpSelectionMerge %79 None
+               OpBranchConditional %77 %80 %79
+         %80 = OpLabel
+               OpBranch %74
+         %79 = OpLabel
+         %81 = OpAccessChain %_ptr_Workgroup_v4int %src_workgroup %75
+               OpStore %81 %83
+         %84 = OpAccessChain %_ptr_Workgroup_v4int %dst %75
+               OpStore %84 %83
+               OpBranch %72
+         %72 = OpLabel
+         %76 = OpIAdd %uint %75 %uint_1
+               OpBranch %73
+         %74 = OpLabel
+               OpBranch %86
+         %86 = OpLabel
+               OpBranch %89
+         %89 = OpLabel
+         %91 = OpPhi %uint %tint_local_index %86 %92 %88
+               OpLoopMerge %90 %88 None
+               OpBranch %87
+         %87 = OpLabel
+         %93 = OpUGreaterThanEqual %bool %91 %uint_24
+               OpSelectionMerge %95 None
+               OpBranchConditional %93 %96 %95
+         %96 = OpLabel
+               OpBranch %90
+         %95 = OpLabel
+         %97 = OpUMod %uint %91 %uint_2
+         %98 = OpUDiv %uint %91 %uint_2
+         %99 = OpUMod %uint %98 %uint_3
+        %100 = OpUDiv %uint %91 %uint_6
+        %102 = OpAccessChain %_ptr_Workgroup_int %dst_nested %100 %99 %97
+               OpStore %102 %int_0
+               OpBranch %88
+         %88 = OpLabel
+         %92 = OpIAdd %uint %91 %uint_1
+               OpBranch %89
+         %90 = OpLabel
+               OpControlBarrier %uint_2 %uint_2 %uint_264
+        %107 = OpFunctionCall %void %foo %src_let
+               OpReturn
+               OpFunctionEnd
+       %main = OpFunction %void None %109
+        %110 = OpLabel
+        %111 = OpLoad %uint %main_local_invocation_index_Input
+        %112 = OpFunctionCall %void %main_inner %111
+               OpReturn
+               OpFunctionEnd