Mercurial > hg > CbC > CbC_llvm
comparison test/CodeGen/RISCV/sext-zext-trunc.ll @ 134:3a76565eade5 LLVM5.0.1
update 5.0.1
author | mir3636 |
---|---|
date | Sat, 17 Feb 2018 09:57:20 +0900 |
parents | |
children | c2174574ed3a |
comparison
equal
deleted
inserted
replaced
133:c60214abe0e8 | 134:3a76565eade5 |
---|---|
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py | |
2 ; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \ | |
3 ; RUN: | FileCheck %s -check-prefix=RV32I | |
4 | |
5 define i8 @sext_i1_to_i8(i1 %a) { | |
6 ; RV32I-LABEL: sext_i1_to_i8: | |
7 ; RV32I: # %bb.0: | |
8 ; RV32I-NEXT: andi a0, a0, 1 | |
9 ; RV32I-NEXT: neg a0, a0 | |
10 ; RV32I-NEXT: ret | |
11 %1 = sext i1 %a to i8 | |
12 ret i8 %1 | |
13 } | |
14 | |
15 define i16 @sext_i1_to_i16(i1 %a) { | |
16 ; RV32I-LABEL: sext_i1_to_i16: | |
17 ; RV32I: # %bb.0: | |
18 ; RV32I-NEXT: andi a0, a0, 1 | |
19 ; RV32I-NEXT: neg a0, a0 | |
20 ; RV32I-NEXT: ret | |
21 %1 = sext i1 %a to i16 | |
22 ret i16 %1 | |
23 } | |
24 | |
25 define i32 @sext_i1_to_i32(i1 %a) { | |
26 ; RV32I-LABEL: sext_i1_to_i32: | |
27 ; RV32I: # %bb.0: | |
28 ; RV32I-NEXT: andi a0, a0, 1 | |
29 ; RV32I-NEXT: neg a0, a0 | |
30 ; RV32I-NEXT: ret | |
31 %1 = sext i1 %a to i32 | |
32 ret i32 %1 | |
33 } | |
34 | |
35 define i64 @sext_i1_to_i64(i1 %a) { | |
36 ; RV32I-LABEL: sext_i1_to_i64: | |
37 ; RV32I: # %bb.0: | |
38 ; RV32I-NEXT: andi a0, a0, 1 | |
39 ; RV32I-NEXT: neg a0, a0 | |
40 ; RV32I-NEXT: mv a1, a0 | |
41 ; RV32I-NEXT: ret | |
42 %1 = sext i1 %a to i64 | |
43 ret i64 %1 | |
44 } | |
45 | |
46 define i16 @sext_i8_to_i16(i8 %a) { | |
47 ; RV32I-LABEL: sext_i8_to_i16: | |
48 ; RV32I: # %bb.0: | |
49 ; RV32I-NEXT: slli a0, a0, 24 | |
50 ; RV32I-NEXT: srai a0, a0, 24 | |
51 ; RV32I-NEXT: ret | |
52 %1 = sext i8 %a to i16 | |
53 ret i16 %1 | |
54 } | |
55 | |
56 define i32 @sext_i8_to_i32(i8 %a) { | |
57 ; RV32I-LABEL: sext_i8_to_i32: | |
58 ; RV32I: # %bb.0: | |
59 ; RV32I-NEXT: slli a0, a0, 24 | |
60 ; RV32I-NEXT: srai a0, a0, 24 | |
61 ; RV32I-NEXT: ret | |
62 %1 = sext i8 %a to i32 | |
63 ret i32 %1 | |
64 } | |
65 | |
66 define i64 @sext_i8_to_i64(i8 %a) { | |
67 ; RV32I-LABEL: sext_i8_to_i64: | |
68 ; RV32I: # %bb.0: | |
69 ; RV32I-NEXT: slli a1, a0, 24 | |
70 ; RV32I-NEXT: srai a0, a1, 24 | |
71 ; RV32I-NEXT: srai a1, a1, 31 | |
72 ; RV32I-NEXT: ret | |
73 %1 = sext i8 %a to i64 | |
74 ret i64 %1 | |
75 } | |
76 | |
77 define i32 @sext_i16_to_i32(i16 %a) { | |
78 ; RV32I-LABEL: sext_i16_to_i32: | |
79 ; RV32I: # %bb.0: | |
80 ; RV32I-NEXT: slli a0, a0, 16 | |
81 ; RV32I-NEXT: srai a0, a0, 16 | |
82 ; RV32I-NEXT: ret | |
83 %1 = sext i16 %a to i32 | |
84 ret i32 %1 | |
85 } | |
86 | |
87 define i64 @sext_i16_to_i64(i16 %a) { | |
88 ; RV32I-LABEL: sext_i16_to_i64: | |
89 ; RV32I: # %bb.0: | |
90 ; RV32I-NEXT: slli a1, a0, 16 | |
91 ; RV32I-NEXT: srai a0, a1, 16 | |
92 ; RV32I-NEXT: srai a1, a1, 31 | |
93 ; RV32I-NEXT: ret | |
94 %1 = sext i16 %a to i64 | |
95 ret i64 %1 | |
96 } | |
97 | |
98 define i64 @sext_i32_to_i64(i32 %a) { | |
99 ; RV32I-LABEL: sext_i32_to_i64: | |
100 ; RV32I: # %bb.0: | |
101 ; RV32I-NEXT: srai a1, a0, 31 | |
102 ; RV32I-NEXT: ret | |
103 %1 = sext i32 %a to i64 | |
104 ret i64 %1 | |
105 } | |
106 | |
107 define i8 @zext_i1_to_i8(i1 %a) { | |
108 ; RV32I-LABEL: zext_i1_to_i8: | |
109 ; RV32I: # %bb.0: | |
110 ; RV32I-NEXT: andi a0, a0, 1 | |
111 ; RV32I-NEXT: ret | |
112 %1 = zext i1 %a to i8 | |
113 ret i8 %1 | |
114 } | |
115 | |
116 define i16 @zext_i1_to_i16(i1 %a) { | |
117 ; RV32I-LABEL: zext_i1_to_i16: | |
118 ; RV32I: # %bb.0: | |
119 ; RV32I-NEXT: andi a0, a0, 1 | |
120 ; RV32I-NEXT: ret | |
121 %1 = zext i1 %a to i16 | |
122 ret i16 %1 | |
123 } | |
124 | |
125 define i32 @zext_i1_to_i32(i1 %a) { | |
126 ; RV32I-LABEL: zext_i1_to_i32: | |
127 ; RV32I: # %bb.0: | |
128 ; RV32I-NEXT: andi a0, a0, 1 | |
129 ; RV32I-NEXT: ret | |
130 %1 = zext i1 %a to i32 | |
131 ret i32 %1 | |
132 } | |
133 | |
134 define i64 @zext_i1_to_i64(i1 %a) { | |
135 ; RV32I-LABEL: zext_i1_to_i64: | |
136 ; RV32I: # %bb.0: | |
137 ; RV32I-NEXT: andi a0, a0, 1 | |
138 ; RV32I-NEXT: mv a1, zero | |
139 ; RV32I-NEXT: ret | |
140 %1 = zext i1 %a to i64 | |
141 ret i64 %1 | |
142 } | |
143 | |
144 define i16 @zext_i8_to_i16(i8 %a) { | |
145 ; RV32I-LABEL: zext_i8_to_i16: | |
146 ; RV32I: # %bb.0: | |
147 ; RV32I-NEXT: andi a0, a0, 255 | |
148 ; RV32I-NEXT: ret | |
149 %1 = zext i8 %a to i16 | |
150 ret i16 %1 | |
151 } | |
152 | |
153 define i32 @zext_i8_to_i32(i8 %a) { | |
154 ; RV32I-LABEL: zext_i8_to_i32: | |
155 ; RV32I: # %bb.0: | |
156 ; RV32I-NEXT: andi a0, a0, 255 | |
157 ; RV32I-NEXT: ret | |
158 %1 = zext i8 %a to i32 | |
159 ret i32 %1 | |
160 } | |
161 | |
162 define i64 @zext_i8_to_i64(i8 %a) { | |
163 ; RV32I-LABEL: zext_i8_to_i64: | |
164 ; RV32I: # %bb.0: | |
165 ; RV32I-NEXT: andi a0, a0, 255 | |
166 ; RV32I-NEXT: mv a1, zero | |
167 ; RV32I-NEXT: ret | |
168 %1 = zext i8 %a to i64 | |
169 ret i64 %1 | |
170 } | |
171 | |
172 define i32 @zext_i16_to_i32(i16 %a) { | |
173 ; RV32I-LABEL: zext_i16_to_i32: | |
174 ; RV32I: # %bb.0: | |
175 ; RV32I-NEXT: lui a1, 16 | |
176 ; RV32I-NEXT: addi a1, a1, -1 | |
177 ; RV32I-NEXT: and a0, a0, a1 | |
178 ; RV32I-NEXT: ret | |
179 %1 = zext i16 %a to i32 | |
180 ret i32 %1 | |
181 } | |
182 | |
183 define i64 @zext_i16_to_i64(i16 %a) { | |
184 ; RV32I-LABEL: zext_i16_to_i64: | |
185 ; RV32I: # %bb.0: | |
186 ; RV32I-NEXT: lui a1, 16 | |
187 ; RV32I-NEXT: addi a1, a1, -1 | |
188 ; RV32I-NEXT: and a0, a0, a1 | |
189 ; RV32I-NEXT: mv a1, zero | |
190 ; RV32I-NEXT: ret | |
191 %1 = zext i16 %a to i64 | |
192 ret i64 %1 | |
193 } | |
194 | |
195 define i64 @zext_i32_to_i64(i32 %a) { | |
196 ; RV32I-LABEL: zext_i32_to_i64: | |
197 ; RV32I: # %bb.0: | |
198 ; RV32I-NEXT: mv a1, zero | |
199 ; RV32I-NEXT: ret | |
200 %1 = zext i32 %a to i64 | |
201 ret i64 %1 | |
202 } | |
203 | |
204 ; TODO: should the trunc tests explicitly ensure no code is generated before | |
205 ; jalr? | |
206 | |
207 define i1 @trunc_i8_to_i1(i8 %a) { | |
208 ; RV32I-LABEL: trunc_i8_to_i1: | |
209 ; RV32I: # %bb.0: | |
210 ; RV32I-NEXT: ret | |
211 %1 = trunc i8 %a to i1 | |
212 ret i1 %1 | |
213 } | |
214 | |
215 define i1 @trunc_i16_to_i1(i16 %a) { | |
216 ; RV32I-LABEL: trunc_i16_to_i1: | |
217 ; RV32I: # %bb.0: | |
218 ; RV32I-NEXT: ret | |
219 %1 = trunc i16 %a to i1 | |
220 ret i1 %1 | |
221 } | |
222 | |
223 define i1 @trunc_i32_to_i1(i32 %a) { | |
224 ; RV32I-LABEL: trunc_i32_to_i1: | |
225 ; RV32I: # %bb.0: | |
226 ; RV32I-NEXT: ret | |
227 %1 = trunc i32 %a to i1 | |
228 ret i1 %1 | |
229 } | |
230 | |
231 define i1 @trunc_i64_to_i1(i64 %a) { | |
232 ; RV32I-LABEL: trunc_i64_to_i1: | |
233 ; RV32I: # %bb.0: | |
234 ; RV32I-NEXT: ret | |
235 %1 = trunc i64 %a to i1 | |
236 ret i1 %1 | |
237 } | |
238 | |
239 define i8 @trunc_i16_to_i8(i16 %a) { | |
240 ; RV32I-LABEL: trunc_i16_to_i8: | |
241 ; RV32I: # %bb.0: | |
242 ; RV32I-NEXT: ret | |
243 %1 = trunc i16 %a to i8 | |
244 ret i8 %1 | |
245 } | |
246 | |
247 define i8 @trunc_i32_to_i8(i32 %a) { | |
248 ; RV32I-LABEL: trunc_i32_to_i8: | |
249 ; RV32I: # %bb.0: | |
250 ; RV32I-NEXT: ret | |
251 %1 = trunc i32 %a to i8 | |
252 ret i8 %1 | |
253 } | |
254 | |
255 define i8 @trunc_i64_to_i8(i64 %a) { | |
256 ; RV32I-LABEL: trunc_i64_to_i8: | |
257 ; RV32I: # %bb.0: | |
258 ; RV32I-NEXT: ret | |
259 %1 = trunc i64 %a to i8 | |
260 ret i8 %1 | |
261 } | |
262 | |
263 define i16 @trunc_i32_to_i16(i32 %a) { | |
264 ; RV32I-LABEL: trunc_i32_to_i16: | |
265 ; RV32I: # %bb.0: | |
266 ; RV32I-NEXT: ret | |
267 %1 = trunc i32 %a to i16 | |
268 ret i16 %1 | |
269 } | |
270 | |
271 define i16 @trunc_i64_to_i16(i64 %a) { | |
272 ; RV32I-LABEL: trunc_i64_to_i16: | |
273 ; RV32I: # %bb.0: | |
274 ; RV32I-NEXT: ret | |
275 %1 = trunc i64 %a to i16 | |
276 ret i16 %1 | |
277 } | |
278 | |
279 define i32 @trunc_i64_to_i32(i64 %a) { | |
280 ; RV32I-LABEL: trunc_i64_to_i32: | |
281 ; RV32I: # %bb.0: | |
282 ; RV32I-NEXT: ret | |
283 %1 = trunc i64 %a to i32 | |
284 ret i32 %1 | |
285 } |