Change UsedPhysRegs from array bool to BitVector to save some space. Setting / gettin...
authorEvan Cheng <evan.cheng@apple.com>
Wed, 25 Apr 2007 22:10:09 +0000 (22:10 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Wed, 25 Apr 2007 22:10:09 +0000 (22:10 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36451 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/MachineFunction.h
lib/CodeGen/MachineFunction.cpp

index 0ba5970ac5b8a284de8a9abdbfd7e0cf2ecaf5a2..00a1fe884071e735ee5f8e6ab5dd8625a07bca95 100644 (file)
@@ -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<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
+  /// 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<MachineFunction*>(this)->getInfo<Ty>();
   }
 
-  /// 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.
 
index 4453be80c1c0aa21d405e80734304a371604a0a3..29eee3612f64dad64499983cfa14cf017696ea19 100644 (file)
@@ -114,11 +114,12 @@ void ilist_traits<MachineBasicBlock>::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;
 }