diff options
Diffstat (limited to 'include/llvm/CodeGen/MachineFunction.h')
-rw-r--r-- | include/llvm/CodeGen/MachineFunction.h | 62 |
1 files changed, 5 insertions, 57 deletions
diff --git a/include/llvm/CodeGen/MachineFunction.h b/include/llvm/CodeGen/MachineFunction.h index 431a1b9fcf..46d14e1484 100644 --- a/include/llvm/CodeGen/MachineFunction.h +++ b/include/llvm/CodeGen/MachineFunction.h @@ -18,16 +18,14 @@ #ifndef LLVM_CODEGEN_MACHINEFUNCTION_H #define LLVM_CODEGEN_MACHINEFUNCTION_H -#include "llvm/CodeGen/MachineModuleInfo.h" #include "llvm/CodeGen/MachineBasicBlock.h" #include "llvm/Support/Annotation.h" -#include "llvm/ADT/BitVector.h" namespace llvm { class Function; class TargetMachine; -class SSARegMap; +class MachineRegisterInfo; class MachineFrameInfo; class MachineConstantPool; class MachineJumpTableInfo; @@ -83,8 +81,8 @@ class MachineFunction : private Annotation { // List of machine basic blocks in function ilist<MachineBasicBlock> BasicBlocks; - // Keeping track of mapping from SSA values to registers - SSARegMap *SSARegMapping; + // RegInfo - Information about each register in use in the function. + MachineRegisterInfo *RegInfo; // Used to keep track of target-specific per-machine function information for // the target implementation. @@ -104,21 +102,6 @@ class MachineFunction : private Annotation { // numbered and this vector keeps track of the mapping from ID's to MBB's. std::vector<MachineBasicBlock*> MBBNumbering; - /// UsedPhysRegs - This is a bit vector that is computed and set by the - /// register allocator, and must be kept up to date by passes that run after - /// register allocation (though most don't modify this). This is used - /// so that the code generator knows which callee save registers to save and - /// for other target specific uses. - BitVector UsedPhysRegs; - - /// LiveIns/LiveOuts - Keep track of the physical registers that are - /// livein/liveout of the function. Live in values are typically arguments in - /// registers, live out values are typically return values in registers. - /// LiveIn values are allowed to have virtual registers associated with them, - /// stored in the second element. - std::vector<std::pair<unsigned, unsigned> > LiveIns; - std::vector<unsigned> LiveOuts; - public: MachineFunction(const Function *Fn, const TargetMachine &TM); ~MachineFunction(); @@ -131,11 +114,9 @@ public: /// const TargetMachine &getTarget() const { return Target; } - /// SSARegMap Interface... Keep track of information about each SSA virtual - /// register, such as which register class it belongs to. + /// getRegInfo - Return information about the registers currently in use. /// - SSARegMap *getSSARegMap() const { return SSARegMapping; } - void clearSSARegMap(); + MachineRegisterInfo &getRegInfo() const { return *RegInfo; } /// getFrameInfo - Return the frame info object for the current function. /// This object contains information about objects allocated on the stack @@ -171,39 +152,6 @@ public: return const_cast<MachineFunction*>(this)->getInfo<Ty>(); } - /// isPhysRegUsed - Return true if the specified register is used in this - /// function. This only works after register allocation. - bool isPhysRegUsed(unsigned Reg) const { return UsedPhysRegs[Reg]; } - - /// setPhysRegUsed - Mark the specified register used in this function. - /// This should only be called during and after register allocation. - void setPhysRegUsed(unsigned Reg) { UsedPhysRegs[Reg] = true; } - - /// setPhysRegUnused - Mark the specified register unused in this function. - /// This should only be called during and after register allocation. - void setPhysRegUnused(unsigned Reg) { UsedPhysRegs[Reg] = false; } - - // LiveIn/LiveOut management methods. - - /// addLiveIn/Out - Add the specified register as a live in/out. Note that it - /// is an error to add the same register to the same set more than once. - void addLiveIn(unsigned Reg, unsigned vreg = 0) { - LiveIns.push_back(std::make_pair(Reg, vreg)); - } - void addLiveOut(unsigned Reg) { LiveOuts.push_back(Reg); } - - // Iteration support for live in/out sets. These sets are kept in sorted - // order by their register number. - typedef std::vector<std::pair<unsigned,unsigned> >::const_iterator - livein_iterator; - typedef std::vector<unsigned>::const_iterator liveout_iterator; - livein_iterator livein_begin() const { return LiveIns.begin(); } - livein_iterator livein_end() const { return LiveIns.end(); } - bool livein_empty() const { return LiveIns.empty(); } - liveout_iterator liveout_begin() const { return LiveOuts.begin(); } - liveout_iterator liveout_end() const { return LiveOuts.end(); } - bool liveout_empty() const { return LiveOuts.empty(); } - /// getBlockNumbered - MachineBasicBlocks are automatically numbered when they /// are inserted into the machine function. The block number for a machine /// basic block can be found by using the MBB::getBlockNumber method, this |