1; RUN: opt -hotcoldsplit-threshold=0 -passes=hotcoldsplit -S < %s | FileCheck %s 2 3target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" 4target triple = "x86_64-apple-macosx10.14.0" 5 6; CHECK-LABEL: define {{.*}}@pluto( 7; CHECK-NEXT: bb: 8; CHECK-NEXT: %tmp8.ce.loc = alloca i1 9; CHECK-NEXT: switch i8 undef, label %codeRepl [ 10; CHECK-NEXT: i8 0, label %bb7 11; CHECK-NEXT: i8 1, label %bb7 12; CHECK-NEXT: ] 13; 14; CHECK: codeRepl: 15; CHECK-NEXT: lifetime.start 16; CHECK-NEXT: call void @pluto.cold.1(ptr %tmp8.ce.loc) 17; CHECK-NEXT: %tmp8.ce.reload = load i1, ptr %tmp8.ce.loc 18; CHECK-NEXT: lifetime.end 19; CHECK-NEXT: br label %bb7 20; 21; CHECK: bb7: 22; CHECK: %tmp8 = phi i1 [ true, %bb ], [ true, %bb ], [ %tmp8.ce.reload, %codeRepl ] 23; CHECK: ret void 24 25; CHECK-LABEL: define {{.*}}@pluto.cold.1( 26; CHECK: call {{.*}}@sideeffect(i32 1) 27; CHECK: call {{.*}}@sink( 28; CHECK: call {{.*}}@sideeffect(i32 3) 29; CHECK: call {{.*}}@sideeffect(i32 4) 30; CHECK: call {{.*}}@sideeffect(i32 5) 31define void @pluto() { 32bb: 33 switch i8 undef, label %bb1 [ 34 i8 0, label %bb7 35 i8 1, label %bb7 36 ] 37 38bb1: ; preds = %bb 39 call void @sideeffect(i32 1) 40 br label %bb2 41 42bb2: ; preds = %bb1 43 call void @sink() 44 br i1 undef, label %bb7, label %bb3 45 46bb3: ; preds = %bb2 47 call void @sideeffect(i32 3) 48 br label %bb4 49 50bb4: ; preds = %bb3 51 call void @sideeffect(i32 4) 52 br i1 undef, label %bb5, label %bb6 53 54bb5: ; preds = %bb4 55 call void @sideeffect(i32 5) 56 br label %bb6 57 58bb6: ; preds = %bb5, %bb4 59 %tmp = phi i1 [ true, %bb5 ], [ false, %bb4 ] 60 call void @sideeffect(i32 6) 61 br label %bb7 62 63bb7: ; preds = %bb6, %bb2, %bb, %bb 64 %tmp8 = phi i1 [ true, %bb ], [ true, %bb ], [ true, %bb2 ], [ %tmp, %bb6 ] 65 ret void 66} 67 68declare void @sink() cold 69 70declare void @sideeffect(i32) 71