[PowerPC] More fast-isel chunks (returns and integer extends)
[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 signext i8 @ret2(i8 signext %a) nounwind uwtable ssp {
4 entry:
5 ; ELF64: ret2
6 ; ELF64: extsb
7 ; ELF64: blr
8   ret i8 %a
9 }
10
11 define zeroext i8 @ret3(i8 signext %a) nounwind uwtable ssp {
12 entry:
13 ; ELF64: ret3
14 ; ELF64: rldicl {{[0-9]+}}, {{[0-9]+}}, 0, 56
15 ; ELF64: blr
16   ret i8 %a
17 }
18
19 define signext i16 @ret4(i16 signext %a) nounwind uwtable ssp {
20 entry:
21 ; ELF64: ret4
22 ; ELF64: extsh
23 ; ELF64: blr
24   ret i16 %a
25 }
26
27 define zeroext i16 @ret5(i16 signext %a) nounwind uwtable ssp {
28 entry:
29 ; ELF64: ret5
30 ; ELF64: rldicl {{[0-9]+}}, {{[0-9]+}}, 0, 48
31 ; ELF64: blr
32   ret i16 %a
33 }
34
35 define i16 @ret6(i16 %a) nounwind uwtable ssp {
36 entry:
37 ; ELF64: ret6
38 ; ELF64: rldicl {{[0-9]+}}, {{[0-9]+}}, 0, 48
39 ; ELF64: blr
40   ret i16 %a
41 }
42
43 define signext i32 @ret7(i32 signext %a) nounwind uwtable ssp {
44 entry:
45 ; ELF64: ret7
46 ; ELF64: extsw
47 ; ELF64: blr
48   ret i32 %a
49 }
50
51 define zeroext i32 @ret8(i32 signext %a) nounwind uwtable ssp {
52 entry:
53 ; ELF64: ret8
54 ; ELF64: rldicl {{[0-9]+}}, {{[0-9]+}}, 0, 32
55 ; ELF64: blr
56   ret i32 %a
57 }
58
59 define i32 @ret9(i32 %a) nounwind uwtable ssp {
60 entry:
61 ; ELF64: ret9
62 ; ELF64: rldicl {{[0-9]+}}, {{[0-9]+}}, 0, 32
63 ; ELF64: blr
64   ret i32 %a
65 }
66
67 define i64 @ret10(i64 %a) nounwind uwtable ssp {
68 entry:
69 ; ELF64: ret10
70 ; ELF64-NOT: exts
71 ; ELF64-NOT: rldicl
72 ; ELF64: blr
73   ret i64 %a
74 }
75
76 define float @ret11(float %a) nounwind uwtable ssp {
77 entry:
78 ; ELF64: ret11
79 ; ELF64: blr
80   ret float %a
81 }
82
83 define double @ret12(double %a) nounwind uwtable ssp {
84 entry:
85 ; ELF64: ret12
86 ; ELF64: blr
87   ret double %a
88 }
89
90 define i8 @ret13() nounwind uwtable ssp {
91 entry:
92 ; ELF64: ret13
93 ; ELF64: li
94 ; ELF64: blr
95   ret i8 15;
96 }
97
98 define i16 @ret14() nounwind uwtable ssp {
99 entry:
100 ; ELF64: ret14
101 ; ELF64: li
102 ; ELF64: blr
103   ret i16 -225;
104 }
105
106 define i32 @ret15() nounwind uwtable ssp {
107 entry:
108 ; ELF64: ret15
109 ; ELF64: lis
110 ; ELF64: ori
111 ; ELF64: blr
112   ret i32 278135;
113 }
114
115 define i64 @ret16() nounwind uwtable ssp {
116 entry:
117 ; ELF64: ret16
118 ; ELF64: li
119 ; ELF64: sldi
120 ; ELF64: oris
121 ; ELF64: ori
122 ; ELF64: blr
123   ret i64 27813515225;
124 }
125
126 define float @ret17() nounwind uwtable ssp {
127 entry:
128 ; ELF64: ret17
129 ; ELF64: addis
130 ; ELF64: lfs
131 ; ELF64: blr
132   ret float 2.5;
133 }
134
135 define double @ret18() nounwind uwtable ssp {
136 entry:
137 ; ELF64: ret18
138 ; ELF64: addis
139 ; ELF64: lfd
140 ; ELF64: blr
141   ret double 2.5e-33;
142 }