xref: /llvm-project/llvm/test/Transforms/IROutliner/illegal-invoke.ll (revision f4b925ee7078f058602fd323e25f45f1ae91ca34)
1cea80760SAndrew Litteken; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
29dd9575cSRoman Lebedev; RUN: opt -S -passes=verify,iroutliner -ir-outlining-no-cost < %s | FileCheck %s
3cea80760SAndrew Litteken
4cea80760SAndrew Litteken; This test checks that invoke instructions are not outlined even if they
5cea80760SAndrew Litteken; in a similar section.  Outlining does not currently handle control flow
6cea80760SAndrew Litteken; changes.
7cea80760SAndrew Litteken
8cea80760SAndrew Littekendeclare void @llvm.donothing() nounwind readnone
9cea80760SAndrew Litteken
10cea80760SAndrew Littekendefine void @function1() personality i8 3 {
11cea80760SAndrew Litteken; CHECK-LABEL: @function1(
12cea80760SAndrew Litteken; CHECK-NEXT:  entry:
13cea80760SAndrew Litteken; CHECK-NEXT:    [[A:%.*]] = alloca i32, align 4
14cea80760SAndrew Litteken; CHECK-NEXT:    [[B:%.*]] = alloca i32, align 4
15*f4b925eeSMatt Arsenault; CHECK-NEXT:    call void @outlined_ir_func_0(ptr [[A]], ptr [[B]])
16cea80760SAndrew Litteken; CHECK-NEXT:    invoke void @llvm.donothing()
17cea80760SAndrew Litteken; CHECK-NEXT:    to label [[NORMAL:%.*]] unwind label [[EXCEPTION:%.*]]
18cea80760SAndrew Litteken; CHECK:       exception:
19cea80760SAndrew Litteken; CHECK-NEXT:    [[CLEANUP:%.*]] = landingpad i8
20cea80760SAndrew Litteken; CHECK-NEXT:    cleanup
21cea80760SAndrew Litteken; CHECK-NEXT:    br label [[NORMAL]]
22cea80760SAndrew Litteken; CHECK:       normal:
23cea80760SAndrew Litteken; CHECK-NEXT:    ret void
24cea80760SAndrew Litteken;
25cea80760SAndrew Littekenentry:
26cea80760SAndrew Litteken  %a = alloca i32, align 4
27cea80760SAndrew Litteken  %b = alloca i32, align 4
28*f4b925eeSMatt Arsenault  store i32 2, ptr %a, align 4
29*f4b925eeSMatt Arsenault  store i32 3, ptr %b, align 4
30cea80760SAndrew Litteken  invoke void @llvm.donothing() to label %normal unwind label %exception
31cea80760SAndrew Littekenexception:
32cea80760SAndrew Litteken  %cleanup = landingpad i8 cleanup
33cea80760SAndrew Litteken  br label %normal
34cea80760SAndrew Littekennormal:
35cea80760SAndrew Litteken  ret void
36cea80760SAndrew Litteken}
37cea80760SAndrew Litteken
38cea80760SAndrew Littekendefine void @function2() personality i8 3 {
39cea80760SAndrew Litteken; CHECK-LABEL: @function2(
40cea80760SAndrew Litteken; CHECK-NEXT:  entry:
41cea80760SAndrew Litteken; CHECK-NEXT:    [[A:%.*]] = alloca i32, align 4
42cea80760SAndrew Litteken; CHECK-NEXT:    [[B:%.*]] = alloca i32, align 4
43*f4b925eeSMatt Arsenault; CHECK-NEXT:    call void @outlined_ir_func_0(ptr [[A]], ptr [[B]])
44cea80760SAndrew Litteken; CHECK-NEXT:    invoke void @llvm.donothing()
45cea80760SAndrew Litteken; CHECK-NEXT:    to label [[NORMAL:%.*]] unwind label [[EXCEPTION:%.*]]
46cea80760SAndrew Litteken; CHECK:       exception:
47cea80760SAndrew Litteken; CHECK-NEXT:    [[CLEANUP:%.*]] = landingpad i8
48cea80760SAndrew Litteken; CHECK-NEXT:    cleanup
49cea80760SAndrew Litteken; CHECK-NEXT:    br label [[NORMAL]]
50cea80760SAndrew Litteken; CHECK:       normal:
51cea80760SAndrew Litteken; CHECK-NEXT:    ret void
52cea80760SAndrew Litteken;
53cea80760SAndrew Littekenentry:
54cea80760SAndrew Litteken  %a = alloca i32, align 4
55cea80760SAndrew Litteken  %b = alloca i32, align 4
56*f4b925eeSMatt Arsenault  store i32 2, ptr %a, align 4
57*f4b925eeSMatt Arsenault  store i32 3, ptr %b, align 4
58cea80760SAndrew Litteken  invoke void @llvm.donothing() to label %normal unwind label %exception
59cea80760SAndrew Littekenexception:
60cea80760SAndrew Litteken  %cleanup = landingpad i8 cleanup
61cea80760SAndrew Litteken  br label %normal
62cea80760SAndrew Littekennormal:
63cea80760SAndrew Litteken  ret void
64cea80760SAndrew Litteken}
65