mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-13 08:26:02 +00:00
[arm fast-isel] Appease the machine verifier by using the proper register
classes. The associated test case still doesn't pass, but it does have far fewer issues. rdar://12719844 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@168657 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -563,7 +563,9 @@ unsigned ARMFastISel::ARMMaterializeInt(const Constant *C, EVT VT) {
|
|||||||
const ConstantInt *CI = cast<ConstantInt>(C);
|
const ConstantInt *CI = cast<ConstantInt>(C);
|
||||||
if (Subtarget->hasV6T2Ops() && isUInt<16>(CI->getZExtValue())) {
|
if (Subtarget->hasV6T2Ops() && isUInt<16>(CI->getZExtValue())) {
|
||||||
unsigned Opc = isThumb2 ? ARM::t2MOVi16 : ARM::MOVi16;
|
unsigned Opc = isThumb2 ? ARM::t2MOVi16 : ARM::MOVi16;
|
||||||
unsigned ImmReg = createResultReg(TLI.getRegClassFor(MVT::i32));
|
const TargetRegisterClass *RC = isThumb2 ? &ARM::rGPRRegClass :
|
||||||
|
&ARM::GPRRegClass;
|
||||||
|
unsigned ImmReg = createResultReg(RC);
|
||||||
AddOptionalDefs(BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL,
|
AddOptionalDefs(BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL,
|
||||||
TII.get(Opc), ImmReg)
|
TII.get(Opc), ImmReg)
|
||||||
.addImm(CI->getZExtValue()));
|
.addImm(CI->getZExtValue()));
|
||||||
@@ -2577,15 +2579,18 @@ unsigned ARMFastISel::ARMEmitIntExt(EVT SrcVT, unsigned SrcReg, EVT DestVT,
|
|||||||
|
|
||||||
unsigned Opc;
|
unsigned Opc;
|
||||||
bool isBoolZext = false;
|
bool isBoolZext = false;
|
||||||
|
const TargetRegisterClass *RC = TLI.getRegClassFor(MVT::i32);
|
||||||
if (!SrcVT.isSimple()) return 0;
|
if (!SrcVT.isSimple()) return 0;
|
||||||
switch (SrcVT.getSimpleVT().SimpleTy) {
|
switch (SrcVT.getSimpleVT().SimpleTy) {
|
||||||
default: return 0;
|
default: return 0;
|
||||||
case MVT::i16:
|
case MVT::i16:
|
||||||
if (!Subtarget->hasV6Ops()) return 0;
|
if (!Subtarget->hasV6Ops()) return 0;
|
||||||
if (isZExt)
|
if (isZExt) {
|
||||||
Opc = isThumb2 ? ARM::t2UXTH : ARM::UXTH;
|
Opc = isThumb2 ? ARM::t2UXTH : ARM::UXTH;
|
||||||
else
|
} else {
|
||||||
Opc = isThumb2 ? ARM::t2SXTH : ARM::SXTH;
|
Opc = isThumb2 ? ARM::t2SXTH : ARM::SXTH;
|
||||||
|
RC = isThumb2 ?&ARM::rGPRRegClass : &ARM::GPRnopcRegClass;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case MVT::i8:
|
case MVT::i8:
|
||||||
if (!Subtarget->hasV6Ops()) return 0;
|
if (!Subtarget->hasV6Ops()) return 0;
|
||||||
@@ -2597,13 +2602,14 @@ unsigned ARMFastISel::ARMEmitIntExt(EVT SrcVT, unsigned SrcReg, EVT DestVT,
|
|||||||
case MVT::i1:
|
case MVT::i1:
|
||||||
if (isZExt) {
|
if (isZExt) {
|
||||||
Opc = isThumb2 ? ARM::t2ANDri : ARM::ANDri;
|
Opc = isThumb2 ? ARM::t2ANDri : ARM::ANDri;
|
||||||
|
RC = isThumb2 ? &ARM::rGPRRegClass : &ARM::GPRRegClass;
|
||||||
isBoolZext = true;
|
isBoolZext = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned ResultReg = createResultReg(TLI.getRegClassFor(MVT::i32));
|
unsigned ResultReg = createResultReg(RC);
|
||||||
MachineInstrBuilder MIB;
|
MachineInstrBuilder MIB;
|
||||||
MIB = BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(Opc), ResultReg)
|
MIB = BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(Opc), ResultReg)
|
||||||
.addReg(SrcReg);
|
.addReg(SrcReg);
|
||||||
|
Reference in New Issue
Block a user