1 // Copyright (c) 2017 Google Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 #include <memory>
16 #include <vector>
17
18 #include "gmock/gmock.h"
19 #include "source/opt/dominator_analysis.h"
20 #include "source/opt/pass.h"
21 #include "test/opt/assembly_builder.h"
22 #include "test/opt/function_utils.h"
23 #include "test/opt/pass_fixture.h"
24 #include "test/opt/pass_utils.h"
25
26 namespace spvtools {
27 namespace opt {
28 namespace {
29
30 using ::testing::UnorderedElementsAre;
31
32 using PassClassTest = PassTest<::testing::Test>;
33
34 /*
35 Generated from the following GLSL
36 #version 440 core
37 layout(location = 0) out vec4 v;
38 layout(location = 1) in vec4 in_val;
39 void main() {
40 for (int i = 0; i < in_val.x; ++i) {
41 for (int j = 0; j < in_val.y; j++) {
42 }
43 }
44 for (int i = 0; i < in_val.x; ++i) {
45 for (int j = 0; j < in_val.y; j++) {
46 }
47 break;
48 }
49 int i = 0;
50 while (i < in_val.x) {
51 ++i;
52 for (int j = 0; j < 1; j++) {
53 for (int k = 0; k < 1; k++) {
54 }
55 break;
56 }
57 }
58 i = 0;
59 while (i < in_val.x) {
60 ++i;
61 continue;
62 for (int j = 0; j < 1; j++) {
63 for (int k = 0; k < 1; k++) {
64 }
65 break;
66 }
67 }
68 v = vec4(1,1,1,1);
69 }
70 */
TEST_F(PassClassTest,BasicVisitFromEntryPoint)71 TEST_F(PassClassTest, BasicVisitFromEntryPoint) {
72 const std::string text = R"(
73 OpCapability Shader
74 %1 = OpExtInstImport "GLSL.std.450"
75 OpMemoryModel Logical GLSL450
76 OpEntryPoint Fragment %4 "main" %20 %141
77 OpExecutionMode %4 OriginUpperLeft
78 OpSource GLSL 440
79 OpName %4 "main"
80 OpName %8 "i"
81 OpName %20 "in_val"
82 OpName %28 "j"
83 OpName %45 "i"
84 OpName %56 "j"
85 OpName %72 "i"
86 OpName %85 "j"
87 OpName %93 "k"
88 OpName %119 "j"
89 OpName %127 "k"
90 OpName %141 "v"
91 OpDecorate %20 Location 1
92 OpDecorate %141 Location 0
93 %2 = OpTypeVoid
94 %3 = OpTypeFunction %2
95 %6 = OpTypeInt 32 1
96 %7 = OpTypePointer Function %6
97 %9 = OpConstant %6 0
98 %16 = OpTypeFloat 32
99 %18 = OpTypeVector %16 4
100 %19 = OpTypePointer Input %18
101 %20 = OpVariable %19 Input
102 %21 = OpTypeInt 32 0
103 %22 = OpConstant %21 0
104 %23 = OpTypePointer Input %16
105 %26 = OpTypeBool
106 %36 = OpConstant %21 1
107 %41 = OpConstant %6 1
108 %140 = OpTypePointer Output %18
109 %141 = OpVariable %140 Output
110 %142 = OpConstant %16 1
111 %143 = OpConstantComposite %18 %142 %142 %142 %142
112 %4 = OpFunction %2 None %3
113 %5 = OpLabel
114 %8 = OpVariable %7 Function
115 %28 = OpVariable %7 Function
116 %45 = OpVariable %7 Function
117 %56 = OpVariable %7 Function
118 %72 = OpVariable %7 Function
119 %85 = OpVariable %7 Function
120 %93 = OpVariable %7 Function
121 %119 = OpVariable %7 Function
122 %127 = OpVariable %7 Function
123 OpStore %8 %9
124 OpBranch %10
125 %10 = OpLabel
126 OpLoopMerge %12 %13 None
127 OpBranch %14
128 %14 = OpLabel
129 %15 = OpLoad %6 %8
130 %17 = OpConvertSToF %16 %15
131 %24 = OpAccessChain %23 %20 %22
132 %25 = OpLoad %16 %24
133 %27 = OpFOrdLessThan %26 %17 %25
134 OpBranchConditional %27 %11 %12
135 %11 = OpLabel
136 OpStore %28 %9
137 OpBranch %29
138 %29 = OpLabel
139 OpLoopMerge %31 %32 None
140 OpBranch %33
141 %33 = OpLabel
142 %34 = OpLoad %6 %28
143 %35 = OpConvertSToF %16 %34
144 %37 = OpAccessChain %23 %20 %36
145 %38 = OpLoad %16 %37
146 %39 = OpFOrdLessThan %26 %35 %38
147 OpBranchConditional %39 %30 %31
148 %30 = OpLabel
149 OpBranch %32
150 %32 = OpLabel
151 %40 = OpLoad %6 %28
152 %42 = OpIAdd %6 %40 %41
153 OpStore %28 %42
154 OpBranch %29
155 %31 = OpLabel
156 OpBranch %13
157 %13 = OpLabel
158 %43 = OpLoad %6 %8
159 %44 = OpIAdd %6 %43 %41
160 OpStore %8 %44
161 OpBranch %10
162 %12 = OpLabel
163 OpStore %45 %9
164 OpBranch %46
165 %46 = OpLabel
166 OpLoopMerge %48 %49 None
167 OpBranch %50
168 %50 = OpLabel
169 %51 = OpLoad %6 %45
170 %52 = OpConvertSToF %16 %51
171 %53 = OpAccessChain %23 %20 %22
172 %54 = OpLoad %16 %53
173 %55 = OpFOrdLessThan %26 %52 %54
174 OpBranchConditional %55 %47 %48
175 %47 = OpLabel
176 OpStore %56 %9
177 OpBranch %57
178 %57 = OpLabel
179 OpLoopMerge %59 %60 None
180 OpBranch %61
181 %61 = OpLabel
182 %62 = OpLoad %6 %56
183 %63 = OpConvertSToF %16 %62
184 %64 = OpAccessChain %23 %20 %36
185 %65 = OpLoad %16 %64
186 %66 = OpFOrdLessThan %26 %63 %65
187 OpBranchConditional %66 %58 %59
188 %58 = OpLabel
189 OpBranch %60
190 %60 = OpLabel
191 %67 = OpLoad %6 %56
192 %68 = OpIAdd %6 %67 %41
193 OpStore %56 %68
194 OpBranch %57
195 %59 = OpLabel
196 OpBranch %48
197 %49 = OpLabel
198 %70 = OpLoad %6 %45
199 %71 = OpIAdd %6 %70 %41
200 OpStore %45 %71
201 OpBranch %46
202 %48 = OpLabel
203 OpStore %72 %9
204 OpBranch %73
205 %73 = OpLabel
206 OpLoopMerge %75 %76 None
207 OpBranch %77
208 %77 = OpLabel
209 %78 = OpLoad %6 %72
210 %79 = OpConvertSToF %16 %78
211 %80 = OpAccessChain %23 %20 %22
212 %81 = OpLoad %16 %80
213 %82 = OpFOrdLessThan %26 %79 %81
214 OpBranchConditional %82 %74 %75
215 %74 = OpLabel
216 %83 = OpLoad %6 %72
217 %84 = OpIAdd %6 %83 %41
218 OpStore %72 %84
219 OpStore %85 %9
220 OpBranch %86
221 %86 = OpLabel
222 OpLoopMerge %88 %89 None
223 OpBranch %90
224 %90 = OpLabel
225 %91 = OpLoad %6 %85
226 %92 = OpSLessThan %26 %91 %41
227 OpBranchConditional %92 %87 %88
228 %87 = OpLabel
229 OpStore %93 %9
230 OpBranch %94
231 %94 = OpLabel
232 OpLoopMerge %96 %97 None
233 OpBranch %98
234 %98 = OpLabel
235 %99 = OpLoad %6 %93
236 %100 = OpSLessThan %26 %99 %41
237 OpBranchConditional %100 %95 %96
238 %95 = OpLabel
239 OpBranch %97
240 %97 = OpLabel
241 %101 = OpLoad %6 %93
242 %102 = OpIAdd %6 %101 %41
243 OpStore %93 %102
244 OpBranch %94
245 %96 = OpLabel
246 OpBranch %88
247 %89 = OpLabel
248 %104 = OpLoad %6 %85
249 %105 = OpIAdd %6 %104 %41
250 OpStore %85 %105
251 OpBranch %86
252 %88 = OpLabel
253 OpBranch %76
254 %76 = OpLabel
255 OpBranch %73
256 %75 = OpLabel
257 OpStore %72 %9
258 OpBranch %106
259 %106 = OpLabel
260 OpLoopMerge %108 %109 None
261 OpBranch %110
262 %110 = OpLabel
263 %111 = OpLoad %6 %72
264 %112 = OpConvertSToF %16 %111
265 %113 = OpAccessChain %23 %20 %22
266 %114 = OpLoad %16 %113
267 %115 = OpFOrdLessThan %26 %112 %114
268 OpBranchConditional %115 %107 %108
269 %107 = OpLabel
270 %116 = OpLoad %6 %72
271 %117 = OpIAdd %6 %116 %41
272 OpStore %72 %117
273 OpBranch %109
274 %109 = OpLabel
275 OpBranch %106
276 %108 = OpLabel
277 OpStore %141 %143
278 OpReturn
279 OpFunctionEnd
280 )";
281 // clang-format on
282 std::unique_ptr<IRContext> context =
283 BuildModule(SPV_ENV_UNIVERSAL_1_1, nullptr, text,
284 SPV_TEXT_TO_BINARY_OPTION_PRESERVE_NUMERIC_IDS);
285 Module* module = context->module();
286 EXPECT_NE(nullptr, module) << "Assembling failed for shader:\n"
287 << text << std::endl;
288
289 const Function* f = spvtest::GetFunction(module, 4);
290 DominatorAnalysis* analysis = context->GetDominatorAnalysis(f);
291
292 EXPECT_TRUE(analysis->Dominates(5, 10));
293 EXPECT_TRUE(analysis->Dominates(5, 14));
294 EXPECT_TRUE(analysis->Dominates(5, 11));
295 EXPECT_TRUE(analysis->Dominates(5, 29));
296 EXPECT_TRUE(analysis->Dominates(5, 33));
297 EXPECT_TRUE(analysis->Dominates(5, 30));
298 EXPECT_TRUE(analysis->Dominates(5, 32));
299 EXPECT_TRUE(analysis->Dominates(5, 31));
300 EXPECT_TRUE(analysis->Dominates(5, 13));
301 EXPECT_TRUE(analysis->Dominates(5, 12));
302 EXPECT_TRUE(analysis->Dominates(5, 46));
303 EXPECT_TRUE(analysis->Dominates(5, 50));
304 EXPECT_TRUE(analysis->Dominates(5, 47));
305 EXPECT_TRUE(analysis->Dominates(5, 57));
306 EXPECT_TRUE(analysis->Dominates(5, 61));
307 EXPECT_TRUE(analysis->Dominates(5, 59));
308 EXPECT_TRUE(analysis->Dominates(5, 58));
309 EXPECT_TRUE(analysis->Dominates(5, 60));
310 EXPECT_TRUE(analysis->Dominates(5, 48));
311 EXPECT_TRUE(analysis->Dominates(5, 73));
312 EXPECT_TRUE(analysis->Dominates(5, 77));
313 EXPECT_TRUE(analysis->Dominates(5, 75));
314 EXPECT_TRUE(analysis->Dominates(5, 106));
315 EXPECT_TRUE(analysis->Dominates(5, 110));
316 EXPECT_TRUE(analysis->Dominates(5, 107));
317 EXPECT_TRUE(analysis->Dominates(5, 108));
318 EXPECT_TRUE(analysis->Dominates(5, 109));
319 EXPECT_TRUE(analysis->Dominates(5, 74));
320 EXPECT_TRUE(analysis->Dominates(5, 86));
321 EXPECT_TRUE(analysis->Dominates(5, 90));
322 EXPECT_TRUE(analysis->Dominates(5, 87));
323 EXPECT_TRUE(analysis->Dominates(5, 94));
324 EXPECT_TRUE(analysis->Dominates(5, 98));
325 EXPECT_TRUE(analysis->Dominates(5, 95));
326 EXPECT_TRUE(analysis->Dominates(5, 97));
327 EXPECT_TRUE(analysis->Dominates(5, 96));
328 EXPECT_TRUE(analysis->Dominates(5, 88));
329 EXPECT_TRUE(analysis->Dominates(5, 76));
330
331 EXPECT_TRUE(analysis->Dominates(10, 14));
332 EXPECT_TRUE(analysis->Dominates(10, 11));
333 EXPECT_TRUE(analysis->Dominates(10, 29));
334 EXPECT_TRUE(analysis->Dominates(10, 33));
335 EXPECT_TRUE(analysis->Dominates(10, 30));
336 EXPECT_TRUE(analysis->Dominates(10, 32));
337 EXPECT_TRUE(analysis->Dominates(10, 31));
338 EXPECT_TRUE(analysis->Dominates(10, 13));
339 EXPECT_TRUE(analysis->Dominates(10, 12));
340 EXPECT_TRUE(analysis->Dominates(10, 46));
341 EXPECT_TRUE(analysis->Dominates(10, 50));
342 EXPECT_TRUE(analysis->Dominates(10, 47));
343 EXPECT_TRUE(analysis->Dominates(10, 57));
344 EXPECT_TRUE(analysis->Dominates(10, 61));
345 EXPECT_TRUE(analysis->Dominates(10, 59));
346 EXPECT_TRUE(analysis->Dominates(10, 58));
347 EXPECT_TRUE(analysis->Dominates(10, 60));
348 EXPECT_TRUE(analysis->Dominates(10, 48));
349 EXPECT_TRUE(analysis->Dominates(10, 73));
350 EXPECT_TRUE(analysis->Dominates(10, 77));
351 EXPECT_TRUE(analysis->Dominates(10, 75));
352 EXPECT_TRUE(analysis->Dominates(10, 106));
353 EXPECT_TRUE(analysis->Dominates(10, 110));
354 EXPECT_TRUE(analysis->Dominates(10, 107));
355 EXPECT_TRUE(analysis->Dominates(10, 108));
356 EXPECT_TRUE(analysis->Dominates(10, 109));
357 EXPECT_TRUE(analysis->Dominates(10, 74));
358 EXPECT_TRUE(analysis->Dominates(10, 86));
359 EXPECT_TRUE(analysis->Dominates(10, 90));
360 EXPECT_TRUE(analysis->Dominates(10, 87));
361 EXPECT_TRUE(analysis->Dominates(10, 94));
362 EXPECT_TRUE(analysis->Dominates(10, 98));
363 EXPECT_TRUE(analysis->Dominates(10, 95));
364 EXPECT_TRUE(analysis->Dominates(10, 97));
365 EXPECT_TRUE(analysis->Dominates(10, 96));
366 EXPECT_TRUE(analysis->Dominates(10, 88));
367 EXPECT_TRUE(analysis->Dominates(10, 76));
368
369 EXPECT_TRUE(analysis->Dominates(14, 11));
370 EXPECT_TRUE(analysis->Dominates(14, 29));
371 EXPECT_TRUE(analysis->Dominates(14, 33));
372 EXPECT_TRUE(analysis->Dominates(14, 30));
373 EXPECT_TRUE(analysis->Dominates(14, 32));
374 EXPECT_TRUE(analysis->Dominates(14, 31));
375
376 EXPECT_TRUE(analysis->Dominates(11, 29));
377 EXPECT_TRUE(analysis->Dominates(11, 33));
378 EXPECT_TRUE(analysis->Dominates(11, 30));
379 EXPECT_TRUE(analysis->Dominates(11, 32));
380 EXPECT_TRUE(analysis->Dominates(11, 31));
381
382 EXPECT_TRUE(analysis->Dominates(29, 33));
383 EXPECT_TRUE(analysis->Dominates(29, 30));
384 EXPECT_TRUE(analysis->Dominates(29, 32));
385 EXPECT_TRUE(analysis->Dominates(29, 31));
386
387 EXPECT_TRUE(analysis->Dominates(33, 30));
388
389 EXPECT_TRUE(analysis->Dominates(12, 46));
390 EXPECT_TRUE(analysis->Dominates(12, 50));
391 EXPECT_TRUE(analysis->Dominates(12, 47));
392 EXPECT_TRUE(analysis->Dominates(12, 57));
393 EXPECT_TRUE(analysis->Dominates(12, 61));
394 EXPECT_TRUE(analysis->Dominates(12, 59));
395 EXPECT_TRUE(analysis->Dominates(12, 58));
396 EXPECT_TRUE(analysis->Dominates(12, 60));
397 EXPECT_TRUE(analysis->Dominates(12, 48));
398 EXPECT_TRUE(analysis->Dominates(12, 73));
399 EXPECT_TRUE(analysis->Dominates(12, 77));
400 EXPECT_TRUE(analysis->Dominates(12, 75));
401 EXPECT_TRUE(analysis->Dominates(12, 106));
402 EXPECT_TRUE(analysis->Dominates(12, 110));
403 EXPECT_TRUE(analysis->Dominates(12, 107));
404 EXPECT_TRUE(analysis->Dominates(12, 108));
405 EXPECT_TRUE(analysis->Dominates(12, 109));
406 EXPECT_TRUE(analysis->Dominates(12, 74));
407 EXPECT_TRUE(analysis->Dominates(12, 86));
408 EXPECT_TRUE(analysis->Dominates(12, 90));
409 EXPECT_TRUE(analysis->Dominates(12, 87));
410 EXPECT_TRUE(analysis->Dominates(12, 94));
411 EXPECT_TRUE(analysis->Dominates(12, 98));
412 EXPECT_TRUE(analysis->Dominates(12, 95));
413 EXPECT_TRUE(analysis->Dominates(12, 97));
414 EXPECT_TRUE(analysis->Dominates(12, 96));
415 EXPECT_TRUE(analysis->Dominates(12, 88));
416 EXPECT_TRUE(analysis->Dominates(12, 76));
417
418 EXPECT_TRUE(analysis->Dominates(46, 50));
419 EXPECT_TRUE(analysis->Dominates(46, 47));
420 EXPECT_TRUE(analysis->Dominates(46, 57));
421 EXPECT_TRUE(analysis->Dominates(46, 61));
422 EXPECT_TRUE(analysis->Dominates(46, 59));
423 EXPECT_TRUE(analysis->Dominates(46, 58));
424 EXPECT_TRUE(analysis->Dominates(46, 60));
425 EXPECT_TRUE(analysis->Dominates(46, 48));
426 EXPECT_TRUE(analysis->Dominates(46, 73));
427 EXPECT_TRUE(analysis->Dominates(46, 77));
428 EXPECT_TRUE(analysis->Dominates(46, 75));
429 EXPECT_TRUE(analysis->Dominates(46, 106));
430 EXPECT_TRUE(analysis->Dominates(46, 110));
431 EXPECT_TRUE(analysis->Dominates(46, 107));
432 EXPECT_TRUE(analysis->Dominates(46, 108));
433 EXPECT_TRUE(analysis->Dominates(46, 109));
434 EXPECT_TRUE(analysis->Dominates(46, 74));
435 EXPECT_TRUE(analysis->Dominates(46, 86));
436 EXPECT_TRUE(analysis->Dominates(46, 90));
437 EXPECT_TRUE(analysis->Dominates(46, 87));
438 EXPECT_TRUE(analysis->Dominates(46, 94));
439 EXPECT_TRUE(analysis->Dominates(46, 98));
440 EXPECT_TRUE(analysis->Dominates(46, 95));
441 EXPECT_TRUE(analysis->Dominates(46, 97));
442 EXPECT_TRUE(analysis->Dominates(46, 96));
443 EXPECT_TRUE(analysis->Dominates(46, 88));
444 EXPECT_TRUE(analysis->Dominates(46, 76));
445
446 EXPECT_TRUE(analysis->Dominates(50, 47));
447 EXPECT_TRUE(analysis->Dominates(50, 57));
448 EXPECT_TRUE(analysis->Dominates(50, 61));
449 EXPECT_TRUE(analysis->Dominates(50, 59));
450 EXPECT_TRUE(analysis->Dominates(50, 58));
451 EXPECT_TRUE(analysis->Dominates(50, 60));
452
453 EXPECT_TRUE(analysis->Dominates(47, 57));
454 EXPECT_TRUE(analysis->Dominates(47, 61));
455 EXPECT_TRUE(analysis->Dominates(47, 59));
456 EXPECT_TRUE(analysis->Dominates(47, 58));
457 EXPECT_TRUE(analysis->Dominates(47, 60));
458
459 EXPECT_TRUE(analysis->Dominates(57, 61));
460 EXPECT_TRUE(analysis->Dominates(57, 59));
461 EXPECT_TRUE(analysis->Dominates(57, 58));
462 EXPECT_TRUE(analysis->Dominates(57, 60));
463
464 EXPECT_TRUE(analysis->Dominates(61, 59));
465
466 EXPECT_TRUE(analysis->Dominates(48, 73));
467 EXPECT_TRUE(analysis->Dominates(48, 77));
468 EXPECT_TRUE(analysis->Dominates(48, 75));
469 EXPECT_TRUE(analysis->Dominates(48, 106));
470 EXPECT_TRUE(analysis->Dominates(48, 110));
471 EXPECT_TRUE(analysis->Dominates(48, 107));
472 EXPECT_TRUE(analysis->Dominates(48, 108));
473 EXPECT_TRUE(analysis->Dominates(48, 109));
474 EXPECT_TRUE(analysis->Dominates(48, 74));
475 EXPECT_TRUE(analysis->Dominates(48, 86));
476 EXPECT_TRUE(analysis->Dominates(48, 90));
477 EXPECT_TRUE(analysis->Dominates(48, 87));
478 EXPECT_TRUE(analysis->Dominates(48, 94));
479 EXPECT_TRUE(analysis->Dominates(48, 98));
480 EXPECT_TRUE(analysis->Dominates(48, 95));
481 EXPECT_TRUE(analysis->Dominates(48, 97));
482 EXPECT_TRUE(analysis->Dominates(48, 96));
483 EXPECT_TRUE(analysis->Dominates(48, 88));
484 EXPECT_TRUE(analysis->Dominates(48, 76));
485
486 EXPECT_TRUE(analysis->Dominates(73, 77));
487 EXPECT_TRUE(analysis->Dominates(73, 75));
488 EXPECT_TRUE(analysis->Dominates(73, 106));
489 EXPECT_TRUE(analysis->Dominates(73, 110));
490 EXPECT_TRUE(analysis->Dominates(73, 107));
491 EXPECT_TRUE(analysis->Dominates(73, 108));
492 EXPECT_TRUE(analysis->Dominates(73, 109));
493 EXPECT_TRUE(analysis->Dominates(73, 74));
494 EXPECT_TRUE(analysis->Dominates(73, 86));
495 EXPECT_TRUE(analysis->Dominates(73, 90));
496 EXPECT_TRUE(analysis->Dominates(73, 87));
497 EXPECT_TRUE(analysis->Dominates(73, 94));
498 EXPECT_TRUE(analysis->Dominates(73, 98));
499 EXPECT_TRUE(analysis->Dominates(73, 95));
500 EXPECT_TRUE(analysis->Dominates(73, 97));
501 EXPECT_TRUE(analysis->Dominates(73, 96));
502 EXPECT_TRUE(analysis->Dominates(73, 88));
503 EXPECT_TRUE(analysis->Dominates(73, 76));
504
505 EXPECT_TRUE(analysis->Dominates(75, 106));
506 EXPECT_TRUE(analysis->Dominates(75, 110));
507 EXPECT_TRUE(analysis->Dominates(75, 107));
508 EXPECT_TRUE(analysis->Dominates(75, 108));
509 EXPECT_TRUE(analysis->Dominates(75, 109));
510
511 EXPECT_TRUE(analysis->Dominates(106, 110));
512 EXPECT_TRUE(analysis->Dominates(106, 107));
513 EXPECT_TRUE(analysis->Dominates(106, 108));
514 EXPECT_TRUE(analysis->Dominates(106, 109));
515
516 EXPECT_TRUE(analysis->Dominates(110, 107));
517
518 EXPECT_TRUE(analysis->Dominates(77, 74));
519 EXPECT_TRUE(analysis->Dominates(77, 86));
520 EXPECT_TRUE(analysis->Dominates(77, 90));
521 EXPECT_TRUE(analysis->Dominates(77, 87));
522 EXPECT_TRUE(analysis->Dominates(77, 94));
523 EXPECT_TRUE(analysis->Dominates(77, 98));
524 EXPECT_TRUE(analysis->Dominates(77, 95));
525 EXPECT_TRUE(analysis->Dominates(77, 97));
526 EXPECT_TRUE(analysis->Dominates(77, 96));
527 EXPECT_TRUE(analysis->Dominates(77, 88));
528
529 EXPECT_TRUE(analysis->Dominates(74, 86));
530 EXPECT_TRUE(analysis->Dominates(74, 90));
531 EXPECT_TRUE(analysis->Dominates(74, 87));
532 EXPECT_TRUE(analysis->Dominates(74, 94));
533 EXPECT_TRUE(analysis->Dominates(74, 98));
534 EXPECT_TRUE(analysis->Dominates(74, 95));
535 EXPECT_TRUE(analysis->Dominates(74, 97));
536 EXPECT_TRUE(analysis->Dominates(74, 96));
537 EXPECT_TRUE(analysis->Dominates(74, 88));
538
539 EXPECT_TRUE(analysis->Dominates(86, 90));
540 EXPECT_TRUE(analysis->Dominates(86, 87));
541 EXPECT_TRUE(analysis->Dominates(86, 94));
542 EXPECT_TRUE(analysis->Dominates(86, 98));
543 EXPECT_TRUE(analysis->Dominates(86, 95));
544 EXPECT_TRUE(analysis->Dominates(86, 97));
545 EXPECT_TRUE(analysis->Dominates(86, 96));
546 EXPECT_TRUE(analysis->Dominates(86, 88));
547
548 EXPECT_TRUE(analysis->Dominates(90, 87));
549 EXPECT_TRUE(analysis->Dominates(90, 94));
550 EXPECT_TRUE(analysis->Dominates(90, 98));
551 EXPECT_TRUE(analysis->Dominates(90, 95));
552 EXPECT_TRUE(analysis->Dominates(90, 97));
553 EXPECT_TRUE(analysis->Dominates(90, 96));
554
555 EXPECT_TRUE(analysis->Dominates(87, 94));
556 EXPECT_TRUE(analysis->Dominates(87, 98));
557 EXPECT_TRUE(analysis->Dominates(87, 95));
558 EXPECT_TRUE(analysis->Dominates(87, 97));
559 EXPECT_TRUE(analysis->Dominates(87, 96));
560
561 EXPECT_TRUE(analysis->Dominates(94, 98));
562 EXPECT_TRUE(analysis->Dominates(94, 95));
563 EXPECT_TRUE(analysis->Dominates(94, 97));
564 EXPECT_TRUE(analysis->Dominates(94, 96));
565
566 EXPECT_TRUE(analysis->Dominates(98, 95));
567
568 EXPECT_TRUE(analysis->StrictlyDominates(5, 10));
569 EXPECT_TRUE(analysis->StrictlyDominates(5, 14));
570 EXPECT_TRUE(analysis->StrictlyDominates(5, 11));
571 EXPECT_TRUE(analysis->StrictlyDominates(5, 29));
572 EXPECT_TRUE(analysis->StrictlyDominates(5, 33));
573 EXPECT_TRUE(analysis->StrictlyDominates(5, 30));
574 EXPECT_TRUE(analysis->StrictlyDominates(5, 32));
575 EXPECT_TRUE(analysis->StrictlyDominates(5, 31));
576 EXPECT_TRUE(analysis->StrictlyDominates(5, 13));
577 EXPECT_TRUE(analysis->StrictlyDominates(5, 12));
578 EXPECT_TRUE(analysis->StrictlyDominates(5, 46));
579 EXPECT_TRUE(analysis->StrictlyDominates(5, 50));
580 EXPECT_TRUE(analysis->StrictlyDominates(5, 47));
581 EXPECT_TRUE(analysis->StrictlyDominates(5, 57));
582 EXPECT_TRUE(analysis->StrictlyDominates(5, 61));
583 EXPECT_TRUE(analysis->StrictlyDominates(5, 59));
584 EXPECT_TRUE(analysis->StrictlyDominates(5, 58));
585 EXPECT_TRUE(analysis->StrictlyDominates(5, 60));
586 EXPECT_TRUE(analysis->StrictlyDominates(5, 48));
587 EXPECT_TRUE(analysis->StrictlyDominates(5, 73));
588 EXPECT_TRUE(analysis->StrictlyDominates(5, 77));
589 EXPECT_TRUE(analysis->StrictlyDominates(5, 75));
590 EXPECT_TRUE(analysis->StrictlyDominates(5, 106));
591 EXPECT_TRUE(analysis->StrictlyDominates(5, 110));
592 EXPECT_TRUE(analysis->StrictlyDominates(5, 107));
593 EXPECT_TRUE(analysis->StrictlyDominates(5, 108));
594 EXPECT_TRUE(analysis->StrictlyDominates(5, 109));
595 EXPECT_TRUE(analysis->StrictlyDominates(5, 74));
596 EXPECT_TRUE(analysis->StrictlyDominates(5, 86));
597 EXPECT_TRUE(analysis->StrictlyDominates(5, 90));
598 EXPECT_TRUE(analysis->StrictlyDominates(5, 87));
599 EXPECT_TRUE(analysis->StrictlyDominates(5, 94));
600 EXPECT_TRUE(analysis->StrictlyDominates(5, 98));
601 EXPECT_TRUE(analysis->StrictlyDominates(5, 95));
602 EXPECT_TRUE(analysis->StrictlyDominates(5, 97));
603 EXPECT_TRUE(analysis->StrictlyDominates(5, 96));
604 EXPECT_TRUE(analysis->StrictlyDominates(5, 88));
605 EXPECT_TRUE(analysis->StrictlyDominates(5, 76));
606
607 EXPECT_TRUE(analysis->StrictlyDominates(10, 14));
608 EXPECT_TRUE(analysis->StrictlyDominates(10, 11));
609 EXPECT_TRUE(analysis->StrictlyDominates(10, 29));
610 EXPECT_TRUE(analysis->StrictlyDominates(10, 33));
611 EXPECT_TRUE(analysis->StrictlyDominates(10, 30));
612 EXPECT_TRUE(analysis->StrictlyDominates(10, 32));
613 EXPECT_TRUE(analysis->StrictlyDominates(10, 31));
614 EXPECT_TRUE(analysis->StrictlyDominates(10, 13));
615 EXPECT_TRUE(analysis->StrictlyDominates(10, 12));
616 EXPECT_TRUE(analysis->StrictlyDominates(10, 46));
617 EXPECT_TRUE(analysis->StrictlyDominates(10, 50));
618 EXPECT_TRUE(analysis->StrictlyDominates(10, 47));
619 EXPECT_TRUE(analysis->StrictlyDominates(10, 57));
620 EXPECT_TRUE(analysis->StrictlyDominates(10, 61));
621 EXPECT_TRUE(analysis->StrictlyDominates(10, 59));
622 EXPECT_TRUE(analysis->StrictlyDominates(10, 58));
623 EXPECT_TRUE(analysis->StrictlyDominates(10, 60));
624 EXPECT_TRUE(analysis->StrictlyDominates(10, 48));
625 EXPECT_TRUE(analysis->StrictlyDominates(10, 73));
626 EXPECT_TRUE(analysis->StrictlyDominates(10, 77));
627 EXPECT_TRUE(analysis->StrictlyDominates(10, 75));
628 EXPECT_TRUE(analysis->StrictlyDominates(10, 106));
629 EXPECT_TRUE(analysis->StrictlyDominates(10, 110));
630 EXPECT_TRUE(analysis->StrictlyDominates(10, 107));
631 EXPECT_TRUE(analysis->StrictlyDominates(10, 108));
632 EXPECT_TRUE(analysis->StrictlyDominates(10, 109));
633 EXPECT_TRUE(analysis->StrictlyDominates(10, 74));
634 EXPECT_TRUE(analysis->StrictlyDominates(10, 86));
635 EXPECT_TRUE(analysis->StrictlyDominates(10, 90));
636 EXPECT_TRUE(analysis->StrictlyDominates(10, 87));
637 EXPECT_TRUE(analysis->StrictlyDominates(10, 94));
638 EXPECT_TRUE(analysis->StrictlyDominates(10, 98));
639 EXPECT_TRUE(analysis->StrictlyDominates(10, 95));
640 EXPECT_TRUE(analysis->StrictlyDominates(10, 97));
641 EXPECT_TRUE(analysis->StrictlyDominates(10, 96));
642 EXPECT_TRUE(analysis->StrictlyDominates(10, 88));
643 EXPECT_TRUE(analysis->StrictlyDominates(10, 76));
644
645 EXPECT_TRUE(analysis->StrictlyDominates(14, 11));
646 EXPECT_TRUE(analysis->StrictlyDominates(14, 29));
647 EXPECT_TRUE(analysis->StrictlyDominates(14, 33));
648 EXPECT_TRUE(analysis->StrictlyDominates(14, 30));
649 EXPECT_TRUE(analysis->StrictlyDominates(14, 32));
650 EXPECT_TRUE(analysis->StrictlyDominates(14, 31));
651
652 EXPECT_TRUE(analysis->StrictlyDominates(11, 29));
653 EXPECT_TRUE(analysis->StrictlyDominates(11, 33));
654 EXPECT_TRUE(analysis->StrictlyDominates(11, 30));
655 EXPECT_TRUE(analysis->StrictlyDominates(11, 32));
656 EXPECT_TRUE(analysis->StrictlyDominates(11, 31));
657
658 EXPECT_TRUE(analysis->StrictlyDominates(29, 33));
659 EXPECT_TRUE(analysis->StrictlyDominates(29, 30));
660 EXPECT_TRUE(analysis->StrictlyDominates(29, 32));
661 EXPECT_TRUE(analysis->StrictlyDominates(29, 31));
662
663 EXPECT_TRUE(analysis->StrictlyDominates(33, 30));
664
665 EXPECT_TRUE(analysis->StrictlyDominates(12, 46));
666 EXPECT_TRUE(analysis->StrictlyDominates(12, 50));
667 EXPECT_TRUE(analysis->StrictlyDominates(12, 47));
668 EXPECT_TRUE(analysis->StrictlyDominates(12, 57));
669 EXPECT_TRUE(analysis->StrictlyDominates(12, 61));
670 EXPECT_TRUE(analysis->StrictlyDominates(12, 59));
671 EXPECT_TRUE(analysis->StrictlyDominates(12, 58));
672 EXPECT_TRUE(analysis->StrictlyDominates(12, 60));
673 EXPECT_TRUE(analysis->StrictlyDominates(12, 48));
674 EXPECT_TRUE(analysis->StrictlyDominates(12, 73));
675 EXPECT_TRUE(analysis->StrictlyDominates(12, 77));
676 EXPECT_TRUE(analysis->StrictlyDominates(12, 75));
677 EXPECT_TRUE(analysis->StrictlyDominates(12, 106));
678 EXPECT_TRUE(analysis->StrictlyDominates(12, 110));
679 EXPECT_TRUE(analysis->StrictlyDominates(12, 107));
680 EXPECT_TRUE(analysis->StrictlyDominates(12, 108));
681 EXPECT_TRUE(analysis->StrictlyDominates(12, 109));
682 EXPECT_TRUE(analysis->StrictlyDominates(12, 74));
683 EXPECT_TRUE(analysis->StrictlyDominates(12, 86));
684 EXPECT_TRUE(analysis->StrictlyDominates(12, 90));
685 EXPECT_TRUE(analysis->StrictlyDominates(12, 87));
686 EXPECT_TRUE(analysis->StrictlyDominates(12, 94));
687 EXPECT_TRUE(analysis->StrictlyDominates(12, 98));
688 EXPECT_TRUE(analysis->StrictlyDominates(12, 95));
689 EXPECT_TRUE(analysis->StrictlyDominates(12, 97));
690 EXPECT_TRUE(analysis->StrictlyDominates(12, 96));
691 EXPECT_TRUE(analysis->StrictlyDominates(12, 88));
692 EXPECT_TRUE(analysis->StrictlyDominates(12, 76));
693
694 EXPECT_TRUE(analysis->StrictlyDominates(46, 50));
695 EXPECT_TRUE(analysis->StrictlyDominates(46, 47));
696 EXPECT_TRUE(analysis->StrictlyDominates(46, 57));
697 EXPECT_TRUE(analysis->StrictlyDominates(46, 61));
698 EXPECT_TRUE(analysis->StrictlyDominates(46, 59));
699 EXPECT_TRUE(analysis->StrictlyDominates(46, 58));
700 EXPECT_TRUE(analysis->StrictlyDominates(46, 60));
701 EXPECT_TRUE(analysis->StrictlyDominates(46, 48));
702 EXPECT_TRUE(analysis->StrictlyDominates(46, 73));
703 EXPECT_TRUE(analysis->StrictlyDominates(46, 77));
704 EXPECT_TRUE(analysis->StrictlyDominates(46, 75));
705 EXPECT_TRUE(analysis->StrictlyDominates(46, 106));
706 EXPECT_TRUE(analysis->StrictlyDominates(46, 110));
707 EXPECT_TRUE(analysis->StrictlyDominates(46, 107));
708 EXPECT_TRUE(analysis->StrictlyDominates(46, 108));
709 EXPECT_TRUE(analysis->StrictlyDominates(46, 109));
710 EXPECT_TRUE(analysis->StrictlyDominates(46, 74));
711 EXPECT_TRUE(analysis->StrictlyDominates(46, 86));
712 EXPECT_TRUE(analysis->StrictlyDominates(46, 90));
713 EXPECT_TRUE(analysis->StrictlyDominates(46, 87));
714 EXPECT_TRUE(analysis->StrictlyDominates(46, 94));
715 EXPECT_TRUE(analysis->StrictlyDominates(46, 98));
716 EXPECT_TRUE(analysis->StrictlyDominates(46, 95));
717 EXPECT_TRUE(analysis->StrictlyDominates(46, 97));
718 EXPECT_TRUE(analysis->StrictlyDominates(46, 96));
719 EXPECT_TRUE(analysis->StrictlyDominates(46, 88));
720 EXPECT_TRUE(analysis->StrictlyDominates(46, 76));
721
722 EXPECT_TRUE(analysis->StrictlyDominates(50, 47));
723 EXPECT_TRUE(analysis->StrictlyDominates(50, 57));
724 EXPECT_TRUE(analysis->StrictlyDominates(50, 61));
725 EXPECT_TRUE(analysis->StrictlyDominates(50, 59));
726 EXPECT_TRUE(analysis->StrictlyDominates(50, 58));
727 EXPECT_TRUE(analysis->StrictlyDominates(50, 60));
728
729 EXPECT_TRUE(analysis->StrictlyDominates(47, 57));
730 EXPECT_TRUE(analysis->StrictlyDominates(47, 61));
731 EXPECT_TRUE(analysis->StrictlyDominates(47, 59));
732 EXPECT_TRUE(analysis->StrictlyDominates(47, 58));
733 EXPECT_TRUE(analysis->StrictlyDominates(47, 60));
734
735 EXPECT_TRUE(analysis->StrictlyDominates(57, 61));
736 EXPECT_TRUE(analysis->StrictlyDominates(57, 59));
737 EXPECT_TRUE(analysis->StrictlyDominates(57, 58));
738 EXPECT_TRUE(analysis->StrictlyDominates(57, 60));
739
740 EXPECT_TRUE(analysis->StrictlyDominates(61, 59));
741
742 EXPECT_TRUE(analysis->StrictlyDominates(48, 73));
743 EXPECT_TRUE(analysis->StrictlyDominates(48, 77));
744 EXPECT_TRUE(analysis->StrictlyDominates(48, 75));
745 EXPECT_TRUE(analysis->StrictlyDominates(48, 106));
746 EXPECT_TRUE(analysis->StrictlyDominates(48, 110));
747 EXPECT_TRUE(analysis->StrictlyDominates(48, 107));
748 EXPECT_TRUE(analysis->StrictlyDominates(48, 108));
749 EXPECT_TRUE(analysis->StrictlyDominates(48, 109));
750 EXPECT_TRUE(analysis->StrictlyDominates(48, 74));
751 EXPECT_TRUE(analysis->StrictlyDominates(48, 86));
752 EXPECT_TRUE(analysis->StrictlyDominates(48, 90));
753 EXPECT_TRUE(analysis->StrictlyDominates(48, 87));
754 EXPECT_TRUE(analysis->StrictlyDominates(48, 94));
755 EXPECT_TRUE(analysis->StrictlyDominates(48, 98));
756 EXPECT_TRUE(analysis->StrictlyDominates(48, 95));
757 EXPECT_TRUE(analysis->StrictlyDominates(48, 97));
758 EXPECT_TRUE(analysis->StrictlyDominates(48, 96));
759 EXPECT_TRUE(analysis->StrictlyDominates(48, 88));
760 EXPECT_TRUE(analysis->StrictlyDominates(48, 76));
761
762 EXPECT_TRUE(analysis->StrictlyDominates(73, 77));
763 EXPECT_TRUE(analysis->StrictlyDominates(73, 75));
764 EXPECT_TRUE(analysis->StrictlyDominates(73, 106));
765 EXPECT_TRUE(analysis->StrictlyDominates(73, 110));
766 EXPECT_TRUE(analysis->StrictlyDominates(73, 107));
767 EXPECT_TRUE(analysis->StrictlyDominates(73, 108));
768 EXPECT_TRUE(analysis->StrictlyDominates(73, 109));
769 EXPECT_TRUE(analysis->StrictlyDominates(73, 74));
770 EXPECT_TRUE(analysis->StrictlyDominates(73, 86));
771 EXPECT_TRUE(analysis->StrictlyDominates(73, 90));
772 EXPECT_TRUE(analysis->StrictlyDominates(73, 87));
773 EXPECT_TRUE(analysis->StrictlyDominates(73, 94));
774 EXPECT_TRUE(analysis->StrictlyDominates(73, 98));
775 EXPECT_TRUE(analysis->StrictlyDominates(73, 95));
776 EXPECT_TRUE(analysis->StrictlyDominates(73, 97));
777 EXPECT_TRUE(analysis->StrictlyDominates(73, 96));
778 EXPECT_TRUE(analysis->StrictlyDominates(73, 88));
779 EXPECT_TRUE(analysis->StrictlyDominates(73, 76));
780
781 EXPECT_TRUE(analysis->StrictlyDominates(75, 106));
782 EXPECT_TRUE(analysis->StrictlyDominates(75, 110));
783 EXPECT_TRUE(analysis->StrictlyDominates(75, 107));
784 EXPECT_TRUE(analysis->StrictlyDominates(75, 108));
785 EXPECT_TRUE(analysis->StrictlyDominates(75, 109));
786
787 EXPECT_TRUE(analysis->StrictlyDominates(106, 110));
788 EXPECT_TRUE(analysis->StrictlyDominates(106, 107));
789 EXPECT_TRUE(analysis->StrictlyDominates(106, 108));
790 EXPECT_TRUE(analysis->StrictlyDominates(106, 109));
791
792 EXPECT_TRUE(analysis->StrictlyDominates(110, 107));
793
794 EXPECT_TRUE(analysis->StrictlyDominates(77, 74));
795 EXPECT_TRUE(analysis->StrictlyDominates(77, 86));
796 EXPECT_TRUE(analysis->StrictlyDominates(77, 90));
797 EXPECT_TRUE(analysis->StrictlyDominates(77, 87));
798 EXPECT_TRUE(analysis->StrictlyDominates(77, 94));
799 EXPECT_TRUE(analysis->StrictlyDominates(77, 98));
800 EXPECT_TRUE(analysis->StrictlyDominates(77, 95));
801 EXPECT_TRUE(analysis->StrictlyDominates(77, 97));
802 EXPECT_TRUE(analysis->StrictlyDominates(77, 96));
803 EXPECT_TRUE(analysis->StrictlyDominates(77, 88));
804
805 EXPECT_TRUE(analysis->StrictlyDominates(74, 86));
806 EXPECT_TRUE(analysis->StrictlyDominates(74, 90));
807 EXPECT_TRUE(analysis->StrictlyDominates(74, 87));
808 EXPECT_TRUE(analysis->StrictlyDominates(74, 94));
809 EXPECT_TRUE(analysis->StrictlyDominates(74, 98));
810 EXPECT_TRUE(analysis->StrictlyDominates(74, 95));
811 EXPECT_TRUE(analysis->StrictlyDominates(74, 97));
812 EXPECT_TRUE(analysis->StrictlyDominates(74, 96));
813 EXPECT_TRUE(analysis->StrictlyDominates(74, 88));
814
815 EXPECT_TRUE(analysis->StrictlyDominates(86, 90));
816 EXPECT_TRUE(analysis->StrictlyDominates(86, 87));
817 EXPECT_TRUE(analysis->StrictlyDominates(86, 94));
818 EXPECT_TRUE(analysis->StrictlyDominates(86, 98));
819 EXPECT_TRUE(analysis->StrictlyDominates(86, 95));
820 EXPECT_TRUE(analysis->StrictlyDominates(86, 97));
821 EXPECT_TRUE(analysis->StrictlyDominates(86, 96));
822 EXPECT_TRUE(analysis->StrictlyDominates(86, 88));
823
824 EXPECT_TRUE(analysis->StrictlyDominates(90, 87));
825 EXPECT_TRUE(analysis->StrictlyDominates(90, 94));
826 EXPECT_TRUE(analysis->StrictlyDominates(90, 98));
827 EXPECT_TRUE(analysis->StrictlyDominates(90, 95));
828 EXPECT_TRUE(analysis->StrictlyDominates(90, 97));
829 EXPECT_TRUE(analysis->StrictlyDominates(90, 96));
830
831 EXPECT_TRUE(analysis->StrictlyDominates(87, 94));
832 EXPECT_TRUE(analysis->StrictlyDominates(87, 98));
833 EXPECT_TRUE(analysis->StrictlyDominates(87, 95));
834 EXPECT_TRUE(analysis->StrictlyDominates(87, 97));
835 EXPECT_TRUE(analysis->StrictlyDominates(87, 96));
836
837 EXPECT_TRUE(analysis->StrictlyDominates(94, 98));
838 EXPECT_TRUE(analysis->StrictlyDominates(94, 95));
839 EXPECT_TRUE(analysis->StrictlyDominates(94, 97));
840 EXPECT_TRUE(analysis->StrictlyDominates(94, 96));
841
842 EXPECT_TRUE(analysis->StrictlyDominates(98, 95));
843 }
844
845 } // namespace
846 } // namespace opt
847 } // namespace spvtools
848