mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-02 22:23:10 +00:00
move target-independent opcodes out of TargetInstrInfo
into TargetOpcodes.h. #include the new TargetOpcodes.h into MachineInstr. Add new inline accessors (like isPHI()) to MachineInstr, and start using them throughout the codebase. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@95687 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -121,7 +121,7 @@ unsigned FastISel::getRegForValue(Value *V) {
|
||||
Reg = LocalValueMap[CE];
|
||||
} else if (isa<UndefValue>(V)) {
|
||||
Reg = createResultReg(TLI.getRegClassFor(VT));
|
||||
BuildMI(MBB, DL, TII.get(TargetInstrInfo::IMPLICIT_DEF), Reg);
|
||||
BuildMI(MBB, DL, TII.get(TargetOpcode::IMPLICIT_DEF), Reg);
|
||||
}
|
||||
|
||||
// If target-independent code couldn't handle the value, give target-specific
|
||||
@@ -971,7 +971,7 @@ unsigned FastISel::FastEmitInst_extractsubreg(MVT RetVT,
|
||||
const TargetRegisterClass* RC = MRI.getRegClass(Op0);
|
||||
|
||||
unsigned ResultReg = createResultReg(TLI.getRegClassFor(RetVT));
|
||||
const TargetInstrDesc &II = TII.get(TargetInstrInfo::EXTRACT_SUBREG);
|
||||
const TargetInstrDesc &II = TII.get(TargetOpcode::EXTRACT_SUBREG);
|
||||
|
||||
if (II.getNumDefs() >= 1)
|
||||
BuildMI(MBB, DL, II, ResultReg).addReg(Op0).addImm(Idx);
|
||||
|
||||
@@ -227,7 +227,7 @@ void FunctionLoweringInfo::set(Function &fn, MachineFunction &mf,
|
||||
unsigned NumRegisters = TLI.getNumRegisters(Fn->getContext(), VT);
|
||||
const TargetInstrInfo *TII = MF->getTarget().getInstrInfo();
|
||||
for (unsigned i = 0; i != NumRegisters; ++i)
|
||||
BuildMI(MBB, DL, TII->get(TargetInstrInfo::PHI), PHIReg + i);
|
||||
BuildMI(MBB, DL, TII->get(TargetOpcode::PHI), PHIReg + i);
|
||||
PHIReg += NumRegisters;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -178,7 +178,7 @@ void InstrEmitter::CreateVirtualRegisters(SDNode *Node, MachineInstr *MI,
|
||||
const TargetInstrDesc &II,
|
||||
bool IsClone, bool IsCloned,
|
||||
DenseMap<SDValue, unsigned> &VRBaseMap) {
|
||||
assert(Node->getMachineOpcode() != TargetInstrInfo::IMPLICIT_DEF &&
|
||||
assert(Node->getMachineOpcode() != TargetOpcode::IMPLICIT_DEF &&
|
||||
"IMPLICIT_DEF should have been handled as a special case elsewhere!");
|
||||
|
||||
for (unsigned i = 0; i < II.getNumDefs(); ++i) {
|
||||
@@ -236,7 +236,7 @@ void InstrEmitter::CreateVirtualRegisters(SDNode *Node, MachineInstr *MI,
|
||||
unsigned InstrEmitter::getVR(SDValue Op,
|
||||
DenseMap<SDValue, unsigned> &VRBaseMap) {
|
||||
if (Op.isMachineOpcode() &&
|
||||
Op.getMachineOpcode() == TargetInstrInfo::IMPLICIT_DEF) {
|
||||
Op.getMachineOpcode() == TargetOpcode::IMPLICIT_DEF) {
|
||||
// Add an IMPLICIT_DEF instruction before every use.
|
||||
unsigned VReg = getDstOfOnlyCopyToRegUse(Op.getNode(), Op.getResNo());
|
||||
// IMPLICIT_DEF can produce any type of result so its TargetInstrDesc
|
||||
@@ -246,7 +246,7 @@ unsigned InstrEmitter::getVR(SDValue Op,
|
||||
VReg = MRI->createVirtualRegister(RC);
|
||||
}
|
||||
BuildMI(MBB, Op.getDebugLoc(),
|
||||
TII->get(TargetInstrInfo::IMPLICIT_DEF), VReg);
|
||||
TII->get(TargetOpcode::IMPLICIT_DEF), VReg);
|
||||
return VReg;
|
||||
}
|
||||
|
||||
@@ -396,12 +396,12 @@ void InstrEmitter::EmitSubregNode(SDNode *Node,
|
||||
}
|
||||
}
|
||||
|
||||
if (Opc == TargetInstrInfo::EXTRACT_SUBREG) {
|
||||
if (Opc == TargetOpcode::EXTRACT_SUBREG) {
|
||||
unsigned SubIdx = cast<ConstantSDNode>(Node->getOperand(1))->getZExtValue();
|
||||
|
||||
// Create the extract_subreg machine instruction.
|
||||
MachineInstr *MI = BuildMI(*MF, Node->getDebugLoc(),
|
||||
TII->get(TargetInstrInfo::EXTRACT_SUBREG));
|
||||
TII->get(TargetOpcode::EXTRACT_SUBREG));
|
||||
|
||||
// Figure out the register class to create for the destreg.
|
||||
unsigned VReg = getVR(Node->getOperand(0), VRBaseMap);
|
||||
@@ -424,8 +424,8 @@ void InstrEmitter::EmitSubregNode(SDNode *Node,
|
||||
AddOperand(MI, Node->getOperand(0), 0, 0, VRBaseMap);
|
||||
MI->addOperand(MachineOperand::CreateImm(SubIdx));
|
||||
MBB->insert(InsertPos, MI);
|
||||
} else if (Opc == TargetInstrInfo::INSERT_SUBREG ||
|
||||
Opc == TargetInstrInfo::SUBREG_TO_REG) {
|
||||
} else if (Opc == TargetOpcode::INSERT_SUBREG ||
|
||||
Opc == TargetOpcode::SUBREG_TO_REG) {
|
||||
SDValue N0 = Node->getOperand(0);
|
||||
SDValue N1 = Node->getOperand(1);
|
||||
SDValue N2 = Node->getOperand(2);
|
||||
@@ -452,7 +452,7 @@ void InstrEmitter::EmitSubregNode(SDNode *Node,
|
||||
|
||||
// If creating a subreg_to_reg, then the first input operand
|
||||
// is an implicit value immediate, otherwise it's a register
|
||||
if (Opc == TargetInstrInfo::SUBREG_TO_REG) {
|
||||
if (Opc == TargetOpcode::SUBREG_TO_REG) {
|
||||
const ConstantSDNode *SD = cast<ConstantSDNode>(N0);
|
||||
MI->addOperand(MachineOperand::CreateImm(SD->getZExtValue()));
|
||||
} else
|
||||
@@ -507,20 +507,20 @@ void InstrEmitter::EmitNode(SDNode *Node, bool IsClone, bool IsCloned,
|
||||
unsigned Opc = Node->getMachineOpcode();
|
||||
|
||||
// Handle subreg insert/extract specially
|
||||
if (Opc == TargetInstrInfo::EXTRACT_SUBREG ||
|
||||
Opc == TargetInstrInfo::INSERT_SUBREG ||
|
||||
Opc == TargetInstrInfo::SUBREG_TO_REG) {
|
||||
if (Opc == TargetOpcode::EXTRACT_SUBREG ||
|
||||
Opc == TargetOpcode::INSERT_SUBREG ||
|
||||
Opc == TargetOpcode::SUBREG_TO_REG) {
|
||||
EmitSubregNode(Node, VRBaseMap);
|
||||
return;
|
||||
}
|
||||
|
||||
// Handle COPY_TO_REGCLASS specially.
|
||||
if (Opc == TargetInstrInfo::COPY_TO_REGCLASS) {
|
||||
if (Opc == TargetOpcode::COPY_TO_REGCLASS) {
|
||||
EmitCopyToRegClassNode(Node, VRBaseMap);
|
||||
return;
|
||||
}
|
||||
|
||||
if (Opc == TargetInstrInfo::IMPLICIT_DEF)
|
||||
if (Opc == TargetOpcode::IMPLICIT_DEF)
|
||||
// We want a unique VR for each IMPLICIT_DEF use.
|
||||
return;
|
||||
|
||||
@@ -640,7 +640,7 @@ void InstrEmitter::EmitNode(SDNode *Node, bool IsClone, bool IsCloned,
|
||||
|
||||
// Create the inline asm machine instruction.
|
||||
MachineInstr *MI = BuildMI(*MF, Node->getDebugLoc(),
|
||||
TII->get(TargetInstrInfo::INLINEASM));
|
||||
TII->get(TargetOpcode::INLINEASM));
|
||||
|
||||
// Add the asm string as an external symbol operand.
|
||||
const char *AsmStr =
|
||||
|
||||
@@ -1042,9 +1042,9 @@ namespace {
|
||||
// CopyToReg should be close to its uses to facilitate coalescing and
|
||||
// avoid spilling.
|
||||
return 0;
|
||||
if (Opc == TargetInstrInfo::EXTRACT_SUBREG ||
|
||||
Opc == TargetInstrInfo::SUBREG_TO_REG ||
|
||||
Opc == TargetInstrInfo::INSERT_SUBREG)
|
||||
if (Opc == TargetOpcode::EXTRACT_SUBREG ||
|
||||
Opc == TargetOpcode::SUBREG_TO_REG ||
|
||||
Opc == TargetOpcode::INSERT_SUBREG)
|
||||
// EXTRACT_SUBREG, INSERT_SUBREG, and SUBREG_TO_REG nodes should be
|
||||
// close to their uses to facilitate coalescing.
|
||||
return 0;
|
||||
@@ -1445,7 +1445,7 @@ void RegReductionPriorityQueue<SF>::AddPseudoTwoAddrDeps() {
|
||||
while (SuccSU->Succs.size() == 1 &&
|
||||
SuccSU->getNode()->isMachineOpcode() &&
|
||||
SuccSU->getNode()->getMachineOpcode() ==
|
||||
TargetInstrInfo::COPY_TO_REGCLASS)
|
||||
TargetOpcode::COPY_TO_REGCLASS)
|
||||
SuccSU = SuccSU->Succs.front().getSUnit();
|
||||
// Don't constrain non-instruction nodes.
|
||||
if (!SuccSU->getNode() || !SuccSU->getNode()->isMachineOpcode())
|
||||
@@ -1459,9 +1459,9 @@ void RegReductionPriorityQueue<SF>::AddPseudoTwoAddrDeps() {
|
||||
// Don't constrain EXTRACT_SUBREG, INSERT_SUBREG, and SUBREG_TO_REG;
|
||||
// these may be coalesced away. We want them close to their uses.
|
||||
unsigned SuccOpc = SuccSU->getNode()->getMachineOpcode();
|
||||
if (SuccOpc == TargetInstrInfo::EXTRACT_SUBREG ||
|
||||
SuccOpc == TargetInstrInfo::INSERT_SUBREG ||
|
||||
SuccOpc == TargetInstrInfo::SUBREG_TO_REG)
|
||||
if (SuccOpc == TargetOpcode::EXTRACT_SUBREG ||
|
||||
SuccOpc == TargetOpcode::INSERT_SUBREG ||
|
||||
SuccOpc == TargetOpcode::SUBREG_TO_REG)
|
||||
continue;
|
||||
if ((!canClobber(SuccSU, DUSU) ||
|
||||
(hasCopyToRegUse(SU) && !hasCopyToRegUse(SuccSU)) ||
|
||||
|
||||
@@ -4872,23 +4872,23 @@ SelectionDAG::getMachineNode(unsigned Opcode, DebugLoc DL, SDVTList VTs,
|
||||
}
|
||||
|
||||
/// getTargetExtractSubreg - A convenience function for creating
|
||||
/// TargetInstrInfo::EXTRACT_SUBREG nodes.
|
||||
/// TargetOpcode::EXTRACT_SUBREG nodes.
|
||||
SDValue
|
||||
SelectionDAG::getTargetExtractSubreg(int SRIdx, DebugLoc DL, EVT VT,
|
||||
SDValue Operand) {
|
||||
SDValue SRIdxVal = getTargetConstant(SRIdx, MVT::i32);
|
||||
SDNode *Subreg = getMachineNode(TargetInstrInfo::EXTRACT_SUBREG, DL,
|
||||
SDNode *Subreg = getMachineNode(TargetOpcode::EXTRACT_SUBREG, DL,
|
||||
VT, Operand, SRIdxVal);
|
||||
return SDValue(Subreg, 0);
|
||||
}
|
||||
|
||||
/// getTargetInsertSubreg - A convenience function for creating
|
||||
/// TargetInstrInfo::INSERT_SUBREG nodes.
|
||||
/// TargetOpcode::INSERT_SUBREG nodes.
|
||||
SDValue
|
||||
SelectionDAG::getTargetInsertSubreg(int SRIdx, DebugLoc DL, EVT VT,
|
||||
SDValue Operand, SDValue Subreg) {
|
||||
SDValue SRIdxVal = getTargetConstant(SRIdx, MVT::i32);
|
||||
SDNode *Result = getMachineNode(TargetInstrInfo::INSERT_SUBREG, DL,
|
||||
SDNode *Result = getMachineNode(TargetOpcode::INSERT_SUBREG, DL,
|
||||
VT, Operand, Subreg, SRIdxVal);
|
||||
return SDValue(Result, 0);
|
||||
}
|
||||
|
||||
@@ -801,7 +801,7 @@ void SelectionDAGISel::SelectAllBasicBlocks(Function &Fn,
|
||||
// landing pad can thus be detected via the MachineModuleInfo.
|
||||
unsigned LabelID = MMI->addLandingPad(BB);
|
||||
|
||||
const TargetInstrDesc &II = TII.get(TargetInstrInfo::EH_LABEL);
|
||||
const TargetInstrDesc &II = TII.get(TargetOpcode::EH_LABEL);
|
||||
BuildMI(BB, SDB->getCurDebugLoc(), II).addImm(LabelID);
|
||||
|
||||
// Mark exception register as live in.
|
||||
@@ -953,7 +953,7 @@ SelectionDAGISel::FinishBasicBlock() {
|
||||
SDB->BitTestCases.empty()) {
|
||||
for (unsigned i = 0, e = SDB->PHINodesToUpdate.size(); i != e; ++i) {
|
||||
MachineInstr *PHI = SDB->PHINodesToUpdate[i].first;
|
||||
assert(PHI->getOpcode() == TargetInstrInfo::PHI &&
|
||||
assert(PHI->isPHI() &&
|
||||
"This is not a machine PHI node that we are updating!");
|
||||
PHI->addOperand(MachineOperand::CreateReg(SDB->PHINodesToUpdate[i].second,
|
||||
false));
|
||||
@@ -1000,7 +1000,7 @@ SelectionDAGISel::FinishBasicBlock() {
|
||||
for (unsigned pi = 0, pe = SDB->PHINodesToUpdate.size(); pi != pe; ++pi) {
|
||||
MachineInstr *PHI = SDB->PHINodesToUpdate[pi].first;
|
||||
MachineBasicBlock *PHIBB = PHI->getParent();
|
||||
assert(PHI->getOpcode() == TargetInstrInfo::PHI &&
|
||||
assert(PHI->isPHI() &&
|
||||
"This is not a machine PHI node that we are updating!");
|
||||
// This is "default" BB. We have two jumps to it. From "header" BB and
|
||||
// from last "case" BB.
|
||||
@@ -1056,7 +1056,7 @@ SelectionDAGISel::FinishBasicBlock() {
|
||||
for (unsigned pi = 0, pe = SDB->PHINodesToUpdate.size(); pi != pe; ++pi) {
|
||||
MachineInstr *PHI = SDB->PHINodesToUpdate[pi].first;
|
||||
MachineBasicBlock *PHIBB = PHI->getParent();
|
||||
assert(PHI->getOpcode() == TargetInstrInfo::PHI &&
|
||||
assert(PHI->isPHI() &&
|
||||
"This is not a machine PHI node that we are updating!");
|
||||
// "default" BB. We can go there only from header BB.
|
||||
if (PHIBB == SDB->JTCases[i].second.Default) {
|
||||
@@ -1079,7 +1079,7 @@ SelectionDAGISel::FinishBasicBlock() {
|
||||
// need to update PHI nodes in that block.
|
||||
for (unsigned i = 0, e = SDB->PHINodesToUpdate.size(); i != e; ++i) {
|
||||
MachineInstr *PHI = SDB->PHINodesToUpdate[i].first;
|
||||
assert(PHI->getOpcode() == TargetInstrInfo::PHI &&
|
||||
assert(PHI->isPHI() &&
|
||||
"This is not a machine PHI node that we are updating!");
|
||||
if (BB->isSuccessor(PHI->getParent())) {
|
||||
PHI->addOperand(MachineOperand::CreateReg(SDB->PHINodesToUpdate[i].second,
|
||||
@@ -1116,7 +1116,7 @@ SelectionDAGISel::FinishBasicBlock() {
|
||||
// BB may have been removed from the CFG if a branch was constant folded.
|
||||
if (ThisBB->isSuccessor(BB)) {
|
||||
for (MachineBasicBlock::iterator Phi = BB->begin();
|
||||
Phi != BB->end() && Phi->getOpcode() == TargetInstrInfo::PHI;
|
||||
Phi != BB->end() && Phi->isPHI();
|
||||
++Phi) {
|
||||
// This value for this PHI node is recorded in PHINodesToUpdate.
|
||||
for (unsigned pn = 0; ; ++pn) {
|
||||
@@ -1410,15 +1410,14 @@ SDNode *SelectionDAGISel::Select_INLINEASM(SDNode *N) {
|
||||
}
|
||||
|
||||
SDNode *SelectionDAGISel::Select_UNDEF(SDNode *N) {
|
||||
return CurDAG->SelectNodeTo(N, TargetInstrInfo::IMPLICIT_DEF,
|
||||
N->getValueType(0));
|
||||
return CurDAG->SelectNodeTo(N, TargetOpcode::IMPLICIT_DEF,N->getValueType(0));
|
||||
}
|
||||
|
||||
SDNode *SelectionDAGISel::Select_EH_LABEL(SDNode *N) {
|
||||
SDValue Chain = N->getOperand(0);
|
||||
unsigned C = cast<LabelSDNode>(N)->getLabelID();
|
||||
SDValue Tmp = CurDAG->getTargetConstant(C, MVT::i32);
|
||||
return CurDAG->SelectNodeTo(N, TargetInstrInfo::EH_LABEL,
|
||||
return CurDAG->SelectNodeTo(N, TargetOpcode::EH_LABEL,
|
||||
MVT::Other, Tmp, Chain);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user