xref: /llvm-project/llvm/test/Transforms/MergeFunc/call-and-invoke-with-ranges-attr.ll (revision 1941c5180b91d792200d5e868d45c96e99bda35e)
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