mirror of
https://github.com/RPCS3/llvm.git
synced 2026-07-25 20:55:54 -04:00
617c526c5c
In ARMPreAllocLoadStoreOpt::RescheduleOps, LastOp should be the last operation which we want to merge. If we break out of the loop because an operation has the wrong offset, we shouldn't use that operation as LastOp. This patch fixes some cases where we would move stores to the wrong insert point. Re-commit with a fix to increment NumMove in the right place. Differential Revision: https://reviews.llvm.org/D30124 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296815 91177308-0d34-0410-b5e6-96231b3b80d8
106 lines
3.0 KiB
YAML
106 lines
3.0 KiB
YAML
# RUN: llc -run-pass arm-prera-ldst-opt %s -o - | FileCheck %s
|
|
--- |
|
|
target triple = "thumbv7---eabi"
|
|
|
|
define void @a(i32* nocapture %x, i32 %y, i32 %z) {
|
|
entry:
|
|
ret void
|
|
}
|
|
|
|
define void @b(i32* nocapture %x, i32 %y, i32 %z) {
|
|
entry:
|
|
ret void
|
|
}
|
|
...
|
|
---
|
|
# CHECK-LABEL: name: a
|
|
name: a
|
|
alignment: 1
|
|
tracksRegLiveness: true
|
|
liveins:
|
|
- { reg: '%r0', virtual-reg: '%0' }
|
|
- { reg: '%r1', virtual-reg: '%1' }
|
|
- { reg: '%r2', virtual-reg: '%2' }
|
|
body: |
|
|
bb.0.entry:
|
|
liveins: %r0, %r1, %r2
|
|
|
|
%2 : rgpr = COPY %r2
|
|
%1 : rgpr = COPY %r1
|
|
%0 : gpr = COPY %r0
|
|
%3 : rgpr = t2MUL %2, %2, 14, _
|
|
%4 : rgpr = t2MUL %1, %1, 14, _
|
|
%5 : rgpr = t2MOVi32imm -858993459
|
|
%6 : rgpr, %7 : rgpr = t2UMULL killed %3, %5, 14, _
|
|
%8 : rgpr, %9 : rgpr = t2UMULL killed %4, %5, 14, _
|
|
t2STRi12 %1, %0, 0, 14, _ :: (store 4)
|
|
%10 : rgpr = t2LSLri %2, 1, 14, _, _
|
|
t2STRi12 killed %10, %0, 4, 14, _ :: (store 4)
|
|
|
|
; Make sure we move the paired stores next to each other, and
|
|
; insert them in an appropriate location.
|
|
; CHECK: t2STRi12 %1,
|
|
; CHECK-NEXT: t2STRi12 killed %10,
|
|
; CHECK-NEXT: t2MOVi
|
|
; CHECK-NEXT: t2ADDrs
|
|
|
|
%11 : rgpr = t2MOVi 55, 14, _, _
|
|
%12 : gprnopc = t2ADDrs %11, killed %7, 19, 14, _, _
|
|
t2STRi12 killed %12, %0, 16, 14, _ :: (store 4)
|
|
%13 : gprnopc = t2ADDrs %11, killed %9, 19, 14, _, _
|
|
t2STRi12 killed %13, %0, 20, 14, _ :: (store 4)
|
|
|
|
; Make sure we move the paired stores next to each other.
|
|
; CHECK: t2STRi12 killed %12,
|
|
; CHECK-NEXT: t2STRi12 killed %13,
|
|
|
|
tBX_RET 14, _
|
|
---
|
|
# CHECK-LABEL: name: b
|
|
name: b
|
|
alignment: 1
|
|
tracksRegLiveness: true
|
|
liveins:
|
|
- { reg: '%r0', virtual-reg: '%0' }
|
|
- { reg: '%r1', virtual-reg: '%1' }
|
|
- { reg: '%r2', virtual-reg: '%2' }
|
|
body: |
|
|
bb.0.entry:
|
|
liveins: %r0, %r1, %r2
|
|
|
|
%2 : rgpr = COPY %r2
|
|
%1 : rgpr = COPY %r1
|
|
%0 : gpr = COPY %r0
|
|
t2STRi12 %1, %0, 0, 14, _ :: (store 4)
|
|
%10 : rgpr = t2LSLri %2, 1, 14, _, _
|
|
t2STRi12 killed %10, %0, 4, 14, _ :: (store 4)
|
|
%3 : rgpr = t2MUL %2, %2, 14, _
|
|
t2STRi12 %3, %0, 8, 14, _ :: (store 4)
|
|
|
|
; Make sure we move the paired stores next to each other, and
|
|
; insert them in an appropriate location.
|
|
; CHECK: t2STRi12 {{.*}}, 0
|
|
; CHECK-NEXT: t2STRi12 {{.*}}, 4
|
|
; CHECK-NEXT: t2STRi12 {{.*}}, 8
|
|
; CHECK-NEXT: t2MUL
|
|
; CHECK-NEXT: t2MOVi32imm
|
|
|
|
%4 : rgpr = t2MUL %1, %1, 14, _
|
|
%5 : rgpr = t2MOVi32imm -858993459
|
|
%6 : rgpr, %7 : rgpr = t2UMULL killed %3, %5, 14, _
|
|
%8 : rgpr, %9 : rgpr = t2UMULL killed %4, %5, 14, _
|
|
%10 : rgpr = t2LSLri %2, 1, 14, _, _
|
|
%11 : rgpr = t2MOVi 55, 14, _, _
|
|
%12 : gprnopc = t2ADDrs %11, killed %7, 19, 14, _, _
|
|
t2STRi12 killed %12, %0, 16, 14, _ :: (store 4)
|
|
%13 : gprnopc = t2ADDrs %11, killed %9, 19, 14, _, _
|
|
t2STRi12 killed %13, %0, 20, 14, _ :: (store 4)
|
|
|
|
; Make sure we move the paired stores next to each other.
|
|
; CHECK: t2STRi12 {{.*}}, 16
|
|
; CHECK-NEXT: t2STRi12 {{.*}}, 20
|
|
|
|
tBX_RET 14, _
|
|
|
|
...
|