From 505e5510a258699d1fb267142c247079a4b3d796 Mon Sep 17 00:00:00 2001 From: Evan Cheng Date: Wed, 25 Apr 2007 22:10:09 +0000 Subject: [PATCH] Change UsedPhysRegs from array bool to BitVector to save some space. Setting / getting its states now go through MachineFunction. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36451 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/CodeGen/MachineFunction.h | 30 ++++++++++---------------- lib/CodeGen/MachineFunction.cpp | 4 ++-- 2 files changed, 13 insertions(+), 21 deletions(-) diff --git a/include/llvm/CodeGen/MachineFunction.h b/include/llvm/CodeGen/MachineFunction.h index 0ba5970ac5b..00a1fe88407 100644 --- a/include/llvm/CodeGen/MachineFunction.h +++ b/include/llvm/CodeGen/MachineFunction.h @@ -21,6 +21,7 @@ #include "llvm/CodeGen/MachineModuleInfo.h" #include "llvm/CodeGen/MachineBasicBlock.h" #include "llvm/Support/Annotation.h" +#include "llvm/ADT/BitVector.h" namespace llvm { @@ -103,12 +104,12 @@ class MachineFunction : private Annotation { // numbered and this vector keeps track of the mapping from ID's to MBB's. std::vector 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 + /// 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. - bool *UsedPhysRegs; + BitVector UsedPhysRegs; /// LiveIns/LiveOuts - Keep track of the physical registers that are /// livein/liveout of the function. Live in values are typically arguments in @@ -170,26 +171,17 @@ public: return const_cast(this)->getInfo(); } - /// 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. - bool *getUsedPhysregs() { return UsedPhysRegs; } - const bool *getUsedPhysregs() const { return UsedPhysRegs; } - /// 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]; } - /// 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; } + /// 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. diff --git a/lib/CodeGen/MachineFunction.cpp b/lib/CodeGen/MachineFunction.cpp index 4453be80c1c..29eee3612f6 100644 --- a/lib/CodeGen/MachineFunction.cpp +++ b/lib/CodeGen/MachineFunction.cpp @@ -114,11 +114,12 @@ void ilist_traits::transferNodesFromList( MachineFunction::MachineFunction(const Function *F, const TargetMachine &TM) - : Annotation(MF_AID), Fn(F), Target(TM), UsedPhysRegs(0) { + : Annotation(MF_AID), Fn(F), Target(TM) { SSARegMapping = new SSARegMap(); MFInfo = 0; FrameInfo = new MachineFrameInfo(); ConstantPool = new MachineConstantPool(TM.getTargetData()); + UsedPhysRegs.resize(TM.getRegisterInfo()->getNumRegs()); // Set up jump table. const TargetData &TD = *TM.getTargetData(); @@ -138,7 +139,6 @@ MachineFunction::~MachineFunction() { delete FrameInfo; delete ConstantPool; delete JumpTableInfo; - delete[] UsedPhysRegs; }