diff options
Diffstat (limited to 'release_23/include/llvm/CodeGen/RegisterScavenging.h')
-rw-r--r-- | release_23/include/llvm/CodeGen/RegisterScavenging.h | 165 |
1 files changed, 0 insertions, 165 deletions
diff --git a/release_23/include/llvm/CodeGen/RegisterScavenging.h b/release_23/include/llvm/CodeGen/RegisterScavenging.h deleted file mode 100644 index 4b1a6a94096c..000000000000 --- a/release_23/include/llvm/CodeGen/RegisterScavenging.h +++ /dev/null @@ -1,165 +0,0 @@ -//===-- RegisterScavenging.h - Machine register scavenging ------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file declares the machine register scavenger class. It can provide -// information such as unused register at any point in a machine basic block. -// It also provides a mechanism to make registers availbale by evicting them -// to spill slots. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_CODEGEN_REGISTER_SCAVENGING_H -#define LLVM_CODEGEN_REGISTER_SCAVENGING_H - -#include "llvm/CodeGen/MachineBasicBlock.h" -#include "llvm/ADT/BitVector.h" - -namespace llvm { - -class MachineRegisterInfo; -class TargetRegisterInfo; -class TargetInstrInfo; -class TargetRegisterClass; - -class RegScavenger { - MachineBasicBlock *MBB; - MachineBasicBlock::iterator MBBI; - unsigned NumPhysRegs; - - /// Tracking - True if RegScavenger is currently tracking the liveness of - /// registers. - bool Tracking; - - /// ScavengingFrameIndex - Special spill slot used for scavenging a register - /// post register allocation. - int ScavengingFrameIndex; - - /// ScavengedReg - If none zero, the specific register is currently being - /// scavenged. That is, it is spilled to the special scavenging stack slot. - unsigned ScavengedReg; - - /// ScavengedRC - Register class of the scavenged register. - /// - const TargetRegisterClass *ScavengedRC; - - /// RegsAvailable - The current state of all the physical registers immediately - /// before MBBI. One bit per physical register. If bit is set that means it's - /// available, unset means the register is currently being used. - BitVector RegsAvailable; - - /// ImplicitDefed - If bit is set that means the register is defined by an - /// implicit_def instructions. That means it can be clobbered at will. - BitVector ImplicitDefed; - -public: - RegScavenger() - : MBB(NULL), NumPhysRegs(0), Tracking(false), - ScavengingFrameIndex(-1), ScavengedReg(0), ScavengedRC(NULL) {} - - explicit RegScavenger(MachineBasicBlock *mbb) - : MBB(mbb), NumPhysRegs(0), Tracking(false), - ScavengingFrameIndex(-1), ScavengedReg(0), ScavengedRC(NULL) {} - - /// enterBasicBlock - Start tracking liveness from the begin of the specific - /// basic block. - void enterBasicBlock(MachineBasicBlock *mbb); - - /// forward / backward - Move the internal MBB iterator and update register - /// states. - void forward(); - void backward(); - - /// forward / backward - Move the internal MBB iterator and update register - /// states until it has processed the specific iterator. - void forward(MachineBasicBlock::iterator I) { - while (MBBI != I) forward(); - } - void backward(MachineBasicBlock::iterator I) { - while (MBBI != I) backward(); - } - - /// skipTo - Move the internal MBB iterator but do not update register states. - /// - void skipTo(MachineBasicBlock::iterator I) { MBBI = I; } - - /// isReserved - Returns true if a register is reserved. It is never "unused". - bool isReserved(unsigned Reg) const { return ReservedRegs[Reg]; } - - /// isUsed / isUsed - Test if a register is currently being used. - /// - bool isUsed(unsigned Reg) const { return !RegsAvailable[Reg]; } - bool isUnused(unsigned Reg) const { return RegsAvailable[Reg]; } - - bool isImplicitlyDefined(unsigned Reg) const { return ImplicitDefed[Reg]; } - - /// getRegsUsed - return all registers currently in use in used. - void getRegsUsed(BitVector &used, bool includeReserved); - - /// setUsed / setUnused - Mark the state of one or a number of registers. - /// - void setUsed(unsigned Reg, bool ImpDef = false); - void setUsed(BitVector Regs, bool ImpDef = false) { - RegsAvailable &= ~Regs; - if (ImpDef) - ImplicitDefed |= Regs; - else - ImplicitDefed &= ~Regs; - } - void setUnused(unsigned Reg, const MachineInstr *MI); - void setUnused(BitVector Regs) { - RegsAvailable |= Regs; - ImplicitDefed &= ~Regs; - } - - /// FindUnusedReg - Find a unused register of the specified register class - /// from the specified set of registers. It return 0 is none is found. - unsigned FindUnusedReg(const TargetRegisterClass *RegClass, - const BitVector &Candidates) const; - - /// FindUnusedReg - Find a unused register of the specified register class. - /// Exclude callee saved registers if directed. It return 0 is none is found. - unsigned FindUnusedReg(const TargetRegisterClass *RegClass, - bool ExCalleeSaved = false) const; - - /// setScavengingFrameIndex / getScavengingFrameIndex - accessor and setter of - /// ScavengingFrameIndex. - void setScavengingFrameIndex(int FI) { ScavengingFrameIndex = FI; } - int getScavengingFrameIndex() const { return ScavengingFrameIndex; } - - /// scavengeRegister - Make a register of the specific register class - /// available and do the appropriate bookkeeping. SPAdj is the stack - /// adjustment due to call frame, it's passed along to eliminateFrameIndex(). - /// Returns the scavenged register. - unsigned scavengeRegister(const TargetRegisterClass *RegClass, - MachineBasicBlock::iterator I, int SPAdj); - unsigned scavengeRegister(const TargetRegisterClass *RegClass, int SPAdj) { - return scavengeRegister(RegClass, MBBI, SPAdj); - } - -private: - const TargetRegisterInfo *TRI; - const TargetInstrInfo *TII; - MachineRegisterInfo* MRI; - - /// CalleeSavedrRegs - A bitvector of callee saved registers for the target. - /// - BitVector CalleeSavedRegs; - - /// ReservedRegs - A bitvector of reserved registers. - /// - BitVector ReservedRegs; - - /// restoreScavengedReg - Restore scavenged by loading it back from the - /// emergency spill slot. Mark it used. - void restoreScavengedReg(); -}; - -} // End llvm namespace - -#endif |