Move the complex address expression out of DIVariable and into an extra
[oota-llvm.git] / test / CodeGen / PowerPC / fast-isel-ret.ll
1 ; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 | FileCheck %s --check-prefix=ELF64
2
3 define zeroext i1 @rettrue() nounwind uwtable ssp {
4 entry:
5 ; ELF64-LABEL: rettrue
6 ; ELF64: li 3, 1
7 ; ELF64: blr
8   ret i1 true
9 }
10
11 define zeroext i1 @retfalse() nounwind uwtable ssp {
12 entry:
13 ; ELF64-LABEL: retfalse
14 ; ELF64: li 3, 0
15 ; ELF64: blr
16   ret i1 false
17 }
18
19 define signext i1 @retstrue() nounwind uwtable ssp {
20 entry:
21 ; ELF64-LABEL: retstrue
22 ; ELF64: li 3, -1
23 ; ELF64: blr
24   ret i1 true
25 }
26
27 define signext i1 @retsfalse() nounwind uwtable ssp {
28 entry:
29 ; ELF64-LABEL: retsfalse
30 ; ELF64: li 3, 0
31 ; ELF64: blr
32   ret i1 false
33 }
34
35 define signext i8 @ret2(i8 signext %a) nounwind uwtable ssp {
36 entry:
37 ; ELF64-LABEL: ret2
38 ; ELF64: extsb
39 ; ELF64: blr
40   ret i8 %a
41 }
42
43 define zeroext i8 @ret3(i8 signext %a) nounwind uwtable ssp {
44 entry:
45 ; ELF64-LABEL: ret3
46 ; ELF64: rldicl {{[0-9]+}}, {{[0-9]+}}, 0, 56
47 ; ELF64: blr
48   ret i8 %a
49 }
50
51 define signext i16 @ret4(i16 signext %a) nounwind uwtable ssp {
52 entry:
53 ; ELF64-LABEL: ret4
54 ; ELF64: extsh
55 ; ELF64: blr
56   ret i16 %a
57 }
58
59 define zeroext i16 @ret5(i16 signext %a) nounwind uwtable ssp {
60 entry:
61 ; ELF64-LABEL: ret5
62 ; ELF64: rldicl {{[0-9]+}}, {{[0-9]+}}, 0, 48
63 ; ELF64: blr
64   ret i16 %a
65 }
66
67 define i16 @ret6(i16 %a) nounwind uwtable ssp {
68 entry:
69 ; ELF64-LABEL: ret6
70 ; ELF64: rldicl {{[0-9]+}}, {{[0-9]+}}, 0, 48
71 ; ELF64: blr
72   ret i16 %a
73 }
74
75 define signext i32 @ret7(i32 signext %a) nounwind uwtable ssp {
76 entry:
77 ; ELF64-LABEL: ret7
78 ; ELF64: extsw
79 ; ELF64: blr
80   ret i32 %a
81 }
82
83 define zeroext i32 @ret8(i32 signext %a) nounwind uwtable ssp {
84 entry:
85 ; ELF64-LABEL: ret8
86 ; ELF64: rldicl {{[0-9]+}}, {{[0-9]+}}, 0, 32
87 ; ELF64: blr
88   ret i32 %a
89 }
90
91 define i32 @ret9(i32 %a) nounwind uwtable ssp {
92 entry:
93 ; ELF64-LABEL: ret9
94 ; ELF64: rldicl {{[0-9]+}}, {{[0-9]+}}, 0, 32
95 ; ELF64: blr
96   ret i32 %a
97 }
98
99 define i64 @ret10(i64 %a) nounwind uwtable ssp {
100 entry:
101 ; ELF64-LABEL: ret10
102 ; ELF64-NOT: exts
103 ; ELF64-NOT: rldicl
104 ; ELF64: blr
105   ret i64 %a
106 }
107
108 define float @ret11(float %a) nounwind uwtable ssp {
109 entry:
110 ; ELF64-LABEL: ret11
111 ; ELF64: blr
112   ret float %a
113 }
114
115 define double @ret12(double %a) nounwind uwtable ssp {
116 entry:
117 ; ELF64-LABEL: ret12
118 ; ELF64: blr
119   ret double %a
120 }
121
122 define i8 @ret13() nounwind uwtable ssp {
123 entry:
124 ; ELF64-LABEL: ret13
125 ; ELF64: li
126 ; ELF64: blr
127   ret i8 15;
128 }
129
130 define i16 @ret14() nounwind uwtable ssp {
131 entry:
132 ; ELF64-LABEL: ret14
133 ; ELF64: li
134 ; ELF64: blr
135   ret i16 -225;
136 }
137
138 define i32 @ret15() nounwind uwtable ssp {
139 entry:
140 ; ELF64-LABEL: ret15
141 ; ELF64: lis
142 ; ELF64: ori
143 ; ELF64: blr
144   ret i32 278135;
145 }
146
147 define i64 @ret16() nounwind uwtable ssp {
148 entry:
149 ; ELF64-LABEL: ret16
150 ; ELF64: li
151 ; ELF64: sldi
152 ; ELF64: oris
153 ; ELF64: ori
154 ; ELF64: blr
155   ret i64 27813515225;
156 }
157
158 define float @ret17() nounwind uwtable ssp {
159 entry:
160 ; ELF64-LABEL: ret17
161 ; ELF64: addis
162 ; ELF64: lfs
163 ; ELF64: blr
164   ret float 2.5;
165 }
166
167 define double @ret18() nounwind uwtable ssp {
168 entry:
169 ; ELF64-LABEL: ret18
170 ; ELF64: addis
171 ; ELF64: lfd
172 ; ELF64: blr
173   ret double 2.5e-33;
174 }