
In review of bbde6b, I had originally proposed that we support the legacy text format. As review evolved, it bacame clear this had been a bad idea (too much complexity), but in order to let that patch finally move forward, I approved the change with the variant. This change undoes the variant, and updates all the tests to just use the array form.
125 lines
3.1 KiB
YAML
125 lines
3.1 KiB
YAML
# RUN: llc -O0 -mtriple=mips -mcpu=mips32r3 -mattr=+micromips,+eva -start-after=finalize-isel \
|
|
# RUN: -filetype obj %s -o - | llvm-objdump --no-print-imm-hex --mattr=+eva -d - | FileCheck %s
|
|
|
|
# Test that MIPS unaligned load/store instructions can be mapped to their
|
|
# corresponding microMIPS instructions.
|
|
--- |
|
|
define void @g(ptr %a, ptr %b) {
|
|
entry:
|
|
%0 = load i32, ptr %a, align 1
|
|
store i32 %0, ptr %b, align 1
|
|
ret void
|
|
}
|
|
|
|
define void @g2(ptr %a, ptr %b) {
|
|
entry:
|
|
%0 = load i32, ptr %a, align 1
|
|
store i32 %0, ptr %b, align 1
|
|
ret void
|
|
}
|
|
...
|
|
---
|
|
name: g
|
|
alignment: 4
|
|
exposesReturnsTwice: false
|
|
legalized: false
|
|
regBankSelected: false
|
|
selected: false
|
|
failedISel: false
|
|
tracksRegLiveness: true
|
|
liveins:
|
|
- { reg: '$a0', virtual-reg: '%0' }
|
|
- { reg: '$a1', virtual-reg: '%1' }
|
|
frameInfo:
|
|
isFrameAddressTaken: false
|
|
isReturnAddressTaken: false
|
|
hasStackMap: false
|
|
hasPatchPoint: false
|
|
stackSize: 0
|
|
offsetAdjustment: 0
|
|
maxAlignment: 1
|
|
adjustsStack: false
|
|
hasCalls: false
|
|
stackProtector: ''
|
|
maxCallFrameSize: 4294967295
|
|
hasOpaqueSPAdjustment: false
|
|
hasVAStart: false
|
|
hasMustTailInVarArgFunc: false
|
|
savePoint: []
|
|
restorePoint: []
|
|
fixedStack:
|
|
stack:
|
|
constants:
|
|
body: |
|
|
bb.0.entry:
|
|
liveins: $a0, $a1
|
|
|
|
%1:gpr32 = COPY $a1
|
|
%0:gpr32 = COPY $a0
|
|
%3:gpr32 = IMPLICIT_DEF
|
|
%2:gpr32 = LWL %0, 0, %3 :: (load (s32) from %ir.a, align 1)
|
|
%4:gpr32 = LWR %0, 3, %2 :: (load (s32) from %ir.a, align 1)
|
|
SWL %4, %1, 0 :: (store (s32) into %ir.b, align 1)
|
|
SWR %4, %1, 3 :: (store (s32) into %ir.b, align 1)
|
|
RetRA
|
|
|
|
...
|
|
---
|
|
name: g2
|
|
alignment: 4
|
|
exposesReturnsTwice: false
|
|
legalized: false
|
|
regBankSelected: false
|
|
selected: false
|
|
failedISel: false
|
|
tracksRegLiveness: true
|
|
liveins:
|
|
- { reg: '$a0', virtual-reg: '%0' }
|
|
- { reg: '$a1', virtual-reg: '%1' }
|
|
frameInfo:
|
|
isFrameAddressTaken: false
|
|
isReturnAddressTaken: false
|
|
hasStackMap: false
|
|
hasPatchPoint: false
|
|
stackSize: 0
|
|
offsetAdjustment: 0
|
|
maxAlignment: 1
|
|
adjustsStack: false
|
|
hasCalls: false
|
|
stackProtector: ''
|
|
maxCallFrameSize: 4294967295
|
|
hasOpaqueSPAdjustment: false
|
|
hasVAStart: false
|
|
hasMustTailInVarArgFunc: false
|
|
savePoint: []
|
|
restorePoint: []
|
|
fixedStack:
|
|
stack:
|
|
constants:
|
|
body: |
|
|
bb.0.entry:
|
|
liveins: $a0, $a1
|
|
|
|
%1:gpr32 = COPY $a1
|
|
%0:gpr32 = COPY $a0
|
|
%3:gpr32 = IMPLICIT_DEF
|
|
%2:gpr32 = LWLE %0, 0, %3 :: (load (s32) from %ir.a, align 1)
|
|
%4:gpr32 = LWRE %0, 3, %2 :: (load (s32) from %ir.a, align 1)
|
|
SWLE %4, %1, 0 :: (store (s32) into %ir.b, align 1)
|
|
SWRE %4, %1, 3 :: (store (s32) into %ir.b, align 1)
|
|
RetRA
|
|
|
|
...
|
|
|
|
# CHECK-LABEL: <g>:
|
|
# CHECK: 0: 60 24 00 00 lwl $1, 0($4)
|
|
# CHECK: 4: 60 24 10 03 lwr $1, 3($4)
|
|
# CHECK: 8: 60 25 80 00 swl $1, 0($5)
|
|
# CHECK: c: 60 25 90 03 swr $1, 3($5)
|
|
|
|
# CHECK-LABEL: <g2>:
|
|
# CHECK: 14: 60 24 64 00 lwle $1, 0($4)
|
|
# CHECK: 18: 60 24 66 03 lwre $1, 3($4)
|
|
# CHECK: 1c: 60 25 a0 00 swle $1, 0($5)
|
|
# CHECK: 20: 60 25 a2 03 swre $1, 3($5)
|