forked from OSchip/llvm-project
[ARM] Expand the range of allowed post-incs in load/store optimizer
Currently the load/store optimizer will only fold in increments of the
same size as the load/store. This patch expands that to any legal
immediate for the post-inc instruction.
This is a recommit of 3b34b06fc5
with correctness fixes and extra
tests.
Differential Revision: https://reviews.llvm.org/D95885
This commit is contained in:
parent
11a53f47fb
commit
03892a27d6
|
@ -888,8 +888,12 @@ inline bool isLegalAddressImm(unsigned Opcode, int Imm,
|
||||||
return std::abs(Imm) < (((1 << 7) * 4) - 1) && Imm % 4 == 0;
|
return std::abs(Imm) < (((1 << 7) * 4) - 1) && Imm % 4 == 0;
|
||||||
case ARMII::AddrModeT2_i8:
|
case ARMII::AddrModeT2_i8:
|
||||||
return std::abs(Imm) < (((1 << 8) * 1) - 1);
|
return std::abs(Imm) < (((1 << 8) * 1) - 1);
|
||||||
|
case ARMII::AddrMode2:
|
||||||
|
return std::abs(Imm) < (((1 << 12) * 1) - 1);
|
||||||
case ARMII::AddrModeT2_i12:
|
case ARMII::AddrModeT2_i12:
|
||||||
return Imm >= 0 && Imm < (((1 << 12) * 1) - 1);
|
return Imm >= 0 && Imm < (((1 << 12) * 1) - 1);
|
||||||
|
case ARMII::AddrModeT2_i8s4:
|
||||||
|
return std::abs(Imm) < (((1 << 8) * 4) - 1) && Imm % 4 == 0;
|
||||||
default:
|
default:
|
||||||
llvm_unreachable("Unhandled Addressing mode");
|
llvm_unreachable("Unhandled Addressing mode");
|
||||||
}
|
}
|
||||||
|
|
|
@ -1502,12 +1502,16 @@ bool ARMLoadStoreOpt::MergeBaseUpdateLoadStore(MachineInstr *MI) {
|
||||||
NewOpc = getPreIndexedLoadStoreOpcode(Opcode, ARM_AM::sub);
|
NewOpc = getPreIndexedLoadStoreOpcode(Opcode, ARM_AM::sub);
|
||||||
} else {
|
} else {
|
||||||
MergeInstr = findIncDecAfter(MBBI, Base, Pred, PredReg, Offset, TRI);
|
MergeInstr = findIncDecAfter(MBBI, Base, Pred, PredReg, Offset, TRI);
|
||||||
if (Offset == Bytes) {
|
if (MergeInstr == MBB.end())
|
||||||
NewOpc = getPostIndexedLoadStoreOpcode(Opcode, ARM_AM::add);
|
|
||||||
} else if (!isAM5 && Offset == -Bytes) {
|
|
||||||
NewOpc = getPostIndexedLoadStoreOpcode(Opcode, ARM_AM::sub);
|
|
||||||
} else
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
NewOpc = getPostIndexedLoadStoreOpcode(Opcode, ARM_AM::add);
|
||||||
|
if ((isAM5 && Offset != Bytes) ||
|
||||||
|
(!isAM5 && !isLegalAddressImm(NewOpc, Offset, TII))) {
|
||||||
|
NewOpc = getPostIndexedLoadStoreOpcode(Opcode, ARM_AM::sub);
|
||||||
|
if (isAM5 || !isLegalAddressImm(NewOpc, Offset, TII))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
LLVM_DEBUG(dbgs() << " Erasing old increment: " << *MergeInstr);
|
LLVM_DEBUG(dbgs() << " Erasing old increment: " << *MergeInstr);
|
||||||
MBB.erase(MergeInstr);
|
MBB.erase(MergeInstr);
|
||||||
|
@ -1546,7 +1550,7 @@ bool ARMLoadStoreOpt::MergeBaseUpdateLoadStore(MachineInstr *MI) {
|
||||||
(void)MIB;
|
(void)MIB;
|
||||||
LLVM_DEBUG(dbgs() << " Added new instruction: " << *MIB);
|
LLVM_DEBUG(dbgs() << " Added new instruction: " << *MIB);
|
||||||
} else {
|
} else {
|
||||||
int Imm = ARM_AM::getAM2Opc(AddSub, Bytes, ARM_AM::no_shift);
|
int Imm = ARM_AM::getAM2Opc(AddSub, abs(Offset), ARM_AM::no_shift);
|
||||||
auto MIB =
|
auto MIB =
|
||||||
BuildMI(MBB, MBBI, DL, TII->get(NewOpc), MI->getOperand(0).getReg())
|
BuildMI(MBB, MBBI, DL, TII->get(NewOpc), MI->getOperand(0).getReg())
|
||||||
.addReg(Base, RegState::Define)
|
.addReg(Base, RegState::Define)
|
||||||
|
@ -1576,7 +1580,7 @@ bool ARMLoadStoreOpt::MergeBaseUpdateLoadStore(MachineInstr *MI) {
|
||||||
// the vestigal zero-reg offset register. When that's fixed, this clause
|
// the vestigal zero-reg offset register. When that's fixed, this clause
|
||||||
// can be removed entirely.
|
// can be removed entirely.
|
||||||
if (isAM2 && NewOpc == ARM::STR_POST_IMM) {
|
if (isAM2 && NewOpc == ARM::STR_POST_IMM) {
|
||||||
int Imm = ARM_AM::getAM2Opc(AddSub, Bytes, ARM_AM::no_shift);
|
int Imm = ARM_AM::getAM2Opc(AddSub, abs(Offset), ARM_AM::no_shift);
|
||||||
// STR_PRE, STR_POST
|
// STR_PRE, STR_POST
|
||||||
auto MIB = BuildMI(MBB, MBBI, DL, TII->get(NewOpc), Base)
|
auto MIB = BuildMI(MBB, MBBI, DL, TII->get(NewOpc), Base)
|
||||||
.addReg(MO.getReg(), getKillRegState(MO.isKill()))
|
.addReg(MO.getReg(), getKillRegState(MO.isKill()))
|
||||||
|
@ -1633,9 +1637,10 @@ bool ARMLoadStoreOpt::MergeBaseUpdateLSDouble(MachineInstr &MI) const {
|
||||||
NewOpc = Opcode == ARM::t2LDRDi8 ? ARM::t2LDRD_PRE : ARM::t2STRD_PRE;
|
NewOpc = Opcode == ARM::t2LDRDi8 ? ARM::t2LDRD_PRE : ARM::t2STRD_PRE;
|
||||||
} else {
|
} else {
|
||||||
MergeInstr = findIncDecAfter(MBBI, Base, Pred, PredReg, Offset, TRI);
|
MergeInstr = findIncDecAfter(MBBI, Base, Pred, PredReg, Offset, TRI);
|
||||||
if (Offset == 8 || Offset == -8) {
|
if (MergeInstr == MBB.end())
|
||||||
NewOpc = Opcode == ARM::t2LDRDi8 ? ARM::t2LDRD_POST : ARM::t2STRD_POST;
|
return false;
|
||||||
} else
|
NewOpc = Opcode == ARM::t2LDRDi8 ? ARM::t2LDRD_POST : ARM::t2STRD_POST;
|
||||||
|
if (!isLegalAddressImm(NewOpc, Offset, TII))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
LLVM_DEBUG(dbgs() << " Erasing old increment: " << *MergeInstr);
|
LLVM_DEBUG(dbgs() << " Erasing old increment: " << *MergeInstr);
|
||||||
|
|
|
@ -271,8 +271,7 @@ body: |
|
||||||
|
|
||||||
; CHECK-LABEL: name: STR_post8
|
; CHECK-LABEL: name: STR_post8
|
||||||
; CHECK: liveins: $r0, $r1
|
; CHECK: liveins: $r0, $r1
|
||||||
; CHECK: STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 4)
|
; CHECK: early-clobber $r0 = STR_POST_IMM killed $r1, $r0, $noreg, 8, 14 /* CC::al */, $noreg :: (store 4)
|
||||||
; CHECK: renamable $r0 = nuw ADDri killed renamable $r0, 8, 14 /* CC::al */, $noreg, $noreg
|
|
||||||
; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
|
; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
|
||||||
STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 4)
|
STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 4)
|
||||||
renamable $r0 = nuw ADDri killed renamable $r0, 8, 14 /* CC::al */, $noreg, $noreg
|
renamable $r0 = nuw ADDri killed renamable $r0, 8, 14 /* CC::al */, $noreg, $noreg
|
||||||
|
@ -292,8 +291,7 @@ body: |
|
||||||
|
|
||||||
; CHECK-LABEL: name: STR_post255
|
; CHECK-LABEL: name: STR_post255
|
||||||
; CHECK: liveins: $r0, $r1
|
; CHECK: liveins: $r0, $r1
|
||||||
; CHECK: STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 4)
|
; CHECK: early-clobber $r0 = STR_POST_IMM killed $r1, $r0, $noreg, 255, 14 /* CC::al */, $noreg :: (store 4)
|
||||||
; CHECK: renamable $r0 = nuw ADDri killed renamable $r0, 255, 14 /* CC::al */, $noreg, $noreg
|
|
||||||
; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
|
; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
|
||||||
STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 4)
|
STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 4)
|
||||||
renamable $r0 = nuw ADDri killed renamable $r0, 255, 14 /* CC::al */, $noreg, $noreg
|
renamable $r0 = nuw ADDri killed renamable $r0, 255, 14 /* CC::al */, $noreg, $noreg
|
||||||
|
@ -313,8 +311,7 @@ body: |
|
||||||
|
|
||||||
; CHECK-LABEL: name: STR_post256
|
; CHECK-LABEL: name: STR_post256
|
||||||
; CHECK: liveins: $r0, $r1
|
; CHECK: liveins: $r0, $r1
|
||||||
; CHECK: STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 4)
|
; CHECK: early-clobber $r0 = STR_POST_IMM killed $r1, $r0, $noreg, 256, 14 /* CC::al */, $noreg :: (store 4)
|
||||||
; CHECK: renamable $r0 = nuw ADDri killed renamable $r0, 256, 14 /* CC::al */, $noreg, $noreg
|
|
||||||
; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
|
; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
|
||||||
STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 4)
|
STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 4)
|
||||||
renamable $r0 = nuw ADDri killed renamable $r0, 256, 14 /* CC::al */, $noreg, $noreg
|
renamable $r0 = nuw ADDri killed renamable $r0, 256, 14 /* CC::al */, $noreg, $noreg
|
||||||
|
@ -334,8 +331,7 @@ body: |
|
||||||
|
|
||||||
; CHECK-LABEL: name: STR_post1024
|
; CHECK-LABEL: name: STR_post1024
|
||||||
; CHECK: liveins: $r0, $r1
|
; CHECK: liveins: $r0, $r1
|
||||||
; CHECK: STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 4)
|
; CHECK: early-clobber $r0 = STR_POST_IMM killed $r1, $r0, $noreg, 1024, 14 /* CC::al */, $noreg :: (store 4)
|
||||||
; CHECK: renamable $r0 = nuw ADDri killed renamable $r0, 1024, 14 /* CC::al */, $noreg, $noreg
|
|
||||||
; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
|
; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
|
||||||
STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 4)
|
STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 4)
|
||||||
renamable $r0 = nuw ADDri killed renamable $r0, 1024, 14 /* CC::al */, $noreg, $noreg
|
renamable $r0 = nuw ADDri killed renamable $r0, 1024, 14 /* CC::al */, $noreg, $noreg
|
||||||
|
@ -355,8 +351,7 @@ body: |
|
||||||
|
|
||||||
; CHECK-LABEL: name: STR_post4095
|
; CHECK-LABEL: name: STR_post4095
|
||||||
; CHECK: liveins: $r0, $r1
|
; CHECK: liveins: $r0, $r1
|
||||||
; CHECK: STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 4)
|
; CHECK: early-clobber $r0 = STR_POST_IMM killed $r1, $r0, $noreg, 2095, 14 /* CC::al */, $noreg :: (store 4)
|
||||||
; CHECK: renamable $r0 = nuw ADDri killed renamable $r0, 2095, 14 /* CC::al */, $noreg, $noreg
|
|
||||||
; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
|
; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
|
||||||
STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 4)
|
STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 4)
|
||||||
renamable $r0 = nuw ADDri killed renamable $r0, 2095, 14 /* CC::al */, $noreg, $noreg
|
renamable $r0 = nuw ADDri killed renamable $r0, 2095, 14 /* CC::al */, $noreg, $noreg
|
||||||
|
@ -397,8 +392,7 @@ body: |
|
||||||
|
|
||||||
; CHECK-LABEL: name: STR_postm1024
|
; CHECK-LABEL: name: STR_postm1024
|
||||||
; CHECK: liveins: $r0, $r1
|
; CHECK: liveins: $r0, $r1
|
||||||
; CHECK: STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 4)
|
; CHECK: early-clobber $r0 = STR_POST_IMM killed $r1, $r0, $noreg, 5120, 14 /* CC::al */, $noreg :: (store 4)
|
||||||
; CHECK: renamable $r0 = nuw SUBri killed renamable $r0, 1024, 14 /* CC::al */, $noreg, $noreg
|
|
||||||
; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
|
; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
|
||||||
STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 4)
|
STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 4)
|
||||||
renamable $r0 = nuw SUBri killed renamable $r0, 1024, 14 /* CC::al */, $noreg, $noreg
|
renamable $r0 = nuw SUBri killed renamable $r0, 1024, 14 /* CC::al */, $noreg, $noreg
|
||||||
|
@ -418,8 +412,7 @@ body: |
|
||||||
|
|
||||||
; CHECK-LABEL: name: STR_postm4095
|
; CHECK-LABEL: name: STR_postm4095
|
||||||
; CHECK: liveins: $r0, $r1
|
; CHECK: liveins: $r0, $r1
|
||||||
; CHECK: STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 4)
|
; CHECK: early-clobber $r0 = STR_POST_IMM killed $r1, $r0, $noreg, 6191, 14 /* CC::al */, $noreg :: (store 4)
|
||||||
; CHECK: renamable $r0 = nuw SUBri killed renamable $r0, 2095, 14 /* CC::al */, $noreg, $noreg
|
|
||||||
; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
|
; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
|
||||||
STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 4)
|
STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 4)
|
||||||
renamable $r0 = nuw SUBri killed renamable $r0, 2095, 14 /* CC::al */, $noreg, $noreg
|
renamable $r0 = nuw SUBri killed renamable $r0, 2095, 14 /* CC::al */, $noreg, $noreg
|
||||||
|
|
|
@ -1715,7 +1715,7 @@ define arm_aapcs_vfpcc void @arm_biquad_cascade_df1_f32(%struct.arm_biquad_casd_
|
||||||
; CHECK-NEXT: vmov r3, s10
|
; CHECK-NEXT: vmov r3, s10
|
||||||
; CHECK-NEXT: vldrw.u32 q3, [r11, #48]
|
; CHECK-NEXT: vldrw.u32 q3, [r11, #48]
|
||||||
; CHECK-NEXT: vfma.f32 q1, q0, r3
|
; CHECK-NEXT: vfma.f32 q1, q0, r3
|
||||||
; CHECK-NEXT: ldr r3, [r1]
|
; CHECK-NEXT: ldr r3, [r1], #16
|
||||||
; CHECK-NEXT: vfma.f32 q1, q7, r6
|
; CHECK-NEXT: vfma.f32 q1, q7, r6
|
||||||
; CHECK-NEXT: vldrw.u32 q6, [r11, #64]
|
; CHECK-NEXT: vldrw.u32 q6, [r11, #64]
|
||||||
; CHECK-NEXT: vfma.f32 q1, q3, r3
|
; CHECK-NEXT: vfma.f32 q1, q3, r3
|
||||||
|
@ -1725,7 +1725,6 @@ define arm_aapcs_vfpcc void @arm_biquad_cascade_df1_f32(%struct.arm_biquad_casd_
|
||||||
; CHECK-NEXT: vfma.f32 q1, q5, r0
|
; CHECK-NEXT: vfma.f32 q1, q5, r0
|
||||||
; CHECK-NEXT: vldrw.u32 q0, [sp, #64] @ 16-byte Reload
|
; CHECK-NEXT: vldrw.u32 q0, [sp, #64] @ 16-byte Reload
|
||||||
; CHECK-NEXT: vfma.f32 q1, q4, r7
|
; CHECK-NEXT: vfma.f32 q1, q4, r7
|
||||||
; CHECK-NEXT: adds r1, #16
|
|
||||||
; CHECK-NEXT: vfma.f32 q1, q0, r9
|
; CHECK-NEXT: vfma.f32 q1, q0, r9
|
||||||
; CHECK-NEXT: vmov.f32 s2, s8
|
; CHECK-NEXT: vmov.f32 s2, s8
|
||||||
; CHECK-NEXT: vstrb.8 q1, [r5], #16
|
; CHECK-NEXT: vstrb.8 q1, [r5], #16
|
||||||
|
|
|
@ -421,8 +421,7 @@ body: |
|
||||||
|
|
||||||
; CHECK-LABEL: name: STR_post8
|
; CHECK-LABEL: name: STR_post8
|
||||||
; CHECK: liveins: $r0, $r1
|
; CHECK: liveins: $r0, $r1
|
||||||
; CHECK: t2STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 4)
|
; CHECK: early-clobber $r0 = t2STR_POST killed $r1, $r0, 8, 14 /* CC::al */, $noreg :: (store 4)
|
||||||
; CHECK: renamable $r0 = nuw t2ADDri killed renamable $r0, 8, 14 /* CC::al */, $noreg, $noreg
|
|
||||||
; CHECK: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
|
; CHECK: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
|
||||||
t2STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 4)
|
t2STRi12 killed renamable $r1, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 4)
|
||||||
renamable $r0 = nuw t2ADDri killed renamable $r0, 8, 14 /* CC::al */, $noreg, $noreg
|
renamable $r0 = nuw t2ADDri killed renamable $r0, 8, 14 /* CC::al */, $noreg, $noreg
|
||||||
|
@ -485,8 +484,7 @@ body: |
|
||||||
|
|
||||||
; CHECK-LABEL: name: STRD_post4
|
; CHECK-LABEL: name: STRD_post4
|
||||||
; CHECK: liveins: $r0, $r1, $r2
|
; CHECK: liveins: $r0, $r1, $r2
|
||||||
; CHECK: t2STRDi8 killed $r1, killed $r2, $r0, 0, 14 /* CC::al */, $noreg :: (store 8)
|
; CHECK: $r0 = t2STRD_POST killed renamable $r1, killed renamable $r2, killed $r0, 4, 14 /* CC::al */, $noreg :: (store 8)
|
||||||
; CHECK: renamable $r0 = nuw t2ADDri killed renamable $r0, 4, 14 /* CC::al */, $noreg, $noreg
|
|
||||||
; CHECK: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
|
; CHECK: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
|
||||||
t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 8)
|
t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 8)
|
||||||
renamable $r0 = nuw t2ADDri killed renamable $r0, 4, 14 /* CC::al */, $noreg, $noreg
|
renamable $r0 = nuw t2ADDri killed renamable $r0, 4, 14 /* CC::al */, $noreg, $noreg
|
||||||
|
@ -550,8 +548,7 @@ body: |
|
||||||
|
|
||||||
; CHECK-LABEL: name: STRD_post256
|
; CHECK-LABEL: name: STRD_post256
|
||||||
; CHECK: liveins: $r0, $r1, $r2
|
; CHECK: liveins: $r0, $r1, $r2
|
||||||
; CHECK: t2STRDi8 killed $r1, killed $r2, $r0, 0, 14 /* CC::al */, $noreg :: (store 8)
|
; CHECK: $r0 = t2STRD_POST killed renamable $r1, killed renamable $r2, killed $r0, 256, 14 /* CC::al */, $noreg :: (store 8)
|
||||||
; CHECK: renamable $r0 = nuw t2ADDri killed renamable $r0, 256, 14 /* CC::al */, $noreg, $noreg
|
|
||||||
; CHECK: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
|
; CHECK: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
|
||||||
t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 8)
|
t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 8)
|
||||||
renamable $r0 = nuw t2ADDri killed renamable $r0, 256, 14 /* CC::al */, $noreg, $noreg
|
renamable $r0 = nuw t2ADDri killed renamable $r0, 256, 14 /* CC::al */, $noreg, $noreg
|
||||||
|
@ -572,8 +569,7 @@ body: |
|
||||||
|
|
||||||
; CHECK-LABEL: name: STRD_post1020
|
; CHECK-LABEL: name: STRD_post1020
|
||||||
; CHECK: liveins: $r0, $r1, $r2
|
; CHECK: liveins: $r0, $r1, $r2
|
||||||
; CHECK: t2STRDi8 killed $r1, killed $r2, $r0, 0, 14 /* CC::al */, $noreg :: (store 8)
|
; CHECK: $r0 = t2STRD_POST killed renamable $r1, killed renamable $r2, killed $r0, 1020, 14 /* CC::al */, $noreg :: (store 8)
|
||||||
; CHECK: renamable $r0 = nuw t2ADDri killed renamable $r0, 1020, 14 /* CC::al */, $noreg, $noreg
|
|
||||||
; CHECK: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
|
; CHECK: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
|
||||||
t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 8)
|
t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 8)
|
||||||
renamable $r0 = nuw t2ADDri killed renamable $r0, 1020, 14 /* CC::al */, $noreg, $noreg
|
renamable $r0 = nuw t2ADDri killed renamable $r0, 1020, 14 /* CC::al */, $noreg, $noreg
|
||||||
|
@ -616,8 +612,7 @@ body: |
|
||||||
|
|
||||||
; CHECK-LABEL: name: STRD_postm4
|
; CHECK-LABEL: name: STRD_postm4
|
||||||
; CHECK: liveins: $r0, $r1, $r2
|
; CHECK: liveins: $r0, $r1, $r2
|
||||||
; CHECK: t2STRDi8 killed $r1, killed $r2, $r0, 0, 14 /* CC::al */, $noreg :: (store 8)
|
; CHECK: $r0 = t2STRD_POST killed renamable $r1, killed renamable $r2, killed $r0, -4, 14 /* CC::al */, $noreg :: (store 8)
|
||||||
; CHECK: renamable $r0 = nuw t2SUBri killed renamable $r0, 4, 14 /* CC::al */, $noreg, $noreg
|
|
||||||
; CHECK: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
|
; CHECK: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
|
||||||
t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 8)
|
t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 8)
|
||||||
renamable $r0 = nuw t2SUBri killed renamable $r0, 4, 14 /* CC::al */, $noreg, $noreg
|
renamable $r0 = nuw t2SUBri killed renamable $r0, 4, 14 /* CC::al */, $noreg, $noreg
|
||||||
|
@ -681,8 +676,7 @@ body: |
|
||||||
|
|
||||||
; CHECK-LABEL: name: STRD_postm256
|
; CHECK-LABEL: name: STRD_postm256
|
||||||
; CHECK: liveins: $r0, $r1, $r2
|
; CHECK: liveins: $r0, $r1, $r2
|
||||||
; CHECK: t2STRDi8 killed $r1, killed $r2, $r0, 0, 14 /* CC::al */, $noreg :: (store 8)
|
; CHECK: $r0 = t2STRD_POST killed renamable $r1, killed renamable $r2, killed $r0, 256, 14 /* CC::al */, $noreg :: (store 8)
|
||||||
; CHECK: renamable $r0 = nuw t2ADDri killed renamable $r0, 256, 14 /* CC::al */, $noreg, $noreg
|
|
||||||
; CHECK: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
|
; CHECK: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
|
||||||
t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 8)
|
t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 8)
|
||||||
renamable $r0 = nuw t2ADDri killed renamable $r0, 256, 14 /* CC::al */, $noreg, $noreg
|
renamable $r0 = nuw t2ADDri killed renamable $r0, 256, 14 /* CC::al */, $noreg, $noreg
|
||||||
|
@ -703,8 +697,7 @@ body: |
|
||||||
|
|
||||||
; CHECK-LABEL: name: STRD_postm1020
|
; CHECK-LABEL: name: STRD_postm1020
|
||||||
; CHECK: liveins: $r0, $r1, $r2
|
; CHECK: liveins: $r0, $r1, $r2
|
||||||
; CHECK: t2STRDi8 killed $r1, killed $r2, $r0, 0, 14 /* CC::al */, $noreg :: (store 8)
|
; CHECK: $r0 = t2STRD_POST killed renamable $r1, killed renamable $r2, killed $r0, -1020, 14 /* CC::al */, $noreg :: (store 8)
|
||||||
; CHECK: renamable $r0 = nuw t2SUBri killed renamable $r0, 1020, 14 /* CC::al */, $noreg, $noreg
|
|
||||||
; CHECK: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
|
; CHECK: tBX_RET 14 /* CC::al */, $noreg, implicit $r0
|
||||||
t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 8)
|
t2STRDi8 killed renamable $r1, killed renamable $r2, renamable $r0, 0, 14 /* CC::al */, $noreg :: (store 8)
|
||||||
renamable $r0 = nuw t2SUBri killed renamable $r0, 1020, 14 /* CC::al */, $noreg, $noreg
|
renamable $r0 = nuw t2SUBri killed renamable $r0, 1020, 14 /* CC::al */, $noreg, $noreg
|
||||||
|
|
Loading…
Reference in New Issue