@@ -2440,6 +2440,58 @@ void testDiagnostics(void) {
2440
2440
mlirContextDestroy (ctx );
2441
2441
}
2442
2442
2443
+ int testBlockPredecessorsSuccessors (MlirContext ctx ) {
2444
+ // CHECK-LABEL: @testBlockPredecessorsSuccessors
2445
+ fprintf (stderr , "@testBlockPredecessorsSuccessors\n" );
2446
+
2447
+ const char * moduleString = R "(
2448
+ #loc2 = loc (" arg1 ")
2449
+ #loc3 = loc("middle")
2450
+ #loc4 = loc("successor")
2451
+ module {
2452
+ func .func @test (%arg0 : i32 loc ("arg0" ), %arg1 : i16 loc ("arg1" )) {
2453
+ cf .br ^bb1 (%arg1 : i16 ) loc (#loc )
2454
+ ^bb1 (%0 : i16 loc ("middle" )): // pred: ^bb0
2455
+ cf .br ^bb2 (%arg0 : i32 ) loc (#loc )
2456
+ ^bb2 (%1 : i32 loc ("successor" )): // pred: ^bb1
2457
+ return loc (#loc )
2458
+ } loc (#loc )
2459
+ } loc (#loc )
2460
+ #loc = loc(unknown)
2461
+ )";
2462
+
2463
+ MlirModule module =
2464
+ mlirModuleCreateParse (ctx , mlirStringRefCreateFromCString (moduleString ));
2465
+
2466
+ MlirOperation moduleOp = mlirModuleGetOperation (module );
2467
+ MlirRegion moduleRegion = mlirOperationGetRegion (moduleOp , 0 );
2468
+ MlirBlock moduleBlock = mlirRegionGetFirstBlock (moduleRegion );
2469
+ MlirOperation function = mlirBlockGetFirstOperation (moduleBlock );
2470
+ MlirRegion funcRegion = mlirOperationGetRegion (function , 0 );
2471
+ MlirBlock entryBlock = mlirRegionGetFirstBlock (funcRegion );
2472
+ MlirBlock middleBlock = mlirBlockGetNextInRegion (entryBlock );
2473
+ MlirBlock successorBlock = mlirBlockGetNextInRegion (middleBlock );
2474
+
2475
+ assert (mlirBlockGetNumPredecessors (entryBlock ) == 0 );
2476
+
2477
+ assert (mlirBlockGetNumSuccessors (entryBlock ) == 1 );
2478
+ assert (mlirBlockEqual (middleBlock , mlirBlockGetSuccessor (entryBlock , 0 )));
2479
+ assert (mlirBlockGetNumPredecessors (middleBlock ) == 1 );
2480
+ assert (mlirBlockEqual (entryBlock , mlirBlockGetPredecessor (middleBlock , 0 )));
2481
+
2482
+ assert (mlirBlockGetNumSuccessors (middleBlock ) == 1 );
2483
+ assert (mlirBlockEqual (successorBlock , mlirBlockGetSuccessor (middleBlock , 0 )));
2484
+ assert (mlirBlockGetNumPredecessors (successorBlock ) == 1 );
2485
+ assert (
2486
+ mlirBlockEqual (middleBlock , mlirBlockGetPredecessor (successorBlock , 0 )));
2487
+
2488
+ assert (mlirBlockGetNumSuccessors (successorBlock ) == 0 );
2489
+
2490
+ mlirModuleDestroy (module );
2491
+
2492
+ return 0 ;
2493
+ }
2494
+
2443
2495
int main (void ) {
2444
2496
MlirContext ctx = mlirContextCreate ();
2445
2497
registerAllUpstreamDialects (ctx );
@@ -2486,6 +2538,9 @@ int main(void) {
2486
2538
testExplicitThreadPools ();
2487
2539
testDiagnostics ();
2488
2540
2541
+ if (testBlockPredecessorsSuccessors (ctx ))
2542
+ return 17 ;
2543
+
2489
2544
// CHECK: DESTROY MAIN CONTEXT
2490
2545
// CHECK: reportResourceDelete: resource_i64_blob
2491
2546
fprintf (stderr , "DESTROY MAIN CONTEXT\n" );
0 commit comments