xref: /llvm-project/llvm/test/tools/llvm-extract/extract-blocks-with-groups.ll (revision 41d5033eb162cb92b684855166cabfa3983b74c6)
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