Unbreak ARMBaseRegisterInfo::copyRegToReg.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85787 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Target/ARM/ARMBaseInstrInfo.cpp b/lib/Target/ARM/ARMBaseInstrInfo.cpp
index 4cb2407..80961bf 100644
--- a/lib/Target/ARM/ARMBaseInstrInfo.cpp
+++ b/lib/Target/ARM/ARMBaseInstrInfo.cpp
@@ -660,26 +660,27 @@
} else if (DestRC == ARM::DPRRegisterClass) {
const ARMBaseRegisterInfo* TRI = &getRegisterInfo();
+ // If we do not found an instruction defining the reg, this means the
+ // register should be live-in for this BB. It's always to better to use
+ // NEON reg-reg moves.
+ unsigned Domain = ARMII::DomainNEON;
+
// Find the Machine Instruction which defines SrcReg.
- MachineBasicBlock::iterator J = (I == MBB.begin() ? I : prior(I));
- while (J != MBB.begin()) {
- if (J->modifiesRegister(SrcReg, TRI))
- break;
- --J;
- }
+ if (!MBB.empty()) {
+ MachineBasicBlock::iterator J = (I == MBB.begin() ? I : prior(I));
+ while (J != MBB.begin()) {
+ if (J->modifiesRegister(SrcReg, TRI))
+ break;
+ --J;
+ }
- unsigned Domain;
- if (J->modifiesRegister(SrcReg, TRI)) {
- Domain = J->getDesc().TSFlags & ARMII::DomainMask;
- // Instructions in general domain are subreg accesses.
- // Map them to NEON reg-reg moves.
- if (Domain == ARMII::DomainGeneral)
- Domain = ARMII::DomainNEON;
- } else {
- // We reached the beginning of the BB and found no instruction defining
- // the reg. This means that register should be live-in for this BB.
- // It's always to better to use NEON reg-reg moves.
- Domain = ARMII::DomainNEON;
+ if (J->modifiesRegister(SrcReg, TRI)) {
+ Domain = J->getDesc().TSFlags & ARMII::DomainMask;
+ // Instructions in general domain are subreg accesses.
+ // Map them to NEON reg-reg moves.
+ if (Domain == ARMII::DomainGeneral)
+ Domain = ARMII::DomainNEON;
+ }
}
if ((Domain & ARMII::DomainNEON) && getSubtarget().hasNEON()) {