Expose more information from register allocation to passes that run after
authorChris Lattner <sabre@nondot.org>
Sun, 23 Jan 2005 22:13:36 +0000 (22:13 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 23 Jan 2005 22:13:36 +0000 (22:13 +0000)
it.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19788 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/MachineFunction.h

index e6d9eb1bf814d6571de16af2d52b5d0287d327f9..94e9470b76792c175a73f6fcfaa8d22cf1509055 100644 (file)
@@ -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