683 lines · plain
1// RUN: mlir-opt %s -pass-pipeline="builtin.module(func.func(test-print-dominance))" -split-input-file | FileCheck %s2 3// CHECK-LABEL: Testing : func_condBranch4func.func @func_condBranch(%cond : i1) {5 cf.cond_br %cond, ^bb1, ^bb26^bb1:7 cf.br ^exit8^bb2:9 cf.br ^exit10^exit:11 return12}13 14// CHECK: --- DominanceInfo ---15// CHECK: Nearest(0, 0) = 016// CHECK: Nearest(0, 1) = 017// CHECK: Nearest(0, 2) = 018// CHECK: Nearest(0, 3) = 019// CHECK: Nearest(0, 4) = 420// CHECK: Nearest(1, 0) = 021// CHECK: Nearest(1, 1) = 122// CHECK: Nearest(1, 2) = 023// CHECK: Nearest(1, 3) = 024// CHECK: Nearest(1, 4) = 425// CHECK: Nearest(2, 0) = 026// CHECK: Nearest(2, 1) = 027// CHECK: Nearest(2, 2) = 228// CHECK: Nearest(2, 3) = 029// CHECK: Nearest(2, 4) = 430// CHECK: Nearest(3, 0) = 031// CHECK: Nearest(3, 1) = 032// CHECK: Nearest(3, 2) = 033// CHECK: Nearest(3, 3) = 334// CHECK: Nearest(3, 4) = 435// CHECK: Nearest(4, 0) = 436// CHECK: Nearest(4, 1) = 437// CHECK: Nearest(4, 2) = 438// CHECK: Nearest(4, 3) = 439// CHECK: Nearest(4, 4) = 440 41// CHECK: --- PostDominanceInfo ---42// CHECK: Nearest(0, 0) = 043// CHECK: Nearest(0, 1) = 344// CHECK: Nearest(0, 2) = 345// CHECK: Nearest(0, 3) = 346// CHECK: Nearest(0, 4) = 447// CHECK: Nearest(1, 0) = 348// CHECK: Nearest(1, 1) = 149// CHECK: Nearest(1, 2) = 350// CHECK: Nearest(1, 3) = 351// CHECK: Nearest(1, 4) = 452// CHECK: Nearest(2, 0) = 353// CHECK: Nearest(2, 1) = 354// CHECK: Nearest(2, 2) = 255// CHECK: Nearest(2, 3) = 356// CHECK: Nearest(2, 4) = 457// CHECK: Nearest(3, 0) = 358// CHECK: Nearest(3, 1) = 359// CHECK: Nearest(3, 2) = 360// CHECK: Nearest(3, 3) = 361// CHECK: Nearest(3, 4) = 462// CHECK: Nearest(4, 0) = 463// CHECK: Nearest(4, 1) = 464// CHECK: Nearest(4, 2) = 465// CHECK: Nearest(4, 3) = 466// CHECK: Nearest(4, 4) = 467 68// CHECK: --- Block Dominance relationship ---69// CHECK: dominates(0, 0) = 1 (properly = 0)70// CHECK: dominates(0, 1) = 1 (properly = 1)71// CHECK: dominates(0, 2) = 1 (properly = 1)72// CHECK: dominates(0, 3) = 1 (properly = 1)73// CHECK: dominates(0, 4) = 0 (properly = 0)74// CHECK: dominates(1, 0) = 0 (properly = 0)75// CHECK: dominates(1, 1) = 1 (properly = 0)76// CHECK: dominates(1, 2) = 0 (properly = 0)77// CHECK: dominates(1, 3) = 0 (properly = 0)78// CHECK: dominates(1, 4) = 0 (properly = 0)79// CHECK: dominates(2, 0) = 0 (properly = 0)80// CHECK: dominates(2, 1) = 0 (properly = 0)81// CHECK: dominates(2, 2) = 1 (properly = 0)82// CHECK: dominates(2, 3) = 0 (properly = 0)83// CHECK: dominates(2, 4) = 0 (properly = 0)84// CHECK: dominates(3, 0) = 0 (properly = 0)85// CHECK: dominates(3, 1) = 0 (properly = 0)86// CHECK: dominates(3, 2) = 0 (properly = 0)87// CHECK: dominates(3, 3) = 1 (properly = 0)88// CHECK: dominates(3, 4) = 0 (properly = 0)89// CHECK: dominates(4, 0) = 1 (properly = 1)90// CHECK: dominates(4, 1) = 1 (properly = 1)91// CHECK: dominates(4, 2) = 1 (properly = 1)92// CHECK: dominates(4, 3) = 1 (properly = 1)93// CHECK: dominates(4, 4) = 1 (properly = 1)94 95// CHECK: --- Block PostDominance relationship ---96// CHECK: postdominates(0, 0) = 1 (properly = 0)97// CHECK: postdominates(0, 1) = 0 (properly = 0)98// CHECK: postdominates(0, 2) = 0 (properly = 0)99// CHECK: postdominates(0, 3) = 0 (properly = 0)100// CHECK: postdominates(0, 4) = 0 (properly = 0)101// CHECK: postdominates(1, 0) = 0 (properly = 0)102// CHECK: postdominates(1, 1) = 1 (properly = 0)103// CHECK: postdominates(1, 2) = 0 (properly = 0)104// CHECK: postdominates(1, 3) = 0 (properly = 0)105// CHECK: postdominates(1, 4) = 0 (properly = 0)106// CHECK: postdominates(2, 0) = 0 (properly = 0)107// CHECK: postdominates(2, 1) = 0 (properly = 0)108// CHECK: postdominates(2, 2) = 1 (properly = 0)109// CHECK: postdominates(2, 3) = 0 (properly = 0)110// CHECK: postdominates(2, 4) = 0 (properly = 0)111// CHECK: postdominates(3, 0) = 1 (properly = 1)112// CHECK: postdominates(3, 1) = 1 (properly = 1)113// CHECK: postdominates(3, 2) = 1 (properly = 1)114// CHECK: postdominates(3, 3) = 1 (properly = 0)115// CHECK: postdominates(3, 4) = 0 (properly = 0)116// CHECK: postdominates(4, 0) = 1 (properly = 1)117// CHECK: postdominates(4, 1) = 1 (properly = 1)118// CHECK: postdominates(4, 2) = 1 (properly = 1)119// CHECK: postdominates(4, 3) = 1 (properly = 1)120// CHECK: postdominates(4, 4) = 1 (properly = 1)121 122// CHECK: module attributes {test.block_ids = array<i64: 4>}123// CHECK: func.func @func_condBranch({{.*}}) attributes {test.block_ids = array<i64: 0, 1, 2, 3>}124 125// -----126 127// CHECK-LABEL: Testing : func_loop128func.func @func_loop(%arg0 : i32, %arg1 : i32) {129 cf.br ^loopHeader(%arg0 : i32)130^loopHeader(%counter : i32):131 %lessThan = arith.cmpi slt, %counter, %arg1 : i32132 cf.cond_br %lessThan, ^loopBody, ^exit133^loopBody:134 %const0 = arith.constant 1 : i32135 %inc = arith.addi %counter, %const0 : i32136 cf.br ^loopHeader(%inc : i32)137^exit:138 return139}140 141// CHECK: --- DominanceInfo ---142// CHECK: Nearest(0, 0) = 0143// CHECK: Nearest(0, 1) = 0144// CHECK: Nearest(0, 2) = 0145// CHECK: Nearest(0, 3) = 0146// CHECK: Nearest(0, 4) = 4147// CHECK: Nearest(1, 0) = 0148// CHECK: Nearest(1, 1) = 1149// CHECK: Nearest(1, 2) = 1150// CHECK: Nearest(1, 3) = 1151// CHECK: Nearest(1, 4) = 4152// CHECK: Nearest(2, 0) = 0153// CHECK: Nearest(2, 1) = 1154// CHECK: Nearest(2, 2) = 2155// CHECK: Nearest(2, 3) = 1156// CHECK: Nearest(2, 4) = 4157// CHECK: Nearest(3, 0) = 0158// CHECK: Nearest(3, 1) = 1159// CHECK: Nearest(3, 2) = 1160// CHECK: Nearest(3, 3) = 3161// CHECK: Nearest(3, 4) = 4162// CHECK: Nearest(4, 0) = 4163// CHECK: Nearest(4, 1) = 4164// CHECK: Nearest(4, 2) = 4165// CHECK: Nearest(4, 3) = 4166// CHECK: Nearest(4, 4) = 4167 168// CHECK: --- PostDominanceInfo ---169// CHECK: Nearest(0, 0) = 0170// CHECK: Nearest(0, 1) = 1171// CHECK: Nearest(0, 2) = 1172// CHECK: Nearest(0, 3) = 3173// CHECK: Nearest(0, 4) = 4174// CHECK: Nearest(1, 0) = 1175// CHECK: Nearest(1, 1) = 1176// CHECK: Nearest(1, 2) = 1177// CHECK: Nearest(1, 3) = 3178// CHECK: Nearest(1, 4) = 4179// CHECK: Nearest(2, 0) = 1180// CHECK: Nearest(2, 1) = 1181// CHECK: Nearest(2, 2) = 2182// CHECK: Nearest(2, 3) = 3183// CHECK: Nearest(2, 4) = 4184// CHECK: Nearest(3, 0) = 3185// CHECK: Nearest(3, 1) = 3186// CHECK: Nearest(3, 2) = 3187// CHECK: Nearest(3, 3) = 3188// CHECK: Nearest(3, 4) = 4189// CHECK: Nearest(4, 0) = 4190// CHECK: Nearest(4, 1) = 4191// CHECK: Nearest(4, 2) = 4192// CHECK: Nearest(4, 3) = 4193// CHECK: Nearest(4, 4) = 4194 195// CHECK: --- Block Dominance relationship ---196// CHECK: dominates(0, 0) = 1 (properly = 0)197// CHECK: dominates(0, 1) = 1 (properly = 1)198// CHECK: dominates(0, 2) = 1 (properly = 1)199// CHECK: dominates(0, 3) = 1 (properly = 1)200// CHECK: dominates(0, 4) = 0 (properly = 0)201// CHECK: dominates(1, 0) = 0 (properly = 0)202// CHECK: dominates(1, 1) = 1 (properly = 0)203// CHECK: dominates(1, 2) = 1 (properly = 1)204// CHECK: dominates(1, 3) = 1 (properly = 1)205// CHECK: dominates(1, 4) = 0 (properly = 0)206// CHECK: dominates(2, 0) = 0 (properly = 0)207// CHECK: dominates(2, 1) = 0 (properly = 0)208// CHECK: dominates(2, 2) = 1 (properly = 0)209// CHECK: dominates(2, 3) = 0 (properly = 0)210// CHECK: dominates(2, 4) = 0 (properly = 0)211// CHECK: dominates(3, 0) = 0 (properly = 0)212// CHECK: dominates(3, 1) = 0 (properly = 0)213// CHECK: dominates(3, 2) = 0 (properly = 0)214// CHECK: dominates(3, 3) = 1 (properly = 0)215// CHECK: dominates(3, 4) = 0 (properly = 0)216// CHECK: dominates(4, 0) = 1 (properly = 1)217// CHECK: dominates(4, 1) = 1 (properly = 1)218// CHECK: dominates(4, 2) = 1 (properly = 1)219// CHECK: dominates(4, 3) = 1 (properly = 1)220// CHECK: dominates(4, 4) = 1 (properly = 1)221 222// CHECK: --- Block PostDominance relationship ---223// CHECK: postdominates(0, 0) = 1 (properly = 0)224// CHECK: postdominates(0, 1) = 0 (properly = 0)225// CHECK: postdominates(0, 2) = 0 (properly = 0)226// CHECK: postdominates(0, 3) = 0 (properly = 0)227// CHECK: postdominates(0, 4) = 0 (properly = 0)228// CHECK: postdominates(1, 0) = 1 (properly = 1)229// CHECK: postdominates(1, 1) = 1 (properly = 0)230// CHECK: postdominates(1, 2) = 1 (properly = 1)231// CHECK: postdominates(1, 3) = 0 (properly = 0)232// CHECK: postdominates(1, 4) = 0 (properly = 0)233// CHECK: postdominates(2, 0) = 0 (properly = 0)234// CHECK: postdominates(2, 1) = 0 (properly = 0)235// CHECK: postdominates(2, 2) = 1 (properly = 0)236// CHECK: postdominates(2, 3) = 0 (properly = 0)237// CHECK: postdominates(2, 4) = 0 (properly = 0)238// CHECK: postdominates(3, 0) = 1 (properly = 1)239// CHECK: postdominates(3, 1) = 1 (properly = 1)240// CHECK: postdominates(3, 2) = 1 (properly = 1)241// CHECK: postdominates(3, 3) = 1 (properly = 0)242// CHECK: postdominates(3, 4) = 0 (properly = 0)243// CHECK: postdominates(4, 0) = 1 (properly = 1)244// CHECK: postdominates(4, 1) = 1 (properly = 1)245// CHECK: postdominates(4, 2) = 1 (properly = 1)246// CHECK: postdominates(4, 3) = 1 (properly = 1)247// CHECK: postdominates(4, 4) = 1 (properly = 1)248 249// CHECK: module attributes {test.block_ids = array<i64: 4>}250// CHECK: func.func @func_loop({{.*}}) attributes {test.block_ids = array<i64: 0, 1, 2, 3>}251 252// -----253 254// CHECK-LABEL: Testing : nested_region255func.func @nested_region(%arg0 : index, %arg1 : index, %arg2 : index) {256 scf.for %arg3 = %arg0 to %arg1 step %arg2 { }257 return258}259 260// CHECK: --- DominanceInfo ---261// CHECK: Nearest(0, 0) = 0262// CHECK: Nearest(0, 1) = 1263// CHECK: Nearest(0, 2) = 2264// CHECK: Nearest(1, 0) = 1265// CHECK: Nearest(1, 1) = 1266// CHECK: Nearest(1, 2) = 2267// CHECK: Nearest(2, 0) = 2268// CHECK: Nearest(2, 1) = 2269// CHECK: Nearest(2, 2) = 2270 271// CHECK: --- PostDominanceInfo ---272// CHECK: Nearest(0, 0) = 0273// CHECK: Nearest(0, 1) = 1274// CHECK: Nearest(0, 2) = 2275// CHECK: Nearest(1, 0) = 1276// CHECK: Nearest(1, 1) = 1277// CHECK: Nearest(1, 2) = 2278// CHECK: Nearest(2, 0) = 2279// CHECK: Nearest(2, 1) = 2280// CHECK: Nearest(2, 2) = 2281 282// CHECK: --- Block Dominance relationship ---283// CHECK: dominates(0, 0) = 1 (properly = 0)284// CHECK: dominates(0, 1) = 0 (properly = 0)285// CHECK: dominates(0, 2) = 0 (properly = 0)286// CHECK: dominates(1, 0) = 1 (properly = 1)287// CHECK: dominates(1, 1) = 1 (properly = 0)288// CHECK: dominates(1, 2) = 0 (properly = 0)289// CHECK: dominates(2, 0) = 1 (properly = 1)290// CHECK: dominates(2, 1) = 1 (properly = 1)291// CHECK: dominates(2, 2) = 1 (properly = 1)292 293// CHECK: --- Block PostDominance relationship ---294// CHECK: postdominates(0, 0) = 1 (properly = 0)295// CHECK: postdominates(0, 1) = 0 (properly = 0)296// CHECK: postdominates(0, 2) = 0 (properly = 0)297// CHECK: postdominates(1, 0) = 1 (properly = 1)298// CHECK: postdominates(1, 1) = 1 (properly = 0)299// CHECK: postdominates(1, 2) = 0 (properly = 0)300// CHECK: postdominates(2, 0) = 1 (properly = 1)301// CHECK: postdominates(2, 1) = 1 (properly = 1)302// CHECK: postdominates(2, 2) = 1 (properly = 1)303 304// CHECK: module attributes {test.block_ids = array<i64: 2>} {305// CHECK: func.func @nested_region({{.*}}) attributes {test.block_ids = array<i64: 1>} {306// CHECK: scf.for {{.*}} {307// CHECK: } {test.block_ids = array<i64: 0>}308// CHECK: return309// CHECK: }310// CHECK: }311 312// -----313 314// CHECK-LABEL: Testing : nested_region2315func.func @nested_region2(%arg0 : index, %arg1 : index, %arg2 : index) {316 scf.for %arg3 = %arg0 to %arg1 step %arg2 {317 scf.for %arg4 = %arg0 to %arg1 step %arg2 {318 scf.for %arg5 = %arg0 to %arg1 step %arg2 { }319 }320 }321 return322}323 324// CHECK: --- DominanceInfo ---325// CHECK: Nearest(0, 0) = 0326// CHECK: Nearest(0, 1) = 1327// CHECK: Nearest(0, 2) = 2328// CHECK: Nearest(0, 3) = 3329// CHECK: Nearest(0, 4) = 4330// CHECK: Nearest(1, 0) = 1331// CHECK: Nearest(1, 1) = 1332// CHECK: Nearest(1, 2) = 2333// CHECK: Nearest(1, 3) = 3334// CHECK: Nearest(1, 4) = 4335// CHECK: Nearest(2, 0) = 2336// CHECK: Nearest(2, 1) = 2337// CHECK: Nearest(2, 2) = 2338// CHECK: Nearest(2, 3) = 3339// CHECK: Nearest(2, 4) = 4340// CHECK: Nearest(3, 0) = 3341// CHECK: Nearest(3, 1) = 3342// CHECK: Nearest(3, 2) = 3343// CHECK: Nearest(3, 3) = 3344// CHECK: Nearest(3, 4) = 4345// CHECK: Nearest(4, 0) = 4346// CHECK: Nearest(4, 1) = 4347// CHECK: Nearest(4, 2) = 4348// CHECK: Nearest(4, 3) = 4349// CHECK: Nearest(4, 4) = 4350 351// CHECK: --- PostDominanceInfo ---352// CHECK: Nearest(0, 0) = 0353// CHECK: Nearest(0, 1) = 1354// CHECK: Nearest(0, 2) = 2355// CHECK: Nearest(0, 3) = 3356// CHECK: Nearest(0, 4) = 4357// CHECK: Nearest(1, 0) = 1358// CHECK: Nearest(1, 1) = 1359// CHECK: Nearest(1, 2) = 2360// CHECK: Nearest(1, 3) = 3361// CHECK: Nearest(1, 4) = 4362// CHECK: Nearest(2, 0) = 2363// CHECK: Nearest(2, 1) = 2364// CHECK: Nearest(2, 2) = 2365// CHECK: Nearest(2, 3) = 3366// CHECK: Nearest(2, 4) = 4367// CHECK: Nearest(3, 0) = 3368// CHECK: Nearest(3, 1) = 3369// CHECK: Nearest(3, 2) = 3370// CHECK: Nearest(3, 3) = 3371// CHECK: Nearest(3, 4) = 4372// CHECK: Nearest(4, 0) = 4373// CHECK: Nearest(4, 1) = 4374// CHECK: Nearest(4, 2) = 4375// CHECK: Nearest(4, 3) = 4376// CHECK: Nearest(4, 4) = 4377 378// CHECK: --- Block Dominance relationship ---379// CHECK: dominates(0, 0) = 1 (properly = 0)380// CHECK: dominates(0, 1) = 0 (properly = 0)381// CHECK: dominates(0, 2) = 0 (properly = 0)382// CHECK: dominates(0, 3) = 0 (properly = 0)383// CHECK: dominates(0, 4) = 0 (properly = 0)384// CHECK: dominates(1, 0) = 1 (properly = 1)385// CHECK: dominates(1, 1) = 1 (properly = 0)386// CHECK: dominates(1, 2) = 0 (properly = 0)387// CHECK: dominates(1, 3) = 0 (properly = 0)388// CHECK: dominates(1, 4) = 0 (properly = 0)389// CHECK: dominates(2, 0) = 1 (properly = 1)390// CHECK: dominates(2, 1) = 1 (properly = 1)391// CHECK: dominates(2, 2) = 1 (properly = 0)392// CHECK: dominates(2, 3) = 0 (properly = 0)393// CHECK: dominates(2, 4) = 0 (properly = 0)394// CHECK: dominates(3, 0) = 1 (properly = 1)395// CHECK: dominates(3, 1) = 1 (properly = 1)396// CHECK: dominates(3, 2) = 1 (properly = 1)397// CHECK: dominates(3, 3) = 1 (properly = 0)398// CHECK: dominates(3, 4) = 0 (properly = 0)399// CHECK: dominates(4, 0) = 1 (properly = 1)400// CHECK: dominates(4, 1) = 1 (properly = 1)401// CHECK: dominates(4, 2) = 1 (properly = 1)402// CHECK: dominates(4, 3) = 1 (properly = 1)403// CHECK: dominates(4, 4) = 1 (properly = 1)404 405// CHECK: --- Block PostDominance relationship ---406// CHECK: postdominates(0, 0) = 1 (properly = 0)407// CHECK: postdominates(0, 1) = 0 (properly = 0)408// CHECK: postdominates(0, 2) = 0 (properly = 0)409// CHECK: postdominates(0, 3) = 0 (properly = 0)410// CHECK: postdominates(0, 4) = 0 (properly = 0)411// CHECK: postdominates(1, 0) = 1 (properly = 1)412// CHECK: postdominates(1, 1) = 1 (properly = 0)413// CHECK: postdominates(1, 2) = 0 (properly = 0)414// CHECK: postdominates(1, 3) = 0 (properly = 0)415// CHECK: postdominates(1, 4) = 0 (properly = 0)416// CHECK: postdominates(2, 0) = 1 (properly = 1)417// CHECK: postdominates(2, 1) = 1 (properly = 1)418// CHECK: postdominates(2, 2) = 1 (properly = 0)419// CHECK: postdominates(2, 3) = 0 (properly = 0)420// CHECK: postdominates(2, 4) = 0 (properly = 0)421// CHECK: postdominates(3, 0) = 1 (properly = 1)422// CHECK: postdominates(3, 1) = 1 (properly = 1)423// CHECK: postdominates(3, 2) = 1 (properly = 1)424// CHECK: postdominates(3, 3) = 1 (properly = 0)425// CHECK: postdominates(3, 4) = 0 (properly = 0)426// CHECK: postdominates(4, 0) = 1 (properly = 1)427// CHECK: postdominates(4, 1) = 1 (properly = 1)428// CHECK: postdominates(4, 2) = 1 (properly = 1)429// CHECK: postdominates(4, 3) = 1 (properly = 1)430// CHECK: postdominates(4, 4) = 1 (properly = 1)431 432// CHECK: module attributes {test.block_ids = array<i64: 4>} {433// CHECK: func.func @nested_region2({{.*}}) attributes {test.block_ids = array<i64: 3>} {434// CHECK: scf.for {{.*}} {435// CHECK: scf.for {{.*}} {436// CHECK: scf.for {{.*}} {437// CHECK: } {test.block_ids = array<i64: 0>}438// CHECK: } {test.block_ids = array<i64: 1>}439// CHECK: } {test.block_ids = array<i64: 2>}440// CHECK: return441// CHECK: }442// CHECK: }443 444// -----445 446// CHECK-LABEL: Testing : func_loop_nested_region447func.func @func_loop_nested_region(448 %arg0 : i32,449 %arg1 : i32,450 %arg2 : index,451 %arg3 : index,452 %arg4 : index) {453 cf.br ^loopHeader(%arg0 : i32)454^loopHeader(%counter : i32):455 %lessThan = arith.cmpi slt, %counter, %arg1 : i32456 cf.cond_br %lessThan, ^loopBody, ^exit457^loopBody:458 %const0 = arith.constant 1 : i32459 %inc = arith.addi %counter, %const0 : i32460 scf.for %arg5 = %arg2 to %arg3 step %arg4 {461 scf.for %arg6 = %arg2 to %arg3 step %arg4 { }462 }463 cf.br ^loopHeader(%inc : i32)464^exit:465 return466}467 468// CHECK: --- DominanceInfo ---469// CHECK: Nearest(0, 0) = 0470// CHECK: Nearest(0, 1) = 0471// CHECK: Nearest(0, 2) = 0472// CHECK: Nearest(0, 3) = 0473// CHECK: Nearest(0, 4) = 0474// CHECK: Nearest(0, 5) = 0475// CHECK: Nearest(0, 6) = 6476// CHECK: Nearest(1, 0) = 0477// CHECK: Nearest(1, 1) = 1478// CHECK: Nearest(1, 2) = 1479// CHECK: Nearest(1, 3) = 1480// CHECK: Nearest(1, 4) = 1481// CHECK: Nearest(1, 5) = 1482// CHECK: Nearest(1, 6) = 6483// CHECK: Nearest(2, 0) = 0484// CHECK: Nearest(2, 1) = 1485// CHECK: Nearest(2, 2) = 2486// CHECK: Nearest(2, 3) = 2487// CHECK: Nearest(2, 4) = 2488// CHECK: Nearest(2, 5) = 1489// CHECK: Nearest(2, 6) = 6490// CHECK: Nearest(3, 0) = 0491// CHECK: Nearest(3, 1) = 1492// CHECK: Nearest(3, 2) = 2493// CHECK: Nearest(3, 3) = 3494// CHECK: Nearest(3, 4) = 4495// CHECK: Nearest(3, 5) = 1496// CHECK: Nearest(3, 6) = 6497// CHECK: Nearest(4, 0) = 0498// CHECK: Nearest(4, 1) = 1499// CHECK: Nearest(4, 2) = 2500// CHECK: Nearest(4, 3) = 4501// CHECK: Nearest(4, 4) = 4502// CHECK: Nearest(4, 5) = 1503// CHECK: Nearest(4, 6) = 6504// CHECK: Nearest(5, 0) = 0505// CHECK: Nearest(5, 1) = 1506// CHECK: Nearest(5, 2) = 1507// CHECK: Nearest(5, 3) = 1508// CHECK: Nearest(5, 4) = 1509// CHECK: Nearest(5, 5) = 5510// CHECK: Nearest(5, 6) = 6511// CHECK: Nearest(6, 0) = 6512// CHECK: Nearest(6, 1) = 6513// CHECK: Nearest(6, 2) = 6514// CHECK: Nearest(6, 3) = 6515// CHECK: Nearest(6, 4) = 6516// CHECK: Nearest(6, 5) = 6517// CHECK: Nearest(6, 6) = 6518 519// CHECK: --- PostDominanceInfo ---520// CHECK: Nearest(0, 0) = 0521// CHECK: Nearest(0, 1) = 1522// CHECK: Nearest(0, 2) = 1523// CHECK: Nearest(0, 3) = 1524// CHECK: Nearest(0, 4) = 1525// CHECK: Nearest(0, 5) = 5526// CHECK: Nearest(0, 6) = 6527// CHECK: Nearest(1, 0) = 1528// CHECK: Nearest(1, 1) = 1529// CHECK: Nearest(1, 2) = 1530// CHECK: Nearest(1, 3) = 1531// CHECK: Nearest(1, 4) = 1532// CHECK: Nearest(1, 5) = 5533// CHECK: Nearest(1, 6) = 6534// CHECK: Nearest(2, 0) = 1535// CHECK: Nearest(2, 1) = 1536// CHECK: Nearest(2, 2) = 2537// CHECK: Nearest(2, 3) = 2538// CHECK: Nearest(2, 4) = 2539// CHECK: Nearest(2, 5) = 5540// CHECK: Nearest(2, 6) = 6541// CHECK: Nearest(3, 0) = 1542// CHECK: Nearest(3, 1) = 1543// CHECK: Nearest(3, 2) = 2544// CHECK: Nearest(3, 3) = 3545// CHECK: Nearest(3, 4) = 4546// CHECK: Nearest(3, 5) = 5547// CHECK: Nearest(3, 6) = 6548// CHECK: Nearest(4, 0) = 1549// CHECK: Nearest(4, 1) = 1550// CHECK: Nearest(4, 2) = 2551// CHECK: Nearest(4, 3) = 4552// CHECK: Nearest(4, 4) = 4553// CHECK: Nearest(4, 5) = 5554// CHECK: Nearest(4, 6) = 6555// CHECK: Nearest(5, 0) = 5556// CHECK: Nearest(5, 1) = 5557// CHECK: Nearest(5, 2) = 5558// CHECK: Nearest(5, 3) = 5559// CHECK: Nearest(5, 4) = 5560// CHECK: Nearest(5, 5) = 5561// CHECK: Nearest(5, 6) = 6562// CHECK: Nearest(6, 0) = 6563// CHECK: Nearest(6, 1) = 6564// CHECK: Nearest(6, 2) = 6565// CHECK: Nearest(6, 3) = 6566// CHECK: Nearest(6, 4) = 6567// CHECK: Nearest(6, 5) = 6568// CHECK: Nearest(6, 6) = 6569 570// CHECK: --- Block Dominance relationship ---571// CHECK: dominates(0, 0) = 1 (properly = 0)572// CHECK: dominates(0, 1) = 1 (properly = 1)573// CHECK: dominates(0, 2) = 1 (properly = 1)574// CHECK: dominates(0, 3) = 1 (properly = 1)575// CHECK: dominates(0, 4) = 1 (properly = 1)576// CHECK: dominates(0, 5) = 1 (properly = 1)577// CHECK: dominates(0, 6) = 0 (properly = 0)578// CHECK: dominates(1, 0) = 0 (properly = 0)579// CHECK: dominates(1, 1) = 1 (properly = 0)580// CHECK: dominates(1, 2) = 1 (properly = 1)581// CHECK: dominates(1, 3) = 1 (properly = 1)582// CHECK: dominates(1, 4) = 1 (properly = 1)583// CHECK: dominates(1, 5) = 1 (properly = 1)584// CHECK: dominates(1, 6) = 0 (properly = 0)585// CHECK: dominates(2, 0) = 0 (properly = 0)586// CHECK: dominates(2, 1) = 0 (properly = 0)587// CHECK: dominates(2, 2) = 1 (properly = 0)588// CHECK: dominates(2, 3) = 1 (properly = 1)589// CHECK: dominates(2, 4) = 1 (properly = 1)590// CHECK: dominates(2, 5) = 0 (properly = 0)591// CHECK: dominates(2, 6) = 0 (properly = 0)592// CHECK: dominates(3, 0) = 0 (properly = 0)593// CHECK: dominates(3, 1) = 0 (properly = 0)594// CHECK: dominates(3, 2) = 0 (properly = 0)595// CHECK: dominates(3, 3) = 1 (properly = 0)596// CHECK: dominates(3, 4) = 0 (properly = 0)597// CHECK: dominates(3, 5) = 0 (properly = 0)598// CHECK: dominates(3, 6) = 0 (properly = 0)599// CHECK: dominates(4, 0) = 0 (properly = 0)600// CHECK: dominates(4, 1) = 0 (properly = 0)601// CHECK: dominates(4, 2) = 0 (properly = 0)602// CHECK: dominates(4, 3) = 1 (properly = 1)603// CHECK: dominates(4, 4) = 1 (properly = 0)604// CHECK: dominates(4, 5) = 0 (properly = 0)605// CHECK: dominates(4, 6) = 0 (properly = 0)606// CHECK: dominates(5, 0) = 0 (properly = 0)607// CHECK: dominates(5, 1) = 0 (properly = 0)608// CHECK: dominates(5, 2) = 0 (properly = 0)609// CHECK: dominates(5, 3) = 0 (properly = 0)610// CHECK: dominates(5, 4) = 0 (properly = 0)611// CHECK: dominates(5, 5) = 1 (properly = 0)612// CHECK: dominates(5, 6) = 0 (properly = 0)613// CHECK: dominates(6, 0) = 1 (properly = 1)614// CHECK: dominates(6, 1) = 1 (properly = 1)615// CHECK: dominates(6, 2) = 1 (properly = 1)616// CHECK: dominates(6, 3) = 1 (properly = 1)617// CHECK: dominates(6, 4) = 1 (properly = 1)618// CHECK: dominates(6, 5) = 1 (properly = 1)619// CHECK: dominates(6, 6) = 1 (properly = 1)620 621// CHECK: --- Block PostDominance relationship ---622// CHECK: postdominates(0, 0) = 1 (properly = 0)623// CHECK: postdominates(0, 1) = 0 (properly = 0)624// CHECK: postdominates(0, 2) = 0 (properly = 0)625// CHECK: postdominates(0, 3) = 0 (properly = 0)626// CHECK: postdominates(0, 4) = 0 (properly = 0)627// CHECK: postdominates(0, 5) = 0 (properly = 0)628// CHECK: postdominates(0, 6) = 0 (properly = 0)629// CHECK: postdominates(1, 0) = 1 (properly = 1)630// CHECK: postdominates(1, 1) = 1 (properly = 0)631// CHECK: postdominates(1, 2) = 1 (properly = 1)632// CHECK: postdominates(1, 3) = 1 (properly = 1)633// CHECK: postdominates(1, 4) = 1 (properly = 1)634// CHECK: postdominates(1, 5) = 0 (properly = 0)635// CHECK: postdominates(1, 6) = 0 (properly = 0)636// CHECK: postdominates(2, 0) = 0 (properly = 0)637// CHECK: postdominates(2, 1) = 0 (properly = 0)638// CHECK: postdominates(2, 2) = 1 (properly = 0)639// CHECK: postdominates(2, 3) = 1 (properly = 1)640// CHECK: postdominates(2, 4) = 1 (properly = 1)641// CHECK: postdominates(2, 5) = 0 (properly = 0)642// CHECK: postdominates(2, 6) = 0 (properly = 0)643// CHECK: postdominates(3, 0) = 0 (properly = 0)644// CHECK: postdominates(3, 1) = 0 (properly = 0)645// CHECK: postdominates(3, 2) = 0 (properly = 0)646// CHECK: postdominates(3, 3) = 1 (properly = 0)647// CHECK: postdominates(3, 4) = 0 (properly = 0)648// CHECK: postdominates(3, 5) = 0 (properly = 0)649// CHECK: postdominates(3, 6) = 0 (properly = 0)650// CHECK: postdominates(4, 0) = 0 (properly = 0)651// CHECK: postdominates(4, 1) = 0 (properly = 0)652// CHECK: postdominates(4, 2) = 0 (properly = 0)653// CHECK: postdominates(4, 3) = 1 (properly = 1)654// CHECK: postdominates(4, 4) = 1 (properly = 0)655// CHECK: postdominates(4, 5) = 0 (properly = 0)656// CHECK: postdominates(4, 6) = 0 (properly = 0)657// CHECK: postdominates(5, 0) = 1 (properly = 1)658// CHECK: postdominates(5, 1) = 1 (properly = 1)659// CHECK: postdominates(5, 2) = 1 (properly = 1)660// CHECK: postdominates(5, 3) = 1 (properly = 1)661// CHECK: postdominates(5, 4) = 1 (properly = 1)662// CHECK: postdominates(5, 5) = 1 (properly = 0)663// CHECK: postdominates(5, 6) = 0 (properly = 0)664// CHECK: postdominates(6, 0) = 1 (properly = 1)665// CHECK: postdominates(6, 1) = 1 (properly = 1)666// CHECK: postdominates(6, 2) = 1 (properly = 1)667// CHECK: postdominates(6, 3) = 1 (properly = 1)668// CHECK: postdominates(6, 4) = 1 (properly = 1)669// CHECK: postdominates(6, 5) = 1 (properly = 1)670// CHECK: postdominates(6, 6) = 1 (properly = 1)671 672// CHECK: module attributes {test.block_ids = array<i64: 6>} {673// CHECK: func.func @func_loop_nested_region({{.*}}) attributes {test.block_ids = array<i64: 0, 1, 2, 5>} {674// CHECK: ^{{.*}}675// CHECK: ^{{.*}}676// CHECK: scf.for {{.*}} {677// CHECK: scf.for {{.*}} {678// CHECK: } {test.block_ids = array<i64: 3>}679// CHECK: } {test.block_ids = array<i64: 4>}680// CHECK: ^{{.*}}681// CHECK: }682// CHECK: }683