1 ; RUN: opt -mergefunc -S < %s | FileCheck %s 2 3 define i8 @call_with_range() { 4 bitcast i8 0 to i8 ; dummy to make the function large enough 5 %out = call i8 @dummy(), !range !0 6 ret i8 %out 7 } 8 9 define i8 @call_no_range() { 10 ; CHECK-LABEL: @call_no_range 11 ; CHECK-NEXT: bitcast i8 0 to i8 12 ; CHECK-NEXT: %out = call i8 @dummy() 13 ; CHECK-NEXT: ret i8 %out 14 bitcast i8 0 to i8 15 %out = call i8 @dummy() 16 ret i8 %out 17 } 18 19 define i8 @call_different_range() { 20 ; CHECK-LABEL: @call_different_range 21 ; CHECK-NEXT: bitcast i8 0 to i8 22 ; CHECK-NEXT: %out = call i8 @dummy(), !range !1 23 ; CHECK-NEXT: ret i8 %out 24 bitcast i8 0 to i8 25 %out = call i8 @dummy(), !range !1 26 ret i8 %out 27 } 28 29 define i8 @invoke_with_range() personality i8* undef { 30 %out = invoke i8 @dummy() to label %next unwind label %lpad, !range !0 31 32 next: 33 ret i8 %out 34 35 lpad: 36 %pad = landingpad { i8*, i32 } cleanup 37 resume { i8*, i32 } zeroinitializer 38 } 39 40 define i8 @invoke_no_range() personality i8* undef { 41 ; CHECK-LABEL: @invoke_no_range() 42 ; CHECK-NEXT: invoke i8 @dummy 43 %out = invoke i8 @dummy() to label %next unwind label %lpad 44 45 next: 46 ret i8 %out 47 48 lpad: 49 %pad = landingpad { i8*, i32 } cleanup 50 resume { i8*, i32 } zeroinitializer 51 } 52 53 define i8 @invoke_different_range() personality i8* undef { 54 ; CHECK-LABEL: @invoke_different_range() 55 ; CHECK-NEXT: invoke i8 @dummy 56 %out = invoke i8 @dummy() to label %next unwind label %lpad, !range !1 57 58 next: 59 ret i8 %out 60 61 lpad: 62 %pad = landingpad { i8*, i32 } cleanup 63 resume { i8*, i32 } zeroinitializer 64 } 65 66 define i8 @invoke_with_same_range() personality i8* undef { 67 ; CHECK-LABEL: @invoke_with_same_range() 68 ; CHECK: tail call i8 @invoke_with_range() 69 %out = invoke i8 @dummy() to label %next unwind label %lpad, !range !0 70 71 next: 72 ret i8 %out 73 74 lpad: 75 %pad = landingpad { i8*, i32 } cleanup 76 resume { i8*, i32 } zeroinitializer 77 } 78 79 define i8 @call_with_same_range() { 80 ; CHECK-LABEL: @call_with_same_range 81 ; CHECK: tail call i8 @call_with_range 82 bitcast i8 0 to i8 83 %out = call i8 @dummy(), !range !0 84 ret i8 %out 85 } 86 87 88 89 declare i8 @dummy(); 90 declare i32 @__gxx_personality_v0(...) 91 92 !0 = !{i8 0, i8 2} 93 !1 = !{i8 5, i8 7} 94