1e5c31af7Sopenharmony_ci# Copyright 2019 Google LLC
2e5c31af7Sopenharmony_ci#
3e5c31af7Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License");
4e5c31af7Sopenharmony_ci# you may not use this file except in compliance with the License.
5e5c31af7Sopenharmony_ci# You may obtain a copy of the License at
6e5c31af7Sopenharmony_ci#
7e5c31af7Sopenharmony_ci#     http://www.apache.org/licenses/LICENSE-2.0
8e5c31af7Sopenharmony_ci#
9e5c31af7Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software
10e5c31af7Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS,
11e5c31af7Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12e5c31af7Sopenharmony_ci# See the License for the specific language governing permissions and
13e5c31af7Sopenharmony_ci# limitations under the License.
14e5c31af7Sopenharmony_ci
15e5c31af7Sopenharmony_ci# A test for a bug found by GraphicsFuzz.
16e5c31af7Sopenharmony_ci
17e5c31af7Sopenharmony_ci# Short description: A compute shader with an unreachable barrier in a loop nest
18e5c31af7Sopenharmony_ci
19e5c31af7Sopenharmony_ci# The test passes because the compute shader has a single global invocation that
20e5c31af7Sopenharmony_ci# is guaranteed to set 'value' to (0.0, 0.0, 0.0, 1.0), and that writes the
21e5c31af7Sopenharmony_ci# components of 'value', cast to integers, to '_compute_data' at the end of
22e5c31af7Sopenharmony_ci# execution.  The early return is unreachable.
23e5c31af7Sopenharmony_ci
24e5c31af7Sopenharmony_ci# Derived from the following GLSL.
25e5c31af7Sopenharmony_ci
26e5c31af7Sopenharmony_ci# Compute shader GLSL:
27e5c31af7Sopenharmony_ci# #version 310 es
28e5c31af7Sopenharmony_ci#
29e5c31af7Sopenharmony_ci# precision highp float;
30e5c31af7Sopenharmony_ci#
31e5c31af7Sopenharmony_ci# layout(set = 0, binding = 2) uniform buf2 {
32e5c31af7Sopenharmony_ci#  vec2 resolution;
33e5c31af7Sopenharmony_ci# };
34e5c31af7Sopenharmony_ci#
35e5c31af7Sopenharmony_ci# layout(set = 0, binding = 1) uniform buf1 {
36e5c31af7Sopenharmony_ci#  vec2 injectionSwitch;
37e5c31af7Sopenharmony_ci# };
38e5c31af7Sopenharmony_ci#
39e5c31af7Sopenharmony_ci# layout(std430, binding = 0) buffer doesNotMatter {
40e5c31af7Sopenharmony_ci#  int _compute_data[];
41e5c31af7Sopenharmony_ci# };
42e5c31af7Sopenharmony_ci#
43e5c31af7Sopenharmony_ci# layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
44e5c31af7Sopenharmony_ci#
45e5c31af7Sopenharmony_ci# void main(void)
46e5c31af7Sopenharmony_ci# {
47e5c31af7Sopenharmony_ci#  vec4 value;
48e5c31af7Sopenharmony_ci#  float A[1];
49e5c31af7Sopenharmony_ci#  A[0] = 0.0;
50e5c31af7Sopenharmony_ci#  for(int i = 0; i < 50; i++) {
51e5c31af7Sopenharmony_ci#    if(i > 0) {
52e5c31af7Sopenharmony_ci#      A[0] += A[0];
53e5c31af7Sopenharmony_ci#    }
54e5c31af7Sopenharmony_ci#  }
55e5c31af7Sopenharmony_ci#  do {
56e5c31af7Sopenharmony_ci#   if(gl_GlobalInvocationID.x < 100u) {
57e5c31af7Sopenharmony_ci#    value = vec4(0.0, 0.0, 0.0, 1.0);
58e5c31af7Sopenharmony_ci#    for(int m = 0; m < 1; m++) {
59e5c31af7Sopenharmony_ci#     for(int l = 0; l < 1; l++) {
60e5c31af7Sopenharmony_ci#      if(injectionSwitch.x > injectionSwitch.y)
61e5c31af7Sopenharmony_ci#       return;
62e5c31af7Sopenharmony_ci#     }
63e5c31af7Sopenharmony_ci#    }
64e5c31af7Sopenharmony_ci#    for(int n = 0; n < 1; n ++) {
65e5c31af7Sopenharmony_ci#     if(injectionSwitch.x > injectionSwitch.y)
66e5c31af7Sopenharmony_ci#      barrier();
67e5c31af7Sopenharmony_ci#    }
68e5c31af7Sopenharmony_ci#   } else {
69e5c31af7Sopenharmony_ci#    if(gl_GlobalInvocationID.x < 120u) {
70e5c31af7Sopenharmony_ci#     value = vec4(A[0] / resolution.x, A[0] / resolution.y, 0.0, 1.0);
71e5c31af7Sopenharmony_ci#    } else {
72e5c31af7Sopenharmony_ci#     if(injectionSwitch.x > injectionSwitch.y)
73e5c31af7Sopenharmony_ci#      continue;
74e5c31af7Sopenharmony_ci#    }
75e5c31af7Sopenharmony_ci#   }
76e5c31af7Sopenharmony_ci#  } while(false);
77e5c31af7Sopenharmony_ci#  _compute_data[0] = int(value.x);
78e5c31af7Sopenharmony_ci#  _compute_data[1] = int(value.y);
79e5c31af7Sopenharmony_ci#  _compute_data[2] = int(value.z);
80e5c31af7Sopenharmony_ci#  _compute_data[3] = int(value.w);
81e5c31af7Sopenharmony_ci# }
82e5c31af7Sopenharmony_ci
83e5c31af7Sopenharmony_ci[compute shader spirv]
84e5c31af7Sopenharmony_ci; SPIR-V
85e5c31af7Sopenharmony_ci; Version: 1.0
86e5c31af7Sopenharmony_ci; Generator: Khronos Glslang Reference Front End; 7
87e5c31af7Sopenharmony_ci; Bound: 168
88e5c31af7Sopenharmony_ci; Schema: 0
89e5c31af7Sopenharmony_ci               OpCapability Shader
90e5c31af7Sopenharmony_ci          %1 = OpExtInstImport "GLSL.std.450"
91e5c31af7Sopenharmony_ci               OpMemoryModel Logical GLSL450
92e5c31af7Sopenharmony_ci               OpEntryPoint GLCompute %4 "main" %47
93e5c31af7Sopenharmony_ci               OpExecutionMode %4 LocalSize 1 1 1
94e5c31af7Sopenharmony_ci               OpSource ESSL 310
95e5c31af7Sopenharmony_ci               OpName %4 "main"
96e5c31af7Sopenharmony_ci               OpName %11 "A"
97e5c31af7Sopenharmony_ci               OpName %18 "i"
98e5c31af7Sopenharmony_ci               OpName %47 "gl_GlobalInvocationID"
99e5c31af7Sopenharmony_ci               OpName %58 "value"
100e5c31af7Sopenharmony_ci               OpName %61 "m"
101e5c31af7Sopenharmony_ci               OpName %69 "l"
102e5c31af7Sopenharmony_ci               OpName %78 "buf1"
103e5c31af7Sopenharmony_ci               OpMemberName %78 0 "injectionSwitch"
104e5c31af7Sopenharmony_ci               OpName %80 ""
105e5c31af7Sopenharmony_ci               OpName %94 "n"
106e5c31af7Sopenharmony_ci               OpName %122 "buf2"
107e5c31af7Sopenharmony_ci               OpMemberName %122 0 "resolution"
108e5c31af7Sopenharmony_ci               OpName %124 ""
109e5c31af7Sopenharmony_ci               OpName %145 "doesNotMatter"
110e5c31af7Sopenharmony_ci               OpMemberName %145 0 "_compute_data"
111e5c31af7Sopenharmony_ci               OpName %147 ""
112e5c31af7Sopenharmony_ci               OpDecorate %47 BuiltIn GlobalInvocationId
113e5c31af7Sopenharmony_ci               OpMemberDecorate %78 0 Offset 0
114e5c31af7Sopenharmony_ci               OpDecorate %78 Block
115e5c31af7Sopenharmony_ci               OpDecorate %80 DescriptorSet 0
116e5c31af7Sopenharmony_ci               OpDecorate %80 Binding 1
117e5c31af7Sopenharmony_ci               OpMemberDecorate %122 0 Offset 0
118e5c31af7Sopenharmony_ci               OpDecorate %122 Block
119e5c31af7Sopenharmony_ci               OpDecorate %124 DescriptorSet 0
120e5c31af7Sopenharmony_ci               OpDecorate %124 Binding 2
121e5c31af7Sopenharmony_ci               OpDecorate %144 ArrayStride 4
122e5c31af7Sopenharmony_ci               OpMemberDecorate %145 0 Offset 0
123e5c31af7Sopenharmony_ci               OpDecorate %145 BufferBlock
124e5c31af7Sopenharmony_ci               OpDecorate %147 DescriptorSet 0
125e5c31af7Sopenharmony_ci               OpDecorate %147 Binding 0
126e5c31af7Sopenharmony_ci          %2 = OpTypeVoid
127e5c31af7Sopenharmony_ci          %3 = OpTypeFunction %2
128e5c31af7Sopenharmony_ci          %6 = OpTypeFloat 32
129e5c31af7Sopenharmony_ci          %7 = OpTypeInt 32 0
130e5c31af7Sopenharmony_ci          %8 = OpConstant %7 1
131e5c31af7Sopenharmony_ci          %9 = OpTypeArray %6 %8
132e5c31af7Sopenharmony_ci         %10 = OpTypePointer Function %9
133e5c31af7Sopenharmony_ci         %12 = OpTypeInt 32 1
134e5c31af7Sopenharmony_ci         %13 = OpConstant %12 0
135e5c31af7Sopenharmony_ci         %14 = OpConstant %6 0
136e5c31af7Sopenharmony_ci         %15 = OpTypePointer Function %6
137e5c31af7Sopenharmony_ci         %17 = OpTypePointer Function %12
138e5c31af7Sopenharmony_ci         %25 = OpConstant %12 50
139e5c31af7Sopenharmony_ci         %26 = OpTypeBool
140e5c31af7Sopenharmony_ci         %39 = OpConstant %12 1
141e5c31af7Sopenharmony_ci         %45 = OpTypeVector %7 3
142e5c31af7Sopenharmony_ci         %46 = OpTypePointer Input %45
143e5c31af7Sopenharmony_ci         %47 = OpVariable %46 Input
144e5c31af7Sopenharmony_ci         %48 = OpConstant %7 0
145e5c31af7Sopenharmony_ci         %49 = OpTypePointer Input %7
146e5c31af7Sopenharmony_ci         %52 = OpConstant %7 100
147e5c31af7Sopenharmony_ci         %56 = OpTypeVector %6 4
148e5c31af7Sopenharmony_ci         %57 = OpTypePointer Function %56
149e5c31af7Sopenharmony_ci         %59 = OpConstant %6 1
150e5c31af7Sopenharmony_ci         %60 = OpConstantComposite %56 %14 %14 %14 %59
151e5c31af7Sopenharmony_ci         %77 = OpTypeVector %6 2
152e5c31af7Sopenharmony_ci         %78 = OpTypeStruct %77
153e5c31af7Sopenharmony_ci         %79 = OpTypePointer Uniform %78
154e5c31af7Sopenharmony_ci         %80 = OpVariable %79 Uniform
155e5c31af7Sopenharmony_ci         %81 = OpTypePointer Uniform %6
156e5c31af7Sopenharmony_ci        %109 = OpConstant %7 2
157e5c31af7Sopenharmony_ci        %110 = OpConstant %7 264
158e5c31af7Sopenharmony_ci        %116 = OpConstant %7 120
159e5c31af7Sopenharmony_ci        %122 = OpTypeStruct %77
160e5c31af7Sopenharmony_ci        %123 = OpTypePointer Uniform %122
161e5c31af7Sopenharmony_ci        %124 = OpVariable %123 Uniform
162e5c31af7Sopenharmony_ci        %143 = OpConstantFalse %26
163e5c31af7Sopenharmony_ci        %144 = OpTypeRuntimeArray %12
164e5c31af7Sopenharmony_ci        %145 = OpTypeStruct %144
165e5c31af7Sopenharmony_ci        %146 = OpTypePointer Uniform %145
166e5c31af7Sopenharmony_ci        %147 = OpVariable %146 Uniform
167e5c31af7Sopenharmony_ci        %151 = OpTypePointer Uniform %12
168e5c31af7Sopenharmony_ci        %157 = OpConstant %12 2
169e5c31af7Sopenharmony_ci        %162 = OpConstant %12 3
170e5c31af7Sopenharmony_ci        %163 = OpConstant %7 3
171e5c31af7Sopenharmony_ci          %4 = OpFunction %2 None %3
172e5c31af7Sopenharmony_ci          %5 = OpLabel
173e5c31af7Sopenharmony_ci         %11 = OpVariable %10 Function
174e5c31af7Sopenharmony_ci         %18 = OpVariable %17 Function
175e5c31af7Sopenharmony_ci         %58 = OpVariable %57 Function
176e5c31af7Sopenharmony_ci         %61 = OpVariable %17 Function
177e5c31af7Sopenharmony_ci         %69 = OpVariable %17 Function
178e5c31af7Sopenharmony_ci         %94 = OpVariable %17 Function
179e5c31af7Sopenharmony_ci         %16 = OpAccessChain %15 %11 %13
180e5c31af7Sopenharmony_ci               OpStore %16 %14
181e5c31af7Sopenharmony_ci               OpStore %18 %13
182e5c31af7Sopenharmony_ci               OpBranch %19
183e5c31af7Sopenharmony_ci         %19 = OpLabel
184e5c31af7Sopenharmony_ci               OpLoopMerge %21 %22 None
185e5c31af7Sopenharmony_ci               OpBranch %23
186e5c31af7Sopenharmony_ci         %23 = OpLabel
187e5c31af7Sopenharmony_ci         %24 = OpLoad %12 %18
188e5c31af7Sopenharmony_ci         %27 = OpSLessThan %26 %24 %25
189e5c31af7Sopenharmony_ci               OpBranchConditional %27 %20 %21
190e5c31af7Sopenharmony_ci         %20 = OpLabel
191e5c31af7Sopenharmony_ci         %28 = OpLoad %12 %18
192e5c31af7Sopenharmony_ci         %29 = OpSGreaterThan %26 %28 %13
193e5c31af7Sopenharmony_ci               OpSelectionMerge %31 None
194e5c31af7Sopenharmony_ci               OpBranchConditional %29 %30 %31
195e5c31af7Sopenharmony_ci         %30 = OpLabel
196e5c31af7Sopenharmony_ci         %32 = OpAccessChain %15 %11 %13
197e5c31af7Sopenharmony_ci         %33 = OpLoad %6 %32
198e5c31af7Sopenharmony_ci         %34 = OpAccessChain %15 %11 %13
199e5c31af7Sopenharmony_ci         %35 = OpLoad %6 %34
200e5c31af7Sopenharmony_ci         %36 = OpFAdd %6 %35 %33
201e5c31af7Sopenharmony_ci         %37 = OpAccessChain %15 %11 %13
202e5c31af7Sopenharmony_ci               OpStore %37 %36
203e5c31af7Sopenharmony_ci               OpBranch %31
204e5c31af7Sopenharmony_ci         %31 = OpLabel
205e5c31af7Sopenharmony_ci               OpBranch %22
206e5c31af7Sopenharmony_ci         %22 = OpLabel
207e5c31af7Sopenharmony_ci         %38 = OpLoad %12 %18
208e5c31af7Sopenharmony_ci         %40 = OpIAdd %12 %38 %39
209e5c31af7Sopenharmony_ci               OpStore %18 %40
210e5c31af7Sopenharmony_ci               OpBranch %19
211e5c31af7Sopenharmony_ci         %21 = OpLabel
212e5c31af7Sopenharmony_ci               OpBranch %41
213e5c31af7Sopenharmony_ci         %41 = OpLabel
214e5c31af7Sopenharmony_ci               OpLoopMerge %43 %44 None
215e5c31af7Sopenharmony_ci               OpBranch %42
216e5c31af7Sopenharmony_ci         %42 = OpLabel
217e5c31af7Sopenharmony_ci         %50 = OpAccessChain %49 %47 %48
218e5c31af7Sopenharmony_ci         %51 = OpLoad %7 %50
219e5c31af7Sopenharmony_ci         %53 = OpULessThan %26 %51 %52
220e5c31af7Sopenharmony_ci               OpSelectionMerge %55 None
221e5c31af7Sopenharmony_ci               OpBranchConditional %53 %54 %113
222e5c31af7Sopenharmony_ci         %54 = OpLabel
223e5c31af7Sopenharmony_ci               OpStore %58 %60
224e5c31af7Sopenharmony_ci               OpStore %61 %13
225e5c31af7Sopenharmony_ci               OpBranch %62
226e5c31af7Sopenharmony_ci         %62 = OpLabel
227e5c31af7Sopenharmony_ci               OpLoopMerge %64 %65 None
228e5c31af7Sopenharmony_ci               OpBranch %66
229e5c31af7Sopenharmony_ci         %66 = OpLabel
230e5c31af7Sopenharmony_ci         %67 = OpLoad %12 %61
231e5c31af7Sopenharmony_ci         %68 = OpSLessThan %26 %67 %39
232e5c31af7Sopenharmony_ci               OpBranchConditional %68 %63 %64
233e5c31af7Sopenharmony_ci         %63 = OpLabel
234e5c31af7Sopenharmony_ci               OpStore %69 %13
235e5c31af7Sopenharmony_ci               OpBranch %70
236e5c31af7Sopenharmony_ci         %70 = OpLabel
237e5c31af7Sopenharmony_ci               OpLoopMerge %72 %73 None
238e5c31af7Sopenharmony_ci               OpBranch %74
239e5c31af7Sopenharmony_ci         %74 = OpLabel
240e5c31af7Sopenharmony_ci         %75 = OpLoad %12 %69
241e5c31af7Sopenharmony_ci         %76 = OpSLessThan %26 %75 %39
242e5c31af7Sopenharmony_ci               OpBranchConditional %76 %71 %72
243e5c31af7Sopenharmony_ci         %71 = OpLabel
244e5c31af7Sopenharmony_ci         %82 = OpAccessChain %81 %80 %13 %48
245e5c31af7Sopenharmony_ci         %83 = OpLoad %6 %82
246e5c31af7Sopenharmony_ci         %84 = OpAccessChain %81 %80 %13 %8
247e5c31af7Sopenharmony_ci         %85 = OpLoad %6 %84
248e5c31af7Sopenharmony_ci         %86 = OpFOrdGreaterThan %26 %83 %85
249e5c31af7Sopenharmony_ci               OpSelectionMerge %88 None
250e5c31af7Sopenharmony_ci               OpBranchConditional %86 %87 %88
251e5c31af7Sopenharmony_ci         %87 = OpLabel
252e5c31af7Sopenharmony_ci               OpReturn
253e5c31af7Sopenharmony_ci         %88 = OpLabel
254e5c31af7Sopenharmony_ci               OpBranch %73
255e5c31af7Sopenharmony_ci         %73 = OpLabel
256e5c31af7Sopenharmony_ci         %90 = OpLoad %12 %69
257e5c31af7Sopenharmony_ci         %91 = OpIAdd %12 %90 %39
258e5c31af7Sopenharmony_ci               OpStore %69 %91
259e5c31af7Sopenharmony_ci               OpBranch %70
260e5c31af7Sopenharmony_ci         %72 = OpLabel
261e5c31af7Sopenharmony_ci               OpBranch %65
262e5c31af7Sopenharmony_ci         %65 = OpLabel
263e5c31af7Sopenharmony_ci         %92 = OpLoad %12 %61
264e5c31af7Sopenharmony_ci         %93 = OpIAdd %12 %92 %39
265e5c31af7Sopenharmony_ci               OpStore %61 %93
266e5c31af7Sopenharmony_ci               OpBranch %62
267e5c31af7Sopenharmony_ci         %64 = OpLabel
268e5c31af7Sopenharmony_ci               OpStore %94 %13
269e5c31af7Sopenharmony_ci               OpBranch %95
270e5c31af7Sopenharmony_ci         %95 = OpLabel
271e5c31af7Sopenharmony_ci               OpLoopMerge %97 %98 None
272e5c31af7Sopenharmony_ci               OpBranch %99
273e5c31af7Sopenharmony_ci         %99 = OpLabel
274e5c31af7Sopenharmony_ci        %100 = OpLoad %12 %94
275e5c31af7Sopenharmony_ci        %101 = OpSLessThan %26 %100 %39
276e5c31af7Sopenharmony_ci               OpBranchConditional %101 %96 %97
277e5c31af7Sopenharmony_ci         %96 = OpLabel
278e5c31af7Sopenharmony_ci        %102 = OpAccessChain %81 %80 %13 %48
279e5c31af7Sopenharmony_ci        %103 = OpLoad %6 %102
280e5c31af7Sopenharmony_ci        %104 = OpAccessChain %81 %80 %13 %8
281e5c31af7Sopenharmony_ci        %105 = OpLoad %6 %104
282e5c31af7Sopenharmony_ci        %106 = OpFOrdGreaterThan %26 %103 %105
283e5c31af7Sopenharmony_ci               OpSelectionMerge %108 None
284e5c31af7Sopenharmony_ci               OpBranchConditional %106 %107 %108
285e5c31af7Sopenharmony_ci        %107 = OpLabel
286e5c31af7Sopenharmony_ci               OpControlBarrier %109 %109 %110
287e5c31af7Sopenharmony_ci               OpBranch %108
288e5c31af7Sopenharmony_ci        %108 = OpLabel
289e5c31af7Sopenharmony_ci               OpBranch %98
290e5c31af7Sopenharmony_ci         %98 = OpLabel
291e5c31af7Sopenharmony_ci        %111 = OpLoad %12 %94
292e5c31af7Sopenharmony_ci        %112 = OpIAdd %12 %111 %39
293e5c31af7Sopenharmony_ci               OpStore %94 %112
294e5c31af7Sopenharmony_ci               OpBranch %95
295e5c31af7Sopenharmony_ci         %97 = OpLabel
296e5c31af7Sopenharmony_ci               OpBranch %55
297e5c31af7Sopenharmony_ci        %113 = OpLabel
298e5c31af7Sopenharmony_ci        %114 = OpAccessChain %49 %47 %48
299e5c31af7Sopenharmony_ci        %115 = OpLoad %7 %114
300e5c31af7Sopenharmony_ci        %117 = OpULessThan %26 %115 %116
301e5c31af7Sopenharmony_ci               OpSelectionMerge %119 None
302e5c31af7Sopenharmony_ci               OpBranchConditional %117 %118 %134
303e5c31af7Sopenharmony_ci        %118 = OpLabel
304e5c31af7Sopenharmony_ci        %120 = OpAccessChain %15 %11 %13
305e5c31af7Sopenharmony_ci        %121 = OpLoad %6 %120
306e5c31af7Sopenharmony_ci        %125 = OpAccessChain %81 %124 %13 %48
307e5c31af7Sopenharmony_ci        %126 = OpLoad %6 %125
308e5c31af7Sopenharmony_ci        %127 = OpFDiv %6 %121 %126
309e5c31af7Sopenharmony_ci        %128 = OpAccessChain %15 %11 %13
310e5c31af7Sopenharmony_ci        %129 = OpLoad %6 %128
311e5c31af7Sopenharmony_ci        %130 = OpAccessChain %81 %124 %13 %8
312e5c31af7Sopenharmony_ci        %131 = OpLoad %6 %130
313e5c31af7Sopenharmony_ci        %132 = OpFDiv %6 %129 %131
314e5c31af7Sopenharmony_ci        %133 = OpCompositeConstruct %56 %127 %132 %14 %59
315e5c31af7Sopenharmony_ci               OpStore %58 %133
316e5c31af7Sopenharmony_ci               OpBranch %119
317e5c31af7Sopenharmony_ci        %134 = OpLabel
318e5c31af7Sopenharmony_ci        %135 = OpAccessChain %81 %80 %13 %48
319e5c31af7Sopenharmony_ci        %136 = OpLoad %6 %135
320e5c31af7Sopenharmony_ci        %137 = OpAccessChain %81 %80 %13 %8
321e5c31af7Sopenharmony_ci        %138 = OpLoad %6 %137
322e5c31af7Sopenharmony_ci        %139 = OpFOrdGreaterThan %26 %136 %138
323e5c31af7Sopenharmony_ci               OpSelectionMerge %141 None
324e5c31af7Sopenharmony_ci               OpBranchConditional %139 %140 %141
325e5c31af7Sopenharmony_ci        %140 = OpLabel
326e5c31af7Sopenharmony_ci               OpBranch %44
327e5c31af7Sopenharmony_ci        %141 = OpLabel
328e5c31af7Sopenharmony_ci               OpBranch %119
329e5c31af7Sopenharmony_ci        %119 = OpLabel
330e5c31af7Sopenharmony_ci               OpBranch %55
331e5c31af7Sopenharmony_ci         %55 = OpLabel
332e5c31af7Sopenharmony_ci               OpBranch %44
333e5c31af7Sopenharmony_ci         %44 = OpLabel
334e5c31af7Sopenharmony_ci               OpBranchConditional %143 %41 %43
335e5c31af7Sopenharmony_ci         %43 = OpLabel
336e5c31af7Sopenharmony_ci        %148 = OpAccessChain %15 %58 %48
337e5c31af7Sopenharmony_ci        %149 = OpLoad %6 %148
338e5c31af7Sopenharmony_ci        %150 = OpConvertFToS %12 %149
339e5c31af7Sopenharmony_ci        %152 = OpAccessChain %151 %147 %13 %13
340e5c31af7Sopenharmony_ci               OpStore %152 %150
341e5c31af7Sopenharmony_ci        %153 = OpAccessChain %15 %58 %8
342e5c31af7Sopenharmony_ci        %154 = OpLoad %6 %153
343e5c31af7Sopenharmony_ci        %155 = OpConvertFToS %12 %154
344e5c31af7Sopenharmony_ci        %156 = OpAccessChain %151 %147 %13 %39
345e5c31af7Sopenharmony_ci               OpStore %156 %155
346e5c31af7Sopenharmony_ci        %158 = OpAccessChain %15 %58 %109
347e5c31af7Sopenharmony_ci        %159 = OpLoad %6 %158
348e5c31af7Sopenharmony_ci        %160 = OpConvertFToS %12 %159
349e5c31af7Sopenharmony_ci        %161 = OpAccessChain %151 %147 %13 %157
350e5c31af7Sopenharmony_ci               OpStore %161 %160
351e5c31af7Sopenharmony_ci        %164 = OpAccessChain %15 %58 %163
352e5c31af7Sopenharmony_ci        %165 = OpLoad %6 %164
353e5c31af7Sopenharmony_ci        %166 = OpConvertFToS %12 %165
354e5c31af7Sopenharmony_ci        %167 = OpAccessChain %151 %147 %13 %162
355e5c31af7Sopenharmony_ci               OpStore %167 %166
356e5c31af7Sopenharmony_ci               OpReturn
357e5c31af7Sopenharmony_ci               OpFunctionEnd
358e5c31af7Sopenharmony_ci
359e5c31af7Sopenharmony_ci
360e5c31af7Sopenharmony_ci[test]
361e5c31af7Sopenharmony_ci## Uniforms
362e5c31af7Sopenharmony_ci# injectionSwitch
363e5c31af7Sopenharmony_ciuniform ubo 0:1 vec2 0 0.0 1.0
364e5c31af7Sopenharmony_ci# resolution
365e5c31af7Sopenharmony_ciuniform ubo 0:2 vec2 0 256.0 256.0
366e5c31af7Sopenharmony_ci## SSBO
367e5c31af7Sopenharmony_cissbo 0 subdata int 0 0 0 0 0
368e5c31af7Sopenharmony_ci
369e5c31af7Sopenharmony_cicompute 3 1 1
370e5c31af7Sopenharmony_ciprobe ssbo int 0 0 == 0
371e5c31af7Sopenharmony_ciprobe ssbo int 0 4 == 0
372e5c31af7Sopenharmony_ciprobe ssbo int 0 8 == 0
373e5c31af7Sopenharmony_ciprobe ssbo int 0 12 == 1
374