OLD | NEW |
1 ; RUN: opt -S -expand-illegal-ints < %s | FileCheck %s | 1 ; RUN: opt -S -expand-illegal-ints < %s | FileCheck %s |
2 | 2 |
3 target datalayout = "e-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64
:64:64-p:32:32:32-v128:32:128-n32-S128" | 3 target datalayout = "e-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64
:64:64-p:32:32:32-v128:32:128-n32-S128" |
4 | 4 |
5 ; CHECK: define i32 @add(i32, i32, i32, i32) { | 5 ; CHECK: define i32 @add(i32, i32, i32, i32) { |
6 ; CHECK: %5 = call i32 @i64Add(i32 %0, i32 %1, i32 %2, i32 %3) | 6 ; CHECK: %5 = call i32 @i64Add(i32 %0, i32 %1, i32 %2, i32 %3) |
7 ; CHECK: %6 = call i32 @getHigh32() | 7 ; CHECK: %6 = call i32 @getHigh32() |
8 ; CHECK: call void @setHigh32(i32 %6) | 8 ; CHECK: call void @setHigh32(i32 %6) |
9 ; CHECK: ret i32 %5 | 9 ; CHECK: ret i32 %5 |
10 ; CHECK: } | 10 ; CHECK: } |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 ; CHECK: } | 198 ; CHECK: } |
199 define i32 @icmp_ult(i64 %a, i64 %b) { | 199 define i32 @icmp_ult(i64 %a, i64 %b) { |
200 %c = icmp ult i64 %a, %b | 200 %c = icmp ult i64 %a, %b |
201 %d = zext i1 %c to i32 | 201 %d = zext i1 %c to i32 |
202 ret i32 %d | 202 ret i32 %d |
203 } | 203 } |
204 | 204 |
205 ; CHECK: define i32 @load(i64* %a) { | 205 ; CHECK: define i32 @load(i64* %a) { |
206 ; CHECK: %1 = ptrtoint i64* %a to i32 | 206 ; CHECK: %1 = ptrtoint i64* %a to i32 |
207 ; CHECK: %2 = inttoptr i32 %1 to i32* | 207 ; CHECK: %2 = inttoptr i32 %1 to i32* |
208 ; CHECK: %3 = load i32* %2 | 208 ; CHECK: %3 = load i32, i32* %2 |
209 ; CHECK: %4 = add i32 %1, 4 | 209 ; CHECK: %4 = add i32 %1, 4 |
210 ; CHECK: %5 = inttoptr i32 %4 to i32* | 210 ; CHECK: %5 = inttoptr i32 %4 to i32* |
211 ; CHECK: %6 = load i32* %5 | 211 ; CHECK: %6 = load i32, i32* %5 |
212 ; CHECK: call void @setHigh32(i32 %6) | 212 ; CHECK: call void @setHigh32(i32 %6) |
213 ; CHECK: ret i32 %3 | 213 ; CHECK: ret i32 %3 |
214 ; CHECK: } | 214 ; CHECK: } |
215 define i64 @load(i64 *%a) { | 215 define i64 @load(i64 *%a) { |
216 %c = load i64* %a | 216 %c = load i64, i64* %a |
217 ret i64 %c | 217 ret i64 %c |
218 } | 218 } |
219 | 219 |
220 ; CHECK: define i32 @aligned_load(i64* %a) { | 220 ; CHECK: define i32 @aligned_load(i64* %a) { |
221 ; CHECK: %1 = ptrtoint i64* %a to i32 | 221 ; CHECK: %1 = ptrtoint i64* %a to i32 |
222 ; CHECK: %2 = inttoptr i32 %1 to i32* | 222 ; CHECK: %2 = inttoptr i32 %1 to i32* |
223 ; CHECK: %3 = load i32* %2, align 16 | 223 ; CHECK: %3 = load i32, i32* %2, align 16 |
224 ; CHECK: %4 = add i32 %1, 4 | 224 ; CHECK: %4 = add i32 %1, 4 |
225 ; CHECK: %5 = inttoptr i32 %4 to i32* | 225 ; CHECK: %5 = inttoptr i32 %4 to i32* |
226 ; CHECK: %6 = load i32* %5, align 4 | 226 ; CHECK: %6 = load i32, i32* %5, align 4 |
227 ; CHECK: call void @setHigh32(i32 %6) | 227 ; CHECK: call void @setHigh32(i32 %6) |
228 ; CHECK: ret i32 %3 | 228 ; CHECK: ret i32 %3 |
229 ; CHECK: } | 229 ; CHECK: } |
230 define i64 @aligned_load(i64 *%a) { | 230 define i64 @aligned_load(i64 *%a) { |
231 %c = load i64* %a, align 16 | 231 %c = load i64, i64* %a, align 16 |
232 ret i64 %c | 232 ret i64 %c |
233 } | 233 } |
234 | 234 |
235 ; CHECK: define void @store(i64* %a, i32, i32) { | 235 ; CHECK: define void @store(i64* %a, i32, i32) { |
236 ; CHECK: %3 = ptrtoint i64* %a to i32 | 236 ; CHECK: %3 = ptrtoint i64* %a to i32 |
237 ; CHECK: %4 = inttoptr i32 %3 to i32* | 237 ; CHECK: %4 = inttoptr i32 %3 to i32* |
238 ; CHECK: store i32 %0, i32* %4 | 238 ; CHECK: store i32 %0, i32* %4 |
239 ; CHECK: %5 = add i32 %3, 4 | 239 ; CHECK: %5 = add i32 %3, 4 |
240 ; CHECK: %6 = inttoptr i32 %5 to i32* | 240 ; CHECK: %6 = inttoptr i32 %5 to i32* |
241 ; CHECK: store i32 %1, i32* %6 | 241 ; CHECK: store i32 %1, i32* %6 |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
300 ret i64 %y | 300 ret i64 %y |
301 } | 301 } |
302 | 302 |
303 ; CHECK: define void @unreachable_blocks(i64* %p) { | 303 ; CHECK: define void @unreachable_blocks(i64* %p) { |
304 ; CHECK-NEXT: ret void | 304 ; CHECK-NEXT: ret void |
305 ; CHECK-NEXT: } | 305 ; CHECK-NEXT: } |
306 define void @unreachable_blocks(i64* %p) { | 306 define void @unreachable_blocks(i64* %p) { |
307 ret void | 307 ret void |
308 | 308 |
309 dead: | 309 dead: |
310 %t = load i64* %p | 310 %t = load i64, i64* %p |
311 %s = add i64 %t, 1 | 311 %s = add i64 %t, 1 |
312 store i64 %s, i64* %p | 312 store i64 %s, i64* %p |
313 ret void | 313 ret void |
314 } | 314 } |
315 | 315 |
316 ; CHECK: define i1 @slt_zero(i32 %a) { | 316 ; CHECK: define i1 @slt_zero(i32 %a) { |
317 ; CHECK: %1 = icmp slt i32 %a, 0 | 317 ; CHECK: %1 = icmp slt i32 %a, 0 |
318 ; CHECK: %2 = sext i1 %1 to i32 | 318 ; CHECK: %2 = sext i1 %1 to i32 |
319 ; CHECK: %3 = sext i1 %1 to i32 | 319 ; CHECK: %3 = sext i1 %1 to i32 |
320 ; CHECK: %4 = sext i1 %1 to i32 | 320 ; CHECK: %4 = sext i1 %1 to i32 |
321 ; CHECK: %5 = icmp slt i32 %4, 0 | 321 ; CHECK: %5 = icmp slt i32 %4, 0 |
322 ; CHECK: ret i1 %5 | 322 ; CHECK: ret i1 %5 |
323 ; CHECK: } | 323 ; CHECK: } |
324 define i1 @slt_zero(i32 %a) { | 324 define i1 @slt_zero(i32 %a) { |
325 %b = sext i32 %a to i128 | 325 %b = sext i32 %a to i128 |
326 %c = icmp slt i128 %b, 0 | 326 %c = icmp slt i128 %b, 0 |
327 ret i1 %c | 327 ret i1 %c |
328 } | 328 } |
329 | 329 |
OLD | NEW |