summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorAlkis Evlogimenos <alkis@evlogimenos.com>2004-08-26 22:21:04 +0000
committerAlkis Evlogimenos <alkis@evlogimenos.com>2004-08-26 22:21:04 +0000
commit8b5b3fdb50bac781c737d0d4c7750612f00dec99 (patch)
tree85806bdb60829f325e70e933100555486a9e735c /llvm/lib
parentcb84e4351d4381a03c43eef5acfae364ff10a870 (diff)
downloadbcm5719-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.cpp22
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
OpenPOWER on IntegriCloud