diff options
Diffstat (limited to 'llvm/test/Transforms/HotColdSplit/split-phis-in-exit-blocks.ll')
-rw-r--r-- | llvm/test/Transforms/HotColdSplit/split-phis-in-exit-blocks.ll | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/llvm/test/Transforms/HotColdSplit/split-phis-in-exit-blocks.ll b/llvm/test/Transforms/HotColdSplit/split-phis-in-exit-blocks.ll new file mode 100644 index 00000000000..2f5360ccb1e --- /dev/null +++ b/llvm/test/Transforms/HotColdSplit/split-phis-in-exit-blocks.ll @@ -0,0 +1,71 @@ +; RUN: opt -hotcoldsplit-threshold=0 -hotcoldsplit -S < %s | FileCheck %s + +target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-apple-macosx10.14.0" + +; CHECK-LABEL: define {{.*}}@pluto( +; CHECK-NEXT: bb: +; CHECK-NEXT: %tmp8.ce.loc = alloca i1 +; CHECK-NEXT: switch i8 undef, label %codeRepl [ +; CHECK-NEXT: i8 0, label %bb7 +; CHECK-NEXT: i8 1, label %bb7 +; CHECK-NEXT: ] +; +; CHECK: codeRepl: +; CHECK-NEXT: bitcast +; CHECK-NEXT: lifetime.start +; CHECK-NEXT: call void @pluto.cold.1(i1* %tmp8.ce.loc) +; CHECK-NEXT: %tmp8.ce.reload = load i1, i1* %tmp8.ce.loc +; CHECK-NEXT: lifetime.end +; CHECK-NEXT: br label %bb7 +; +; CHECK: bb7: +; CHECK: %tmp8 = phi i1 [ true, %bb ], [ true, %bb ], [ %tmp8.ce.reload, %codeRepl ] +; CHECK: ret void + +; CHECK-LABEL: define {{.*}}@pluto.cold.1( +; CHECK: call {{.*}}@sideeffect(i32 1) +; CHECK: call {{.*}}@sink( +; CHECK: call {{.*}}@sideeffect(i32 3) +; CHECK: call {{.*}}@sideeffect(i32 4) +; CHECK: call {{.*}}@sideeffect(i32 5) +define void @pluto() { +bb: + switch i8 undef, label %bb1 [ + i8 0, label %bb7 + i8 1, label %bb7 + ] + +bb1: ; preds = %bb + call void @sideeffect(i32 1) + br label %bb2 + +bb2: ; preds = %bb1 + call void @sink() + br i1 undef, label %bb7, label %bb3 + +bb3: ; preds = %bb2 + call void @sideeffect(i32 3) + br label %bb4 + +bb4: ; preds = %bb3 + call void @sideeffect(i32 4) + br i1 undef, label %bb5, label %bb6 + +bb5: ; preds = %bb4 + call void @sideeffect(i32 5) + br label %bb6 + +bb6: ; preds = %bb5, %bb4 + %tmp = phi i1 [ true, %bb5 ], [ false, %bb4 ] + call void @sideeffect(i32 6) + br label %bb7 + +bb7: ; preds = %bb6, %bb2, %bb, %bb + %tmp8 = phi i1 [ true, %bb ], [ true, %bb ], [ true, %bb2 ], [ %tmp, %bb6 ] + ret void +} + +declare void @sink() cold + +declare void @sideeffect(i32) |