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