ARM FastISel fix load register classes
The register classes when emitting loads weren't quite restricting enough, leading to MI verification failure on the result register. These are new failures that weren't there the first time I tried enabling ARM FastISel for new targets. llvm-svn: 183624
This commit is contained in:
parent
0fc8670cb0
commit
652fa6a8b2
|
@ -1026,7 +1026,7 @@ bool ARMFastISel::ARMEmitLoad(MVT VT, unsigned &ResultReg, Address &Addr,
|
|||
useAM3 = true;
|
||||
}
|
||||
}
|
||||
RC = &ARM::GPRRegClass;
|
||||
RC = isThumb2 ? &ARM::rGPRRegClass : &ARM::GPRnopcRegClass;
|
||||
break;
|
||||
case MVT::i16:
|
||||
if (Alignment && Alignment < 2 && !Subtarget->allowsUnalignedMem())
|
||||
|
@ -1041,7 +1041,7 @@ bool ARMFastISel::ARMEmitLoad(MVT VT, unsigned &ResultReg, Address &Addr,
|
|||
Opc = isZExt ? ARM::LDRH : ARM::LDRSH;
|
||||
useAM3 = true;
|
||||
}
|
||||
RC = &ARM::GPRRegClass;
|
||||
RC = isThumb2 ? &ARM::rGPRRegClass : &ARM::GPRnopcRegClass;
|
||||
break;
|
||||
case MVT::i32:
|
||||
if (Alignment && Alignment < 4 && !Subtarget->allowsUnalignedMem())
|
||||
|
@ -1055,7 +1055,7 @@ bool ARMFastISel::ARMEmitLoad(MVT VT, unsigned &ResultReg, Address &Addr,
|
|||
} else {
|
||||
Opc = ARM::LDRi12;
|
||||
}
|
||||
RC = &ARM::GPRRegClass;
|
||||
RC = isThumb2 ? &ARM::rGPRRegClass : &ARM::GPRnopcRegClass;
|
||||
break;
|
||||
case MVT::f32:
|
||||
if (!Subtarget->hasVFP2()) return false;
|
||||
|
@ -1064,7 +1064,7 @@ bool ARMFastISel::ARMEmitLoad(MVT VT, unsigned &ResultReg, Address &Addr,
|
|||
needVMOV = true;
|
||||
VT = MVT::i32;
|
||||
Opc = isThumb2 ? ARM::t2LDRi12 : ARM::LDRi12;
|
||||
RC = &ARM::GPRRegClass;
|
||||
RC = isThumb2 ? &ARM::rGPRRegClass : &ARM::GPRnopcRegClass;
|
||||
} else {
|
||||
Opc = ARM::VLDRS;
|
||||
RC = TLI.getRegClassFor(VT);
|
||||
|
|
Loading…
Reference in New Issue