[llvm-commits] CVS: llvm/lib/CodeGen/RegisterScavenging.cpp

Evan Cheng evan.cheng at apple.com
Thu Mar 1 00:56:46 PST 2007



Changes in directory llvm/lib/CodeGen:

RegisterScavenging.cpp updated: 1.8 -> 1.9
---
Log message:

Add a version of FindUnusedReg that restrict search to a specific set of registers.

---
Diffs of the changes:  (+15 -0)

 RegisterScavenging.cpp |   15 +++++++++++++++
 1 files changed, 15 insertions(+)


Index: llvm/lib/CodeGen/RegisterScavenging.cpp
diff -u llvm/lib/CodeGen/RegisterScavenging.cpp:1.8 llvm/lib/CodeGen/RegisterScavenging.cpp:1.9
--- llvm/lib/CodeGen/RegisterScavenging.cpp:1.8	Wed Feb 28 20:19:39 2007
+++ llvm/lib/CodeGen/RegisterScavenging.cpp	Thu Mar  1 02:56:24 2007
@@ -157,6 +157,21 @@
 }
 
 unsigned RegScavenger::FindUnusedReg(const TargetRegisterClass *RegClass,
+                                     const BitVector &Candidates) const {
+  // Mask off the registers which are not in the TargetRegisterClass.
+  BitVector RegStatesCopy(NumPhysRegs, false);
+  CreateRegClassMask(RegClass, RegStatesCopy);
+  RegStatesCopy &= RegStates;
+
+  // Restrict the search to candidates.
+  RegStatesCopy &= Candidates;
+
+  // Returns the first unused (bit is set) register, or 0 is none is found.
+  int Reg = RegStatesCopy.find_first();
+  return (Reg == -1) ? 0 : Reg;
+}
+
+unsigned RegScavenger::FindUnusedReg(const TargetRegisterClass *RegClass,
                                      bool ExCalleeSaved) const {
   // Mask off the registers which are not in the TargetRegisterClass.
   BitVector RegStatesCopy(NumPhysRegs, false);






More information about the llvm-commits mailing list