| 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 |