diff options
| author | Chris Lattner <sabre@nondot.org> | 2005-04-09 15:22:53 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2005-04-09 15:22:53 +0000 |
| commit | 576db37185de6ea0a3dc60d5704e9e869bc9cf20 (patch) | |
| tree | afa7b33e793108406d994d660bb635b18a3c36a4 /llvm | |
| parent | 46aa06cfedeb953d32ef8530c080f8dd44b24f01 (diff) | |
| download | bcm5719-llvm-576db37185de6ea0a3dc60d5704e9e869bc9cf20.tar.gz bcm5719-llvm-576db37185de6ea0a3dc60d5704e9e869bc9cf20.zip | |
add routines to track the livein/out set for a function
llvm-svn: 21179
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/include/llvm/CodeGen/MachineFunction.h | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/llvm/include/llvm/CodeGen/MachineFunction.h b/llvm/include/llvm/CodeGen/MachineFunction.h index 34685dd720c..1121fd04803 100644 --- a/llvm/include/llvm/CodeGen/MachineFunction.h +++ b/llvm/include/llvm/CodeGen/MachineFunction.h @@ -105,6 +105,11 @@ class MachineFunction : private Annotation { /// for other target specific uses. bool *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. + std::vector<unsigned> LiveIns, LiveOuts; + public: MachineFunction(const Function *Fn, const TargetMachine &TM); ~MachineFunction(); @@ -167,6 +172,22 @@ public: /// allocation to keep the PhysRegsUsed array up-to-date. void changePhyRegUsed(unsigned Reg, bool State) { UsedPhysRegs[Reg] = State; } + + // 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) { LiveIns.push_back(Reg); } + 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<unsigned>::const_iterator liveinout_iterator; + liveinout_iterator livein_begin() const { return LiveIns.begin(); } + liveinout_iterator livein_end() const { return LiveIns.end(); } + liveinout_iterator liveout_begin() const { return LiveOuts.begin(); } + liveinout_iterator liveout_end() const { return LiveOuts.end(); } + /// 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 |

