forked from OSchip/llvm-project
Fix more of PR8825 by correctly using rGPR registers when lowering atomic
compare-and-swap intrinsics. llvm-svn: 131518
This commit is contained in:
parent
cd482e359e
commit
d7c55fe2ef
|
@ -4860,12 +4860,21 @@ ARMTargetLowering::EmitAtomicCmpSwap(MachineInstr *MI,
|
|||
unsigned ptr = MI->getOperand(1).getReg();
|
||||
unsigned oldval = MI->getOperand(2).getReg();
|
||||
unsigned newval = MI->getOperand(3).getReg();
|
||||
unsigned scratch = BB->getParent()->getRegInfo()
|
||||
.createVirtualRegister(ARM::GPRRegisterClass);
|
||||
const TargetInstrInfo *TII = getTargetMachine().getInstrInfo();
|
||||
DebugLoc dl = MI->getDebugLoc();
|
||||
bool isThumb2 = Subtarget->isThumb2();
|
||||
|
||||
MachineRegisterInfo &MRI = BB->getParent()->getRegInfo();
|
||||
unsigned scratch =
|
||||
MRI.createVirtualRegister(isThumb2 ? ARM::tGPRRegisterClass
|
||||
: ARM::GPRRegisterClass);
|
||||
|
||||
if (isThumb2) {
|
||||
MRI.constrainRegClass(dest, ARM::tGPRRegisterClass);
|
||||
MRI.constrainRegClass(oldval, ARM::tGPRRegisterClass);
|
||||
MRI.constrainRegClass(newval, ARM::tGPRRegisterClass);
|
||||
}
|
||||
|
||||
unsigned ldrOpc, strOpc;
|
||||
switch (Size) {
|
||||
default: llvm_unreachable("unsupported size for AtomicCmpSwap!");
|
||||
|
|
Loading…
Reference in New Issue