294 lines · plain
1; Based on llvm/test/Other/cgscc-iterate-function-mutation.ll2; RUN: opt -passes='default<O3>,print<inline-advisor>' -training-log=/dev/null \3; RUN: -S -enable-ml-inliner=development -keep-inline-advisor-for-printing < %s 2>&1 | FileCheck %s4; REQUIRES: have_tflite5;6; CHECK: [MLInlineAdvisor] Nodes: 36 Edges: 07 8declare void @readnone() nofree nosync readnone9declare void @unknown()10declare void @reference_function_pointer(ptr) nofree nosync readnone11 12; The @test1_* set of functions checks that when we mutate functions with13; simplifycfg to delete call edges and this ends up splitting both the SCCs14; and the RefSCCs that those functions are in, we re-run the CGSCC passes to15; observe the refined call graph structure.16 17define void @test1_a() {18 call void @test1_b1()19 call void @test1_b2()20 call void @test1_b3()21 call void @test1_b4()22 ret void23}24 25define void @test1_b1() {26 call void @readnone()27 ret void28}29 30define void @test1_b2() {31 call void @readnone()32 br i1 false, label %dead, label %exit33 34dead:35 call void @test1_a()36 br label %exit37 38exit:39 ret void40}41 42define void @test1_b3() {43 call void @unknown()44 br i1 false, label %dead, label %exit45 46dead:47 call void @test1_a()48 br label %exit49 50exit:51 ret void52}53 54define void @test1_b4() {55 call void @readnone()56 br i1 false, label %dead, label %exit57 58dead:59 call void @test1_a()60 br label %exit61 62exit:63 ret void64}65 66define void @test2_a() {67 call void @test2_b1()68 call void @test2_b2()69 call void @test2_b3()70 call void @test2_b4()71 ret void72}73 74define void @test2_b1() {75 call void @readnone()76 ret void77}78 79define void @test2_b2() {80 call void @reference_function_pointer(ptr @test2_a)81 br i1 false, label %dead, label %exit82 83dead:84 call void @test2_a()85 br label %exit86 87exit:88 ret void89}90 91define void @test2_b3() {92 call void @reference_function_pointer(ptr @test2_a)93 call void @unknown()94 br i1 false, label %dead, label %exit95 96dead:97 call void @test2_a()98 br label %exit99 100exit:101 ret void102}103 104define void @test2_b4() {105 call void @reference_function_pointer(ptr @test2_a)106 br i1 false, label %dead, label %exit107 108dead:109 call void @test2_a()110 br label %exit111 112exit:113 ret void114}115 116define void @test3_a() {117 call void @test3_b11()118 call void @test3_b21()119 call void @test3_b31()120 call void @test3_b41()121 ret void122}123 124define void @test3_b11() {125 call void @test3_b12()126 ret void127}128 129define void @test3_b12() {130 call void @test3_b13()131 ret void132}133 134define void @test3_b13() {135 call void @readnone()136 ret void137}138 139define void @test3_b21() {140 call void @test3_b22()141 ret void142}143 144define void @test3_b22() {145 call void @test3_b23()146 ret void147}148 149define void @test3_b23() {150 call void @readnone()151 br i1 false, label %dead, label %exit152 153dead:154 call void @test3_a()155 br label %exit156 157exit:158 ret void159}160 161define void @test3_b31() {162 call void @test3_b32()163 ret void164}165 166define void @test3_b32() {167 call void @test3_b33()168 ret void169}170 171define void @test3_b33() {172 call void @unknown()173 br i1 false, label %dead, label %exit174 175dead:176 call void @test3_a()177 br label %exit178 179exit:180 ret void181}182 183define void @test3_b41() {184 call void @test3_b42()185 ret void186}187 188define void @test3_b42() {189 call void @test3_b43()190 ret void191}192 193define void @test3_b43() {194 call void @readnone()195 br i1 false, label %dead, label %exit196 197dead:198 call void @test3_a()199 br label %exit200 201exit:202 ret void203}204 205define void @test4_a() {206 call void @test4_b11()207 call void @test4_b21()208 call void @test4_b31()209 call void @test4_b41()210 ret void211}212 213define void @test4_b11() {214 call void @test4_b12()215 ret void216}217 218define void @test4_b12() {219 call void @test4_b13()220 ret void221}222 223define void @test4_b13() {224 call void @readnone()225 ret void226}227 228define void @test4_b21() {229 call void @test4_b22()230 ret void231}232 233define void @test4_b22() {234 call void @test4_b23()235 ret void236}237 238define void @test4_b23() {239 call void @reference_function_pointer(ptr @test4_a)240 br i1 false, label %dead, label %exit241 242dead:243 call void @test4_a()244 br label %exit245 246exit:247 ret void248}249 250define void @test4_b31() {251 call void @test4_b32()252 ret void253}254 255define void @test4_b32() {256 call void @test4_b33()257 ret void258}259 260define void @test4_b33() {261 call void @reference_function_pointer(ptr @test4_a)262 call void @unknown()263 br i1 false, label %dead, label %exit264 265dead:266 call void @test4_a()267 br label %exit268 269exit:270 ret void271}272 273define void @test4_b41() {274 call void @test4_b42()275 ret void276}277 278define void @test4_b42() {279 call void @test4_b43()280 ret void281}282 283define void @test4_b43() {284 call void @reference_function_pointer(ptr @test4_a)285 br i1 false, label %dead, label %exit286 287dead:288 call void @test4_a()289 br label %exit290 291exit:292 ret void293}294