b955e3c9582e68f4f5ae23581d0c71ebb38b4eb9
[oota-llvm.git] / test / Transforms / MergeFunc / call-and-invoke-with-ranges.ll
1 ; RUN: opt -mergefunc -S < %s | FileCheck %s
2
3 define 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
9 define 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
19 define 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
29 define i8 @invoke_with_range() personality i8* undef {
30   %out = invoke i8 @dummy() to label %next unwind label %lpad, !range !0
31
32 next:
33   ret i8 %out
34
35 lpad:
36   %pad = landingpad { i8*, i32 } cleanup
37   resume { i8*, i32 } zeroinitializer
38 }
39
40 define i8 @invoke_no_range() personality i8* undef {
41 ; CHECK-LABEL: @invoke_no_range()
42 ; CHECK-NEXT: invoke i8 @dummy
43   %out = invoke i8 @dummy() to label %next unwind label %lpad
44
45 next:
46   ret i8 %out
47
48 lpad:
49   %pad = landingpad { i8*, i32 } cleanup
50   resume { i8*, i32 } zeroinitializer
51 }
52
53 define i8 @invoke_different_range() personality i8* undef {
54 ; 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
58 next:
59   ret i8 %out
60
61 lpad:
62   %pad = landingpad { i8*, i32 } cleanup
63   resume { i8*, i32 } zeroinitializer
64 }
65
66 define i8 @call_with_same_range() {
67 ; CHECK-LABEL: @call_with_same_range
68 ; CHECK: tail call i8 @call_with_range
69   bitcast i8 0 to i8
70   %out = call i8 @dummy(), !range !0
71   ret i8 %out
72 }
73
74 define i8 @invoke_with_same_range() personality i8* undef {
75 ; CHECK-LABEL: @invoke_with_same_range()
76 ; CHECK: tail call i8 @invoke_with_range()
77   %out = invoke i8 @dummy() to label %next unwind label %lpad, !range !0
78
79 next:
80   ret i8 %out
81
82 lpad:
83   %pad = landingpad { i8*, i32 } cleanup
84   resume { i8*, i32 } zeroinitializer
85 }
86
87 declare i8 @dummy();
88 declare i32 @__gxx_personality_v0(...)
89
90 !0 = !{i8 0, i8 2}
91 !1 = !{i8 5, i8 7}