1; RUN: opt -S -hotcoldsplit -hotcoldsplit-threshold=0 < %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 {{.*}}@foo( 7; CHECK: landingpad 8; CHECK: sideeffect(i32 2) 9define void @foo(i32 %cond) personality i8 0 { 10entry: 11 invoke void @llvm.donothing() to label %normal unwind label %exception 12 13exception: 14 ; Note: EH pads are not candidates for region entry points. 15 %cleanup = landingpad i8 cleanup 16 br label %continue_exception 17 18continue_exception: 19 call void @sideeffect(i32 0) 20 call void @sink() 21 ret void 22 23normal: 24 call void @sideeffect(i32 2) 25 ret void 26} 27 28; See llvm.org/PR39917. It's currently not safe to outline landingpad 29; instructions. 30; 31; CHECK-LABEL: define {{.*}}@bar( 32; CHECK: landingpad 33define void @bar(i32 %cond) personality i8 0 { 34entry: 35 br i1 undef, label %exit, label %continue 36 37exit: 38 ret void 39 40continue: 41 invoke void @sink() to label %normal unwind label %exception 42 43exception: 44 ; Note: EH pads are not candidates for region entry points. 45 %cleanup = landingpad i8 cleanup 46 br label %trivial-eh-handler 47 48trivial-eh-handler: 49 call void @sideeffect(i32 1) 50 br label %normal 51 52normal: 53 call void @sideeffect(i32 0) 54 ret void 55} 56 57define void @baz() personality i8 0 { 58entry: 59 br i1 undef, label %exit, label %cold1 60 61exit: 62 ret void 63 64cold1: 65 ; The predecessor of a cold invoke may still be extracted (see baz.cold.2). 66 call void @sideeffect(i32 0) 67 br label %cold2 68 69cold2: 70 invoke void @sink() to label %cold3 unwind label %cold4 71 72cold3: 73 ; The successor of a cold invoke may still be extracted (see baz.cold.1). 74 call void @sideeffect(i32 1) 75 ret void 76 77cold4: 78 landingpad i8 cleanup 79 ret void 80} 81 82; CHECK-LABEL: define {{.*}}@foo.cold.1( 83; CHECK: sideeffect(i32 0) 84; CHECK: sink 85 86; CHECK-LABEL: define {{.*}}@bar.cold.1( 87; CHECK: sideeffect(i32 1) 88 89; CHECK-LABEL: define {{.*}}@baz.cold.1( 90; CHECK: sideeffect(i32 1) 91 92; CHECK-LABEL: define {{.*}}@baz.cold.2( 93; CHECK: sideeffect(i32 0) 94 95declare void @sideeffect(i32) 96 97declare void @sink() cold 98 99declare void @llvm.donothing() nounwind readnone 100