1fd4e5da5Sopenharmony_ci// GENERATED FILE - DO NOT EDIT.
2fd4e5da5Sopenharmony_ci// Generated by generate_tests.py
3fd4e5da5Sopenharmony_ci//
4fd4e5da5Sopenharmony_ci// Copyright (c) 2022 Google LLC.
5fd4e5da5Sopenharmony_ci//
6fd4e5da5Sopenharmony_ci// Licensed under the Apache License, Version 2.0 (the "License");
7fd4e5da5Sopenharmony_ci// you may not use this file except in compliance with the License.
8fd4e5da5Sopenharmony_ci// You may obtain a copy of the License at
9fd4e5da5Sopenharmony_ci//
10fd4e5da5Sopenharmony_ci//     http://www.apache.org/licenses/LICENSE-2.0
11fd4e5da5Sopenharmony_ci//
12fd4e5da5Sopenharmony_ci// Unless required by applicable law or agreed to in writing, software
13fd4e5da5Sopenharmony_ci// distributed under the License is distributed on an "AS IS" BASIS,
14fd4e5da5Sopenharmony_ci// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15fd4e5da5Sopenharmony_ci// See the License for the specific language governing permissions and
16fd4e5da5Sopenharmony_ci// limitations under the License.
17fd4e5da5Sopenharmony_ci
18fd4e5da5Sopenharmony_ci#include "../diff_test_utils.h"
19fd4e5da5Sopenharmony_ci
20fd4e5da5Sopenharmony_ci#include "gtest/gtest.h"
21fd4e5da5Sopenharmony_ci
22fd4e5da5Sopenharmony_cinamespace spvtools {
23fd4e5da5Sopenharmony_cinamespace diff {
24fd4e5da5Sopenharmony_cinamespace {
25fd4e5da5Sopenharmony_ci
26fd4e5da5Sopenharmony_ci// Basic test for spirv-diff
27fd4e5da5Sopenharmony_ciconstexpr char kSrc[] = R"(; SPIR-V
28fd4e5da5Sopenharmony_ci; Version: 1.0
29fd4e5da5Sopenharmony_ci; Generator: Google ANGLE Shader Compiler; 0
30fd4e5da5Sopenharmony_ci; Bound: 27
31fd4e5da5Sopenharmony_ci; Schema: 0
32fd4e5da5Sopenharmony_ciOpCapability Shader
33fd4e5da5Sopenharmony_ci  OpMemoryModel Logical GLSL450
34fd4e5da5Sopenharmony_ci  OpEntryPoint Vertex %22 "main" %4 %14 %19
35fd4e5da5Sopenharmony_ci  OpSource GLSL 450
36fd4e5da5Sopenharmony_ci  OpName %4 "_ua_position"
37fd4e5da5Sopenharmony_ci  OpName %14 "ANGLEXfbPosition"
38fd4e5da5Sopenharmony_ci  OpName %17 "gl_PerVertex"
39fd4e5da5Sopenharmony_ci  OpMemberName %17 0 "gl_Position"
40fd4e5da5Sopenharmony_ciOpMemberName %17 1 "gl_PointSize"
41fd4e5da5Sopenharmony_ciOpMemberName %17 2 "gl_ClipDistance"
42fd4e5da5Sopenharmony_ci  OpMemberName %17 3 "gl_CullDistance"
43fd4e5da5Sopenharmony_ci  OpName %19 ""
44fd4e5da5Sopenharmony_ci  OpName %22 "main"
45fd4e5da5Sopenharmony_ci  OpDecorate %4 Location 0
46fd4e5da5Sopenharmony_ci  OpDecorate %14 Location 0
47fd4e5da5Sopenharmony_ci  OpMemberDecorate %17 1 RelaxedPrecision
48fd4e5da5Sopenharmony_ci  OpMemberDecorate %17 0 BuiltIn Position
49fd4e5da5Sopenharmony_ci  OpMemberDecorate %17 1 BuiltIn PointSize
50fd4e5da5Sopenharmony_ciOpMemberDecorate %17 2 BuiltIn ClipDistance
51fd4e5da5Sopenharmony_ciOpMemberDecorate %17 3 BuiltIn CullDistance
52fd4e5da5Sopenharmony_ciOpDecorate %17 Block
53fd4e5da5Sopenharmony_ci%1 = OpTypeFloat 32
54fd4e5da5Sopenharmony_ci%2 = OpTypeVector %1 4
55fd4e5da5Sopenharmony_ci%5 = OpTypeInt 32 0
56fd4e5da5Sopenharmony_ci%6 = OpTypeInt 32 1
57fd4e5da5Sopenharmony_ci%15 = OpConstant %5 8
58fd4e5da5Sopenharmony_ci%16 = OpTypeArray %1 %15
59fd4e5da5Sopenharmony_ci%17 = OpTypeStruct %2 %1 %16 %16
60fd4e5da5Sopenharmony_ci%20 = OpTypeVoid
61fd4e5da5Sopenharmony_ci%25 = OpConstant %6 0
62fd4e5da5Sopenharmony_ci%3 = OpTypePointer Input %2
63fd4e5da5Sopenharmony_ci%13 = OpTypePointer Output %2
64fd4e5da5Sopenharmony_ci%18 = OpTypePointer Output %17
65fd4e5da5Sopenharmony_ci%21 = OpTypeFunction %20
66fd4e5da5Sopenharmony_ci%4 = OpVariable %3 Input
67fd4e5da5Sopenharmony_ci%14 = OpVariable %13 Output
68fd4e5da5Sopenharmony_ci%19 = OpVariable %18 Output
69fd4e5da5Sopenharmony_ci%22 = OpFunction %20 None %21
70fd4e5da5Sopenharmony_ci%23 = OpLabel
71fd4e5da5Sopenharmony_ci%24 = OpLoad %2 %4
72fd4e5da5Sopenharmony_ci%26 = OpAccessChain %13 %19 %25
73fd4e5da5Sopenharmony_ciOpStore %26 %24
74fd4e5da5Sopenharmony_ciOpReturn
75fd4e5da5Sopenharmony_ciOpFunctionEnd)";
76fd4e5da5Sopenharmony_ciconstexpr char kDst[] = R"(; SPIR-V
77fd4e5da5Sopenharmony_ci; Version: 1.0
78fd4e5da5Sopenharmony_ci; Generator: Khronos Glslang Reference Front End; 10
79fd4e5da5Sopenharmony_ci; Bound: 28
80fd4e5da5Sopenharmony_ci; Schema: 0
81fd4e5da5Sopenharmony_ciOpCapability Shader
82fd4e5da5Sopenharmony_ci%1 = OpExtInstImport "GLSL.std.450"
83fd4e5da5Sopenharmony_ciOpMemoryModel Logical GLSL450
84fd4e5da5Sopenharmony_ciOpEntryPoint Vertex %4 "main" %13 %17 %27
85fd4e5da5Sopenharmony_ciOpSource GLSL 450
86fd4e5da5Sopenharmony_ciOpName %4 "main"
87fd4e5da5Sopenharmony_ciOpName %11 "gl_PerVertex"
88fd4e5da5Sopenharmony_ciOpMemberName %11 0 "gl_Position"
89fd4e5da5Sopenharmony_ciOpMemberName %11 1 "gl_PointSize"
90fd4e5da5Sopenharmony_ciOpMemberName %11 2 "gl_ClipDistance"
91fd4e5da5Sopenharmony_ciOpMemberName %11 3 "gl_CullDistance"
92fd4e5da5Sopenharmony_ciOpName %13 ""
93fd4e5da5Sopenharmony_ciOpName %17 "_ua_position"
94fd4e5da5Sopenharmony_ciOpName %27 "ANGLEXfbPosition"
95fd4e5da5Sopenharmony_ciOpMemberDecorate %11 0 BuiltIn Position
96fd4e5da5Sopenharmony_ciOpMemberDecorate %11 1 BuiltIn PointSize
97fd4e5da5Sopenharmony_ciOpMemberDecorate %11 2 BuiltIn ClipDistance
98fd4e5da5Sopenharmony_ciOpMemberDecorate %11 3 BuiltIn CullDistance
99fd4e5da5Sopenharmony_ciOpDecorate %11 Block
100fd4e5da5Sopenharmony_ciOpDecorate %17 Location 0
101fd4e5da5Sopenharmony_ciOpDecorate %27 Location 0
102fd4e5da5Sopenharmony_ci%2 = OpTypeVoid
103fd4e5da5Sopenharmony_ci%3 = OpTypeFunction %2
104fd4e5da5Sopenharmony_ci%6 = OpTypeFloat 32
105fd4e5da5Sopenharmony_ci%7 = OpTypeVector %6 4
106fd4e5da5Sopenharmony_ci%8 = OpTypeInt 32 0
107fd4e5da5Sopenharmony_ci%9 = OpConstant %8 1
108fd4e5da5Sopenharmony_ci%10 = OpTypeArray %6 %9
109fd4e5da5Sopenharmony_ci%11 = OpTypeStruct %7 %6 %10 %10
110fd4e5da5Sopenharmony_ci%12 = OpTypePointer Output %11
111fd4e5da5Sopenharmony_ci%13 = OpVariable %12 Output
112fd4e5da5Sopenharmony_ci%14 = OpTypeInt 32 1
113fd4e5da5Sopenharmony_ci%15 = OpConstant %14 0
114fd4e5da5Sopenharmony_ci%16 = OpTypePointer Input %7
115fd4e5da5Sopenharmony_ci%17 = OpVariable %16 Input
116fd4e5da5Sopenharmony_ci%19 = OpTypePointer Output %7
117fd4e5da5Sopenharmony_ci%27 = OpVariable %19 Output
118fd4e5da5Sopenharmony_ci%4 = OpFunction %2 None %3
119fd4e5da5Sopenharmony_ci%5 = OpLabel
120fd4e5da5Sopenharmony_ci%18 = OpLoad %7 %17
121fd4e5da5Sopenharmony_ci%20 = OpAccessChain %19 %13 %15
122fd4e5da5Sopenharmony_ciOpStore %20 %18
123fd4e5da5Sopenharmony_ciOpReturn
124fd4e5da5Sopenharmony_ciOpFunctionEnd
125fd4e5da5Sopenharmony_ci)";
126fd4e5da5Sopenharmony_ci
127fd4e5da5Sopenharmony_ciTEST(DiffTest, Basic) {
128fd4e5da5Sopenharmony_ci  constexpr char kDiff[] = R"( ; SPIR-V
129fd4e5da5Sopenharmony_ci ; Version: 1.6
130fd4e5da5Sopenharmony_ci ; Generator: Khronos SPIR-V Tools Assembler; 0
131fd4e5da5Sopenharmony_ci-; Bound: 27
132fd4e5da5Sopenharmony_ci+; Bound: 30
133fd4e5da5Sopenharmony_ci ; Schema: 0
134fd4e5da5Sopenharmony_ci OpCapability Shader
135fd4e5da5Sopenharmony_ci+%27 = OpExtInstImport "GLSL.std.450"
136fd4e5da5Sopenharmony_ci OpMemoryModel Logical GLSL450
137fd4e5da5Sopenharmony_ci-OpEntryPoint Vertex %22 "main" %4 %14 %19
138fd4e5da5Sopenharmony_ci+OpEntryPoint Vertex %22 "main" %19 %4 %14
139fd4e5da5Sopenharmony_ci OpSource GLSL 450
140fd4e5da5Sopenharmony_ci OpName %4 "_ua_position"
141fd4e5da5Sopenharmony_ci OpName %14 "ANGLEXfbPosition"
142fd4e5da5Sopenharmony_ci OpName %17 "gl_PerVertex"
143fd4e5da5Sopenharmony_ci OpMemberName %17 0 "gl_Position"
144fd4e5da5Sopenharmony_ci OpMemberName %17 1 "gl_PointSize"
145fd4e5da5Sopenharmony_ci OpMemberName %17 2 "gl_ClipDistance"
146fd4e5da5Sopenharmony_ci OpMemberName %17 3 "gl_CullDistance"
147fd4e5da5Sopenharmony_ci OpName %19 ""
148fd4e5da5Sopenharmony_ci OpName %22 "main"
149fd4e5da5Sopenharmony_ci OpDecorate %4 Location 0
150fd4e5da5Sopenharmony_ci OpDecorate %14 Location 0
151fd4e5da5Sopenharmony_ci-OpMemberDecorate %17 1 RelaxedPrecision
152fd4e5da5Sopenharmony_ci OpMemberDecorate %17 0 BuiltIn Position
153fd4e5da5Sopenharmony_ci OpMemberDecorate %17 1 BuiltIn PointSize
154fd4e5da5Sopenharmony_ci OpMemberDecorate %17 2 BuiltIn ClipDistance
155fd4e5da5Sopenharmony_ci OpMemberDecorate %17 3 BuiltIn CullDistance
156fd4e5da5Sopenharmony_ci OpDecorate %17 Block
157fd4e5da5Sopenharmony_ci %1 = OpTypeFloat 32
158fd4e5da5Sopenharmony_ci %2 = OpTypeVector %1 4
159fd4e5da5Sopenharmony_ci %5 = OpTypeInt 32 0
160fd4e5da5Sopenharmony_ci %6 = OpTypeInt 32 1
161fd4e5da5Sopenharmony_ci-%15 = OpConstant %5 8
162fd4e5da5Sopenharmony_ci-%16 = OpTypeArray %1 %15
163fd4e5da5Sopenharmony_ci-%17 = OpTypeStruct %2 %1 %16 %16
164fd4e5da5Sopenharmony_ci+%17 = OpTypeStruct %2 %1 %29 %29
165fd4e5da5Sopenharmony_ci+%28 = OpConstant %5 1
166fd4e5da5Sopenharmony_ci+%29 = OpTypeArray %1 %28
167fd4e5da5Sopenharmony_ci %20 = OpTypeVoid
168fd4e5da5Sopenharmony_ci %25 = OpConstant %6 0
169fd4e5da5Sopenharmony_ci %3 = OpTypePointer Input %2
170fd4e5da5Sopenharmony_ci %13 = OpTypePointer Output %2
171fd4e5da5Sopenharmony_ci %18 = OpTypePointer Output %17
172fd4e5da5Sopenharmony_ci %21 = OpTypeFunction %20
173fd4e5da5Sopenharmony_ci %4 = OpVariable %3 Input
174fd4e5da5Sopenharmony_ci %14 = OpVariable %13 Output
175fd4e5da5Sopenharmony_ci %19 = OpVariable %18 Output
176fd4e5da5Sopenharmony_ci %22 = OpFunction %20 None %21
177fd4e5da5Sopenharmony_ci %23 = OpLabel
178fd4e5da5Sopenharmony_ci %24 = OpLoad %2 %4
179fd4e5da5Sopenharmony_ci %26 = OpAccessChain %13 %19 %25
180fd4e5da5Sopenharmony_ci OpStore %26 %24
181fd4e5da5Sopenharmony_ci OpReturn
182fd4e5da5Sopenharmony_ci OpFunctionEnd
183fd4e5da5Sopenharmony_ci)";
184fd4e5da5Sopenharmony_ci  Options options;
185fd4e5da5Sopenharmony_ci  DoStringDiffTest(kSrc, kDst, kDiff, options);
186fd4e5da5Sopenharmony_ci}
187fd4e5da5Sopenharmony_ci
188fd4e5da5Sopenharmony_ciTEST(DiffTest, BasicNoDebug) {
189fd4e5da5Sopenharmony_ci  constexpr char kSrcNoDebug[] = R"(; SPIR-V
190fd4e5da5Sopenharmony_ci; Version: 1.0
191fd4e5da5Sopenharmony_ci; Generator: Google ANGLE Shader Compiler; 0
192fd4e5da5Sopenharmony_ci; Bound: 27
193fd4e5da5Sopenharmony_ci; Schema: 0
194fd4e5da5Sopenharmony_ciOpCapability Shader
195fd4e5da5Sopenharmony_ci  OpMemoryModel Logical GLSL450
196fd4e5da5Sopenharmony_ci  OpEntryPoint Vertex %22 "main" %4 %14 %19
197fd4e5da5Sopenharmony_ci  OpSource GLSL 450
198fd4e5da5Sopenharmony_ci  OpDecorate %4 Location 0
199fd4e5da5Sopenharmony_ci  OpDecorate %14 Location 0
200fd4e5da5Sopenharmony_ci  OpMemberDecorate %17 1 RelaxedPrecision
201fd4e5da5Sopenharmony_ci  OpMemberDecorate %17 0 BuiltIn Position
202fd4e5da5Sopenharmony_ci  OpMemberDecorate %17 1 BuiltIn PointSize
203fd4e5da5Sopenharmony_ciOpMemberDecorate %17 2 BuiltIn ClipDistance
204fd4e5da5Sopenharmony_ciOpMemberDecorate %17 3 BuiltIn CullDistance
205fd4e5da5Sopenharmony_ciOpDecorate %17 Block
206fd4e5da5Sopenharmony_ci%1 = OpTypeFloat 32
207fd4e5da5Sopenharmony_ci%2 = OpTypeVector %1 4
208fd4e5da5Sopenharmony_ci%5 = OpTypeInt 32 0
209fd4e5da5Sopenharmony_ci%6 = OpTypeInt 32 1
210fd4e5da5Sopenharmony_ci%15 = OpConstant %5 8
211fd4e5da5Sopenharmony_ci%16 = OpTypeArray %1 %15
212fd4e5da5Sopenharmony_ci%17 = OpTypeStruct %2 %1 %16 %16
213fd4e5da5Sopenharmony_ci%20 = OpTypeVoid
214fd4e5da5Sopenharmony_ci%25 = OpConstant %6 0
215fd4e5da5Sopenharmony_ci%3 = OpTypePointer Input %2
216fd4e5da5Sopenharmony_ci%13 = OpTypePointer Output %2
217fd4e5da5Sopenharmony_ci%18 = OpTypePointer Output %17
218fd4e5da5Sopenharmony_ci%21 = OpTypeFunction %20
219fd4e5da5Sopenharmony_ci%4 = OpVariable %3 Input
220fd4e5da5Sopenharmony_ci%14 = OpVariable %13 Output
221fd4e5da5Sopenharmony_ci%19 = OpVariable %18 Output
222fd4e5da5Sopenharmony_ci%22 = OpFunction %20 None %21
223fd4e5da5Sopenharmony_ci%23 = OpLabel
224fd4e5da5Sopenharmony_ci%24 = OpLoad %2 %4
225fd4e5da5Sopenharmony_ci%26 = OpAccessChain %13 %19 %25
226fd4e5da5Sopenharmony_ciOpStore %26 %24
227fd4e5da5Sopenharmony_ciOpReturn
228fd4e5da5Sopenharmony_ciOpFunctionEnd
229fd4e5da5Sopenharmony_ci)";
230fd4e5da5Sopenharmony_ci  constexpr char kDstNoDebug[] = R"(; SPIR-V
231fd4e5da5Sopenharmony_ci; Version: 1.0
232fd4e5da5Sopenharmony_ci; Generator: Khronos Glslang Reference Front End; 10
233fd4e5da5Sopenharmony_ci; Bound: 28
234fd4e5da5Sopenharmony_ci; Schema: 0
235fd4e5da5Sopenharmony_ciOpCapability Shader
236fd4e5da5Sopenharmony_ci%1 = OpExtInstImport "GLSL.std.450"
237fd4e5da5Sopenharmony_ciOpMemoryModel Logical GLSL450
238fd4e5da5Sopenharmony_ciOpEntryPoint Vertex %4 "main" %13 %17 %27
239fd4e5da5Sopenharmony_ciOpSource GLSL 450
240fd4e5da5Sopenharmony_ciOpMemberDecorate %11 0 BuiltIn Position
241fd4e5da5Sopenharmony_ciOpMemberDecorate %11 1 BuiltIn PointSize
242fd4e5da5Sopenharmony_ciOpMemberDecorate %11 2 BuiltIn ClipDistance
243fd4e5da5Sopenharmony_ciOpMemberDecorate %11 3 BuiltIn CullDistance
244fd4e5da5Sopenharmony_ciOpDecorate %11 Block
245fd4e5da5Sopenharmony_ciOpDecorate %17 Location 0
246fd4e5da5Sopenharmony_ciOpDecorate %27 Location 0
247fd4e5da5Sopenharmony_ci%2 = OpTypeVoid
248fd4e5da5Sopenharmony_ci%3 = OpTypeFunction %2
249fd4e5da5Sopenharmony_ci%6 = OpTypeFloat 32
250fd4e5da5Sopenharmony_ci%7 = OpTypeVector %6 4
251fd4e5da5Sopenharmony_ci%8 = OpTypeInt 32 0
252fd4e5da5Sopenharmony_ci%9 = OpConstant %8 1
253fd4e5da5Sopenharmony_ci%10 = OpTypeArray %6 %9
254fd4e5da5Sopenharmony_ci%11 = OpTypeStruct %7 %6 %10 %10
255fd4e5da5Sopenharmony_ci%12 = OpTypePointer Output %11
256fd4e5da5Sopenharmony_ci%13 = OpVariable %12 Output
257fd4e5da5Sopenharmony_ci%14 = OpTypeInt 32 1
258fd4e5da5Sopenharmony_ci%15 = OpConstant %14 0
259fd4e5da5Sopenharmony_ci%16 = OpTypePointer Input %7
260fd4e5da5Sopenharmony_ci%17 = OpVariable %16 Input
261fd4e5da5Sopenharmony_ci%19 = OpTypePointer Output %7
262fd4e5da5Sopenharmony_ci%27 = OpVariable %19 Output
263fd4e5da5Sopenharmony_ci%4 = OpFunction %2 None %3
264fd4e5da5Sopenharmony_ci%5 = OpLabel
265fd4e5da5Sopenharmony_ci%18 = OpLoad %7 %17
266fd4e5da5Sopenharmony_ci%20 = OpAccessChain %19 %13 %15
267fd4e5da5Sopenharmony_ciOpStore %20 %18
268fd4e5da5Sopenharmony_ciOpReturn
269fd4e5da5Sopenharmony_ciOpFunctionEnd
270fd4e5da5Sopenharmony_ci)";
271fd4e5da5Sopenharmony_ci  constexpr char kDiff[] = R"( ; SPIR-V
272fd4e5da5Sopenharmony_ci ; Version: 1.6
273fd4e5da5Sopenharmony_ci ; Generator: Khronos SPIR-V Tools Assembler; 0
274fd4e5da5Sopenharmony_ci-; Bound: 27
275fd4e5da5Sopenharmony_ci+; Bound: 30
276fd4e5da5Sopenharmony_ci ; Schema: 0
277fd4e5da5Sopenharmony_ci OpCapability Shader
278fd4e5da5Sopenharmony_ci+%27 = OpExtInstImport "GLSL.std.450"
279fd4e5da5Sopenharmony_ci OpMemoryModel Logical GLSL450
280fd4e5da5Sopenharmony_ci-OpEntryPoint Vertex %22 "main" %4 %14 %19
281fd4e5da5Sopenharmony_ci+OpEntryPoint Vertex %22 "main" %19 %4 %14
282fd4e5da5Sopenharmony_ci OpSource GLSL 450
283fd4e5da5Sopenharmony_ci OpDecorate %4 Location 0
284fd4e5da5Sopenharmony_ci OpDecorate %14 Location 0
285fd4e5da5Sopenharmony_ci-OpMemberDecorate %17 1 RelaxedPrecision
286fd4e5da5Sopenharmony_ci OpMemberDecorate %17 0 BuiltIn Position
287fd4e5da5Sopenharmony_ci OpMemberDecorate %17 1 BuiltIn PointSize
288fd4e5da5Sopenharmony_ci OpMemberDecorate %17 2 BuiltIn ClipDistance
289fd4e5da5Sopenharmony_ci OpMemberDecorate %17 3 BuiltIn CullDistance
290fd4e5da5Sopenharmony_ci OpDecorate %17 Block
291fd4e5da5Sopenharmony_ci %1 = OpTypeFloat 32
292fd4e5da5Sopenharmony_ci %2 = OpTypeVector %1 4
293fd4e5da5Sopenharmony_ci %5 = OpTypeInt 32 0
294fd4e5da5Sopenharmony_ci %6 = OpTypeInt 32 1
295fd4e5da5Sopenharmony_ci-%15 = OpConstant %5 8
296fd4e5da5Sopenharmony_ci-%16 = OpTypeArray %1 %15
297fd4e5da5Sopenharmony_ci-%17 = OpTypeStruct %2 %1 %16 %16
298fd4e5da5Sopenharmony_ci+%17 = OpTypeStruct %2 %1 %29 %29
299fd4e5da5Sopenharmony_ci+%28 = OpConstant %5 1
300fd4e5da5Sopenharmony_ci+%29 = OpTypeArray %1 %28
301fd4e5da5Sopenharmony_ci %20 = OpTypeVoid
302fd4e5da5Sopenharmony_ci %25 = OpConstant %6 0
303fd4e5da5Sopenharmony_ci %3 = OpTypePointer Input %2
304fd4e5da5Sopenharmony_ci %13 = OpTypePointer Output %2
305fd4e5da5Sopenharmony_ci %18 = OpTypePointer Output %17
306fd4e5da5Sopenharmony_ci %21 = OpTypeFunction %20
307fd4e5da5Sopenharmony_ci %4 = OpVariable %3 Input
308fd4e5da5Sopenharmony_ci %14 = OpVariable %13 Output
309fd4e5da5Sopenharmony_ci %19 = OpVariable %18 Output
310fd4e5da5Sopenharmony_ci %22 = OpFunction %20 None %21
311fd4e5da5Sopenharmony_ci %23 = OpLabel
312fd4e5da5Sopenharmony_ci %24 = OpLoad %2 %4
313fd4e5da5Sopenharmony_ci %26 = OpAccessChain %13 %19 %25
314fd4e5da5Sopenharmony_ci OpStore %26 %24
315fd4e5da5Sopenharmony_ci OpReturn
316fd4e5da5Sopenharmony_ci OpFunctionEnd
317fd4e5da5Sopenharmony_ci)";
318fd4e5da5Sopenharmony_ci  Options options;
319fd4e5da5Sopenharmony_ci  DoStringDiffTest(kSrcNoDebug, kDstNoDebug, kDiff, options);
320fd4e5da5Sopenharmony_ci}
321fd4e5da5Sopenharmony_ci
322fd4e5da5Sopenharmony_ciTEST(DiffTest, BasicDumpIds) {
323fd4e5da5Sopenharmony_ci  constexpr char kDiff[] = R"( ; SPIR-V
324fd4e5da5Sopenharmony_ci ; Version: 1.6
325fd4e5da5Sopenharmony_ci ; Generator: Khronos SPIR-V Tools Assembler; 0
326fd4e5da5Sopenharmony_ci-; Bound: 27
327fd4e5da5Sopenharmony_ci+; Bound: 30
328fd4e5da5Sopenharmony_ci ; Schema: 0
329fd4e5da5Sopenharmony_ci OpCapability Shader
330fd4e5da5Sopenharmony_ci+%27 = OpExtInstImport "GLSL.std.450"
331fd4e5da5Sopenharmony_ci OpMemoryModel Logical GLSL450
332fd4e5da5Sopenharmony_ci-OpEntryPoint Vertex %22 "main" %4 %14 %19
333fd4e5da5Sopenharmony_ci+OpEntryPoint Vertex %22 "main" %19 %4 %14
334fd4e5da5Sopenharmony_ci OpSource GLSL 450
335fd4e5da5Sopenharmony_ci OpName %4 "_ua_position"
336fd4e5da5Sopenharmony_ci OpName %14 "ANGLEXfbPosition"
337fd4e5da5Sopenharmony_ci OpName %17 "gl_PerVertex"
338fd4e5da5Sopenharmony_ci OpMemberName %17 0 "gl_Position"
339fd4e5da5Sopenharmony_ci OpMemberName %17 1 "gl_PointSize"
340fd4e5da5Sopenharmony_ci OpMemberName %17 2 "gl_ClipDistance"
341fd4e5da5Sopenharmony_ci OpMemberName %17 3 "gl_CullDistance"
342fd4e5da5Sopenharmony_ci OpName %19 ""
343fd4e5da5Sopenharmony_ci OpName %22 "main"
344fd4e5da5Sopenharmony_ci OpDecorate %4 Location 0
345fd4e5da5Sopenharmony_ci OpDecorate %14 Location 0
346fd4e5da5Sopenharmony_ci-OpMemberDecorate %17 1 RelaxedPrecision
347fd4e5da5Sopenharmony_ci OpMemberDecorate %17 0 BuiltIn Position
348fd4e5da5Sopenharmony_ci OpMemberDecorate %17 1 BuiltIn PointSize
349fd4e5da5Sopenharmony_ci OpMemberDecorate %17 2 BuiltIn ClipDistance
350fd4e5da5Sopenharmony_ci OpMemberDecorate %17 3 BuiltIn CullDistance
351fd4e5da5Sopenharmony_ci OpDecorate %17 Block
352fd4e5da5Sopenharmony_ci %1 = OpTypeFloat 32
353fd4e5da5Sopenharmony_ci %2 = OpTypeVector %1 4
354fd4e5da5Sopenharmony_ci %5 = OpTypeInt 32 0
355fd4e5da5Sopenharmony_ci %6 = OpTypeInt 32 1
356fd4e5da5Sopenharmony_ci-%15 = OpConstant %5 8
357fd4e5da5Sopenharmony_ci-%16 = OpTypeArray %1 %15
358fd4e5da5Sopenharmony_ci-%17 = OpTypeStruct %2 %1 %16 %16
359fd4e5da5Sopenharmony_ci+%17 = OpTypeStruct %2 %1 %29 %29
360fd4e5da5Sopenharmony_ci+%28 = OpConstant %5 1
361fd4e5da5Sopenharmony_ci+%29 = OpTypeArray %1 %28
362fd4e5da5Sopenharmony_ci %20 = OpTypeVoid
363fd4e5da5Sopenharmony_ci %25 = OpConstant %6 0
364fd4e5da5Sopenharmony_ci %3 = OpTypePointer Input %2
365fd4e5da5Sopenharmony_ci %13 = OpTypePointer Output %2
366fd4e5da5Sopenharmony_ci %18 = OpTypePointer Output %17
367fd4e5da5Sopenharmony_ci %21 = OpTypeFunction %20
368fd4e5da5Sopenharmony_ci %4 = OpVariable %3 Input
369fd4e5da5Sopenharmony_ci %14 = OpVariable %13 Output
370fd4e5da5Sopenharmony_ci %19 = OpVariable %18 Output
371fd4e5da5Sopenharmony_ci %22 = OpFunction %20 None %21
372fd4e5da5Sopenharmony_ci %23 = OpLabel
373fd4e5da5Sopenharmony_ci %24 = OpLoad %2 %4
374fd4e5da5Sopenharmony_ci %26 = OpAccessChain %13 %19 %25
375fd4e5da5Sopenharmony_ci OpStore %26 %24
376fd4e5da5Sopenharmony_ci OpReturn
377fd4e5da5Sopenharmony_ci OpFunctionEnd
378fd4e5da5Sopenharmony_ci Src ->  Dst
379fd4e5da5Sopenharmony_ci   1 ->    6 [TypeFloat]
380fd4e5da5Sopenharmony_ci   2 ->    7 [TypeVector]
381fd4e5da5Sopenharmony_ci   3 ->   16 [TypePointer]
382fd4e5da5Sopenharmony_ci   4 ->   17 [Variable]
383fd4e5da5Sopenharmony_ci   5 ->    8 [TypeInt]
384fd4e5da5Sopenharmony_ci   6 ->   14 [TypeInt]
385fd4e5da5Sopenharmony_ci  13 ->   19 [TypePointer]
386fd4e5da5Sopenharmony_ci  14 ->   27 [Variable]
387fd4e5da5Sopenharmony_ci  15 ->   28 [Constant]
388fd4e5da5Sopenharmony_ci  16 ->   29 [TypeArray]
389fd4e5da5Sopenharmony_ci  17 ->   11 [TypeStruct]
390fd4e5da5Sopenharmony_ci  18 ->   12 [TypePointer]
391fd4e5da5Sopenharmony_ci  19 ->   13 [Variable]
392fd4e5da5Sopenharmony_ci  20 ->    2 [TypeVoid]
393fd4e5da5Sopenharmony_ci  21 ->    3 [TypeFunction]
394fd4e5da5Sopenharmony_ci  22 ->    4 [Function]
395fd4e5da5Sopenharmony_ci  23 ->    5 [Label]
396fd4e5da5Sopenharmony_ci  24 ->   18 [Load]
397fd4e5da5Sopenharmony_ci  25 ->   15 [Constant]
398fd4e5da5Sopenharmony_ci  26 ->   20 [AccessChain]
399fd4e5da5Sopenharmony_ci)";
400fd4e5da5Sopenharmony_ci  Options options;
401fd4e5da5Sopenharmony_ci  options.dump_id_map = true;
402fd4e5da5Sopenharmony_ci  DoStringDiffTest(kSrc, kDst, kDiff, options);
403fd4e5da5Sopenharmony_ci}
404fd4e5da5Sopenharmony_ci
405fd4e5da5Sopenharmony_ci}  // namespace
406fd4e5da5Sopenharmony_ci}  // namespace diff
407fd4e5da5Sopenharmony_ci}  // namespace spvtools
408