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 | 3ed3a35a6549891d3a9ef08bcc9caaf21703a537 (patch) | |
tree | 4d54690af71c6c2e9b2b706f355cd8840581fe9d /lib/Target/ARM/ARMBaseInstrInfo.cpp | |
parent | 3daf4012398a2511b36cf7bd31192f098f9820b9 (diff) | |
download | external_llvm-3ed3a35a6549891d3a9ef08bcc9caaf21703a537.zip external_llvm-3ed3a35a6549891d3a9ef08bcc9caaf21703a537.tar.gz external_llvm-3ed3a35a6549891d3a9ef08bcc9caaf21703a537.tar.bz2 |
Turn neon reg-reg moves fixup code into separate pass. This should reduce the compile time.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85850 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/ARM/ARMBaseInstrInfo.cpp')
-rw-r--r-- | lib/Target/ARM/ARMBaseInstrInfo.cpp | 35 |
1 files changed, 2 insertions, 33 deletions
diff --git a/lib/Target/ARM/ARMBaseInstrInfo.cpp b/lib/Target/ARM/ARMBaseInstrInfo.cpp index 80961bf..bc49197 100644 --- a/lib/Target/ARM/ARMBaseInstrInfo.cpp +++ b/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); |