Skip to content

Commit 083ff70

Browse files
[TableGen] Bug fix for tied optional operands resolution
1 parent f03c485 commit 083ff70

File tree

1 file changed

+5
-4
lines changed

1 file changed

+5
-4
lines changed

llvm/utils/TableGen/AsmMatcherEmitter.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2002,9 +2002,9 @@ emitConvertFuncs(CodeGenTarget &Target, StringRef ClassName,
20022002
}
20032003
CvtOS << " assert(Kind < CVT_NUM_SIGNATURES && \"Invalid signature!\");\n";
20042004
CvtOS << " const uint8_t *Converter = ConversionTable[Kind];\n";
2005-
CvtOS << " unsigned OpIdx;\n";
20062005
CvtOS << " Inst.setOpcode(Opcode);\n";
20072006
CvtOS << " for (const uint8_t *p = Converter; *p; p += 2) {\n";
2007+
CvtOS << " unsigned OpIdx;\n";
20082008
if (HasOptionalOperands) {
20092009
// When optional operands are involved, formal and actual operand indices
20102010
// may differ. Map the former to the latter by subtracting the number of
@@ -2015,16 +2015,17 @@ emitConvertFuncs(CodeGenTarget &Target, StringRef ClassName,
20152015
}
20162016
CvtOS << " switch (*p) {\n";
20172017
CvtOS << " default: llvm_unreachable(\"invalid conversion entry!\");\n";
2018-
CvtOS << " case CVT_Reg:\n";
2018+
CvtOS << " case CVT_Reg:{\n";
20192019
CvtOS << " static_cast<" << TargetOperandClass
20202020
<< " &>(*Operands[OpIdx]).addRegOperands(Inst, 1);\n";
20212021
CvtOS << " break;\n";
2022+
CvtOS << " }\n";
20222023
CvtOS << " case CVT_Tied: {\n";
2023-
CvtOS << " assert(OpIdx < (size_t)(std::end(TiedAsmOperandTable) -\n";
2024+
CvtOS << " assert(*(p + 1) < (size_t)(std::end(TiedAsmOperandTable) -\n";
20242025
CvtOS
20252026
<< " std::begin(TiedAsmOperandTable)) &&\n";
20262027
CvtOS << " \"Tied operand not found\");\n";
2027-
CvtOS << " unsigned TiedResOpnd = TiedAsmOperandTable[OpIdx][0];\n";
2028+
CvtOS << " unsigned TiedResOpnd = TiedAsmOperandTable[*(p + 1)][0];\n";
20282029
CvtOS << " if (TiedResOpnd != (uint8_t)-1)\n";
20292030
CvtOS << " Inst.addOperand(Inst.getOperand(TiedResOpnd));\n";
20302031
CvtOS << " break;\n";

0 commit comments

Comments
 (0)