llvm-mirror/test/CodeGen/AArch64/cluster-frame-index.mir
Jay Foad 84a719b414 [AArch64] Enable clustering memory accesses to fixed stack objects
Summary:
r347747 added support for clustering mem ops with FI base operands
including support for fixed stack objects in shouldClusterFI, but
apparently this was never tested.

This patch fixes shouldClusterFI to work with scaled as well as
unscaled load/store instructions, and fixes the ordering of memory ops
in MemOpInfo::operator< to ensure that memory addresses always
increase, regardless of which direction the stack grows.

Subscribers: MatzeB, kristof.beyls, hiraditya, javed.absar, arphaman, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D71334
2019-12-18 09:46:11 +00:00

54 lines
1.3 KiB
YAML

#RUN: llc -mtriple=aarch64-- -mcpu=cyclone -run-pass machine-scheduler -o - %s | FileCheck %s
---
name: merge_stack
# CHECK-LABEL: name: merge_stack
tracksRegLiveness: true
stack:
- { id: 0, size: 16, alignment: 8 }
body: |
bb.0:
liveins: $w0, $w1
%0:gpr32 = COPY $w0
%1:gpr32 = COPY $w1
undef %3.sub_32:gpr64 = ORRWrs $wzr, %0, 0
STRXui %3, %stack.0, 0 :: (store 8)
undef %5.sub_32:gpr64 = ORRWrs $wzr, %1, 0
STRXui %5, %stack.0, 1 :: (store 8)
RET_ReallyLR
; CHECK: COPY
; CHECK-NEXT: COPY
; CHECK-NEXT: ORRWrs
; CHECK-NEXT: ORRWrs
; CHECK-NEXT: STRXui
; CHECK-NEXT: STRXui
; CHECK-NEXT: RET
...
---
name: merge_fixedstack
# CHECK-LABEL: name: merge_fixedstack
tracksRegLiveness: true
fixedStack:
- { id: 0, size: 16, alignment: 8, offset: -16 }
body: |
bb.0:
liveins: $w0, $w1
%0:gpr32 = COPY $w0
%1:gpr32 = COPY $w1
undef %3.sub_32:gpr64 = ORRWrs $wzr, %0, 0
STRXui %3, %fixed-stack.0, 0 :: (store 8)
undef %5.sub_32:gpr64 = ORRWrs $wzr, %1, 0
STRXui %5, %fixed-stack.0, 1 :: (store 8)
RET_ReallyLR
; CHECK: COPY
; CHECK-NEXT: COPY
; CHECK-NEXT: ORRWrs
; CHECK-NEXT: ORRWrs
; CHECK-NEXT: STRXui
; CHECK-NEXT: STRXui
; CHECK-NEXT: RET
...