llvm-project/llvm/test/CodeGen/AArch64/ldrpre-ldr-merge.mir

588 lines
21 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# RUN: llc -o - %s -mtriple=aarch64-none-eabi -mcpu=cortex-a55 -lsr-preferred-addressing-mode=preindexed -stop-after=aarch64-ldst-opt | FileCheck %s
---
name: 1-ldrwpre-ldrwui-merge
tracksRegLiveness: true
liveins:
- { reg: '$x1' }
- { reg: '$w0' }
- { reg: '$w1' }
machineFunctionInfo:
hasRedZone: false
body: |
bb.0:
liveins: $w0, $w1, $x1
; CHECK-LABEL: name: 1-ldrwpre-ldrwui-merge
; CHECK: liveins: $w0, $w1, $x1
; CHECK: early-clobber $x1, renamable $w0, renamable $w1 = LDPWpre renamable $x1, 5 :: (load (s32))
; CHECK: STPWi renamable $w0, renamable $w1, renamable $x1, 0 :: (store (s32))
; CHECK: RET undef $lr
early-clobber renamable $x1, renamable $w0 = LDRWpre killed renamable $x1, 20 :: (load (s32))
renamable $w1 = LDRWui renamable $x1, 1 :: (load (s32))
STRWui killed renamable $w0, renamable $x1, 0 :: (store (s32))
STRWui killed renamable $w1, renamable $x1, 1 :: (store (s32))
RET undef $lr
...
---
name: 2-ldrxpre-ldrxui-merge
tracksRegLiveness: true
liveins:
- { reg: '$x1' }
- { reg: '$x2' }
- { reg: '$x3' }
machineFunctionInfo:
hasRedZone: false
body: |
bb.0:
liveins: $x2, $x3, $x1
; CHECK-LABEL: name: 2-ldrxpre-ldrxui-merge
; CHECK: liveins: $x1, $x2, $x3
; CHECK: early-clobber $x1, renamable $x2, renamable $x3 = LDPXpre renamable $x1, 3 :: (load (s64))
; CHECK: STPXi renamable $x2, renamable $x3, renamable $x1, 0 :: (store (s64))
; CHECK: RET undef $lr
early-clobber renamable $x1, renamable $x2 = LDRXpre killed renamable $x1, 24 :: (load (s64))
renamable $x3 = LDRXui renamable $x1, 1 :: (load (s64))
STRXui killed renamable $x2, renamable $x1, 0 :: (store (s64))
STRXui killed renamable $x3, renamable $x1, 1 :: (store (s64))
RET undef $lr
...
---
name: 3-ldrspre-ldrsui-merge
tracksRegLiveness: true
liveins:
- { reg: '$x1' }
- { reg: '$s0' }
- { reg: '$s1' }
machineFunctionInfo:
hasRedZone: false
body: |
bb.0:
liveins: $s0, $s1, $x1
; CHECK-LABEL: name: 3-ldrspre-ldrsui-merge
; CHECK: liveins: $s0, $s1, $x1
; CHECK: early-clobber $x1, renamable $s0, renamable $s1 = LDPSpre renamable $x1, 3 :: (load (s32))
; CHECK: STRSui renamable $s0, renamable $x1, 0 :: (store (s32))
; CHECK: STRSui renamable $s1, renamable $x1, 1 :: ("aarch64-suppress-pair" store (s32))
; CHECK: RET undef $lr
early-clobber renamable $x1, renamable $s0 = LDRSpre killed renamable $x1, 12 :: (load (s32))
renamable $s1 = LDRSui renamable $x1, 1 :: (load (s32))
STRSui killed renamable $s0, renamable $x1, 0 :: (store (s32))
STRSui killed renamable $s1, renamable $x1, 1 :: (store (s32))
RET undef $lr
...
---
name: 4-ldrqdre-ldrdui-merge
tracksRegLiveness: true
liveins:
- { reg: '$x1' }
- { reg: '$d0' }
- { reg: '$d1' }
machineFunctionInfo:
hasRedZone: false
body: |
bb.0:
liveins: $d0, $d1, $x1
; CHECK-LABEL: name: 4-ldrqdre-ldrdui-merge
; CHECK: liveins: $d0, $d1, $x1
; CHECK: early-clobber $x1, renamable $d0, renamable $d1 = LDPDpre renamable $x1, 16 :: (load (s64))
; CHECK: STRDui renamable $d0, renamable $x1, 0 :: (store (s64))
; CHECK: STRDui renamable $d1, renamable $x1, 1 :: ("aarch64-suppress-pair" store (s64))
; CHECK: RET undef $lr
early-clobber renamable $x1, renamable $d0 = LDRDpre killed renamable $x1, 128 :: (load (s64))
renamable $d1 = LDRDui renamable $x1, 1 :: (load (s64))
STRDui killed renamable $d0, renamable $x1, 0 :: (store (s64))
STRDui killed renamable $d1, renamable $x1, 1 :: (store (s64))
RET undef $lr
...
---
name: 5-ldrqpre-ldrqui-merge
alignment: 4
tracksRegLiveness: true
liveins:
- { reg: '$x1' }
- { reg: '$q0' }
- { reg: '$q1' }
frameInfo:
maxAlignment: 1
maxCallFrameSize: 0
machineFunctionInfo:
hasRedZone: false
body: |
bb.0:
liveins: $q0, $q1, $x1
; CHECK-LABEL: name: 5-ldrqpre-ldrqui-merge
; CHECK: liveins: $q0, $q1, $x1
; CHECK: early-clobber $x1, renamable $q0, renamable $q1 = LDPQpre renamable $x1, 3 :: (load (s128))
; CHECK: STPQi renamable $q0, renamable $q1, renamable $x1, 0 :: (store (s128))
; CHECK: RET undef $lr
early-clobber renamable $x1, renamable $q0 = LDRQpre killed renamable $x1, 48 :: (load (s128))
renamable $q1 = LDRQui renamable $x1, 1 :: (load (s128))
STRQui killed renamable $q0, renamable $x1, 0 :: (store (s128))
STRQui killed renamable $q1, renamable $x1, 1 :: (store (s128))
RET undef $lr
...
---
name: 6-ldrqui-ldrqpre-no-merge
alignment: 4
tracksRegLiveness: true
liveins:
- { reg: '$x1' }
- { reg: '$q0' }
- { reg: '$q1' }
frameInfo:
maxAlignment: 1
maxCallFrameSize: 0
machineFunctionInfo:
hasRedZone: false
body: |
bb.0:
liveins: $q0, $q1, $x1
; CHECK-LABEL: name: 6-ldrqui-ldrqpre-no-merge
; CHECK: liveins: $q0, $q1, $x1
; CHECK: renamable $q1 = LDRQui renamable $x1, 1 :: (load (s128))
; CHECK: early-clobber renamable $x1, renamable $q0 = LDRQpre renamable $x1, 48, implicit $w1 :: (load (s128))
; CHECK: STPQi renamable $q0, renamable $q1, renamable $x1, 0 :: (store (s128))
; CHECK: RET undef $lr
renamable $q1 = LDRQui renamable $x1, 1 :: (load (s128))
early-clobber renamable $x1, renamable $q0 = LDRQpre killed renamable $x1, 48 :: (load (s128))
STRQui killed renamable $q0, renamable $x1, 0 :: (store (s128))
STRQui killed renamable $q1, renamable $x1, 1 :: (store (s128))
RET undef $lr
...
---
name: 7-ldrqpre-ldrqui-max-offset-merge
alignment: 4
tracksRegLiveness: true
liveins:
- { reg: '$x1' }
- { reg: '$q0' }
- { reg: '$q1' }
frameInfo:
maxAlignment: 1
maxCallFrameSize: 0
machineFunctionInfo:
hasRedZone: false
body: |
bb.0:
liveins: $q0, $q1, $x1
; CHECK-LABEL: name: 7-ldrqpre-ldrqui-max-offset-merge
; CHECK: liveins: $q0, $q1, $x1
; CHECK: early-clobber $x1, renamable $q0, renamable $q1 = LDPQpre renamable $x1, 15 :: (load (s128))
; CHECK: STPQi renamable $q0, renamable $q1, renamable $x1, 0 :: (store (s128))
; CHECK: RET undef $lr
early-clobber renamable $x1, renamable $q0 = LDRQpre killed renamable $x1, 240 :: (load (s128))
renamable $q1 = LDRQui renamable $x1, 1 :: (load (s128))
STRQui killed renamable $q0, renamable $x1, 0 :: (store (s128))
STRQui killed renamable $q1, renamable $x1, 1 :: (store (s128))
RET undef $lr
...
---
name: 8-ldrqpre-ldrqui-min-offset-merge
alignment: 4
tracksRegLiveness: true
liveins:
- { reg: '$x1' }
- { reg: '$q0' }
- { reg: '$q1' }
frameInfo:
maxAlignment: 1
maxCallFrameSize: 0
machineFunctionInfo:
hasRedZone: false
body: |
bb.0:
liveins: $q0, $q1, $x1
; CHECK-LABEL: name: 8-ldrqpre-ldrqui-min-offset-merge
; CHECK: liveins: $q0, $q1, $x1
; CHECK: early-clobber $x1, renamable $q0, renamable $q1 = LDPQpre renamable $x1, -16 :: (load (s128))
; CHECK: STPQi renamable $q0, renamable $q1, renamable $x1, 0 :: (store (s128))
; CHECK: RET undef $lr
early-clobber renamable $x1, renamable $q0 = LDRQpre killed renamable $x1, -256 :: (load (s128))
renamable $q1 = LDRQui renamable $x1, 1 :: (load (s128))
STRQui killed renamable $q0, renamable $x1, 0 :: (store (s128))
STRQui killed renamable $q1, renamable $x1, 1 :: (store (s128))
RET undef $lr
...
---
name: 9-ldrspre-ldrsui-mod-base-reg-no-merge
alignment: 4
tracksRegLiveness: true
liveins:
- { reg: '$x0' }
- { reg: '$x1' }
- { reg: '$s0' }
- { reg: '$s1' }
frameInfo:
maxAlignment: 1
maxCallFrameSize: 0
machineFunctionInfo:
hasRedZone: false
body: |
bb.0:
liveins: $s0, $s1, $x0, $x1
; CHECK-LABEL: name: 9-ldrspre-ldrsui-mod-base-reg-no-merge
; CHECK: liveins: $s0, $s1, $x0, $x1
; CHECK: dead early-clobber renamable $x1, renamable $s0 = LDRSpre renamable $x1, 12, implicit $w1 :: (load (s32))
; CHECK: renamable $x1 = LDRXui renamable $x0, 1 :: (load (s64))
; CHECK: renamable $s1 = LDRSui renamable $x1, 1 :: (load (s32))
; CHECK: STPSi renamable $s0, renamable $s1, renamable $x1, 0 :: (store (s32))
; CHECK: RET undef $lr
early-clobber renamable $x1, renamable $s0 = LDRSpre killed renamable $x1, 12 :: (load (s32))
renamable $x1 = LDRXui renamable $x0, 1 :: (load (s64))
renamable $s1 = LDRSui renamable $x1, 1 :: (load (s32))
STRSui killed renamable $s0, renamable $x1, 0 :: (store (s32))
STRSui killed renamable $s1, renamable $x1, 1 :: (store (s32))
RET undef $lr
...
---
name: 10-ldrspre-ldrsui-used-base-reg-no-merge
alignment: 4
tracksRegLiveness: true
liveins:
- { reg: '$x0' }
- { reg: '$x1' }
- { reg: '$s0' }
- { reg: '$s1' }
frameInfo:
maxAlignment: 1
maxCallFrameSize: 0
machineFunctionInfo:
hasRedZone: false
body: |
bb.0:
liveins: $s0, $s1, $x0, $x1
; CHECK-LABEL: name: 10-ldrspre-ldrsui-used-base-reg-no-merge
; CHECK: liveins: $s0, $s1, $x0, $x1
; CHECK: early-clobber renamable $x1, renamable $s0 = LDRSpre renamable $x1, 12, implicit $w1 :: (load (s32))
; CHECK: renamable $x0 = LDRXui renamable $x1, 1 :: (load (s64))
; CHECK: STRXui renamable $x0, renamable $x0, 1 :: (store (s64))
; CHECK: renamable $s1 = LDRSui renamable $x1, 1 :: (load (s32))
; CHECK: STRSui renamable $s0, renamable $x1, 0 :: (store (s32))
; CHECK: STRSui renamable $s1, renamable $x1, 1 :: ("aarch64-suppress-pair" store (s32))
; CHECK: RET undef $lr
early-clobber renamable $x1, renamable $s0 = LDRSpre killed renamable $x1, 12 :: (load (s32))
renamable $x0 = LDRXui renamable $x1, 1 :: (load (s64))
STRXui killed renamable $x0, renamable $x0, 1 :: (store (s64))
renamable $s1 = LDRSui renamable $x1, 1 :: (load (s32))
STRSui killed renamable $s0, renamable $x1, 0 :: (store (s32))
STRSui killed renamable $s1, renamable $x1, 1 :: (store (s32))
RET undef $lr
...
---
name: 11-ldrqpre-ldrqpre-no-merge
alignment: 4
tracksRegLiveness: true
liveins:
- { reg: '$x1' }
- { reg: '$q0' }
- { reg: '$q1' }
frameInfo:
maxAlignment: 1
maxCallFrameSize: 0
machineFunctionInfo:
hasRedZone: false
body: |
bb.0:
liveins: $q0, $q1, $x1
; CHECK-LABEL: name: 11-ldrqpre-ldrqpre-no-merge
; CHECK: liveins: $q0, $q1, $x1
; CHECK: early-clobber renamable $x1, dead renamable $q0 = LDRQpre renamable $x1, 48, implicit $w1 :: (load (s128))
; CHECK: early-clobber renamable $x1, dead renamable $q1 = LDRQpre renamable $x1, 1, implicit $w1 :: (load (s128))
; CHECK: early-clobber renamable $x1, dead renamable $q0 = LDRQpre renamable $x1, 16, implicit $w1 :: (load (s128))
; CHECK: early-clobber renamable $x1, dead renamable $q1 = LDRQpre renamable $x1, 12, implicit $w1 :: (load (s128))
; CHECK: early-clobber renamable $x1, renamable $q0 = LDRQpre renamable $x1, 16, implicit $w1 :: (load (s128))
; CHECK: early-clobber renamable $x1, renamable $q1 = LDRQpre renamable $x1, 16, implicit $w1 :: (load (s128))
; CHECK: STPQi renamable $q0, renamable $q1, renamable $x1, 0 :: (store (s128))
; CHECK: RET undef $lr
early-clobber renamable $x1, renamable $q0 = LDRQpre killed renamable $x1, 48 :: (load (s128))
early-clobber renamable $x1, renamable $q1 = LDRQpre killed renamable $x1, 1 :: (load (s128))
early-clobber renamable $x1, renamable $q0 = LDRQpre killed renamable $x1, 16 :: (load (s128))
early-clobber renamable $x1, renamable $q1 = LDRQpre killed renamable $x1, 12 :: (load (s128))
early-clobber renamable $x1, renamable $q0 = LDRQpre killed renamable $x1, 16 :: (load (s128))
early-clobber renamable $x1, renamable $q1 = LDRQpre killed renamable $x1, 16 :: (load (s128))
STRQui killed renamable $q0, renamable $x1, 0 :: (store (s128))
STRQui killed renamable $q1, renamable $x1, 1 :: (store (s128))
RET undef $lr
...
---
name: 12-ldrspre-ldrsui-no-merge
tracksRegLiveness: true
liveins:
- { reg: '$x1' }
- { reg: '$s0' }
- { reg: '$s1' }
machineFunctionInfo:
hasRedZone: false
body: |
bb.0:
liveins: $s0, $s1, $x1
; The offset of the second load is not equal to the
; size of the destination register, and hence cant be merged.
; CHECK-LABEL: name: 12-ldrspre-ldrsui-no-merge
; CHECK: liveins: $s0, $s1, $x1
; CHECK: early-clobber renamable $x1, renamable $s0 = LDRSpre renamable $x1, 12, implicit $w1 :: (load (s32))
; CHECK: renamable $s1 = LDRSui renamable $x1, 2 :: (load (s32))
; CHECK: STRSui renamable $s0, renamable $x1, 0 :: (store (s32))
; CHECK: STRSui renamable $s1, renamable $x1, 1 :: ("aarch64-suppress-pair" store (s32))
; CHECK: RET undef $lr
early-clobber renamable $x1, renamable $s0 = LDRSpre killed renamable $x1, 12 :: (load (s32))
renamable $s1 = LDRSui renamable $x1, 2 :: (load (s32))
STRSui killed renamable $s0, renamable $x1, 0 :: (store (s32))
STRSui killed renamable $s1, renamable $x1, 1 :: (store (s32))
RET undef $lr
...
---
name: 13-ldrqpre-ldrdui-no-merge
alignment: 4
tracksRegLiveness: true
liveins:
- { reg: '$x1' }
- { reg: '$q0' }
- { reg: '$d1' }
frameInfo:
maxAlignment: 1
maxCallFrameSize: 0
machineFunctionInfo:
hasRedZone: false
body: |
bb.0:
liveins: $q0, $d1, $x1
; CHECK-LABEL: name: 13-ldrqpre-ldrdui-no-merge
; CHECK: liveins: $d1, $q0, $x1
; CHECK: early-clobber renamable $x1, renamable $q0 = LDRQpre renamable $x1, 32, implicit $w1 :: (load (s128))
; CHECK: renamable $d1 = LDRDui renamable $x1, 1 :: (load (s64))
; CHECK: STRQui renamable $q0, renamable $x1, 0 :: (store (s128))
; CHECK: STRDui renamable $d1, renamable $x1, 1 :: (store (s64))
; CHECK: RET undef $lr
early-clobber renamable $x1, renamable $q0 = LDRQpre killed renamable $x1, 32 :: (load (s128))
renamable $d1 = LDRDui renamable $x1, 1 :: (load (s64))
STRQui killed renamable $q0, renamable $x1, 0 :: (store (s128))
STRDui killed renamable $d1, renamable $x1, 1 :: (store (s64))
RET undef $lr
...
---
name: 14-ldrqpre-strqui-no-merge
alignment: 4
tracksRegLiveness: true
liveins:
- { reg: '$x1' }
- { reg: '$q0' }
- { reg: '$q1' }
frameInfo:
maxAlignment: 1
maxCallFrameSize: 0
machineFunctionInfo:
hasRedZone: false
body: |
bb.0:
liveins: $q0, $q1, $x1
; CHECK-LABEL: name: 14-ldrqpre-strqui-no-merge
; CHECK: liveins: $q0, $q1, $x1
; CHECK: early-clobber renamable $x1, renamable $q0 = LDRQpre renamable $x1, 32, implicit $w1 :: (load (s128))
; CHECK: STRQui renamable $q0, renamable $x1, 0 :: (store (s128))
; CHECK: RET undef $lr
early-clobber renamable $x1, renamable $q0 = LDRQpre killed renamable $x1, 32 :: (load (s128))
STRQui killed renamable $q0, renamable $x1, 0 :: (store (s128))
RET undef $lr
...
---
name: 15-ldrqpre-ldrqui-same-dst-reg-no-merge
alignment: 4
tracksRegLiveness: true
liveins:
- { reg: '$x1' }
- { reg: '$q0' }
- { reg: '$q1' }
frameInfo:
maxAlignment: 1
maxCallFrameSize: 0
machineFunctionInfo:
hasRedZone: false
body: |
bb.0:
liveins: $q0, $x1
; CHECK-LABEL: name: 15-ldrqpre-ldrqui-same-dst-reg-no-merge
; CHECK: liveins: $q0, $q1, $x1
; CHECK: early-clobber renamable $x1, dead renamable $q0 = LDRQpre renamable $x1, 32, implicit $w1 :: (load (s128))
; CHECK: renamable $q0 = LDRQui renamable $x1, 1 :: (load (s128))
; CHECK: STRQui renamable $q0, renamable $x1, 0 :: (store (s128))
; CHECK: RET undef $lr
early-clobber renamable $x1, renamable $q0 = LDRQpre killed renamable $x1, 32 :: (load (s128))
renamable $q0 = LDRQui renamable $x1, 1 :: (load (s128))
STRQui killed renamable $q0, renamable $x1, 0 :: (store (s128))
RET undef $lr
...
---
name: 16-ldrqpre-ldrqui-diff-base-reg-no-merge
alignment: 4
tracksRegLiveness: true
liveins:
- { reg: '$x1' }
- { reg: '$x2' }
- { reg: '$q0' }
- { reg: '$q1' }
frameInfo:
maxAlignment: 1
maxCallFrameSize: 0
machineFunctionInfo:
hasRedZone: false
body: |
bb.0:
liveins: $q0, $q1, $x1, $x2
; CHECK-LABEL: name: 16-ldrqpre-ldrqui-diff-base-reg-no-merge
; CHECK: liveins: $q0, $q1, $x1, $x2
; CHECK: early-clobber renamable $x1, renamable $q0 = LDRQpre renamable $x1, 32, implicit $w1 :: (load (s128))
; CHECK: renamable $q1 = LDRQui renamable $x2, 1 :: (load (s128))
; CHECK: STPQi renamable $q0, renamable $q1, renamable $x1, 0 :: (store (s128))
; CHECK: RET undef $lr
early-clobber renamable $x1, renamable $q0 = LDRQpre killed renamable $x1, 32 :: (load (s128))
renamable $q1 = LDRQui renamable $x2, 1 :: (load (s128))
STRQui killed renamable $q0, renamable $x1, 0 :: (store (s128))
STRQui killed renamable $q1, renamable $x1, 1 :: (store (s128))
RET undef $lr
...
---
name: 17-ldrqpre-ldurqi-merge
alignment: 4
tracksRegLiveness: true
liveins:
- { reg: '$x1' }
- { reg: '$q0' }
- { reg: '$q1' }
frameInfo:
maxAlignment: 1
maxCallFrameSize: 0
machineFunctionInfo:
hasRedZone: false
body: |
bb.0:
liveins: $q0, $q1, $x1
; CHECK-LABEL: name: 17-ldrqpre-ldurqi-merge
; CHECK: liveins: $q0, $q1, $x1
; CHECK: early-clobber $x1, renamable $q0, renamable $q1 = LDPQpre renamable $x1, 2 :: (load (s128))
; CHECK: STPQi renamable $q0, renamable $q1, renamable $x1, 0 :: (store (s128))
; CHECK: RET undef $lr
early-clobber renamable $x1, renamable $q0 = LDRQpre killed renamable $x1, 32 :: (load (s128))
renamable $q1 = LDURQi renamable $x1, 16 :: (load (s128))
STRQui killed renamable $q0, renamable $x1, 0 :: (store (s128))
STRQui killed renamable $q1, renamable $x1, 1 :: (store (s128))
RET undef $lr
...
---
name: 18-ldrqpre-ldurqi-no-merge
alignment: 4
tracksRegLiveness: true
liveins:
- { reg: '$x1' }
- { reg: '$q0' }
- { reg: '$q1' }
frameInfo:
maxAlignment: 1
maxCallFrameSize: 0
machineFunctionInfo:
hasRedZone: false
body: |
bb.0:
liveins: $q0, $q1, $x1
; CHECK-LABEL: name: 18-ldrqpre-ldurqi-no-merge
; CHECK: liveins: $q0, $q1, $x1
; CHECK: early-clobber renamable $x1, renamable $q0 = LDRQpre renamable $x1, 32, implicit $w1 :: (load (s128))
; CHECK: renamable $q1 = LDURQi renamable $x1, 1 :: (load (s128))
; CHECK: STPQi renamable $q0, renamable $q1, renamable $x1, 0 :: (store (s128))
; CHECK: RET undef $lr
early-clobber renamable $x1, renamable $q0 = LDRQpre killed renamable $x1, 32 :: (load (s128))
renamable $q1 = LDURQi renamable $x1, 1 :: (load (s128))
STRQui killed renamable $q0, renamable $x1, 0 :: (store (s128))
STRQui killed renamable $q1, renamable $x1, 1 :: (store (s128))
RET undef $lr
...
---
name: 19-ldrspre-ldrsui-max-merge
tracksRegLiveness: true
liveins:
- { reg: '$x1' }
- { reg: '$s0' }
- { reg: '$s1' }
machineFunctionInfo:
hasRedZone: false
body: |
bb.0:
liveins: $s0, $s1, $x1
; CHECK-LABEL: name: 19-ldrspre-ldrsui-max-merge
; CHECK: liveins: $s0, $s1, $x1
; CHECK: early-clobber $x1, renamable $s0, renamable $s1 = LDPSpre renamable $x1, 63 :: (load (s32))
; CHECK: STRSui renamable $s0, renamable $x1, 0 :: (store (s32))
; CHECK: STRSui renamable $s1, renamable $x1, 1 :: ("aarch64-suppress-pair" store (s32))
; CHECK: RET undef $lr
early-clobber renamable $x1, renamable $s0 = LDRSpre killed renamable $x1, 252 :: (load (s32))
renamable $s1 = LDRSui renamable $x1, 1 :: (load (s32))
STRSui killed renamable $s0, renamable $x1, 0 :: (store (s32))
STRSui killed renamable $s1, renamable $x1, 1 :: (store (s32))
RET undef $lr
...
---
name: 20-ldrspre-ldrsui-unaligned-no-merge
tracksRegLiveness: true
liveins:
- { reg: '$x1' }
- { reg: '$s0' }
- { reg: '$s1' }
machineFunctionInfo:
hasRedZone: false
body: |
bb.0:
liveins: $s0, $s1, $x1
; CHECK-LABEL: name: 20-ldrspre-ldrsui-unaligned-no-merge
; CHECK: liveins: $s0, $s1, $x1
; CHECK: early-clobber renamable $x1, renamable $s0 = LDRSpre renamable $x1, 251, implicit $w1 :: (load (s32))
; CHECK: renamable $s1 = LDRSui renamable $x1, 1 :: (load (s32))
; CHECK: STRSui renamable $s0, renamable $x1, 0 :: (store (s32))
; CHECK: STRSui renamable $s1, renamable $x1, 1 :: ("aarch64-suppress-pair" store (s32))
; CHECK: RET undef $lr
early-clobber renamable $x1, renamable $s0 = LDRSpre killed renamable $x1, 251 :: (load (s32))
renamable $s1 = LDRSui renamable $x1, 1 :: (load (s32))
STRSui killed renamable $s0, renamable $x1, 0 :: (store (s32))
STRSui killed renamable $s1, renamable $x1, 1 :: (store (s32))
RET undef $lr
...