| OLD | NEW |
| 1 ; RUN: opt < %s -nacl-promote-ints -S | FileCheck %s | 1 ; RUN: opt < %s -nacl-promote-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:32" | 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:32" |
| 4 | 4 |
| 5 declare void @consume_i16(i16 %a) | 5 declare void @consume_i16(i16 %a) |
| 6 | 6 |
| 7 ; CHECK-LABEL: @sext_to_illegal( | 7 ; CHECK-LABEL: @sext_to_illegal( |
| 8 ; CHECK-NEXT: %a40 = sext i32 %a to i64 | 8 ; CHECK-NEXT: %a40 = sext i32 %a to i64 |
| 9 ; (0xFFFFFFFFFF) | 9 ; (0xFFFFFFFFFF) |
| 10 define void @sext_to_illegal(i32 %a) { | 10 define void @sext_to_illegal(i32 %a) { |
| (...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 332 %s40 = select i1 true, i40 %a40, i40 -1 | 332 %s40 = select i1 true, i40 %a40, i40 -1 |
| 333 ret void | 333 ret void |
| 334 } | 334 } |
| 335 | 335 |
| 336 ; Allocas are left unchanged. | 336 ; Allocas are left unchanged. |
| 337 ; CHECK-LABEL: @alloca40( | 337 ; CHECK-LABEL: @alloca40( |
| 338 ; CHECK: %a = alloca i40, align 8 | 338 ; CHECK: %a = alloca i40, align 8 |
| 339 define void @alloca40() { | 339 define void @alloca40() { |
| 340 %a = alloca i40, align 8 | 340 %a = alloca i40, align 8 |
| 341 %b = bitcast i40* %a to i8* | 341 %b = bitcast i40* %a to i8* |
| 342 %c = load i8* %b | 342 %c = load i8, i8* %b |
| 343 ret void | 343 ret void |
| 344 } | 344 } |
| 345 | 345 |
| 346 ; CHECK-LABEL: @load24( | 346 ; CHECK-LABEL: @load24( |
| 347 ; CHECK: %bc.loty = bitcast i8* %a to i16* | 347 ; CHECK: %bc.loty = bitcast i8* %a to i16* |
| 348 ; CHECK-NEXT: %load.lo = load i16* %bc.loty, align 8 | 348 ; CHECK-NEXT: %load.lo = load i16, i16* %bc.loty, align 8 |
| 349 ; CHECK-NEXT: %load.lo.ext = zext i16 %load.lo to i32 | 349 ; CHECK-NEXT: %load.lo.ext = zext i16 %load.lo to i32 |
| 350 ; CHECK-NEXT: %bc.hi = getelementptr i16* %bc.loty, i32 1 | 350 ; CHECK-NEXT: %bc.hi = getelementptr i16, i16* %bc.loty, i32 1 |
| 351 ; CHECK-NEXT: %bc.hity = bitcast i16* %bc.hi to i8* | 351 ; CHECK-NEXT: %bc.hity = bitcast i16* %bc.hi to i8* |
| 352 ; CHECK-NEXT: %load.hi = load i8* %bc.hity, align 2 | 352 ; CHECK-NEXT: %load.hi = load i8, i8* %bc.hity, align 2 |
| 353 ; CHECK-NEXT: %load.hi.ext = zext i8 %load.hi to i32 | 353 ; CHECK-NEXT: %load.hi.ext = zext i8 %load.hi to i32 |
| 354 ; CHECK-NEXT: %load.hi.ext.sh = shl i32 %load.hi.ext, 16 | 354 ; CHECK-NEXT: %load.hi.ext.sh = shl i32 %load.hi.ext, 16 |
| 355 ; CHECK-NEXT: %load = or i32 %load.lo.ext, %load.hi.ext.sh | 355 ; CHECK-NEXT: %load = or i32 %load.lo.ext, %load.hi.ext.sh |
| 356 define void @load24(i8* %a) { | 356 define void @load24(i8* %a) { |
| 357 %bc = bitcast i8* %a to i24* | 357 %bc = bitcast i8* %a to i24* |
| 358 %load = load i24* %bc, align 8 | 358 %load = load i24, i24* %bc, align 8 |
| 359 ret void | 359 ret void |
| 360 } | 360 } |
| 361 | 361 |
| 362 ; CHECK-LABEL: @load24_overaligned( | 362 ; CHECK-LABEL: @load24_overaligned( |
| 363 ; CHECK: %load.lo = load i16* %bc.loty, align 32 | 363 ; CHECK: %load.lo = load i16, i16* %bc.loty, align 32 |
| 364 ; CHECK: %load.hi = load i8* %bc.hity, align 2 | 364 ; CHECK: %load.hi = load i8, i8* %bc.hity, align 2 |
| 365 define void @load24_overaligned(i8* %a) { | 365 define void @load24_overaligned(i8* %a) { |
| 366 %bc = bitcast i8* %a to i24* | 366 %bc = bitcast i8* %a to i24* |
| 367 %load = load i24* %bc, align 32 | 367 %load = load i24, i24* %bc, align 32 |
| 368 ret void | 368 ret void |
| 369 } | 369 } |
| 370 | 370 |
| 371 ; CHECK-LABEL: @load48( | 371 ; CHECK-LABEL: @load48( |
| 372 ; CHECK: %load.lo = load i32* %a, align 8 | 372 ; CHECK: %load.lo = load i32, i32* %a, align 8 |
| 373 ; CHECK-NEXT: %load.lo.ext = zext i32 %load.lo to i64 | 373 ; CHECK-NEXT: %load.lo.ext = zext i32 %load.lo to i64 |
| 374 ; CHECK-NEXT: %bc.hi = getelementptr i32* %a, i32 1 | 374 ; CHECK-NEXT: %bc.hi = getelementptr i32, i32* %a, i32 1 |
| 375 ; CHECK-NEXT: %bc.hity = bitcast i32* %bc.hi to i16* | 375 ; CHECK-NEXT: %bc.hity = bitcast i32* %bc.hi to i16* |
| 376 ; CHECK-NEXT: %load.hi = load i16* %bc.hity, align 4 | 376 ; CHECK-NEXT: %load.hi = load i16, i16* %bc.hity, align 4 |
| 377 ; CHECK-NEXT: %load.hi.ext = zext i16 %load.hi to i64 | 377 ; CHECK-NEXT: %load.hi.ext = zext i16 %load.hi to i64 |
| 378 ; CHECK-NEXT: %load.hi.ext.sh = shl i64 %load.hi.ext, 32 | 378 ; CHECK-NEXT: %load.hi.ext.sh = shl i64 %load.hi.ext, 32 |
| 379 ; CHECK-NEXT: %load = or i64 %load.lo.ext, %load.hi.ext.sh | 379 ; CHECK-NEXT: %load = or i64 %load.lo.ext, %load.hi.ext.sh |
| 380 define void @load48(i32* %a) { | 380 define void @load48(i32* %a) { |
| 381 %bc = bitcast i32* %a to i48* | 381 %bc = bitcast i32* %a to i48* |
| 382 %load = load i48* %bc, align 8 | 382 %load = load i48, i48* %bc, align 8 |
| 383 ret void | 383 ret void |
| 384 } | 384 } |
| 385 | 385 |
| 386 ; CHECK-LABEL: @load56( | 386 ; CHECK-LABEL: @load56( |
| 387 ; CHECK: %bc = bitcast i32* %a to i56* | 387 ; CHECK: %bc = bitcast i32* %a to i56* |
| 388 ; CHECK-NEXT: %load.lo = load i32* %a, align 8 | 388 ; CHECK-NEXT: %load.lo = load i32, i32* %a, align 8 |
| 389 ; CHECK-NEXT: %load.lo.ext = zext i32 %load.lo to i64 | 389 ; CHECK-NEXT: %load.lo.ext = zext i32 %load.lo to i64 |
| 390 ; CHECK-NEXT: %bc.hi = getelementptr i32* %a, i32 1 | 390 ; CHECK-NEXT: %bc.hi = getelementptr i32, i32* %a, i32 1 |
| 391 ; CHECK-NEXT: %bc.hity = bitcast i32* %bc.hi to i24* | 391 ; CHECK-NEXT: %bc.hity = bitcast i32* %bc.hi to i24* |
| 392 ; CHECK-NEXT: %bc.hity.loty = bitcast i32* %bc.hi to i16* | 392 ; CHECK-NEXT: %bc.hity.loty = bitcast i32* %bc.hi to i16* |
| 393 ; CHECK-NEXT: %load.hi.lo = load i16* %bc.hity.loty, align 4 | 393 ; CHECK-NEXT: %load.hi.lo = load i16, i16* %bc.hity.loty, align 4 |
| 394 ; CHECK-NEXT: %load.hi.lo.ext = zext i16 %load.hi.lo to i32 | 394 ; CHECK-NEXT: %load.hi.lo.ext = zext i16 %load.hi.lo to i32 |
| 395 ; CHECK-NEXT: %bc.hity.hi = getelementptr i16* %bc.hity.loty, i32 1 | 395 ; CHECK-NEXT: %bc.hity.hi = getelementptr i16, i16* %bc.hity.loty, i32 1 |
| 396 ; CHECK-NEXT: %bc.hity.hity = bitcast i16* %bc.hity.hi to i8* | 396 ; CHECK-NEXT: %bc.hity.hity = bitcast i16* %bc.hity.hi to i8* |
| 397 ; CHECK-NEXT: %load.hi.hi = load i8* %bc.hity.hity, align 2 | 397 ; CHECK-NEXT: %load.hi.hi = load i8, i8* %bc.hity.hity, align 2 |
| 398 ; CHECK-NEXT: %load.hi.hi.ext = zext i8 %load.hi.hi to i32 | 398 ; CHECK-NEXT: %load.hi.hi.ext = zext i8 %load.hi.hi to i32 |
| 399 ; CHECK-NEXT: %load.hi.hi.ext.sh = shl i32 %load.hi.hi.ext, 16 | 399 ; CHECK-NEXT: %load.hi.hi.ext.sh = shl i32 %load.hi.hi.ext, 16 |
| 400 ; CHECK-NEXT: %load.hi = or i32 %load.hi.lo.ext, %load.hi.hi.ext.sh | 400 ; CHECK-NEXT: %load.hi = or i32 %load.hi.lo.ext, %load.hi.hi.ext.sh |
| 401 ; CHECK-NEXT: %load.hi.ext = zext i32 %load.hi to i64 | 401 ; CHECK-NEXT: %load.hi.ext = zext i32 %load.hi to i64 |
| 402 ; CHECK-NEXT: %load.hi.ext.sh = shl i64 %load.hi.ext, 32 | 402 ; CHECK-NEXT: %load.hi.ext.sh = shl i64 %load.hi.ext, 32 |
| 403 ; CHECK-NEXT: %load = or i64 %load.lo.ext, %load.hi.ext.sh | 403 ; CHECK-NEXT: %load = or i64 %load.lo.ext, %load.hi.ext.sh |
| 404 define void @load56(i32* %a) { | 404 define void @load56(i32* %a) { |
| 405 %bc = bitcast i32* %a to i56* | 405 %bc = bitcast i32* %a to i56* |
| 406 %load = load i56* %bc | 406 %load = load i56, i56* %bc |
| 407 ret void | 407 ret void |
| 408 } | 408 } |
| 409 | 409 |
| 410 ; Ensure that types just above and just below large powers of 2 can be compiled. | 410 ; Ensure that types just above and just below large powers of 2 can be compiled. |
| 411 ; CHECK-LABEL: @load_large( | 411 ; CHECK-LABEL: @load_large( |
| 412 define void @load_large(i32* %a) { | 412 define void @load_large(i32* %a) { |
| 413 %bc1 = bitcast i32* %a to i2056* | 413 %bc1 = bitcast i32* %a to i2056* |
| 414 %load1 = load i2056* %bc1 | 414 %load1 = load i2056, i2056* %bc1 |
| 415 %bc2 = bitcast i32* %a to i4088* | 415 %bc2 = bitcast i32* %a to i4088* |
| 416 %load2 = load i4088* %bc2 | 416 %load2 = load i4088, i4088* %bc2 |
| 417 ret void | 417 ret void |
| 418 } | 418 } |
| 419 | 419 |
| 420 ; CHECK-LABEL: @store24( | 420 ; CHECK-LABEL: @store24( |
| 421 ; CHECK: %b24 = zext i8 %b to i32 | 421 ; CHECK: %b24 = zext i8 %b to i32 |
| 422 ; CHECK-NEXT: %bc.loty = bitcast i8* %a to i16* | 422 ; CHECK-NEXT: %bc.loty = bitcast i8* %a to i16* |
| 423 ; CHECK-NEXT: %b24.lo = trunc i32 %b24 to i16 | 423 ; CHECK-NEXT: %b24.lo = trunc i32 %b24 to i16 |
| 424 ; CHECK-NEXT: store i16 %b24.lo, i16* %bc.loty, align 4 | 424 ; CHECK-NEXT: store i16 %b24.lo, i16* %bc.loty, align 4 |
| 425 ; CHECK-NEXT: %b24.hi.sh = lshr i32 %b24, 16 | 425 ; CHECK-NEXT: %b24.hi.sh = lshr i32 %b24, 16 |
| 426 ; CHECK-NEXT: %bc.hi = getelementptr i16* %bc.loty, i32 1 | 426 ; CHECK-NEXT: %bc.hi = getelementptr i16, i16* %bc.loty, i32 1 |
| 427 ; CHECK-NEXT: %b24.hi = trunc i32 %b24.hi.sh to i8 | 427 ; CHECK-NEXT: %b24.hi = trunc i32 %b24.hi.sh to i8 |
| 428 ; CHECK-NEXT: %bc.hity = bitcast i16* %bc.hi to i8* | 428 ; CHECK-NEXT: %bc.hity = bitcast i16* %bc.hi to i8* |
| 429 ; CHECK-NEXT: store i8 %b24.hi, i8* %bc.hity, align 2 | 429 ; CHECK-NEXT: store i8 %b24.hi, i8* %bc.hity, align 2 |
| 430 define void @store24(i8* %a, i8 %b) { | 430 define void @store24(i8* %a, i8 %b) { |
| 431 %bc = bitcast i8* %a to i24* | 431 %bc = bitcast i8* %a to i24* |
| 432 %b24 = zext i8 %b to i24 | 432 %b24 = zext i8 %b to i24 |
| 433 store i24 %b24, i24* %bc | 433 store i24 %b24, i24* %bc |
| 434 ret void | 434 ret void |
| 435 } | 435 } |
| 436 | 436 |
| 437 ; CHECK-LABEL: @store24_overaligned( | 437 ; CHECK-LABEL: @store24_overaligned( |
| 438 ; CHECK: store i16 %b24.lo, i16* %bc.loty, align 32 | 438 ; CHECK: store i16 %b24.lo, i16* %bc.loty, align 32 |
| 439 ; CHECK: store i8 %b24.hi, i8* %bc.hity, align 2 | 439 ; CHECK: store i8 %b24.hi, i8* %bc.hity, align 2 |
| 440 define void @store24_overaligned(i8* %a, i8 %b) { | 440 define void @store24_overaligned(i8* %a, i8 %b) { |
| 441 %bc = bitcast i8* %a to i24* | 441 %bc = bitcast i8* %a to i24* |
| 442 %b24 = zext i8 %b to i24 | 442 %b24 = zext i8 %b to i24 |
| 443 store i24 %b24, i24* %bc, align 32 | 443 store i24 %b24, i24* %bc, align 32 |
| 444 ret void | 444 ret void |
| 445 } | 445 } |
| 446 | 446 |
| 447 ; CHECK-LABEL: @store56( | 447 ; CHECK-LABEL: @store56( |
| 448 ; CHECK: %b56 = zext i8 %b to i64 | 448 ; CHECK: %b56 = zext i8 %b to i64 |
| 449 ; CHECK-NEXT: %bc.loty = bitcast i8* %a to i32* | 449 ; CHECK-NEXT: %bc.loty = bitcast i8* %a to i32* |
| 450 ; CHECK-NEXT: %b56.lo = trunc i64 %b56 to i32 | 450 ; CHECK-NEXT: %b56.lo = trunc i64 %b56 to i32 |
| 451 ; CHECK-NEXT: store i32 %b56.lo, i32* %bc.loty, align 8 | 451 ; CHECK-NEXT: store i32 %b56.lo, i32* %bc.loty, align 8 |
| 452 ; CHECK-NEXT: %b56.hi.sh = lshr i64 %b56, 32 | 452 ; CHECK-NEXT: %b56.hi.sh = lshr i64 %b56, 32 |
| 453 ; CHECK-NEXT: %bc.hi = getelementptr i32* %bc.loty, i32 1 | 453 ; CHECK-NEXT: %bc.hi = getelementptr i32, i32* %bc.loty, i32 1 |
| 454 ; CHECK-NEXT: %bc.hity = bitcast i32* %bc.hi to i24* | 454 ; CHECK-NEXT: %bc.hity = bitcast i32* %bc.hi to i24* |
| 455 ; CHECK-NEXT: %bc.hity.loty = bitcast i32* %bc.hi to i16* | 455 ; CHECK-NEXT: %bc.hity.loty = bitcast i32* %bc.hi to i16* |
| 456 ; CHECK-NEXT: %b56.hi.sh.lo = trunc i64 %b56.hi.sh to i16 | 456 ; CHECK-NEXT: %b56.hi.sh.lo = trunc i64 %b56.hi.sh to i16 |
| 457 ; CHECK-NEXT: store i16 %b56.hi.sh.lo, i16* %bc.hity.loty, align 4 | 457 ; CHECK-NEXT: store i16 %b56.hi.sh.lo, i16* %bc.hity.loty, align 4 |
| 458 ; CHECK-NEXT: %b56.hi.sh.hi.sh = lshr i64 %b56.hi.sh, 16 | 458 ; CHECK-NEXT: %b56.hi.sh.hi.sh = lshr i64 %b56.hi.sh, 16 |
| 459 ; CHECK-NEXT: %bc.hity.hi = getelementptr i16* %bc.hity.loty, i32 1 | 459 ; CHECK-NEXT: %bc.hity.hi = getelementptr i16, i16* %bc.hity.loty, i32 1 |
| 460 ; CHECK-NEXT: %b56.hi.sh.hi = trunc i64 %b56.hi.sh.hi.sh to i8 | 460 ; CHECK-NEXT: %b56.hi.sh.hi = trunc i64 %b56.hi.sh.hi.sh to i8 |
| 461 ; CHECK-NEXT: %bc.hity.hity = bitcast i16* %bc.hity.hi to i8* | 461 ; CHECK-NEXT: %bc.hity.hity = bitcast i16* %bc.hity.hi to i8* |
| 462 ; CHECK-NEXT: store i8 %b56.hi.sh.hi, i8* %bc.hity.hity, align 2 | 462 ; CHECK-NEXT: store i8 %b56.hi.sh.hi, i8* %bc.hity.hity, align 2 |
| 463 define void @store56(i8* %a, i8 %b) { | 463 define void @store56(i8* %a, i8 %b) { |
| 464 %bc = bitcast i8* %a to i56* | 464 %bc = bitcast i8* %a to i56* |
| 465 %b56 = zext i8 %b to i56 | 465 %b56 = zext i8 %b to i56 |
| 466 store i56 %b56, i56* %bc | 466 store i56 %b56, i56* %bc |
| 467 ret void | 467 ret void |
| 468 } | 468 } |
| 469 | 469 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 514 ret void | 514 ret void |
| 515 if2: | 515 if2: |
| 516 ret void | 516 ret void |
| 517 end: | 517 end: |
| 518 ret void | 518 ret void |
| 519 } | 519 } |
| 520 | 520 |
| 521 | 521 |
| 522 ; The getelementptr here should be handled unchanged. | 522 ; The getelementptr here should be handled unchanged. |
| 523 ; CHECK-LABEL: @pointer_to_array( | 523 ; CHECK-LABEL: @pointer_to_array( |
| 524 ; CHECK: %element_ptr = getelementptr [2 x i40]* %ptr, i32 0, i32 0 | 524 ; CHECK: %element_ptr = getelementptr [2 x i40], [2 x i40]* %ptr, i32 0, i32 0 |
| 525 define void @pointer_to_array([2 x i40]* %ptr) { | 525 define void @pointer_to_array([2 x i40]* %ptr) { |
| 526 %element_ptr = getelementptr [2 x i40]* %ptr, i32 0, i32 0 | 526 %element_ptr = getelementptr [2 x i40], [2 x i40]* %ptr, i32 0, i32 0 |
| 527 load i40* %element_ptr | 527 load i40, i40* %element_ptr |
| 528 ret void | 528 ret void |
| 529 } | 529 } |
| 530 | 530 |
| 531 ; Store 0x1222277777777 and make sure it's split up into 3 stores of each part. | 531 ; Store 0x1222277777777 and make sure it's split up into 3 stores of each part. |
| 532 ; CHECK-LABEL: @constants( | 532 ; CHECK-LABEL: @constants( |
| 533 ; CHECK: store i32 2004318071, i32* %{{.*}}, align 4 | 533 ; CHECK: store i32 2004318071, i32* %{{.*}}, align 4 |
| 534 ; CHECK: store i16 8738, i16* %{{.*}} | 534 ; CHECK: store i16 8738, i16* %{{.*}} |
| 535 ; CHECK: store i8 1, i8* %{{.*}} | 535 ; CHECK: store i8 1, i8* %{{.*}} |
| 536 define void @constants(i56* %ptr) { | 536 define void @constants(i56* %ptr) { |
| 537 store i56 319006405261175, i56* %ptr, align 4 | 537 store i56 319006405261175, i56* %ptr, align 4 |
| 538 ret void | 538 ret void |
| 539 } | 539 } |
| 540 | 540 |
| 541 @from = external global [300 x i8], align 4 | 541 @from = external global [300 x i8], align 4 |
| 542 @to = external global [300 x i8], align 4 | 542 @to = external global [300 x i8], align 4 |
| 543 | 543 |
| 544 ; CHECK-LABEL: @load_bc_to_i80( | 544 ; CHECK-LABEL: @load_bc_to_i80( |
| 545 ; CHECK-NEXT: %expanded = bitcast [300 x i8]* @from to i64* | 545 ; CHECK-NEXT: %expanded = bitcast [300 x i8]* @from to i64* |
| 546 ; CHECK-NEXT: %loaded.short.lo = load i64* %expanded, align 4 | 546 ; CHECK-NEXT: %loaded.short.lo = load i64, i64* %expanded, align 4 |
| 547 ; CHECK-NEXT: %loaded.short.lo.ext = zext i64 %loaded.short.lo to i128 | 547 ; CHECK-NEXT: %loaded.short.lo.ext = zext i64 %loaded.short.lo to i128 |
| 548 ; CHECK-NEXT: %expanded5 = bitcast [300 x i8]* @from to i64* | 548 ; CHECK-NEXT: %expanded5 = bitcast [300 x i8]* @from to i64* |
| 549 ; CHECK-NEXT: %expanded4 = getelementptr i64* %expanded5, i32 1 | 549 ; CHECK-NEXT: %expanded4 = getelementptr i64, i64* %expanded5, i32 1 |
| 550 ; CHECK-NEXT: %expanded3 = bitcast i64* %expanded4 to i16* | 550 ; CHECK-NEXT: %expanded3 = bitcast i64* %expanded4 to i16* |
| 551 ; CHECK-NEXT: %loaded.short.hi = load i16* %expanded3, align 4 | 551 ; CHECK-NEXT: %loaded.short.hi = load i16, i16* %expanded3, align 4 |
| 552 ; CHECK-NEXT: %loaded.short.hi.ext = zext i16 %loaded.short.hi to i128 | 552 ; CHECK-NEXT: %loaded.short.hi.ext = zext i16 %loaded.short.hi to i128 |
| 553 ; CHECK-NEXT: %loaded.short.hi.ext.sh = shl i128 %loaded.short.hi.ext, 64 | 553 ; CHECK-NEXT: %loaded.short.hi.ext.sh = shl i128 %loaded.short.hi.ext, 64 |
| 554 ; CHECK-NEXT: %loaded.short = or i128 %loaded.short.lo.ext, %loaded.short.hi.ex
t.sh | 554 ; CHECK-NEXT: %loaded.short = or i128 %loaded.short.lo.ext, %loaded.short.hi.ex
t.sh |
| 555 ; CHECK-NEXT: %loaded.short.lo1 = trunc i128 %loaded.short to i64 | 555 ; CHECK-NEXT: %loaded.short.lo1 = trunc i128 %loaded.short to i64 |
| 556 ; CHECK-NEXT: %expanded6 = bitcast [300 x i8]* @to to i64* | 556 ; CHECK-NEXT: %expanded6 = bitcast [300 x i8]* @to to i64* |
| 557 ; CHECK-NEXT: store i64 %loaded.short.lo1, i64* %expanded6, align 4 | 557 ; CHECK-NEXT: store i64 %loaded.short.lo1, i64* %expanded6, align 4 |
| 558 ; CHECK-NEXT: %loaded.short.hi.sh = lshr i128 %loaded.short, 64 | 558 ; CHECK-NEXT: %loaded.short.hi.sh = lshr i128 %loaded.short, 64 |
| 559 ; CHECK-NEXT: %loaded.short.hi2 = trunc i128 %loaded.short.hi.sh to i16 | 559 ; CHECK-NEXT: %loaded.short.hi2 = trunc i128 %loaded.short.hi.sh to i16 |
| 560 ; CHECK-NEXT: %expanded9 = bitcast [300 x i8]* @to to i64* | 560 ; CHECK-NEXT: %expanded9 = bitcast [300 x i8]* @to to i64* |
| 561 ; CHECK-NEXT: %expanded8 = getelementptr i64* %expanded9, i32 1 | 561 ; CHECK-NEXT: %expanded8 = getelementptr i64, i64* %expanded9, i32 1 |
| 562 ; CHECK-NEXT: %expanded7 = bitcast i64* %expanded8 to i16* | 562 ; CHECK-NEXT: %expanded7 = bitcast i64* %expanded8 to i16* |
| 563 ; CHECK-NEXT: store i16 %loaded.short.hi2, i16* %expanded7, align 4 | 563 ; CHECK-NEXT: store i16 %loaded.short.hi2, i16* %expanded7, align 4 |
| 564 define void @load_bc_to_i80() { | 564 define void @load_bc_to_i80() { |
| 565 %loaded.short = load i80* bitcast ([300 x i8]* @from to i80*), align 4 | 565 %loaded.short = load i80, i80* bitcast ([300 x i8]* @from to i80*), align 4 |
| 566 store i80 %loaded.short, i80* bitcast ([300 x i8]* @to to i80*), align 4 | 566 store i80 %loaded.short, i80* bitcast ([300 x i8]* @to to i80*), align 4 |
| 567 ret void | 567 ret void |
| 568 } | 568 } |
| OLD | NEW |