diff options
| author | Anton Korobeynikov <asl@math.spbu.ru> | 2009-11-03 01:04:26 +0000 |
|---|---|---|
| committer | Anton Korobeynikov <asl@math.spbu.ru> | 2009-11-03 01:04:26 +0000 |
| commit | d195f9e5c31b91ce970bd0ae4f9998b951f18cc4 (patch) | |
| tree | 8519dbc05a0559b0fbfcded656107c0eae7405d8 /llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp | |
| parent | 2c2dc9f64f29cfdf8f90ac7a8b38090aa79b4d6d (diff) | |
| download | bcm5719-llvm-d195f9e5c31b91ce970bd0ae4f9998b951f18cc4.tar.gz bcm5719-llvm-d195f9e5c31b91ce970bd0ae4f9998b951f18cc4.zip | |
Turn neon reg-reg moves fixup code into separate pass. This should reduce the compile time.
llvm-svn: 85850
Diffstat (limited to 'llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp')
| -rw-r--r-- | llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp | 35 |
1 files changed, 2 insertions, 33 deletions
diff --git a/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp b/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp index 80961bff774..bc49197ca0a 100644 --- a/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp +++ b/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp @@ -658,39 +658,8 @@ ARMBaseInstrInfo::copyRegToReg(MachineBasicBlock &MBB, // Always use neon reg-reg move if source or dest is NEON-only regclass. BuildMI(MBB, I, DL, get(ARM::VMOVD), DestReg).addReg(SrcReg); } 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. - if (!MBB.empty()) { - MachineBasicBlock::iterator J = (I == MBB.begin() ? I : prior(I)); - while (J != MBB.begin()) { - if (J->modifiesRegister(SrcReg, TRI)) - break; - --J; - } - - 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()) { - BuildMI(MBB, I, DL, get(ARM::VMOVQ), DestReg).addReg(SrcReg); - } else { - assert((Domain & ARMII::DomainVFP || - !getSubtarget().hasNEON()) && "Invalid domain!"); - AddDefaultPred(BuildMI(MBB, I, DL, get(ARM::FCPYD), DestReg) - .addReg(SrcReg)); - } + AddDefaultPred(BuildMI(MBB, I, DL, get(ARM::FCPYD), DestReg) + .addReg(SrcReg)); } else if (DestRC == ARM::QPRRegisterClass || DestRC == ARM::QPR_VFP2RegisterClass) { BuildMI(MBB, I, DL, get(ARM::VMOVQ), DestReg).addReg(SrcReg); |

