mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-26 13:10:34 +00:00
Use uint16_t to store instruction implicit uses and defs. Reduces static data.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@152301 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9eddc1cf31
commit
fac2598149
@ -139,8 +139,8 @@ public:
|
||||
unsigned short Size; // Number of bytes in encoding.
|
||||
unsigned Flags; // Flags identifying machine instr class
|
||||
uint64_t TSFlags; // Target Specific Flag values
|
||||
const unsigned *ImplicitUses; // Registers implicitly read by this instr
|
||||
const unsigned *ImplicitDefs; // Registers implicitly defined by this instr
|
||||
const uint16_t *ImplicitUses; // Registers implicitly read by this instr
|
||||
const uint16_t *ImplicitDefs; // Registers implicitly defined by this instr
|
||||
const MCOperandInfo *OpInfo; // 'NumOperands' entries about operands
|
||||
|
||||
/// getOperandConstraint - Returns the value of the specific constraint if
|
||||
@ -448,7 +448,7 @@ public:
|
||||
/// does.
|
||||
///
|
||||
/// This method returns null if the instruction has no implicit uses.
|
||||
const unsigned *getImplicitUses() const {
|
||||
const uint16_t *getImplicitUses() const {
|
||||
return ImplicitUses;
|
||||
}
|
||||
|
||||
@ -471,7 +471,7 @@ public:
|
||||
/// EAX/EDX/EFLAGS registers.
|
||||
///
|
||||
/// This method returns null if the instruction has no implicit defs.
|
||||
const unsigned *getImplicitDefs() const {
|
||||
const uint16_t *getImplicitDefs() const {
|
||||
return ImplicitDefs;
|
||||
}
|
||||
|
||||
@ -487,7 +487,7 @@ public:
|
||||
/// hasImplicitUseOfPhysReg - Return true if this instruction implicitly
|
||||
/// uses the specified physical register.
|
||||
bool hasImplicitUseOfPhysReg(unsigned Reg) const {
|
||||
if (const unsigned *ImpUses = ImplicitUses)
|
||||
if (const uint16_t *ImpUses = ImplicitUses)
|
||||
for (; *ImpUses; ++ImpUses)
|
||||
if (*ImpUses == Reg) return true;
|
||||
return false;
|
||||
@ -496,7 +496,7 @@ public:
|
||||
/// hasImplicitDefOfPhysReg - Return true if this instruction implicitly
|
||||
/// defines the specified physical register.
|
||||
bool hasImplicitDefOfPhysReg(unsigned Reg) const {
|
||||
if (const unsigned *ImpDefs = ImplicitDefs)
|
||||
if (const uint16_t *ImpDefs = ImplicitDefs)
|
||||
for (; *ImpDefs; ++ImpDefs)
|
||||
if (*ImpDefs == Reg) return true;
|
||||
return false;
|
||||
|
@ -490,10 +490,10 @@ MachineInstr::MachineInstr()
|
||||
|
||||
void MachineInstr::addImplicitDefUseOperands() {
|
||||
if (MCID->ImplicitDefs)
|
||||
for (const unsigned *ImpDefs = MCID->ImplicitDefs; *ImpDefs; ++ImpDefs)
|
||||
for (const uint16_t *ImpDefs = MCID->getImplicitDefs(); *ImpDefs; ++ImpDefs)
|
||||
addOperand(MachineOperand::CreateReg(*ImpDefs, true, true));
|
||||
if (MCID->ImplicitUses)
|
||||
for (const unsigned *ImpUses = MCID->ImplicitUses; *ImpUses; ++ImpUses)
|
||||
for (const uint16_t *ImpUses = MCID->getImplicitUses(); *ImpUses; ++ImpUses)
|
||||
addOperand(MachineOperand::CreateReg(*ImpUses, false, true));
|
||||
}
|
||||
|
||||
|
@ -1139,7 +1139,7 @@ bool RAFast::runOnMachineFunction(MachineFunction &Fn) {
|
||||
// Add the clobber lists for all the instructions we skipped earlier.
|
||||
for (SmallPtrSet<const MCInstrDesc*, 4>::const_iterator
|
||||
I = SkippedInstrs.begin(), E = SkippedInstrs.end(); I != E; ++I)
|
||||
if (const unsigned *Defs = (*I)->getImplicitDefs())
|
||||
if (const uint16_t *Defs = (*I)->getImplicitDefs())
|
||||
while (*Defs)
|
||||
MRI->setPhysRegUsed(*Defs++);
|
||||
|
||||
|
@ -425,7 +425,7 @@ static EVT getPhysicalRegisterVT(SDNode *N, unsigned Reg,
|
||||
const MCInstrDesc &MCID = TII->get(N->getMachineOpcode());
|
||||
assert(MCID.ImplicitDefs && "Physical reg def must be in implicit def list!");
|
||||
unsigned NumRes = MCID.getNumDefs();
|
||||
for (const unsigned *ImpDef = MCID.getImplicitDefs(); *ImpDef; ++ImpDef) {
|
||||
for (const uint16_t *ImpDef = MCID.getImplicitDefs(); *ImpDef; ++ImpDef) {
|
||||
if (Reg == *ImpDef)
|
||||
break;
|
||||
++NumRes;
|
||||
@ -508,7 +508,7 @@ bool ScheduleDAGFast::DelayForLiveRegsBottomUp(SUnit *SU,
|
||||
const MCInstrDesc &MCID = TII->get(Node->getMachineOpcode());
|
||||
if (!MCID.ImplicitDefs)
|
||||
continue;
|
||||
for (const unsigned *Reg = MCID.ImplicitDefs; *Reg; ++Reg) {
|
||||
for (const uint16_t *Reg = MCID.getImplicitDefs(); *Reg; ++Reg) {
|
||||
CheckForLiveRegDef(SU, *Reg, LiveRegDefs, RegAdded, LRegs, TRI);
|
||||
}
|
||||
}
|
||||
|
@ -1166,7 +1166,7 @@ static EVT getPhysicalRegisterVT(SDNode *N, unsigned Reg,
|
||||
const MCInstrDesc &MCID = TII->get(N->getMachineOpcode());
|
||||
assert(MCID.ImplicitDefs && "Physical reg def must be in implicit def list!");
|
||||
unsigned NumRes = MCID.getNumDefs();
|
||||
for (const unsigned *ImpDef = MCID.getImplicitDefs(); *ImpDef; ++ImpDef) {
|
||||
for (const uint16_t *ImpDef = MCID.getImplicitDefs(); *ImpDef; ++ImpDef) {
|
||||
if (Reg == *ImpDef)
|
||||
break;
|
||||
++NumRes;
|
||||
@ -1292,7 +1292,7 @@ DelayForLiveRegsBottomUp(SUnit *SU, SmallVector<unsigned, 4> &LRegs) {
|
||||
const MCInstrDesc &MCID = TII->get(Node->getMachineOpcode());
|
||||
if (!MCID.ImplicitDefs)
|
||||
continue;
|
||||
for (const unsigned *Reg = MCID.ImplicitDefs; *Reg; ++Reg)
|
||||
for (const uint16_t *Reg = MCID.getImplicitDefs(); *Reg; ++Reg)
|
||||
CheckForLiveRegDef(SU, *Reg, LiveRegDefs, RegAdded, LRegs, TRI);
|
||||
}
|
||||
|
||||
@ -2667,7 +2667,7 @@ static bool canClobberReachingPhysRegUse(const SUnit *DepSU, const SUnit *SU,
|
||||
ScheduleDAGRRList *scheduleDAG,
|
||||
const TargetInstrInfo *TII,
|
||||
const TargetRegisterInfo *TRI) {
|
||||
const unsigned *ImpDefs
|
||||
const uint16_t *ImpDefs
|
||||
= TII->get(SU->getNode()->getMachineOpcode()).getImplicitDefs();
|
||||
const uint32_t *RegMask = getNodeRegMask(SU->getNode());
|
||||
if(!ImpDefs && !RegMask)
|
||||
@ -2686,7 +2686,7 @@ static bool canClobberReachingPhysRegUse(const SUnit *DepSU, const SUnit *SU,
|
||||
return true;
|
||||
|
||||
if (ImpDefs)
|
||||
for (const unsigned *ImpDef = ImpDefs; *ImpDef; ++ImpDef)
|
||||
for (const uint16_t *ImpDef = ImpDefs; *ImpDef; ++ImpDef)
|
||||
// Return true if SU clobbers this physical register use and the
|
||||
// definition of the register reaches from DepSU. IsReachable queries
|
||||
// a topological forward sort of the DAG (following the successors).
|
||||
@ -2705,13 +2705,13 @@ static bool canClobberPhysRegDefs(const SUnit *SuccSU, const SUnit *SU,
|
||||
const TargetRegisterInfo *TRI) {
|
||||
SDNode *N = SuccSU->getNode();
|
||||
unsigned NumDefs = TII->get(N->getMachineOpcode()).getNumDefs();
|
||||
const unsigned *ImpDefs = TII->get(N->getMachineOpcode()).getImplicitDefs();
|
||||
const uint16_t *ImpDefs = TII->get(N->getMachineOpcode()).getImplicitDefs();
|
||||
assert(ImpDefs && "Caller should check hasPhysRegDefs");
|
||||
for (const SDNode *SUNode = SU->getNode(); SUNode;
|
||||
SUNode = SUNode->getGluedNode()) {
|
||||
if (!SUNode->isMachineOpcode())
|
||||
continue;
|
||||
const unsigned *SUImpDefs =
|
||||
const uint16_t *SUImpDefs =
|
||||
TII->get(SUNode->getMachineOpcode()).getImplicitDefs();
|
||||
const uint32_t *SURegMask = getNodeRegMask(SUNode);
|
||||
if (!SUImpDefs && !SURegMask)
|
||||
|
@ -189,7 +189,7 @@ Thumb2SizeReduce::Thumb2SizeReduce() : MachineFunctionPass(ID) {
|
||||
}
|
||||
|
||||
static bool HasImplicitCPSRDef(const MCInstrDesc &MCID) {
|
||||
for (const unsigned *Regs = MCID.ImplicitDefs; *Regs; ++Regs)
|
||||
for (const uint16_t *Regs = MCID.getImplicitDefs(); *Regs; ++Regs)
|
||||
if (*Regs == ARM::CPSR)
|
||||
return true;
|
||||
return false;
|
||||
|
@ -22,7 +22,7 @@ using namespace llvm;
|
||||
|
||||
static void PrintDefList(const std::vector<Record*> &Uses,
|
||||
unsigned Num, raw_ostream &OS) {
|
||||
OS << "static const unsigned ImplicitList" << Num << "[] = { ";
|
||||
OS << "static const uint16_t ImplicitList" << Num << "[] = { ";
|
||||
for (unsigned i = 0, e = Uses.size(); i != e; ++i)
|
||||
OS << getQualifiedName(Uses[i]) << ", ";
|
||||
OS << "0 };\n";
|
||||
|
Loading…
Reference in New Issue
Block a user