mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-22 03:28:35 +00:00
Move InstAlias check of argument types to a separate loop.
llvm-svn: 123934
This commit is contained in:
parent
7c1ca31c1d
commit
959aad8197
@ -403,6 +403,20 @@ CodeGenInstAlias::CodeGenInstAlias(Record *R, CodeGenTarget &T) : TheDef(R) {
|
||||
// NameClass - If argument names are repeated, we need to verify they have
|
||||
// the same class.
|
||||
StringMap<Record*> NameClass;
|
||||
for (unsigned i = 0, e = Result->getNumArgs(); i != e; ++i) {
|
||||
DefInit *ADI = dynamic_cast<DefInit*>(Result->getArg(i));
|
||||
if (!ADI || Result->getArgName(i).empty())
|
||||
continue;
|
||||
// Verify we don't have something like: (someinst GR16:$foo, GR32:$foo)
|
||||
// $foo can exist multiple times in the result list, but it must have the
|
||||
// same type.
|
||||
Record *&Entry = NameClass[Result->getArgName(i)];
|
||||
if (Entry && Entry != ADI->getDef())
|
||||
throw TGError(R->getLoc(), "result value $" + Result->getArgName(i) +
|
||||
" is both " + Entry->getName() + " and " +
|
||||
ADI->getDef()->getName() + "!");
|
||||
Entry = ADI->getDef();
|
||||
}
|
||||
|
||||
// Decode and validate the arguments of the result.
|
||||
unsigned AliasOpNo = 0;
|
||||
@ -474,17 +488,6 @@ CodeGenInstAlias::CodeGenInstAlias(Record *R, CodeGenTarget &T) : TheDef(R) {
|
||||
", instruction operand is class " +
|
||||
ResultOpRec->getName());
|
||||
|
||||
// Verify we don't have something like: (someinst GR16:$foo, GR32:$foo)
|
||||
// $foo can exist multiple times in the result list, but it must have the
|
||||
// same type.
|
||||
Record *&Entry = NameClass[Result->getArgName(AliasOpNo)];
|
||||
if (Entry && Entry != ADI->getDef())
|
||||
throw TGError(R->getLoc(), "result value $" +
|
||||
Result->getArgName(AliasOpNo) +
|
||||
" is both " + Entry->getName() + " and " +
|
||||
ADI->getDef()->getName() + "!");
|
||||
Entry = ADI->getDef();
|
||||
|
||||
// Now that it is validated, add it.
|
||||
ResultOperands.push_back(ResultOperand(Result->getArgName(AliasOpNo),
|
||||
ADI->getDef()));
|
||||
|
Loading…
Reference in New Issue
Block a user