125 lines · plain
1; RUN: llvm-extract -bb 'foo:if;then;else' -bb 'bar:bb14;bb20' -S %s | FileCheck %s2; Extract two groups of basic blocks in two different functions.3 4 5; The first extracted function is the region composed by the6; blocks if, then, and else from foo.7; CHECK: define dso_local void @foo.if.split(i32 %arg1, i32 %arg, ptr %tmp.0.ce.out) {8; CHECK: newFuncRoot:9; CHECK: br label %if.split10;11; CHECK: then: ; preds = %if.split12; CHECK: %tmp12 = shl i32 %arg1, 213; CHECK: %tmp13 = add nsw i32 %tmp12, %arg14; CHECK: br label %end.split15;16; CHECK: else: ; preds = %if.split17; CHECK: %tmp22 = mul nsw i32 %arg, 318; CHECK: %tmp24 = sdiv i32 %arg1, 619; CHECK: %tmp25 = add nsw i32 %tmp24, %tmp2220; CHECK: br label %end.split21;22; CHECK: if.split: ; preds = %newFuncRoot23; CHECK: %tmp5 = icmp sgt i32 %arg, 024; CHECK: %tmp8 = icmp sgt i32 %arg1, 025; CHECK: %or.cond = and i1 %tmp5, %tmp826; CHECK: br i1 %or.cond, label %then, label %else27;28; CHECK: end.split: ; preds = %then, %else29; CHECK: %tmp.0.ce = phi i32 [ %tmp13, %then ], [ %tmp25, %else ]30; CHECK: store i32 %tmp.0.ce, ptr %tmp.0.ce.out31; CHECK: br label %end.exitStub32;33; CHECK: end.exitStub: ; preds = %end.split34; CHECK: ret void35; CHECK: }36 37; The second extracted function is the region composed by the blocks38; bb14 and bb20 from bar.39; CHECK: define dso_local i1 @bar.bb14(i32 %arg1, i32 %arg, ptr %tmp25.out) {40; CHECK: newFuncRoot:41; CHECK: br label %bb1442;43; CHECK: bb14: ; preds = %newFuncRoot44; CHECK: %tmp0 = and i32 %arg1, %arg45; CHECK: %tmp1 = icmp slt i32 %tmp0, 046; CHECK: br i1 %tmp1, label %bb20, label %bb26.exitStub47;48; CHECK: bb20: ; preds = %bb1449; CHECK: %tmp22 = mul nsw i32 %arg, 350; CHECK: %tmp24 = sdiv i32 %arg1, 651; CHECK: %tmp25 = add nsw i32 %tmp24, %tmp2252; CHECK: store i32 %tmp25, ptr %tmp25.out53; CHECK: br label %bb30.exitStub54;55; CHECK: bb26.exitStub: ; preds = %bb1456; CHECK: ret i1 true57;58; CHECK: bb30.exitStub: ; preds = %bb2059; CHECK: ret i1 false60; CHECK: }61 62define i32 @foo(i32 %arg, i32 %arg1) {63if:64 %tmp5 = icmp sgt i32 %arg, 065 %tmp8 = icmp sgt i32 %arg1, 066 %or.cond = and i1 %tmp5, %tmp867 br i1 %or.cond, label %then, label %else68 69then:70 %tmp12 = shl i32 %arg1, 271 %tmp13 = add nsw i32 %tmp12, %arg72 br label %end73 74else:75 %tmp22 = mul nsw i32 %arg, 376 %tmp24 = sdiv i32 %arg1, 677 %tmp25 = add nsw i32 %tmp24, %tmp2278 br label %end79 80end:81 %tmp.0 = phi i32 [ %tmp13, %then ], [ %tmp25, %else ]82 %and0 = and i32 %tmp.0, %arg83 %cmp1 = icmp slt i32 %and0, 084 br i1 %cmp1, label %ret0, label %ret185 86ret0:87 ret i32 088 89ret1:90 ret i32 191}92 93define i32 @bar(i32 %arg, i32 %arg1) {94bb:95 %tmp5 = icmp sgt i32 %arg, 096 %tmp8 = icmp sgt i32 %arg1, 097 %or.cond = and i1 %tmp5, %tmp898 br i1 %or.cond, label %bb9, label %bb1499 100bb9: ; preds = %bb101 %tmp12 = shl i32 %arg1, 2102 %tmp13 = add nsw i32 %tmp12, %arg103 br label %bb30104 105bb14: ; preds = %bb106 %tmp0 = and i32 %arg1, %arg107 %tmp1 = icmp slt i32 %tmp0, 0108 br i1 %tmp1, label %bb20, label %bb26109 110bb20: ; preds = %bb14111 %tmp22 = mul nsw i32 %arg, 3112 %tmp24 = sdiv i32 %arg1, 6113 %tmp25 = add nsw i32 %tmp24, %tmp22114 br label %bb30115 116bb26: ; preds = %bb14117 %tmp29 = sub nsw i32 %arg, %arg1118 br label %bb30119 120bb30: ; preds = %bb26, %bb20, %bb9121 %tmp.0 = phi i32 [ %tmp13, %bb9 ], [ %tmp25, %bb20 ], [ %tmp29, %bb26 ]122 ret i32 %tmp.0123}124 125