blob: 806ca3c17a6af578e51ee8b511738f7a13cf6a96 [file] [log] [blame]
Stepan Dyatkovskiydee612d2014-07-15 10:46:51 +00001; RUN: opt -mergefunc -S < %s | FileCheck %s
2
3define 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
9define 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
19define 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
David Majnemer7fddecc2015-06-17 20:52:32 +000029define i8 @invoke_with_range() personality i8* undef {
Stepan Dyatkovskiydee612d2014-07-15 10:46:51 +000030 %out = invoke i8 @dummy() to label %next unwind label %lpad, !range !0
31
32next:
33 ret i8 %out
34
35lpad:
David Majnemer7fddecc2015-06-17 20:52:32 +000036 %pad = landingpad { i8*, i32 } cleanup
Stepan Dyatkovskiydee612d2014-07-15 10:46:51 +000037 resume { i8*, i32 } zeroinitializer
38}
39
David Majnemer7fddecc2015-06-17 20:52:32 +000040define i8 @invoke_no_range() personality i8* undef {
Stepan Dyatkovskiydee612d2014-07-15 10:46:51 +000041; CHECK-LABEL: @invoke_no_range()
42; CHECK-NEXT: invoke i8 @dummy
43 %out = invoke i8 @dummy() to label %next unwind label %lpad
44
45next:
46 ret i8 %out
47
48lpad:
David Majnemer7fddecc2015-06-17 20:52:32 +000049 %pad = landingpad { i8*, i32 } cleanup
Stepan Dyatkovskiydee612d2014-07-15 10:46:51 +000050 resume { i8*, i32 } zeroinitializer
51}
52
David Majnemer7fddecc2015-06-17 20:52:32 +000053define i8 @invoke_different_range() personality i8* undef {
Stepan Dyatkovskiydee612d2014-07-15 10:46:51 +000054; 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
58next:
59 ret i8 %out
60
61lpad:
David Majnemer7fddecc2015-06-17 20:52:32 +000062 %pad = landingpad { i8*, i32 } cleanup
Stepan Dyatkovskiydee612d2014-07-15 10:46:51 +000063 resume { i8*, i32 } zeroinitializer
64}
65
David Majnemer7fddecc2015-06-17 20:52:32 +000066define i8 @invoke_with_same_range() personality i8* undef {
Arnold Schwaighofer0302da62015-06-09 00:03:29 +000067; CHECK-LABEL: @invoke_with_same_range()
Stepan Dyatkovskiydee612d2014-07-15 10:46:51 +000068; CHECK: tail call i8 @invoke_with_range()
69 %out = invoke i8 @dummy() to label %next unwind label %lpad, !range !0
70
71next:
72 ret i8 %out
73
74lpad:
David Majnemer7fddecc2015-06-17 20:52:32 +000075 %pad = landingpad { i8*, i32 } cleanup
Stepan Dyatkovskiydee612d2014-07-15 10:46:51 +000076 resume { i8*, i32 } zeroinitializer
77}
78
David Majnemerbbfc7212015-12-14 18:34:23 +000079define 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
JF Bastien5e4303d2015-08-15 01:18:18 +000087
88
Stepan Dyatkovskiydee612d2014-07-15 10:46:51 +000089declare i8 @dummy();
90declare i32 @__gxx_personality_v0(...)
91
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +000092!0 = !{i8 0, i8 2}
93!1 = !{i8 5, i8 7}