[Instrumentation] Fix a warning
[llvm-project.git] / llvm / test / Transforms / HotColdSplit / eh-pads.ll
blobad7baf97f68d0c96fef5788441f5dfd0d819b70b
1 ; RUN: opt -S -passes=hotcoldsplit -hotcoldsplit-threshold=0 < %s | FileCheck %s
3 target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
4 target triple = "x86_64-apple-macosx10.14.0"
6 ; CHECK-LABEL: define {{.*}}@foo(
7 ; CHECK: landingpad
8 ; CHECK: sideeffect(i32 2)
9 define void @foo(i32 %cond) personality i8 0 {
10 entry:
11   invoke void @llvm.donothing() to label %normal unwind label %exception
13 exception:
14   ; Note: EH pads are not candidates for region entry points.
15   %cleanup = landingpad i8 cleanup
16   br label %continue_exception
18 continue_exception:
19   call void @sideeffect(i32 0)
20   call void @sink()
21   ret void
23 normal:
24   call void @sideeffect(i32 2)
25   ret void
28 ; See llvm.org/PR39917. It's currently not safe to outline landingpad
29 ; instructions.
31 ; CHECK-LABEL: define {{.*}}@bar(
32 ; CHECK: landingpad
33 define void @bar(i32 %cond) personality i8 0 {
34 entry:
35   br i1 undef, label %exit, label %continue
37 exit:
38   ret void
40 continue:
41   invoke void @sink() to label %normal unwind label %exception
43 exception:
44   ; Note: EH pads are not candidates for region entry points.
45   %cleanup = landingpad i8 cleanup
46   br label %trivial-eh-handler
48 trivial-eh-handler:
49   call void @sideeffect(i32 1)
50   br label %normal
52 normal:
53   call void @sideeffect(i32 0)
54   ret void
57 define void @baz() personality i8 0 {
58 entry:
59   br i1 undef, label %exit, label %cold1
61 exit:
62   ret void
64 cold1:
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
69 cold2:
70   invoke void @sink() to label %cold3 unwind label %cold4
72 cold3:
73   ; The successor of a cold invoke may still be extracted (see baz.cold.1).
74   call void @sideeffect(i32 1)
75   ret void
77 cold4:
78   landingpad i8 cleanup
79   ret void
82 ; CHECK-LABEL: define {{.*}}@foo.cold.1(
83 ; CHECK: sideeffect(i32 0)
84 ; CHECK: sink
86 ; CHECK-LABEL: define {{.*}}@bar.cold.1(
87 ; CHECK: sideeffect(i32 0)
89 ; CHECK-LABEL: define {{.*}}@bar.cold.2(
90 ; CHECK: sideeffect(i32 1)
92 ; CHECK-LABEL: define {{.*}}@baz.cold.1(
93 ; CHECK: sideeffect(i32 0)
95 ; CHECK-LABEL: define {{.*}}@baz.cold.2(
96 ; CHECK: sideeffect(i32 1)
98 declare void @sideeffect(i32)
100 declare void @sink() cold
102 declare void @llvm.donothing() nounwind readnone