72 lines · plain
1;; Test cloning a single path with -basic-block-sections.2 3declare void @effect(i32 zeroext)4 5;; Test a valid application of path cloning.6; RUN: echo 'v1' > %t7; RUN: echo 'f foo' >> %t8; RUN: echo 'p 0 3 5' >> %t9; RUN: echo 'c 0 3.1 5.1 1 2 3 4 5' >> %t10; RUN: llc < %s -mtriple=x86_64-pc-linux -O0 -function-sections -basic-block-sections=%t | FileCheck %s11; RUN: llc < %s -mtriple=x86_64-pc-linux -O0 -function-sections -basic-block-sections=%t -stop-after=bb-path-cloning | FileCheck %s --check-prefix=MIR12 13define void @foo(i1 %a, i1 %b, i1 %c, i1 %d) {14b0:15 call void @effect(i32 0)16 br i1 %a, label %b1, label %b317 18b1: ; preds = %b019 call void @effect(i32 1)20 br i1 %b, label %b2, label %b321 22b2: ; preds = %b123 call void @effect(i32 2)24 br label %b325 26b3: ; preds = %b0, %b1, %b227 call void @effect(i32 3)28 br i1 %c, label %b4, label %b529 30b4: ; preds = %b331 call void @effect(i32 4)32 br i1 %d, label %b5, label %cold33 34b5: ; preds = %b3, %b435 call void @effect(i32 5)36 ret void37cold:38 call void @effect(i32 6) ; preds = %b439 ret void40}41 42;; Check the cloned block ids in MIR.43 44; MIR: bb.7.b3 (bb_id 3 1):45; MIR: bb.8.b5 (bb_id 5 1):46 47;; Check the final layout and branches.48 49;; bb section:50; CHECK: .section .text.foo,"ax",@progbits51; CHECK: foo:52; CHECK: # %bb.0: # %b053; CHECK: jne .LBB0_154; CHECK-NEXT: # %bb.7: # %b355; CHECK: jne .LBB0_456; CHECK-NEXT: # %bb.8: # %b557; CHECK: retq58; CHECK-NEXT: .LBB0_1: # %b159; CHECK: je .LBB0_360; CHECK-NEXT: # %bb.2: # %b261; CHECK: callq effect@PLT62; CHECK-NEXT: .LBB0_3: # %b363; CHECK: je .LBB0_564; CHECK-NEXT: .LBB0_4: # %b465; CHECK: je foo.cold66; CHECK-NEXT: .LBB0_5: # %b567; CHECK: retq68 69;; split section70; CHECK: .section .text.split.foo,"ax",@progbits71; CHECK: foo.cold: # %cold72