Skip to content

Commit 60edb61

Browse files
[TableGen] Bug fix for tied optional operands resolution
1 parent ece2c25 commit 60edb61

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
@@ -1986,9 +1986,9 @@ emitConvertFuncs(CodeGenTarget &Target, StringRef ClassName,
19861986
}
19871987
CvtOS << " assert(Kind < CVT_NUM_SIGNATURES && \"Invalid signature!\");\n";
19881988
CvtOS << " const uint8_t *Converter = ConversionTable[Kind];\n";
1989-
CvtOS << " unsigned OpIdx;\n";
19901989
CvtOS << " Inst.setOpcode(Opcode);\n";
19911990
CvtOS << " for (const uint8_t *p = Converter; *p; p += 2) {\n";
1991+
CvtOS << " unsigned OpIdx;\n";
19921992
if (HasOptionalOperands) {
19931993
// When optional operands are involved, formal and actual operand indices
19941994
// may differ. Map the former to the latter by subtracting the number of
@@ -1999,16 +1999,17 @@ emitConvertFuncs(CodeGenTarget &Target, StringRef ClassName,
19991999
}
20002000
CvtOS << " switch (*p) {\n";
20012001
CvtOS << " default: llvm_unreachable(\"invalid conversion entry!\");\n";
2002-
CvtOS << " case CVT_Reg:\n";
2002+
CvtOS << " case CVT_Reg:{\n";
20032003
CvtOS << " static_cast<" << TargetOperandClass
20042004
<< " &>(*Operands[OpIdx]).addRegOperands(Inst, 1);\n";
20052005
CvtOS << " break;\n";
2006+
CvtOS << " }\n";
20062007
CvtOS << " case CVT_Tied: {\n";
2007-
CvtOS << " assert(OpIdx < (size_t)(std::end(TiedAsmOperandTable) -\n";
2008+
CvtOS << " assert(*(p + 1) < (size_t)(std::end(TiedAsmOperandTable) -\n";
20082009
CvtOS
20092010
<< " std::begin(TiedAsmOperandTable)) &&\n";
20102011
CvtOS << " \"Tied operand not found\");\n";
2011-
CvtOS << " unsigned TiedResOpnd = TiedAsmOperandTable[OpIdx][0];\n";
2012+
CvtOS << " unsigned TiedResOpnd = TiedAsmOperandTable[*(p + 1)][0];\n";
20122013
CvtOS << " if (TiedResOpnd != (uint8_t)-1)\n";
20132014
CvtOS << " Inst.addOperand(Inst.getOperand(TiedResOpnd));\n";
20142015
CvtOS << " break;\n";

0 commit comments

Comments
 (0)