summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBob Wilson <bob.wilson@apple.com>2011-01-20 18:38:02 +0000
committerBob Wilson <bob.wilson@apple.com>2011-01-20 18:38:02 +0000
commitf3f2835b011094bcbf73709b82ba4fa7f51873ea (patch)
tree62715483415b9cbde0a4d7d0321b8549184d9bf1
parentef8cab90796be8856937400977b2b35d4ebdd985 (diff)
downloadbcm5719-llvm-f3f2835b011094bcbf73709b82ba4fa7f51873ea.tar.gz
bcm5719-llvm-f3f2835b011094bcbf73709b82ba4fa7f51873ea.zip
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. llvm-svn: 123931
-rw-r--r--llvm/utils/TableGen/AsmMatcherEmitter.cpp2
-rw-r--r--llvm/utils/TableGen/CodeGenInstruction.cpp22
-rw-r--r--llvm/utils/TableGen/CodeGenInstruction.h9
3 files changed, 9 insertions, 24 deletions
diff --git a/llvm/utils/TableGen/AsmMatcherEmitter.cpp b/llvm/utils/TableGen/AsmMatcherEmitter.cpp
index be1cd709ca9..78840fec38b 100644
--- a/llvm/utils/TableGen/AsmMatcherEmitter.cpp
+++ b/llvm/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/llvm/utils/TableGen/CodeGenInstruction.cpp b/llvm/utils/TableGen/CodeGenInstruction.cpp
index 08005fb5e1c..6b1fc6ed1a6 100644
--- a/llvm/utils/TableGen/CodeGenInstruction.cpp
+++ b/llvm/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<Record*>(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/llvm/utils/TableGen/CodeGenInstruction.h b/llvm/utils/TableGen/CodeGenInstruction.h
index d58bfb12968..fb0e50c08b7 100644
--- a/llvm/utils/TableGen/CodeGenInstruction.h
+++ b/llvm/utils/TableGen/CodeGenInstruction.h
@@ -296,13 +296,12 @@ namespace llvm {
/// ResultOperands - The decoded operands for the result instruction.
std::vector<ResultOperand> ResultOperands;
+
+ /// ResultInstOperandIndex - For each operand, this vector holds the
+ /// corresponding index of an operand in the result instruction.
+ std::vector<unsigned> 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;
};
}
OpenPOWER on IntegriCloud