diff options
Diffstat (limited to 'llvm/lib/Target/ARM/Thumb2InstrInfo.cpp')
| -rw-r--r-- | llvm/lib/Target/ARM/Thumb2InstrInfo.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/llvm/lib/Target/ARM/Thumb2InstrInfo.cpp b/llvm/lib/Target/ARM/Thumb2InstrInfo.cpp index 286eaa0946d..7c51c70f679 100644 --- a/llvm/lib/Target/ARM/Thumb2InstrInfo.cpp +++ b/llvm/lib/Target/ARM/Thumb2InstrInfo.cpp @@ -152,7 +152,13 @@ storeRegToStackSlot(MachineBasicBlock &MBB, MachineBasicBlock::iterator I, // gsub_0, but needs an extra constraint for gsub_1 (which could be sp // otherwise). MachineRegisterInfo *MRI = &MF.getRegInfo(); - MRI->constrainRegClass(SrcReg, &ARM::GPRPair_with_gsub_1_in_rGPRRegClass); + const TargetRegisterClass* TargetClass = TRI->getMatchingSuperRegClass(RC, + &ARM::rGPRRegClass, + ARM::gsub_1); + assert(TargetClass && "No Matching GPRPair with gsub_1 in rGPRRegClass"); + const TargetRegisterClass* ConstrainedClass = + MRI->constrainRegClass(SrcReg, TargetClass); + assert(ConstrainedClass && "Couldn't constrain the register class"); MachineInstrBuilder MIB = BuildMI(MBB, I, DL, get(ARM::t2STRDi8)); AddDReg(MIB, SrcReg, ARM::gsub_0, getKillRegState(isKill), TRI); @@ -193,7 +199,13 @@ loadRegFromStackSlot(MachineBasicBlock &MBB, MachineBasicBlock::iterator I, // gsub_0, but needs an extra constraint for gsub_1 (which could be sp // otherwise). MachineRegisterInfo *MRI = &MF.getRegInfo(); - MRI->constrainRegClass(DestReg, &ARM::GPRPair_with_gsub_1_in_rGPRRegClass); + const TargetRegisterClass* TargetClass = TRI->getMatchingSuperRegClass(RC, + &ARM::rGPRRegClass, + ARM::gsub_1); + assert(TargetClass && "No Matching GPRPair with gsub_1 in rGPRRegClass"); + const TargetRegisterClass* ConstrainedClass = + MRI->constrainRegClass(DestReg, TargetClass); + assert(ConstrainedClass && "Couldn't constrain the register class"); MachineInstrBuilder MIB = BuildMI(MBB, I, DL, get(ARM::t2LDRDi8)); AddDReg(MIB, DestReg, ARM::gsub_0, RegState::DefineNoRead, TRI); |

