forked from OSchip/llvm-project
Expose more information from register allocation to passes that run after
it. llvm-svn: 19788
This commit is contained in:
parent
ef2de322c6
commit
1def519f3d
|
@ -97,6 +97,13 @@ 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 new[]'d array of bools 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.
|
||||
bool *UsedPhysRegs;
|
||||
|
||||
public:
|
||||
MachineFunction(const Function *Fn, const TargetMachine &TM);
|
||||
~MachineFunction();
|
||||
|
@ -138,6 +145,25 @@ public:
|
|||
return static_cast<Ty*>(MFInfo);
|
||||
}
|
||||
|
||||
/// setUsedPhysRegs - The register allocator should call this to initialized
|
||||
/// the UsedPhysRegs set. This should be passed a new[]'d array with entries
|
||||
/// for all of the physical registers that the target supports. Each array
|
||||
/// entry should be set to true iff the physical register is used within the
|
||||
/// function.
|
||||
void setUsedPhysRegs(bool *UPR) { UsedPhysRegs = UPR; }
|
||||
|
||||
/// getUsedPhysregs - This returns the UsedPhysRegs array. This returns null
|
||||
/// before register allocation.
|
||||
const bool *getUsedPhysregs() { return UsedPhysRegs; }
|
||||
|
||||
/// isPhysRegUsed - Return true if the specified register is used in this
|
||||
/// function. This only works after register allocation.
|
||||
bool isPhysRegUsed(unsigned Reg) { return UsedPhysRegs[Reg]; }
|
||||
|
||||
/// changePhyRegUsed - This method allows code that runs after register
|
||||
/// allocation to keep the PhysRegsUsed array up-to-date.
|
||||
void changePhyRegUsed(unsigned Reg, bool State) { UsedPhysRegs[Reg] = State; }
|
||||
|
||||
/// 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
|
||||
|
|
Loading…
Reference in New Issue