1cea80760SAndrew Litteken; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 29dd9575cSRoman Lebedev; RUN: opt -S -passes=verify,iroutliner -no-ir-sim-branch-matching -ir-outlining-no-cost < %s | FileCheck %s 3cea80760SAndrew Litteken 4cea80760SAndrew Litteken; This test checks that cleanuppad instructions are not outlined even if they 5cea80760SAndrew Litteken; in a similar section. Dealing with exception handling inside of an outlined 6cea80760SAndrew Litteken; function would require a lot of handling that is not implemented yet. 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 15cea80760SAndrew Litteken; CHECK-NEXT: invoke void @llvm.donothing() 16cea80760SAndrew Litteken; CHECK-NEXT: to label [[NORMAL:%.*]] unwind label [[EXCEPTION:%.*]] 17cea80760SAndrew Litteken; CHECK: exception: 18cea80760SAndrew Litteken; CHECK-NEXT: [[CLEAN:%.*]] = cleanuppad within none [] 19*f4b925eeSMatt Arsenault; CHECK-NEXT: call void @outlined_ir_func_0(ptr [[A]], ptr [[B]]) 20cea80760SAndrew Litteken; CHECK-NEXT: br label [[NORMAL]] 21cea80760SAndrew Litteken; CHECK: normal: 22cea80760SAndrew Litteken; CHECK-NEXT: ret void 23cea80760SAndrew Litteken; 24cea80760SAndrew Littekenentry: 25cea80760SAndrew Litteken %a = alloca i32, align 4 26cea80760SAndrew Litteken %b = alloca i32, align 4 27cea80760SAndrew Litteken invoke void @llvm.donothing() to label %normal unwind label %exception 28cea80760SAndrew Littekenexception: 29cea80760SAndrew Litteken %clean = cleanuppad within none [] 30*f4b925eeSMatt Arsenault store i32 2, ptr %a, align 4 31*f4b925eeSMatt Arsenault store i32 3, ptr %b, align 4 32cea80760SAndrew Litteken br label %normal 33cea80760SAndrew Littekennormal: 34cea80760SAndrew Litteken ret void 35cea80760SAndrew Litteken} 36cea80760SAndrew Litteken 37cea80760SAndrew Littekendefine void @function2() personality i8 3 { 38cea80760SAndrew Litteken; CHECK-LABEL: @function2( 39cea80760SAndrew Litteken; CHECK-NEXT: entry: 40cea80760SAndrew Litteken; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4 41cea80760SAndrew Litteken; CHECK-NEXT: [[B:%.*]] = alloca i32, align 4 42cea80760SAndrew Litteken; CHECK-NEXT: invoke void @llvm.donothing() 43cea80760SAndrew Litteken; CHECK-NEXT: to label [[NORMAL:%.*]] unwind label [[EXCEPTION:%.*]] 44cea80760SAndrew Litteken; CHECK: exception: 45cea80760SAndrew Litteken; CHECK-NEXT: [[CLEAN:%.*]] = cleanuppad within none [] 46*f4b925eeSMatt Arsenault; CHECK-NEXT: call void @outlined_ir_func_0(ptr [[A]], ptr [[B]]) 47cea80760SAndrew Litteken; CHECK-NEXT: br label [[NORMAL]] 48cea80760SAndrew Litteken; CHECK: normal: 49cea80760SAndrew Litteken; CHECK-NEXT: ret void 50cea80760SAndrew Litteken; 51cea80760SAndrew Littekenentry: 52cea80760SAndrew Litteken %a = alloca i32, align 4 53cea80760SAndrew Litteken %b = alloca i32, align 4 54cea80760SAndrew Litteken invoke void @llvm.donothing() to label %normal unwind label %exception 55cea80760SAndrew Littekenexception: 56cea80760SAndrew Litteken %clean = cleanuppad within none [] 57*f4b925eeSMatt Arsenault store i32 2, ptr %a, align 4 58*f4b925eeSMatt Arsenault store i32 3, ptr %b, align 4 59cea80760SAndrew Litteken br label %normal 60cea80760SAndrew Littekennormal: 61cea80760SAndrew Litteken ret void 62cea80760SAndrew Litteken} 63