116 lines · plain
1// RUN: mlir-opt -pass-pipeline="builtin.module(any(test-cfg-loop-info))" --split-input-file %s 2>&1 | FileCheck %s2 3// CHECK-LABEL: Testing : "no_loop_single_block"4// CHECK: no loops5func.func @no_loop_single_block() {6 return7}8 9// -----10 11// CHECK-LABEL: Testing : "no_loop"12// CHECK: no loops13func.func @no_loop() {14 cf.br ^bb115^bb1:16 return17}18 19// -----20 21// CHECK-LABEL: Testing : "simple_loop"22// CHECK-NEXT: Blocks : ^[[BB0:.*]], ^[[BB1:.*]], ^[[BB2:.*]], ^[[BB3:.*]]23// CHECK: Loop at depth 1 containing:24// CHECK-SAME: ^[[BB1]]<header><exiting>25// CHECK-SAME: ^[[BB2]]<latch>26func.func @simple_loop(%c: i1) {27 cf.br ^bb128^bb1:29 cf.cond_br %c, ^bb2, ^bb330^bb2:31 cf.br ^bb132^bb3:33 return34}35 36// -----37 38// CHECK-LABEL: Testing : "single_block_loop"39// CHECK-NEXT: Blocks : ^[[BB0:.*]], ^[[BB1:.*]], ^[[BB2:.*]]40// CHECK: Loop at depth 1 containing:41// CHECK-SAME: ^[[BB1]]<header><latch><exiting>42func.func @single_block_loop(%c: i1) {43 cf.br ^bb144^bb1:45 cf.cond_br %c, ^bb1, ^bb246^bb2:47 return48}49 50// -----51 52// CHECK-LABEL: Testing : "nested_loop"53// CHECK-NEXT: Blocks : ^[[BB0:.*]], ^[[BB1:.*]], ^[[BB2:.*]], ^[[BB3:.*]], ^[[BB4:.*]]54// CHECK: Loop at depth 155// CHECK-SAME: ^[[BB1]]<header><exiting>56// CHECK-SAME: ^[[BB2]]<latch>57// CHECK-SAME: ^[[BB3]]58// CHECK: Loop at depth 259// CHECK-SAME: ^[[BB2]]<header><exiting>60// CHECK-SAME: ^[[BB3]]<latch>61func.func @nested_loop(%c: i1) {62 cf.br ^bb163^bb1:64 cf.cond_br %c, ^bb2, ^bb465^bb2:66 cf.cond_br %c, ^bb1, ^bb367^bb3:68 cf.br ^bb269^bb4:70 return71}72 73// -----74 75// CHECK-LABEL: Testing : "multi_latch"76// CHECK-NEXT: Blocks : ^[[BB0:.*]], ^[[BB1:.*]], ^[[BB2:.*]], ^[[BB3:.*]], ^[[BB4:.*]]77// CHECK: Loop at depth 178// CHECK-SAME: ^[[BB1]]<header><exiting>79// CHECK-SAME: ^[[BB2]]<latch>80// CHECK-SAME: ^[[BB3]]<latch>81func.func @multi_latch(%c: i1) {82 cf.br ^bb183^bb1:84 cf.cond_br %c, ^bb4, ^bb285^bb2:86 cf.cond_br %c, ^bb1, ^bb387^bb3:88 cf.br ^bb189^bb4:90 return91}92 93// -----94 95// CHECK-LABEL: Testing : "multiple_loops"96// CHECK-NEXT: Blocks : ^[[BB0:.*]], ^[[BB1:.*]], ^[[BB2:.*]], ^[[BB3:.*]], ^[[BB4:.*]], ^[[BB5:.*]]97// CHECK: Loop at depth 198// CHECK-SAME: ^[[BB3]]<header><exiting>99// CHECK-SAME: ^[[BB4]]<latch>100// CHECK: Loop at depth 1101// CHECK-SAME: ^[[BB1]]<header>102// CHECK-SAME: ^[[BB2]]<latch><exiting>103func.func @multiple_loops(%c: i1) {104 cf.br ^bb1105^bb1:106 cf.br ^bb2107^bb2:108 cf.cond_br %c, ^bb3, ^bb1109^bb3:110 cf.cond_br %c, ^bb5, ^bb4111^bb4:112 cf.br ^bb3113^bb5:114 return115}116