Skip to content

Commit 8776917

Browse files
committed
add C API test
1 parent c760955 commit 8776917

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed

mlir/test/CAPI/ir.c

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2440,6 +2440,58 @@ void testDiagnostics(void) {
24402440
mlirContextDestroy(ctx);
24412441
}
24422442

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+
24432495
int main(void) {
24442496
MlirContext ctx = mlirContextCreate();
24452497
registerAllUpstreamDialects(ctx);
@@ -2482,6 +2534,8 @@ int main(void) {
24822534
return 15;
24832535
if (testOperationWalk(ctx))
24842536
return 16;
2537+
if (testBlockPredecessorsSuccessors(ctx))
2538+
return 17;
24852539

24862540
testExplicitThreadPools();
24872541
testDiagnostics();

0 commit comments

Comments
 (0)