mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-14 06:37:33 +00:00
Add FrameSetup MI flags
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127098 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6647b59c92
commit
6dd97471c4
@ -50,12 +50,21 @@ public:
|
||||
enum CommentFlag {
|
||||
ReloadReuse = 0x1
|
||||
};
|
||||
|
||||
|
||||
enum MIFlag {
|
||||
NoFlags = 0,
|
||||
FrameSetup = 1 << 0 // Instruction is used as a part of
|
||||
// function frame setup code.
|
||||
};
|
||||
private:
|
||||
const TargetInstrDesc *TID; // Instruction descriptor.
|
||||
uint16_t NumImplicitOps; // Number of implicit operands (which
|
||||
// are determined at construction time).
|
||||
|
||||
uint8_t Flags; // Various bits of additional
|
||||
// information about machine
|
||||
// instruction.
|
||||
|
||||
uint8_t AsmPrinterFlags; // Various bits of information used by
|
||||
// the AsmPrinter to emit helpful
|
||||
// comments. This is *not* semantic
|
||||
@ -140,7 +149,26 @@ public:
|
||||
/// setAsmPrinterFlag - Set a flag for the AsmPrinter.
|
||||
///
|
||||
void setAsmPrinterFlag(CommentFlag Flag) {
|
||||
AsmPrinterFlags |= (unsigned short)Flag;
|
||||
AsmPrinterFlags |= (uint8_t)Flag;
|
||||
}
|
||||
|
||||
/// getFlags - Return the MI flags bitvector.
|
||||
uint8_t getFlags() const {
|
||||
return Flags;
|
||||
}
|
||||
|
||||
/// getFlag - Return whether an MI flag is set.
|
||||
bool getFlag(MIFlag Flag) const {
|
||||
return Flags & Flag;
|
||||
}
|
||||
|
||||
/// setFlag - Set a MI flag.
|
||||
void setFlag(MIFlag Flag) {
|
||||
Flags |= (uint8_t)Flag;
|
||||
}
|
||||
|
||||
void setFlags(unsigned flags) {
|
||||
Flags = flags;
|
||||
}
|
||||
|
||||
/// clearAsmPrinterFlag - clear specific AsmPrinter flags
|
||||
@ -152,7 +180,7 @@ public:
|
||||
/// getDebugLoc - Returns the debug location id of this MachineInstr.
|
||||
///
|
||||
DebugLoc getDebugLoc() const { return debugLoc; }
|
||||
|
||||
|
||||
/// getDesc - Returns the target instruction descriptor of this
|
||||
/// MachineInstr.
|
||||
const TargetInstrDesc &getDesc() const { return *TID; }
|
||||
|
@ -451,7 +451,8 @@ raw_ostream &llvm::operator<<(raw_ostream &OS, const MachineMemOperand &MMO) {
|
||||
/// MachineInstr ctor - This constructor creates a dummy MachineInstr with
|
||||
/// TID NULL and no operands.
|
||||
MachineInstr::MachineInstr()
|
||||
: TID(0), NumImplicitOps(0), AsmPrinterFlags(0), MemRefs(0), MemRefsEnd(0),
|
||||
: TID(0), NumImplicitOps(0), Flags(0), AsmPrinterFlags(0),
|
||||
MemRefs(0), MemRefsEnd(0),
|
||||
Parent(0) {
|
||||
// Make sure that we get added to a machine basicblock
|
||||
LeakDetector::addGarbageObject(this);
|
||||
@ -470,7 +471,7 @@ void MachineInstr::addImplicitDefUseOperands() {
|
||||
/// 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), AsmPrinterFlags(0),
|
||||
: TID(&tid), NumImplicitOps(0), Flags(0), AsmPrinterFlags(0),
|
||||
MemRefs(0), MemRefsEnd(0), Parent(0) {
|
||||
if (!NoImp)
|
||||
NumImplicitOps = TID->getNumImplicitDefs() + TID->getNumImplicitUses();
|
||||
@ -484,8 +485,8 @@ MachineInstr::MachineInstr(const TargetInstrDesc &tid, bool NoImp)
|
||||
/// MachineInstr ctor - As above, but with a DebugLoc.
|
||||
MachineInstr::MachineInstr(const TargetInstrDesc &tid, const DebugLoc dl,
|
||||
bool NoImp)
|
||||
: TID(&tid), NumImplicitOps(0), AsmPrinterFlags(0), MemRefs(0), MemRefsEnd(0),
|
||||
Parent(0), debugLoc(dl) {
|
||||
: TID(&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());
|
||||
@ -499,7 +500,7 @@ MachineInstr::MachineInstr(const TargetInstrDesc &tid, const DebugLoc dl,
|
||||
/// 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), AsmPrinterFlags(0),
|
||||
: TID(&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();
|
||||
@ -514,8 +515,8 @@ MachineInstr::MachineInstr(MachineBasicBlock *MBB, const TargetInstrDesc &tid)
|
||||
///
|
||||
MachineInstr::MachineInstr(MachineBasicBlock *MBB, const DebugLoc dl,
|
||||
const TargetInstrDesc &tid)
|
||||
: TID(&tid), NumImplicitOps(0), AsmPrinterFlags(0), MemRefs(0), MemRefsEnd(0),
|
||||
Parent(0), debugLoc(dl) {
|
||||
: TID(&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());
|
||||
@ -528,7 +529,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), AsmPrinterFlags(0),
|
||||
: TID(&MI.getDesc()), NumImplicitOps(0), Flags(0), AsmPrinterFlags(0),
|
||||
MemRefs(MI.MemRefs), MemRefsEnd(MI.MemRefsEnd),
|
||||
Parent(0), debugLoc(MI.getDebugLoc()) {
|
||||
Operands.reserve(MI.getNumOperands());
|
||||
@ -538,6 +539,9 @@ MachineInstr::MachineInstr(MachineFunction &MF, const MachineInstr &MI)
|
||||
addOperand(MI.getOperand(i));
|
||||
NumImplicitOps = MI.NumImplicitOps;
|
||||
|
||||
// Copy all the flags.
|
||||
Flags = MI.Flags;
|
||||
|
||||
// Set parent to null.
|
||||
Parent = 0;
|
||||
|
||||
@ -1417,6 +1421,14 @@ void MachineInstr::print(raw_ostream &OS, const TargetMachine *TM) const {
|
||||
}
|
||||
|
||||
bool HaveSemi = false;
|
||||
if (Flags) {
|
||||
if (!HaveSemi) OS << ";"; HaveSemi = true;
|
||||
OS << " flags: ";
|
||||
|
||||
if (Flags & FrameSetup)
|
||||
OS << "FrameSetup";
|
||||
}
|
||||
|
||||
if (!memoperands_empty()) {
|
||||
if (!HaveSemi) OS << ";"; HaveSemi = true;
|
||||
|
||||
@ -1447,13 +1459,14 @@ void MachineInstr::print(raw_ostream &OS, const TargetMachine *TM) const {
|
||||
}
|
||||
}
|
||||
|
||||
// Print debug location information.
|
||||
if (!debugLoc.isUnknown() && MF) {
|
||||
if (!HaveSemi) OS << ";";
|
||||
if (!HaveSemi) OS << ";"; HaveSemi = true;
|
||||
OS << " dbg:";
|
||||
printDebugLoc(debugLoc, MF, OS);
|
||||
}
|
||||
|
||||
OS << "\n";
|
||||
OS << '\n';
|
||||
}
|
||||
|
||||
bool MachineInstr::addRegisterKilled(unsigned IncomingReg,
|
||||
|
Loading…
x
Reference in New Issue
Block a user