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