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