mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 05:01:59 +01:00
d7fe459f10
This patch addresses two issues: * Forces the availability of the base-pointer (x19) when the frame has both scalable vectors and variable-length arrays. Otherwise it will be expensive to access non-SVE locals. * In presence of SVE stack objects, it will allocate the emergency scavenging slot close to the SP, so that they can be accessed from the SP or BP if available. If accessed from the frame-pointer, it will otherwise need an extra register to access the scavenging slot because of mixed scalable/non-scalable addressing modes. Reviewers: efriedma, ostannard, cameron.mcinally, rengolin, david-arm Reviewed By: efriedma Differential Revision: https://reviews.llvm.org/D70174
24 lines
747 B
YAML
24 lines
747 B
YAML
# RUN: llc -mtriple=aarch64-none-linux-gnu -run-pass=prologepilog -mattr=+sve %s -o - | FileCheck %s
|
|
---
|
|
# 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 ADDVL_XXI $sp, -1
|
|
# CHECK-NEXT: $sp = frame-setup SUBXri $sp, 16, 0
|
|
# 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: sve-vec, size: 16, alignment: 16 }
|
|
body: |
|
|
bb.0:
|
|
liveins: $x0
|
|
STRXui $x0, %stack.1, 0
|
|
RET_ReallyLR
|
|
...
|