Don't return registers from register classes that aren't legal.

llvm-svn: 26317
This commit is contained in:
Chris Lattner 2006-02-22 23:00:51 +00:00
parent 6f87d18be9
commit 2e124af406
1 changed files with 15 additions and 2 deletions

View File

@ -766,13 +766,26 @@ getRegForInlineAsmConstraint(const std::string &Constraint,
for (MRegisterInfo::regclass_iterator RCI = RI->regclass_begin(),
E = RI->regclass_end(); RCI != E; ++RCI) {
const TargetRegisterClass *RC = *RCI;
// If none of the the value types for this register class are valid, we
// can't use it. For example, 64-bit reg classes on 32-bit targets.
bool isLegal = false;
for (TargetRegisterClass::vt_iterator I = RC->vt_begin(), E = RC->vt_end();
I != E; ++I) {
if (isTypeLegal(*I)) {
isLegal = true;
break;
}
}
if (!isLegal) continue;
for (TargetRegisterClass::iterator I = RC->begin(), E = RC->end();
I != E; ++I) {
if (StringsEqualNoCase(RegName, RI->get(*I).Name)) {
if (StringsEqualNoCase(RegName, RI->get(*I).Name))
return std::make_pair(*I, RC);
}
}
}
return std::pair<unsigned, const TargetRegisterClass*>(0, 0);
}