[PATCH] D35998: [TableGen] AsmMatcher: fix OpIdx computation when HasOptionalOperands is true
Nirav Dave via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 7 06:56:19 PDT 2017
This revision was automatically updated to reflect the committed changes.
Closed by commit rL310254: [TableGen] AsmMatcher: fix OpIdx computation when HasOptionalOperands is true (authored by niravd).
Changed prior to commit:
https://reviews.llvm.org/D35998?vs=109923&id=109981#toc
Repository:
rL LLVM
https://reviews.llvm.org/D35998
Files:
llvm/trunk/utils/TableGen/AsmMatcherEmitter.cpp
Index: llvm/trunk/utils/TableGen/AsmMatcherEmitter.cpp
===================================================================
--- llvm/trunk/utils/TableGen/AsmMatcherEmitter.cpp
+++ llvm/trunk/utils/TableGen/AsmMatcherEmitter.cpp
@@ -1847,13 +1847,25 @@
CvtOS << " assert(Kind < CVT_NUM_SIGNATURES && \"Invalid signature!\");\n";
CvtOS << " const uint8_t *Converter = ConversionTable[Kind];\n";
if (HasOptionalOperands) {
- CvtOS << " unsigned NumDefaults = 0;\n";
+ size_t MaxNumOperands = 0;
+ for (const auto &MI : Infos) {
+ MaxNumOperands = std::max(MaxNumOperands, MI->AsmOperands.size());
+ }
+ CvtOS << " unsigned DefaultsOffset[" << (MaxNumOperands + 1)
+ << "] = { 0 };\n";
+ CvtOS << " assert(OptionalOperandsMask.size() == " << (MaxNumOperands)
+ << ");\n";
+ CvtOS << " for (unsigned i = 0, NumDefaults = 0; i < " << (MaxNumOperands)
+ << "; ++i) {\n";
+ CvtOS << " DefaultsOffset[i + 1] = NumDefaults;\n";
+ CvtOS << " NumDefaults += (OptionalOperandsMask[i] ? 1 : 0);\n";
+ CvtOS << " }\n";
}
CvtOS << " unsigned OpIdx;\n";
CvtOS << " Inst.setOpcode(Opcode);\n";
CvtOS << " for (const uint8_t *p = Converter; *p; p+= 2) {\n";
if (HasOptionalOperands) {
- CvtOS << " OpIdx = *(p + 1) - NumDefaults;\n";
+ CvtOS << " OpIdx = *(p + 1) - DefaultsOffset[*(p + 1)];\n";
} else {
CvtOS << " OpIdx = *(p + 1);\n";
}
@@ -1988,7 +2000,6 @@
<< " " << Op.Class->DefaultMethod << "()"
<< "->" << Op.Class->RenderMethod << "(Inst, "
<< OpInfo.MINumOperands << ");\n"
- << " ++NumDefaults;\n"
<< " } else {\n"
<< " static_cast<" << TargetOperandClass
<< "&>(*Operands[OpIdx])." << Op.Class->RenderMethod
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D35998.109981.patch
Type: text/x-patch
Size: 1872 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170807/5ba12f2f/attachment.bin>
More information about the llvm-commits
mailing list