xref: /llvm-project/llvm/test/Transforms/MergeFunc/call-and-invoke-with-ranges-attr.ll (revision 1941c5180b91d792200d5e868d45c96e99bda35e)
1844b5327SAndreas Jonson; RUN: opt -passes=mergefunc -S < %s | FileCheck %s
2844b5327SAndreas Jonson
3844b5327SAndreas Jonsondefine i8 @call_with_range_attr(i8 range(i8 0, 2) %v) {
4844b5327SAndreas Jonson  %out = call i8 @dummy2(i8 %v)
5844b5327SAndreas Jonson  ret i8 %out
6844b5327SAndreas Jonson}
7844b5327SAndreas Jonson
8844b5327SAndreas Jonsondefine i8 @call_no_range_attr(i8 %v) {
9844b5327SAndreas Jonson; CHECK-LABEL: @call_no_range_attr
10844b5327SAndreas Jonson; CHECK-NEXT: %out = call i8 @dummy2(i8 %v)
11844b5327SAndreas Jonson; CHECK-NEXT: ret i8 %out
12844b5327SAndreas Jonson  %out = call i8 @dummy2(i8 %v)
13844b5327SAndreas Jonson  ret i8 %out
14844b5327SAndreas Jonson}
15844b5327SAndreas Jonson
16844b5327SAndreas Jonsondefine i8 @call_different_range_attr(i8 range(i8 5, 7) %v) {
17844b5327SAndreas Jonson; CHECK-LABEL: @call_different_range_attr
18844b5327SAndreas Jonson; CHECK-NEXT: %out = call i8 @dummy2(i8 %v)
19844b5327SAndreas Jonson; CHECK-NEXT: ret i8 %out
20844b5327SAndreas Jonson  %out = call i8 @dummy2(i8 %v)
21844b5327SAndreas Jonson  ret i8 %out
22844b5327SAndreas Jonson}
23844b5327SAndreas Jonson
24844b5327SAndreas Jonsondefine i8 @call_with_range() {
25844b5327SAndreas Jonson  %out = call range(i8 0, 2) i8 @dummy()
26844b5327SAndreas Jonson  ret i8 %out
27844b5327SAndreas Jonson}
28844b5327SAndreas Jonson
29844b5327SAndreas Jonsondefine i8 @call_no_range() {
30844b5327SAndreas Jonson; CHECK-LABEL: @call_no_range
31844b5327SAndreas Jonson; CHECK-NEXT: %out = call i8 @dummy()
32844b5327SAndreas Jonson; CHECK-NEXT: ret i8 %out
33844b5327SAndreas Jonson  %out = call i8 @dummy()
34844b5327SAndreas Jonson  ret i8 %out
35844b5327SAndreas Jonson}
36844b5327SAndreas Jonson
37844b5327SAndreas Jonsondefine i8 @call_different_range() {
38844b5327SAndreas Jonson; CHECK-LABEL: @call_different_range
39844b5327SAndreas Jonson; CHECK-NEXT: %out = call range(i8 5, 7) i8 @dummy()
40844b5327SAndreas Jonson; CHECK-NEXT: ret i8 %out
41844b5327SAndreas Jonson  %out = call range(i8 5, 7) i8 @dummy()
42844b5327SAndreas Jonson  ret i8 %out
43844b5327SAndreas Jonson}
44844b5327SAndreas Jonson
45844b5327SAndreas Jonsondefine i8 @invoke_with_range() personality ptr undef {
46844b5327SAndreas Jonson  %out = invoke range(i8 0, 2) i8 @dummy() to label %next unwind label %lpad
47844b5327SAndreas Jonson
48844b5327SAndreas Jonsonnext:
49844b5327SAndreas Jonson  ret i8 %out
50844b5327SAndreas Jonson
51844b5327SAndreas Jonsonlpad:
52844b5327SAndreas Jonson  %pad = landingpad { ptr, i32 } cleanup
53844b5327SAndreas Jonson  resume { ptr, i32 } zeroinitializer
54844b5327SAndreas Jonson}
55844b5327SAndreas Jonson
56844b5327SAndreas Jonsondefine i8 @invoke_no_range() personality ptr undef {
57844b5327SAndreas Jonson; CHECK-LABEL: @invoke_no_range()
58844b5327SAndreas Jonson; CHECK-NEXT: invoke i8 @dummy
59844b5327SAndreas Jonson  %out = invoke i8 @dummy() to label %next unwind label %lpad
60844b5327SAndreas Jonson
61844b5327SAndreas Jonsonnext:
62844b5327SAndreas Jonson  ret i8 %out
63844b5327SAndreas Jonson
64844b5327SAndreas Jonsonlpad:
65844b5327SAndreas Jonson  %pad = landingpad { ptr, i32 } cleanup
66844b5327SAndreas Jonson  resume { ptr, i32 } zeroinitializer
67844b5327SAndreas Jonson}
68844b5327SAndreas Jonson
69844b5327SAndreas Jonsondefine i8 @invoke_different_range() personality ptr undef {
70844b5327SAndreas Jonson; CHECK-LABEL: @invoke_different_range()
71844b5327SAndreas Jonson; CHECK-NEXT: invoke range(i8 5, 7) i8 @dummy
72844b5327SAndreas Jonson  %out = invoke range(i8 5, 7) i8 @dummy() to label %next unwind label %lpad
73844b5327SAndreas Jonson
74844b5327SAndreas Jonsonnext:
75844b5327SAndreas Jonson  ret i8 %out
76844b5327SAndreas Jonson
77844b5327SAndreas Jonsonlpad:
78844b5327SAndreas Jonson  %pad = landingpad { ptr, i32 } cleanup
79844b5327SAndreas Jonson  resume { ptr, i32 } zeroinitializer
80844b5327SAndreas Jonson}
81844b5327SAndreas Jonson
82844b5327SAndreas Jonsondefine i8 @invoke_with_same_range() personality ptr undef {
83*1941c518SKyungwoo Lee; CHECK-DAG: @invoke_with_same_range()
84*1941c518SKyungwoo Lee; CHECK-DAG: tail call i8 @invoke_with_range()
85844b5327SAndreas Jonson  %out = invoke range(i8 0, 2) i8 @dummy() to label %next unwind label %lpad
86844b5327SAndreas Jonson
87844b5327SAndreas Jonsonnext:
88844b5327SAndreas Jonson  ret i8 %out
89844b5327SAndreas Jonson
90844b5327SAndreas Jonsonlpad:
91844b5327SAndreas Jonson  %pad = landingpad { ptr, i32 } cleanup
92844b5327SAndreas Jonson  resume { ptr, i32 } zeroinitializer
93844b5327SAndreas Jonson}
94844b5327SAndreas Jonson
95844b5327SAndreas Jonsondefine i8 @call_with_same_range() {
96*1941c518SKyungwoo Lee; CHECK-DAG: @call_with_same_range()
97*1941c518SKyungwoo Lee; CHECK-DAG: tail call i8 @call_with_range()
98844b5327SAndreas Jonson  %out = call range(i8 0, 2) i8 @dummy()
99844b5327SAndreas Jonson  ret i8 %out
100844b5327SAndreas Jonson}
101844b5327SAndreas Jonson
102844b5327SAndreas Jonsondefine i8 @call_with_same_range_attr(i8 range(i8 0, 2) %v) {
103*1941c518SKyungwoo Lee; CHECK-DAG: @call_with_same_range_attr
104*1941c518SKyungwoo Lee; CHECK-DAG: tail call i8 @call_with_range_attr
105844b5327SAndreas Jonson  %out = call i8 @dummy2(i8 %v)
106844b5327SAndreas Jonson  ret i8 %out
107844b5327SAndreas Jonson}
108844b5327SAndreas Jonson
109844b5327SAndreas Jonsondeclare i8 @dummy();
110844b5327SAndreas Jonsondeclare i8 @dummy2(i8);
111844b5327SAndreas Jonsondeclare i32 @__gxx_personality_v0(...)
112