112 lines · plain
1; RUN: opt -passes=mergefunc -S < %s | FileCheck %s2 3define i8 @call_with_range_attr(i8 range(i8 0, 2) %v) {4 %out = call i8 @dummy2(i8 %v)5 ret i8 %out6}7 8define i8 @call_no_range_attr(i8 %v) {9; CHECK-LABEL: @call_no_range_attr10; CHECK-NEXT: %out = call i8 @dummy2(i8 %v)11; CHECK-NEXT: ret i8 %out12 %out = call i8 @dummy2(i8 %v)13 ret i8 %out14}15 16define i8 @call_different_range_attr(i8 range(i8 5, 7) %v) {17; CHECK-LABEL: @call_different_range_attr18; CHECK-NEXT: %out = call i8 @dummy2(i8 %v)19; CHECK-NEXT: ret i8 %out20 %out = call i8 @dummy2(i8 %v)21 ret i8 %out22}23 24define i8 @call_with_range() {25 %out = call range(i8 0, 2) i8 @dummy()26 ret i8 %out27}28 29define i8 @call_no_range() {30; CHECK-LABEL: @call_no_range31; CHECK-NEXT: %out = call i8 @dummy()32; CHECK-NEXT: ret i8 %out33 %out = call i8 @dummy()34 ret i8 %out35}36 37define i8 @call_different_range() {38; CHECK-LABEL: @call_different_range39; CHECK-NEXT: %out = call range(i8 5, 7) i8 @dummy()40; CHECK-NEXT: ret i8 %out41 %out = call range(i8 5, 7) i8 @dummy()42 ret i8 %out43}44 45define i8 @invoke_with_range() personality ptr undef {46 %out = invoke range(i8 0, 2) i8 @dummy() to label %next unwind label %lpad47 48next:49 ret i8 %out50 51lpad:52 %pad = landingpad { ptr, i32 } cleanup53 resume { ptr, i32 } zeroinitializer54}55 56define i8 @invoke_no_range() personality ptr undef {57; CHECK-LABEL: @invoke_no_range()58; CHECK-NEXT: invoke i8 @dummy59 %out = invoke i8 @dummy() to label %next unwind label %lpad60 61next:62 ret i8 %out63 64lpad:65 %pad = landingpad { ptr, i32 } cleanup66 resume { ptr, i32 } zeroinitializer67}68 69define i8 @invoke_different_range() personality ptr undef {70; CHECK-LABEL: @invoke_different_range()71; CHECK-NEXT: invoke range(i8 5, 7) i8 @dummy72 %out = invoke range(i8 5, 7) i8 @dummy() to label %next unwind label %lpad73 74next:75 ret i8 %out76 77lpad:78 %pad = landingpad { ptr, i32 } cleanup79 resume { ptr, i32 } zeroinitializer80}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 %lpad86 87next:88 ret i8 %out89 90lpad:91 %pad = landingpad { ptr, i32 } cleanup92 resume { ptr, i32 } zeroinitializer93}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 %out100}101 102define i8 @call_with_same_range_attr(i8 range(i8 0, 2) %v) {103; CHECK-DAG: @call_with_same_range_attr104; CHECK-DAG: tail call i8 @call_with_range_attr105 %out = call i8 @dummy2(i8 %v)106 ret i8 %out107}108 109declare i8 @dummy();110declare i8 @dummy2(i8);111declare i32 @__gxx_personality_v0(...)112