12d977935SQuentin Colombet; RUN: llvm-extract -bb 'foo:if;then;else' -bb 'bar:bb14;bb20' -S %s | FileCheck %s 22d977935SQuentin Colombet; Extract two groups of basic blocks in two different functions. 32d977935SQuentin Colombet 42d977935SQuentin Colombet 52d977935SQuentin Colombet; The first extracted function is the region composed by the 62d977935SQuentin Colombet; blocks if, then, and else from foo. 7*41d5033eSNikita Popov; CHECK: define dso_local void @foo.if.split(i32 %arg1, i32 %arg, ptr %tmp.0.ce.out) { 82d977935SQuentin Colombet; CHECK: newFuncRoot: 92d977935SQuentin Colombet; CHECK: br label %if.split 102d977935SQuentin Colombet; 112d977935SQuentin Colombet; CHECK: then: ; preds = %if.split 122d977935SQuentin Colombet; CHECK: %tmp12 = shl i32 %arg1, 2 132d977935SQuentin Colombet; CHECK: %tmp13 = add nsw i32 %tmp12, %arg 142d977935SQuentin Colombet; CHECK: br label %end.split 152d977935SQuentin Colombet; 162d977935SQuentin Colombet; CHECK: else: ; preds = %if.split 172d977935SQuentin Colombet; CHECK: %tmp22 = mul nsw i32 %arg, 3 182d977935SQuentin Colombet; CHECK: %tmp24 = sdiv i32 %arg1, 6 192d977935SQuentin Colombet; CHECK: %tmp25 = add nsw i32 %tmp24, %tmp22 202d977935SQuentin Colombet; CHECK: br label %end.split 212d977935SQuentin Colombet; 222d977935SQuentin Colombet; CHECK: if.split: ; preds = %newFuncRoot 232d977935SQuentin Colombet; CHECK: %tmp5 = icmp sgt i32 %arg, 0 242d977935SQuentin Colombet; CHECK: %tmp8 = icmp sgt i32 %arg1, 0 252d977935SQuentin Colombet; CHECK: %or.cond = and i1 %tmp5, %tmp8 262d977935SQuentin Colombet; CHECK: br i1 %or.cond, label %then, label %else 272d977935SQuentin Colombet; 282d977935SQuentin Colombet; CHECK: end.split: ; preds = %then, %else 292d977935SQuentin Colombet; CHECK: %tmp.0.ce = phi i32 [ %tmp13, %then ], [ %tmp25, %else ] 30*41d5033eSNikita Popov; CHECK: store i32 %tmp.0.ce, ptr %tmp.0.ce.out 312d977935SQuentin Colombet; CHECK: br label %end.exitStub 322e192ab1SVyacheslav Zakharin; 332e192ab1SVyacheslav Zakharin; CHECK: end.exitStub: ; preds = %end.split 342e192ab1SVyacheslav Zakharin; CHECK: ret void 352d977935SQuentin Colombet; CHECK: } 362d977935SQuentin Colombet 372d977935SQuentin Colombet; The second extracted function is the region composed by the blocks 382d977935SQuentin Colombet; bb14 and bb20 from bar. 39*41d5033eSNikita Popov; CHECK: define dso_local i1 @bar.bb14(i32 %arg1, i32 %arg, ptr %tmp25.out) { 402d977935SQuentin Colombet; CHECK: newFuncRoot: 412d977935SQuentin Colombet; CHECK: br label %bb14 422d977935SQuentin Colombet; 432d977935SQuentin Colombet; CHECK: bb14: ; preds = %newFuncRoot 442d977935SQuentin Colombet; CHECK: %tmp0 = and i32 %arg1, %arg 452d977935SQuentin Colombet; CHECK: %tmp1 = icmp slt i32 %tmp0, 0 462d977935SQuentin Colombet; CHECK: br i1 %tmp1, label %bb20, label %bb26.exitStub 472d977935SQuentin Colombet; 482d977935SQuentin Colombet; CHECK: bb20: ; preds = %bb14 492d977935SQuentin Colombet; CHECK: %tmp22 = mul nsw i32 %arg, 3 502d977935SQuentin Colombet; CHECK: %tmp24 = sdiv i32 %arg1, 6 512d977935SQuentin Colombet; CHECK: %tmp25 = add nsw i32 %tmp24, %tmp22 52*41d5033eSNikita Popov; CHECK: store i32 %tmp25, ptr %tmp25.out 532d977935SQuentin Colombet; CHECK: br label %bb30.exitStub 542e192ab1SVyacheslav Zakharin; 552e192ab1SVyacheslav Zakharin; CHECK: bb26.exitStub: ; preds = %bb14 562e192ab1SVyacheslav Zakharin; CHECK: ret i1 true 572e192ab1SVyacheslav Zakharin; 582e192ab1SVyacheslav Zakharin; CHECK: bb30.exitStub: ; preds = %bb20 592e192ab1SVyacheslav Zakharin; CHECK: ret i1 false 602d977935SQuentin Colombet; CHECK: } 612d977935SQuentin Colombet 622d977935SQuentin Colombetdefine i32 @foo(i32 %arg, i32 %arg1) { 632d977935SQuentin Colombetif: 642d977935SQuentin Colombet %tmp5 = icmp sgt i32 %arg, 0 652d977935SQuentin Colombet %tmp8 = icmp sgt i32 %arg1, 0 662d977935SQuentin Colombet %or.cond = and i1 %tmp5, %tmp8 672d977935SQuentin Colombet br i1 %or.cond, label %then, label %else 682d977935SQuentin Colombet 692d977935SQuentin Colombetthen: 702d977935SQuentin Colombet %tmp12 = shl i32 %arg1, 2 712d977935SQuentin Colombet %tmp13 = add nsw i32 %tmp12, %arg 722d977935SQuentin Colombet br label %end 732d977935SQuentin Colombet 742d977935SQuentin Colombetelse: 752d977935SQuentin Colombet %tmp22 = mul nsw i32 %arg, 3 762d977935SQuentin Colombet %tmp24 = sdiv i32 %arg1, 6 772d977935SQuentin Colombet %tmp25 = add nsw i32 %tmp24, %tmp22 782d977935SQuentin Colombet br label %end 792d977935SQuentin Colombet 802d977935SQuentin Colombetend: 812d977935SQuentin Colombet %tmp.0 = phi i32 [ %tmp13, %then ], [ %tmp25, %else ] 822d977935SQuentin Colombet %and0 = and i32 %tmp.0, %arg 832d977935SQuentin Colombet %cmp1 = icmp slt i32 %and0, 0 842d977935SQuentin Colombet br i1 %cmp1, label %ret0, label %ret1 852d977935SQuentin Colombet 862d977935SQuentin Colombetret0: 872d977935SQuentin Colombet ret i32 0 882d977935SQuentin Colombet 892d977935SQuentin Colombetret1: 902d977935SQuentin Colombet ret i32 1 912d977935SQuentin Colombet} 922d977935SQuentin Colombet 932d977935SQuentin Colombetdefine i32 @bar(i32 %arg, i32 %arg1) { 942d977935SQuentin Colombetbb: 952d977935SQuentin Colombet %tmp5 = icmp sgt i32 %arg, 0 962d977935SQuentin Colombet %tmp8 = icmp sgt i32 %arg1, 0 972d977935SQuentin Colombet %or.cond = and i1 %tmp5, %tmp8 982d977935SQuentin Colombet br i1 %or.cond, label %bb9, label %bb14 992d977935SQuentin Colombet 1002d977935SQuentin Colombetbb9: ; preds = %bb 1012d977935SQuentin Colombet %tmp12 = shl i32 %arg1, 2 1022d977935SQuentin Colombet %tmp13 = add nsw i32 %tmp12, %arg 1032d977935SQuentin Colombet br label %bb30 1042d977935SQuentin Colombet 1052d977935SQuentin Colombetbb14: ; preds = %bb 1062d977935SQuentin Colombet %tmp0 = and i32 %arg1, %arg 1072d977935SQuentin Colombet %tmp1 = icmp slt i32 %tmp0, 0 1082d977935SQuentin Colombet br i1 %tmp1, label %bb20, label %bb26 1092d977935SQuentin Colombet 1102d977935SQuentin Colombetbb20: ; preds = %bb14 1112d977935SQuentin Colombet %tmp22 = mul nsw i32 %arg, 3 1122d977935SQuentin Colombet %tmp24 = sdiv i32 %arg1, 6 1132d977935SQuentin Colombet %tmp25 = add nsw i32 %tmp24, %tmp22 1142d977935SQuentin Colombet br label %bb30 1152d977935SQuentin Colombet 1162d977935SQuentin Colombetbb26: ; preds = %bb14 1172d977935SQuentin Colombet %tmp29 = sub nsw i32 %arg, %arg1 1182d977935SQuentin Colombet br label %bb30 1192d977935SQuentin Colombet 1202d977935SQuentin Colombetbb30: ; preds = %bb26, %bb20, %bb9 1212d977935SQuentin Colombet %tmp.0 = phi i32 [ %tmp13, %bb9 ], [ %tmp25, %bb20 ], [ %tmp29, %bb26 ] 1222d977935SQuentin Colombet ret i32 %tmp.0 1232d977935SQuentin Colombet} 1242d977935SQuentin Colombet 125