diff options
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp | 11 | 
1 files changed, 7 insertions, 4 deletions
diff --git a/llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp b/llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp index df89fadb311..8b9a82e2768 100644 --- a/llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp +++ b/llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp @@ -1672,10 +1672,14 @@ bool ARMPreAllocLoadStoreOpt::RescheduleOps(MachineBasicBlock *MBB,            Ops.pop_back();            Ops.pop_back(); +          const TargetInstrDesc &TID = TII->get(NewOpc); +          const TargetRegisterClass *TRC = TID.OpInfo[0].getRegClass(TRI); +          MRI->constrainRegClass(EvenReg, TRC); +          MRI->constrainRegClass(OddReg, TRC); +            // Form the pair instruction.            if (isLd) { -            MachineInstrBuilder MIB = BuildMI(*MBB, InsertPos, -                                              dl, TII->get(NewOpc)) +            MachineInstrBuilder MIB = BuildMI(*MBB, InsertPos, dl, TID)                .addReg(EvenReg, RegState::Define)                .addReg(OddReg, RegState::Define)                .addReg(BaseReg); @@ -1687,8 +1691,7 @@ bool ARMPreAllocLoadStoreOpt::RescheduleOps(MachineBasicBlock *MBB,              MIB.addImm(Offset).addImm(Pred).addReg(PredReg);              ++NumLDRDFormed;            } else { -            MachineInstrBuilder MIB = BuildMI(*MBB, InsertPos, -                                              dl, TII->get(NewOpc)) +            MachineInstrBuilder MIB = BuildMI(*MBB, InsertPos, dl, TID)                .addReg(EvenReg)                .addReg(OddReg)                .addReg(BaseReg);  | 

