|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
2 |
| -; RUN: llc -fast-isel=true -global-isel=false -fast-isel-abort=0 -mtriple=aarch64-linux-gnu -mattr=+sme < %s \ |
| 2 | +; RUN: llc -fast-isel=true -global-isel=false -fast-isel-abort=0 -mtriple=aarch64-linux-gnu -mattr=+sme2 < %s \ |
3 | 3 | ; RUN: | FileCheck %s --check-prefixes=CHECK-COMMON,CHECK-FISEL
|
4 |
| -; RUN: llc -fast-isel=false -global-isel=true -global-isel-abort=0 -mtriple=aarch64-linux-gnu -mattr=+sme < %s \ |
| 4 | +; RUN: llc -fast-isel=false -global-isel=true -global-isel-abort=0 -mtriple=aarch64-linux-gnu -mattr=+sme2 < %s \ |
5 | 5 | ; RUN: | FileCheck %s --check-prefixes=CHECK-COMMON,CHECK-GISEL
|
6 | 6 |
|
7 | 7 |
|
@@ -447,3 +447,64 @@ define float @frem_call_sm_compat(float %a, float %b) "aarch64_pstate_sm_compati
|
447 | 447 | %res = frem float %a, %b
|
448 | 448 | ret float %res
|
449 | 449 | }
|
| 450 | + |
| 451 | +; |
| 452 | +; Check ZT0 State |
| 453 | +; |
| 454 | + |
| 455 | +declare double @zt0_shared_callee(double) "aarch64_inout_zt0" |
| 456 | + |
| 457 | +define double @zt0_new_caller_to_zt0_shared_callee(double %x) nounwind noinline optnone "aarch64_new_zt0" { |
| 458 | +; CHECK-COMMON-LABEL: zt0_new_caller_to_zt0_shared_callee: |
| 459 | +; CHECK-COMMON: // %bb.0: // %prelude |
| 460 | +; CHECK-COMMON-NEXT: sub sp, sp, #80 |
| 461 | +; CHECK-COMMON-NEXT: str x30, [sp, #64] // 8-byte Folded Spill |
| 462 | +; CHECK-COMMON-NEXT: mrs x8, TPIDR2_EL0 |
| 463 | +; CHECK-COMMON-NEXT: cbz x8, .LBB13_2 |
| 464 | +; CHECK-COMMON-NEXT: b .LBB13_1 |
| 465 | +; CHECK-COMMON-NEXT: .LBB13_1: // %save.za |
| 466 | +; CHECK-COMMON-NEXT: mov x8, sp |
| 467 | +; CHECK-COMMON-NEXT: str zt0, [x8] |
| 468 | +; CHECK-COMMON-NEXT: bl __arm_tpidr2_save |
| 469 | +; CHECK-COMMON-NEXT: ldr zt0, [x8] |
| 470 | +; CHECK-COMMON-NEXT: msr TPIDR2_EL0, xzr |
| 471 | +; CHECK-COMMON-NEXT: b .LBB13_2 |
| 472 | +; CHECK-COMMON-NEXT: .LBB13_2: // %entry |
| 473 | +; CHECK-COMMON-NEXT: smstart za |
| 474 | +; CHECK-COMMON-NEXT: zero { zt0 } |
| 475 | +; CHECK-COMMON-NEXT: bl zt0_shared_callee |
| 476 | +; CHECK-COMMON-NEXT: mov x8, #4631107791820423168 // =0x4045000000000000 |
| 477 | +; CHECK-COMMON-NEXT: fmov d1, x8 |
| 478 | +; CHECK-COMMON-NEXT: fadd d0, d0, d1 |
| 479 | +; CHECK-COMMON-NEXT: smstop za |
| 480 | +; CHECK-COMMON-NEXT: ldr x30, [sp, #64] // 8-byte Folded Reload |
| 481 | +; CHECK-COMMON-NEXT: add sp, sp, #80 |
| 482 | +; CHECK-COMMON-NEXT: ret |
| 483 | +entry: |
| 484 | + %call = call double @zt0_shared_callee(double %x) |
| 485 | + %add = fadd double %call, 4.200000e+01 |
| 486 | + ret double %add; |
| 487 | +} |
| 488 | + |
| 489 | +define double @zt0_shared_caller_to_normal_callee(double %x) nounwind noinline optnone "aarch64_inout_zt0" { |
| 490 | +; CHECK-COMMON-LABEL: zt0_shared_caller_to_normal_callee: |
| 491 | +; CHECK-COMMON: // %bb.0: // %entry |
| 492 | +; CHECK-COMMON-NEXT: sub sp, sp, #80 |
| 493 | +; CHECK-COMMON-NEXT: stp x30, x19, [sp, #64] // 16-byte Folded Spill |
| 494 | +; CHECK-COMMON-NEXT: mov x19, sp |
| 495 | +; CHECK-COMMON-NEXT: str zt0, [x19] |
| 496 | +; CHECK-COMMON-NEXT: smstop za |
| 497 | +; CHECK-COMMON-NEXT: bl normal_callee |
| 498 | +; CHECK-COMMON-NEXT: smstart za |
| 499 | +; CHECK-COMMON-NEXT: ldr zt0, [x19] |
| 500 | +; CHECK-COMMON-NEXT: mov x8, #4631107791820423168 // =0x4045000000000000 |
| 501 | +; CHECK-COMMON-NEXT: fmov d1, x8 |
| 502 | +; CHECK-COMMON-NEXT: fadd d0, d0, d1 |
| 503 | +; CHECK-COMMON-NEXT: ldp x30, x19, [sp, #64] // 16-byte Folded Reload |
| 504 | +; CHECK-COMMON-NEXT: add sp, sp, #80 |
| 505 | +; CHECK-COMMON-NEXT: ret |
| 506 | +entry: |
| 507 | + %call = call double @normal_callee(double %x) |
| 508 | + %add = fadd double %call, 4.200000e+01 |
| 509 | + ret double %add; |
| 510 | +} |
0 commit comments