mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-21 23:17:16 +00:00
- Rename TargetInstrDesc, TargetOperandInfo to MCInstrDesc and MCOperandInfo and
sink them into MC layer. - Added MCInstrInfo, which captures the tablegen generated static data. Chang TargetInstrInfo so it's based off MCInstrInfo. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134021 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -24,10 +24,10 @@
|
||||
#include "llvm/CodeGen/MachineMemOperand.h"
|
||||
#include "llvm/CodeGen/MachineRegisterInfo.h"
|
||||
#include "llvm/CodeGen/PseudoSourceValue.h"
|
||||
#include "llvm/MC/MCInstrDesc.h"
|
||||
#include "llvm/MC/MCSymbol.h"
|
||||
#include "llvm/Target/TargetMachine.h"
|
||||
#include "llvm/Target/TargetInstrInfo.h"
|
||||
#include "llvm/Target/TargetInstrDesc.h"
|
||||
#include "llvm/Target/TargetRegisterInfo.h"
|
||||
#include "llvm/Analysis/AliasAnalysis.h"
|
||||
#include "llvm/Analysis/DebugInfo.h"
|
||||
@@ -457,9 +457,9 @@ raw_ostream &llvm::operator<<(raw_ostream &OS, const MachineMemOperand &MMO) {
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
/// MachineInstr ctor - This constructor creates a dummy MachineInstr with
|
||||
/// TID NULL and no operands.
|
||||
/// MCID NULL and no operands.
|
||||
MachineInstr::MachineInstr()
|
||||
: TID(0), NumImplicitOps(0), Flags(0), AsmPrinterFlags(0),
|
||||
: MCID(0), NumImplicitOps(0), Flags(0), AsmPrinterFlags(0),
|
||||
MemRefs(0), MemRefsEnd(0),
|
||||
Parent(0) {
|
||||
// Make sure that we get added to a machine basicblock
|
||||
@@ -467,23 +467,23 @@ MachineInstr::MachineInstr()
|
||||
}
|
||||
|
||||
void MachineInstr::addImplicitDefUseOperands() {
|
||||
if (TID->ImplicitDefs)
|
||||
for (const unsigned *ImpDefs = TID->ImplicitDefs; *ImpDefs; ++ImpDefs)
|
||||
if (MCID->ImplicitDefs)
|
||||
for (const unsigned *ImpDefs = MCID->ImplicitDefs; *ImpDefs; ++ImpDefs)
|
||||
addOperand(MachineOperand::CreateReg(*ImpDefs, true, true));
|
||||
if (TID->ImplicitUses)
|
||||
for (const unsigned *ImpUses = TID->ImplicitUses; *ImpUses; ++ImpUses)
|
||||
if (MCID->ImplicitUses)
|
||||
for (const unsigned *ImpUses = MCID->ImplicitUses; *ImpUses; ++ImpUses)
|
||||
addOperand(MachineOperand::CreateReg(*ImpUses, false, true));
|
||||
}
|
||||
|
||||
/// MachineInstr ctor - This constructor creates a MachineInstr and adds the
|
||||
/// implicit operands. It reserves space for the number of operands specified by
|
||||
/// the TargetInstrDesc.
|
||||
MachineInstr::MachineInstr(const TargetInstrDesc &tid, bool NoImp)
|
||||
: TID(&tid), NumImplicitOps(0), Flags(0), AsmPrinterFlags(0),
|
||||
/// the MCInstrDesc.
|
||||
MachineInstr::MachineInstr(const MCInstrDesc &tid, bool NoImp)
|
||||
: MCID(&tid), NumImplicitOps(0), Flags(0), AsmPrinterFlags(0),
|
||||
MemRefs(0), MemRefsEnd(0), Parent(0) {
|
||||
if (!NoImp)
|
||||
NumImplicitOps = TID->getNumImplicitDefs() + TID->getNumImplicitUses();
|
||||
Operands.reserve(NumImplicitOps + TID->getNumOperands());
|
||||
NumImplicitOps = MCID->getNumImplicitDefs() + MCID->getNumImplicitUses();
|
||||
Operands.reserve(NumImplicitOps + MCID->getNumOperands());
|
||||
if (!NoImp)
|
||||
addImplicitDefUseOperands();
|
||||
// Make sure that we get added to a machine basicblock
|
||||
@@ -491,13 +491,13 @@ MachineInstr::MachineInstr(const TargetInstrDesc &tid, bool NoImp)
|
||||
}
|
||||
|
||||
/// MachineInstr ctor - As above, but with a DebugLoc.
|
||||
MachineInstr::MachineInstr(const TargetInstrDesc &tid, const DebugLoc dl,
|
||||
MachineInstr::MachineInstr(const MCInstrDesc &tid, const DebugLoc dl,
|
||||
bool NoImp)
|
||||
: TID(&tid), NumImplicitOps(0), Flags(0), AsmPrinterFlags(0),
|
||||
: MCID(&tid), NumImplicitOps(0), Flags(0), AsmPrinterFlags(0),
|
||||
MemRefs(0), MemRefsEnd(0), Parent(0), debugLoc(dl) {
|
||||
if (!NoImp)
|
||||
NumImplicitOps = TID->getNumImplicitDefs() + TID->getNumImplicitUses();
|
||||
Operands.reserve(NumImplicitOps + TID->getNumOperands());
|
||||
NumImplicitOps = MCID->getNumImplicitDefs() + MCID->getNumImplicitUses();
|
||||
Operands.reserve(NumImplicitOps + MCID->getNumOperands());
|
||||
if (!NoImp)
|
||||
addImplicitDefUseOperands();
|
||||
// Make sure that we get added to a machine basicblock
|
||||
@@ -507,12 +507,12 @@ MachineInstr::MachineInstr(const TargetInstrDesc &tid, const DebugLoc dl,
|
||||
/// MachineInstr ctor - Work exactly the same as the ctor two above, except
|
||||
/// that the MachineInstr is created and added to the end of the specified
|
||||
/// basic block.
|
||||
MachineInstr::MachineInstr(MachineBasicBlock *MBB, const TargetInstrDesc &tid)
|
||||
: TID(&tid), NumImplicitOps(0), Flags(0), AsmPrinterFlags(0),
|
||||
MachineInstr::MachineInstr(MachineBasicBlock *MBB, const MCInstrDesc &tid)
|
||||
: MCID(&tid), NumImplicitOps(0), Flags(0), AsmPrinterFlags(0),
|
||||
MemRefs(0), MemRefsEnd(0), Parent(0) {
|
||||
assert(MBB && "Cannot use inserting ctor with null basic block!");
|
||||
NumImplicitOps = TID->getNumImplicitDefs() + TID->getNumImplicitUses();
|
||||
Operands.reserve(NumImplicitOps + TID->getNumOperands());
|
||||
NumImplicitOps = MCID->getNumImplicitDefs() + MCID->getNumImplicitUses();
|
||||
Operands.reserve(NumImplicitOps + MCID->getNumOperands());
|
||||
addImplicitDefUseOperands();
|
||||
// Make sure that we get added to a machine basicblock
|
||||
LeakDetector::addGarbageObject(this);
|
||||
@@ -522,12 +522,12 @@ MachineInstr::MachineInstr(MachineBasicBlock *MBB, const TargetInstrDesc &tid)
|
||||
/// MachineInstr ctor - As above, but with a DebugLoc.
|
||||
///
|
||||
MachineInstr::MachineInstr(MachineBasicBlock *MBB, const DebugLoc dl,
|
||||
const TargetInstrDesc &tid)
|
||||
: TID(&tid), NumImplicitOps(0), Flags(0), AsmPrinterFlags(0),
|
||||
const MCInstrDesc &tid)
|
||||
: MCID(&tid), NumImplicitOps(0), Flags(0), AsmPrinterFlags(0),
|
||||
MemRefs(0), MemRefsEnd(0), Parent(0), debugLoc(dl) {
|
||||
assert(MBB && "Cannot use inserting ctor with null basic block!");
|
||||
NumImplicitOps = TID->getNumImplicitDefs() + TID->getNumImplicitUses();
|
||||
Operands.reserve(NumImplicitOps + TID->getNumOperands());
|
||||
NumImplicitOps = MCID->getNumImplicitDefs() + MCID->getNumImplicitUses();
|
||||
Operands.reserve(NumImplicitOps + MCID->getNumOperands());
|
||||
addImplicitDefUseOperands();
|
||||
// Make sure that we get added to a machine basicblock
|
||||
LeakDetector::addGarbageObject(this);
|
||||
@@ -537,7 +537,7 @@ MachineInstr::MachineInstr(MachineBasicBlock *MBB, const DebugLoc dl,
|
||||
/// MachineInstr ctor - Copies MachineInstr arg exactly
|
||||
///
|
||||
MachineInstr::MachineInstr(MachineFunction &MF, const MachineInstr &MI)
|
||||
: TID(&MI.getDesc()), NumImplicitOps(0), Flags(0), AsmPrinterFlags(0),
|
||||
: MCID(&MI.getDesc()), NumImplicitOps(0), Flags(0), AsmPrinterFlags(0),
|
||||
MemRefs(MI.MemRefs), MemRefsEnd(MI.MemRefsEnd),
|
||||
Parent(0), debugLoc(MI.getDebugLoc()) {
|
||||
Operands.reserve(MI.getNumOperands());
|
||||
@@ -624,7 +624,7 @@ void MachineInstr::addOperand(const MachineOperand &Op) {
|
||||
Operands.back().AddRegOperandToRegInfo(RegInfo);
|
||||
// If the register operand is flagged as early, mark the operand as such
|
||||
unsigned OpNo = Operands.size() - 1;
|
||||
if (TID->getOperandConstraint(OpNo, TOI::EARLY_CLOBBER) != -1)
|
||||
if (MCID->getOperandConstraint(OpNo, MCOI::EARLY_CLOBBER) != -1)
|
||||
Operands[OpNo].setIsEarlyClobber(true);
|
||||
}
|
||||
return;
|
||||
@@ -646,7 +646,7 @@ void MachineInstr::addOperand(const MachineOperand &Op) {
|
||||
if (Operands[OpNo].isReg()) {
|
||||
Operands[OpNo].AddRegOperandToRegInfo(0);
|
||||
// If the register operand is flagged as early, mark the operand as such
|
||||
if (TID->getOperandConstraint(OpNo, TOI::EARLY_CLOBBER) != -1)
|
||||
if (MCID->getOperandConstraint(OpNo, MCOI::EARLY_CLOBBER) != -1)
|
||||
Operands[OpNo].setIsEarlyClobber(true);
|
||||
}
|
||||
|
||||
@@ -671,7 +671,7 @@ void MachineInstr::addOperand(const MachineOperand &Op) {
|
||||
if (Operands[OpNo].isReg()) {
|
||||
Operands[OpNo].AddRegOperandToRegInfo(RegInfo);
|
||||
// If the register operand is flagged as early, mark the operand as such
|
||||
if (TID->getOperandConstraint(OpNo, TOI::EARLY_CLOBBER) != -1)
|
||||
if (MCID->getOperandConstraint(OpNo, MCOI::EARLY_CLOBBER) != -1)
|
||||
Operands[OpNo].setIsEarlyClobber(true);
|
||||
}
|
||||
|
||||
@@ -694,7 +694,7 @@ void MachineInstr::addOperand(const MachineOperand &Op) {
|
||||
|
||||
// If the register operand is flagged as early, mark the operand as such
|
||||
if (Operands[OpNo].isReg()
|
||||
&& TID->getOperandConstraint(OpNo, TOI::EARLY_CLOBBER) != -1)
|
||||
&& MCID->getOperandConstraint(OpNo, MCOI::EARLY_CLOBBER) != -1)
|
||||
Operands[OpNo].setIsEarlyClobber(true);
|
||||
}
|
||||
}
|
||||
@@ -820,8 +820,8 @@ void MachineInstr::eraseFromParent() {
|
||||
/// OperandComplete - Return true if it's illegal to add a new operand
|
||||
///
|
||||
bool MachineInstr::OperandsComplete() const {
|
||||
unsigned short NumOperands = TID->getNumOperands();
|
||||
if (!TID->isVariadic() && getNumOperands()-NumImplicitOps >= NumOperands)
|
||||
unsigned short NumOperands = MCID->getNumOperands();
|
||||
if (!MCID->isVariadic() && getNumOperands()-NumImplicitOps >= NumOperands)
|
||||
return true; // Broken: we have all the operands of this instruction!
|
||||
return false;
|
||||
}
|
||||
@@ -829,8 +829,8 @@ bool MachineInstr::OperandsComplete() const {
|
||||
/// getNumExplicitOperands - Returns the number of non-implicit operands.
|
||||
///
|
||||
unsigned MachineInstr::getNumExplicitOperands() const {
|
||||
unsigned NumOperands = TID->getNumOperands();
|
||||
if (!TID->isVariadic())
|
||||
unsigned NumOperands = MCID->getNumOperands();
|
||||
if (!MCID->isVariadic())
|
||||
return NumOperands;
|
||||
|
||||
for (unsigned i = NumOperands, e = getNumOperands(); i != e; ++i) {
|
||||
@@ -931,10 +931,10 @@ MachineInstr::findRegisterDefOperandIdx(unsigned Reg, bool isDead, bool Overlap,
|
||||
/// operand list that is used to represent the predicate. It returns -1 if
|
||||
/// none is found.
|
||||
int MachineInstr::findFirstPredOperandIdx() const {
|
||||
const TargetInstrDesc &TID = getDesc();
|
||||
if (TID.isPredicable()) {
|
||||
const MCInstrDesc &MCID = getDesc();
|
||||
if (MCID.isPredicable()) {
|
||||
for (unsigned i = 0, e = getNumOperands(); i != e; ++i)
|
||||
if (TID.OpInfo[i].isPredicate())
|
||||
if (MCID.OpInfo[i].isPredicate())
|
||||
return i;
|
||||
}
|
||||
|
||||
@@ -990,11 +990,11 @@ isRegTiedToUseOperand(unsigned DefOpIdx, unsigned *UseOpIdx) const {
|
||||
}
|
||||
|
||||
assert(getOperand(DefOpIdx).isDef() && "DefOpIdx is not a def!");
|
||||
const TargetInstrDesc &TID = getDesc();
|
||||
for (unsigned i = 0, e = TID.getNumOperands(); i != e; ++i) {
|
||||
const MCInstrDesc &MCID = getDesc();
|
||||
for (unsigned i = 0, e = MCID.getNumOperands(); i != e; ++i) {
|
||||
const MachineOperand &MO = getOperand(i);
|
||||
if (MO.isReg() && MO.isUse() &&
|
||||
TID.getOperandConstraint(i, TOI::TIED_TO) == (int)DefOpIdx) {
|
||||
MCID.getOperandConstraint(i, MCOI::TIED_TO) == (int)DefOpIdx) {
|
||||
if (UseOpIdx)
|
||||
*UseOpIdx = (unsigned)i;
|
||||
return true;
|
||||
@@ -1050,13 +1050,13 @@ isRegTiedToDefOperand(unsigned UseOpIdx, unsigned *DefOpIdx) const {
|
||||
return false;
|
||||
}
|
||||
|
||||
const TargetInstrDesc &TID = getDesc();
|
||||
if (UseOpIdx >= TID.getNumOperands())
|
||||
const MCInstrDesc &MCID = getDesc();
|
||||
if (UseOpIdx >= MCID.getNumOperands())
|
||||
return false;
|
||||
const MachineOperand &MO = getOperand(UseOpIdx);
|
||||
if (!MO.isReg() || !MO.isUse())
|
||||
return false;
|
||||
int DefIdx = TID.getOperandConstraint(UseOpIdx, TOI::TIED_TO);
|
||||
int DefIdx = MCID.getOperandConstraint(UseOpIdx, MCOI::TIED_TO);
|
||||
if (DefIdx == -1)
|
||||
return false;
|
||||
if (DefOpIdx)
|
||||
@@ -1096,11 +1096,11 @@ void MachineInstr::copyKillDeadInfo(const MachineInstr *MI) {
|
||||
|
||||
/// copyPredicates - Copies predicate operand(s) from MI.
|
||||
void MachineInstr::copyPredicates(const MachineInstr *MI) {
|
||||
const TargetInstrDesc &TID = MI->getDesc();
|
||||
if (!TID.isPredicable())
|
||||
const MCInstrDesc &MCID = MI->getDesc();
|
||||
if (!MCID.isPredicable())
|
||||
return;
|
||||
for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
|
||||
if (TID.OpInfo[i].isPredicate()) {
|
||||
if (MCID.OpInfo[i].isPredicate()) {
|
||||
// Predicated operands must be last operands.
|
||||
addOperand(MI->getOperand(i));
|
||||
}
|
||||
@@ -1137,13 +1137,13 @@ bool MachineInstr::isSafeToMove(const TargetInstrInfo *TII,
|
||||
AliasAnalysis *AA,
|
||||
bool &SawStore) const {
|
||||
// Ignore stuff that we obviously can't move.
|
||||
if (TID->mayStore() || TID->isCall()) {
|
||||
if (MCID->mayStore() || MCID->isCall()) {
|
||||
SawStore = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (isLabel() || isDebugValue() ||
|
||||
TID->isTerminator() || hasUnmodeledSideEffects())
|
||||
MCID->isTerminator() || hasUnmodeledSideEffects())
|
||||
return false;
|
||||
|
||||
// See if this instruction does a load. If so, we have to guarantee that the
|
||||
@@ -1151,7 +1151,7 @@ bool MachineInstr::isSafeToMove(const TargetInstrInfo *TII,
|
||||
// destination. The check for isInvariantLoad gives the targe the chance to
|
||||
// classify the load as always returning a constant, e.g. a constant pool
|
||||
// load.
|
||||
if (TID->mayLoad() && !isInvariantLoad(AA))
|
||||
if (MCID->mayLoad() && !isInvariantLoad(AA))
|
||||
// Otherwise, this is a real load. If there is a store between the load and
|
||||
// end of block, or if the load is volatile, we can't move it.
|
||||
return !SawStore && !hasVolatileMemoryRef();
|
||||
@@ -1191,9 +1191,9 @@ bool MachineInstr::isSafeToReMat(const TargetInstrInfo *TII,
|
||||
/// have no volatile memory references.
|
||||
bool MachineInstr::hasVolatileMemoryRef() const {
|
||||
// An instruction known never to access memory won't have a volatile access.
|
||||
if (!TID->mayStore() &&
|
||||
!TID->mayLoad() &&
|
||||
!TID->isCall() &&
|
||||
if (!MCID->mayStore() &&
|
||||
!MCID->mayLoad() &&
|
||||
!MCID->isCall() &&
|
||||
!hasUnmodeledSideEffects())
|
||||
return false;
|
||||
|
||||
@@ -1217,7 +1217,7 @@ bool MachineInstr::hasVolatileMemoryRef() const {
|
||||
/// *all* loads the instruction does are invariant (if it does multiple loads).
|
||||
bool MachineInstr::isInvariantLoad(AliasAnalysis *AA) const {
|
||||
// If the instruction doesn't load at all, it isn't an invariant load.
|
||||
if (!TID->mayLoad())
|
||||
if (!MCID->mayLoad())
|
||||
return false;
|
||||
|
||||
// If the instruction has lost its memoperands, conservatively assume that
|
||||
@@ -1421,10 +1421,10 @@ void MachineInstr::print(raw_ostream &OS, const TargetMachine *TM) const {
|
||||
if (FirstOp) FirstOp = false; else OS << ",";
|
||||
OS << " ";
|
||||
if (i < getDesc().NumOperands) {
|
||||
const TargetOperandInfo &TOI = getDesc().OpInfo[i];
|
||||
if (TOI.isPredicate())
|
||||
const MCOperandInfo &MCOI = getDesc().OpInfo[i];
|
||||
if (MCOI.isPredicate())
|
||||
OS << "pred:";
|
||||
if (TOI.isOptionalDef())
|
||||
if (MCOI.isOptionalDef())
|
||||
OS << "opt:";
|
||||
}
|
||||
if (isDebugValue() && MO.isMetadata()) {
|
||||
|
||||
Reference in New Issue
Block a user