| # RUN: llc -mtriple=aarch64-none-linux-gnu -run-pass=prologepilog %s -o - | FileCheck %s |
| --- | |
| define void @hasBasepointer() #0 { ret void } |
| define void @hasBasepointer_sme_streaming() #1 { ret void } |
| |
| attributes #0 = { "target-features"="+sve" } |
| attributes #1 = { "target-features"="+sme" "aarch64_pstate_sm_enabled" } |
| ... |
| --- |
| # This test verifies that the basepointer is available in presence of SVE stack objects. |
| name: hasBasepointer |
| # CHECK-LABEL: name: hasBasepointer |
| # CHECK: bb.0: |
| # CHECK: $sp = frame-setup SUBXri $sp, 16, 0 |
| # CHECK-NEXT: $sp = frame-setup ADDVL_XXI $sp, -1 |
| # CHECK-NEXT: $x19 = ADDXri $sp, 0, 0 |
| # CHECK: STRXui $x0, $x19, 0 |
| tracksRegLiveness: true |
| frameInfo: |
| isFrameAddressTaken: true |
| stack: |
| - { id: 0, type: variable-sized, alignment: 1 } |
| - { id: 1, name: '', size: 16, alignment: 8 } |
| - { id: 2, stack-id: scalable-vector, size: 16, alignment: 16 } |
| body: | |
| bb.0: |
| liveins: $x0 |
| STRXui $x0, %stack.1, 0 |
| RET_ReallyLR |
| ... |
| --- |
| # Likewise with only SME with a streaming function. |
| name: hasBasepointer_sme_streaming |
| # CHECK-LABEL: name: hasBasepointer_sme_streaming |
| # CHECK: bb.0: |
| # CHECK: $sp = frame-setup SUBXri $sp, 16, 0 |
| # CHECK-NEXT: $sp = frame-setup ADDVL_XXI $sp, -1 |
| # CHECK-NEXT: $x19 = ADDXri $sp, 0, 0 |
| # CHECK: STRXui $x0, $x19, 0 |
| tracksRegLiveness: true |
| frameInfo: |
| isFrameAddressTaken: true |
| stack: |
| - { id: 0, type: variable-sized, alignment: 1 } |
| - { id: 1, name: '', size: 16, alignment: 8 } |
| - { id: 2, stack-id: scalable-vector, size: 16, alignment: 16 } |
| body: | |
| bb.0: |
| liveins: $x0 |
| STRXui $x0, %stack.1, 0 |
| RET_ReallyLR |
| ... |