1// RUN: mlir-opt %s -test-print-callgraph -split-input-file -allow-unregistered-dialect 2>&1 | FileCheck %s 2 3// CHECK-LABEL: Testing : "simple" 4module attributes {test.name = "simple"} { 5 6 // CHECK: Node{{.*}}func_a 7 func @func_a() { 8 return 9 } 10 11 func private @func_b() 12 13 // CHECK: Node{{.*}}func_c 14 // CHECK-NEXT: Call-Edge{{.*}}External-Node 15 func @func_c() { 16 call @func_b() : () -> () 17 return 18 } 19 20 // CHECK: Node{{.*}}func_d 21 // CHECK-NEXT: Call-Edge{{.*}}func_c 22 func @func_d() { 23 call @func_c() : () -> () 24 return 25 } 26 27 // CHECK: Node{{.*}}func_e 28 // CHECK-DAG: Call-Edge{{.*}}func_c 29 // CHECK-DAG: Call-Edge{{.*}}func_d 30 // CHECK-DAG: Call-Edge{{.*}}func_e 31 func @func_e() { 32 call @func_c() : () -> () 33 call @func_d() : () -> () 34 call @func_e() : () -> () 35 return 36 } 37 38 // CHECK: Node{{.*}}func_f 39 // CHECK: Child-Edge{{.*}}test.functional_region_op 40 // CHECK: Call-Edge{{.*}}test.functional_region_op 41 func @func_f() { 42 // CHECK: Node{{.*}}test.functional_region_op 43 // CHECK: Call-Edge{{.*}}func_f 44 %fn = "test.functional_region_op"() ({ 45 call @func_f() : () -> () 46 "test.return"() : () -> () 47 }) : () -> (() -> ()) 48 49 call_indirect %fn() : () -> () 50 return 51 } 52} 53 54// ----- 55 56// CHECK-LABEL: Testing : "nested" 57module attributes {test.name = "nested"} { 58 module @nested_module { 59 // CHECK: Node{{.*}}func_a 60 func @func_a() { 61 return 62 } 63 } 64 65 // CHECK: Node{{.*}}func_b 66 // CHECK: Call-Edge{{.*}}func_a 67 func @func_b() { 68 "test.conversion_call_op"() { callee = @nested_module::@func_a } : () -> () 69 return 70 } 71} 72