mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-26 12:20:42 +00:00
Change TargetLowering::getRegClassFor to take an MVT, instead of EVT.
Accordingly, add helper funtions getSimpleValueType (in parallel to getValueType) in SDValue, SDNode, and TargetLowering. This is the first, in a series of patches. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169837 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -99,7 +99,7 @@ EmitCopyFromReg(SDNode *Node, unsigned ResNo, bool IsClone, bool IsCloned,
|
||||
// the CopyToReg'd destination register instead of creating a new vreg.
|
||||
bool MatchReg = true;
|
||||
const TargetRegisterClass *UseRC = NULL;
|
||||
EVT VT = Node->getValueType(ResNo);
|
||||
MVT VT = Node->getSimpleValueType(ResNo);
|
||||
|
||||
// Stick to the preferred register classes for legal types.
|
||||
if (TLI->isTypeLegal(VT))
|
||||
@@ -272,7 +272,8 @@ unsigned InstrEmitter::getVR(SDValue Op,
|
||||
// IMPLICIT_DEF can produce any type of result so its MCInstrDesc
|
||||
// does not include operand register class info.
|
||||
if (!VReg) {
|
||||
const TargetRegisterClass *RC = TLI->getRegClassFor(Op.getValueType());
|
||||
const TargetRegisterClass *RC =
|
||||
TLI->getRegClassFor(Op.getSimpleValueType());
|
||||
VReg = MRI->createVirtualRegister(RC);
|
||||
}
|
||||
BuildMI(*MBB, InsertPos, Op.getDebugLoc(),
|
||||
@@ -426,7 +427,7 @@ void InstrEmitter::AddOperand(MachineInstr *MI, SDValue Op,
|
||||
}
|
||||
|
||||
unsigned InstrEmitter::ConstrainForSubReg(unsigned VReg, unsigned SubIdx,
|
||||
EVT VT, DebugLoc DL) {
|
||||
MVT VT, DebugLoc DL) {
|
||||
const TargetRegisterClass *VRC = MRI->getRegClass(VReg);
|
||||
const TargetRegisterClass *RC = TRI->getSubClassWithSubReg(VRC, SubIdx);
|
||||
|
||||
@@ -477,7 +478,8 @@ void InstrEmitter::EmitSubregNode(SDNode *Node,
|
||||
// constraints on the %dst register, COPY can target all legal register
|
||||
// classes.
|
||||
unsigned SubIdx = cast<ConstantSDNode>(Node->getOperand(1))->getZExtValue();
|
||||
const TargetRegisterClass *TRC = TLI->getRegClassFor(Node->getValueType(0));
|
||||
const TargetRegisterClass *TRC =
|
||||
TLI->getRegClassFor(Node->getSimpleValueType(0));
|
||||
|
||||
unsigned VReg = getVR(Node->getOperand(0), VRBaseMap);
|
||||
MachineInstr *DefMI = MRI->getVRegDef(VReg);
|
||||
@@ -500,7 +502,7 @@ void InstrEmitter::EmitSubregNode(SDNode *Node,
|
||||
// constrain its register class or issue a COPY to a compatible register
|
||||
// class.
|
||||
VReg = ConstrainForSubReg(VReg, SubIdx,
|
||||
Node->getOperand(0).getValueType(),
|
||||
Node->getOperand(0).getSimpleValueType(),
|
||||
Node->getDebugLoc());
|
||||
|
||||
// Create the destreg if it is missing.
|
||||
@@ -532,7 +534,7 @@ void InstrEmitter::EmitSubregNode(SDNode *Node,
|
||||
//
|
||||
// There is no constraint on the %src register class.
|
||||
//
|
||||
const TargetRegisterClass *SRC = TLI->getRegClassFor(Node->getValueType(0));
|
||||
const TargetRegisterClass *SRC = TLI->getRegClassFor(Node->getSimpleValueType(0));
|
||||
SRC = TRI->getSubClassWithSubReg(SRC, SubIdx);
|
||||
assert(SRC && "No register class supports VT and SubIdx for INSERT_SUBREG");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user