• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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