From 5e8f2a65ca2044815039129610876dfc4de3ebfa Mon Sep 17 00:00:00 2001 From: Bob Wilson Date: Thu, 20 Jan 2011 18:38:02 +0000 Subject: [PATCH] Precompute InstAlias operand mapping to result instruction operand indices. There should be no functional change from this, but I think it's simpler this way. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123931 91177308-0d34-0410-b5e6-96231b3b80d8 --- utils/TableGen/AsmMatcherEmitter.cpp | 2 +- utils/TableGen/CodeGenInstruction.cpp | 22 ++++------------------ utils/TableGen/CodeGenInstruction.h | 9 ++++----- 3 files changed, 9 insertions(+), 24 deletions(-) diff --git a/utils/TableGen/AsmMatcherEmitter.cpp b/utils/TableGen/AsmMatcherEmitter.cpp index be1cd709ca9..78840fec38b 100644 --- a/utils/TableGen/AsmMatcherEmitter.cpp +++ b/utils/TableGen/AsmMatcherEmitter.cpp @@ -1213,7 +1213,7 @@ void AsmMatcherInfo::BuildAliasOperandReference(MatchableInfo *II, CGA.ResultOperands[i].getName() == OperandName) { // It's safe to go with the first one we find, because CodeGenInstAlias // validates that all operands with the same name have the same record. - unsigned ResultIdx =CGA.getResultInstOperandIndexForResultOperandIndex(i); + unsigned ResultIdx = CGA.ResultInstOperandIndex[i]; Op.Class = getOperandClass(CGA.ResultInst->Operands[ResultIdx]); Op.SrcOpName = OperandName; return; diff --git a/utils/TableGen/CodeGenInstruction.cpp b/utils/TableGen/CodeGenInstruction.cpp index 08005fb5e1c..6b1fc6ed1a6 100644 --- a/utils/TableGen/CodeGenInstruction.cpp +++ b/utils/TableGen/CodeGenInstruction.cpp @@ -439,6 +439,7 @@ CodeGenInstAlias::CodeGenInstAlias(Record *R, CodeGenTarget &T) : TheDef(R) { // Now that it is validated, add it. ResultOperands.push_back(ResultOperand(ADI->getDef())); + ResultInstOperandIndex.push_back(i); ++AliasOpNo; continue; } @@ -454,6 +455,7 @@ CodeGenInstAlias::CodeGenInstAlias(Record *R, CodeGenTarget &T) : TheDef(R) { // Now that it is validated, add it. ResultOperands.push_back(ResultOperand(static_cast(0))); + ResultInstOperandIndex.push_back(i); ++AliasOpNo; continue; } @@ -485,6 +487,7 @@ CodeGenInstAlias::CodeGenInstAlias(Record *R, CodeGenTarget &T) : TheDef(R) { // Now that it is validated, add it. ResultOperands.push_back(ResultOperand(Result->getArgName(AliasOpNo), ADI->getDef())); + ResultInstOperandIndex.push_back(i); ++AliasOpNo; continue; } @@ -500,6 +503,7 @@ CodeGenInstAlias::CodeGenInstAlias(Record *R, CodeGenTarget &T) : TheDef(R) { ResultOpRec->getName() + " for integer result operand!"); ResultOperands.push_back(ResultOperand(II->getValue())); + ResultInstOperandIndex.push_back(i); ++AliasOpNo; continue; } @@ -513,21 +517,3 @@ CodeGenInstAlias::CodeGenInstAlias(Record *R, CodeGenTarget &T) : TheDef(R) { " instruction expects " + utostr(ResultInst->Operands.size())+ " operands!"); } - -/// getResultInstOperandIndexForResultOperandIndex - Given an index into the -/// ResultOperands array, translate it to a valid index in ResultInst's -/// operand list. -unsigned CodeGenInstAlias:: -getResultInstOperandIndexForResultOperandIndex(unsigned OpNo) const { - unsigned OpIdx = 0; - - for (unsigned i = 0;; ++i) { - assert(i != ResultInst->Operands.size() && "Didn't find entry"); - if (ResultInst->Operands[i].getTiedRegister() != -1) - continue; - - if (OpIdx == OpNo) return i; - - ++OpIdx; - } -} diff --git a/utils/TableGen/CodeGenInstruction.h b/utils/TableGen/CodeGenInstruction.h index d58bfb12968..fb0e50c08b7 100644 --- a/utils/TableGen/CodeGenInstruction.h +++ b/utils/TableGen/CodeGenInstruction.h @@ -296,13 +296,12 @@ namespace llvm { /// ResultOperands - The decoded operands for the result instruction. std::vector ResultOperands; + + /// ResultInstOperandIndex - For each operand, this vector holds the + /// corresponding index of an operand in the result instruction. + std::vector ResultInstOperandIndex; CodeGenInstAlias(Record *R, CodeGenTarget &T); - - /// getResultInstOperandIndexForResultOperandIndex - Given an index into the - /// ResultOperands array, translate it to a valid index in ResultInst's - /// operand list. - unsigned getResultInstOperandIndexForResultOperandIndex(unsigned i) const; }; } -- 2.11.0