diff options
author | Alkis Evlogimenos <alkis@evlogimenos.com> | 2004-08-26 22:21:04 +0000 |
---|---|---|
committer | Alkis Evlogimenos <alkis@evlogimenos.com> | 2004-08-26 22:21:04 +0000 |
commit | 8b5b3fdb50bac781c737d0d4c7750612f00dec99 (patch) | |
tree | 85806bdb60829f325e70e933100555486a9e735c /llvm/lib | |
parent | cb84e4351d4381a03c43eef5acfae364ff10a870 (diff) | |
download | bcm5719-llvm-8b5b3fdb50bac781c737d0d4c7750612f00dec99.tar.gz bcm5719-llvm-8b5b3fdb50bac781c737d0d4c7750612f00dec99.zip |
Add getAllocatableSet() function.
llvm-svn: 16059
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/MRegisterInfo.cpp | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/llvm/lib/Target/MRegisterInfo.cpp b/llvm/lib/Target/MRegisterInfo.cpp index 7c1028bc323..30b54a6414d 100644 --- a/llvm/lib/Target/MRegisterInfo.cpp +++ b/llvm/lib/Target/MRegisterInfo.cpp @@ -28,12 +28,14 @@ MRegisterInfo::MRegisterInfo(const MRegisterDesc *D, unsigned NR, // Fill in the PhysRegClasses map for (MRegisterInfo::regclass_iterator I = regclass_begin(), - E = regclass_end(); I != E; ++I) - for (unsigned i = 0, e = (*I)->getNumRegs(); i != e; ++i) { - unsigned Reg = (*I)->getRegister(i); + E = regclass_end(); I != E; ++I) { + const TargetRegisterClass *RC = *I; + for (unsigned i = 0, e = RC->getNumRegs(); i != e; ++i) { + unsigned Reg = RC->getRegister(i); assert(PhysRegClasses[Reg] == 0 && "Register in more than one class?"); - PhysRegClasses[Reg] = *I; + PhysRegClasses[Reg] = RC; } + } CallFrameSetupOpcode = CFSO; CallFrameDestroyOpcode = CFDO; @@ -44,4 +46,16 @@ MRegisterInfo::~MRegisterInfo() { delete[] PhysRegClasses; } +std::vector<bool> MRegisterInfo::getAllocatableSet(MachineFunction &MF) const { + std::vector<bool> Allocatable(NumRegs); + for (MRegisterInfo::regclass_iterator I = regclass_begin(), + E = regclass_end(); I != E; ++I) { + const TargetRegisterClass *RC = *I; + for (TargetRegisterClass::iterator I = RC->allocation_order_begin(MF), + E = RC->allocation_order_end(MF); I != E; ++I) + Allocatable[*I] = true; + } + return Allocatable; +} + } // End llvm namespace |