mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
Revert "[TableGen] AsmMatcher: fix OpIdx computation when HasOptionalOperands is true"
Breaks check-llvm under ubsan. This reverts commit r309949. llvm-svn: 310008
This commit is contained in:
parent
7e30f0bba6
commit
e3151040b7
@ -1847,30 +1847,13 @@ static void emitConvertFuncs(CodeGenTarget &Target, StringRef ClassName,
|
||||
CvtOS << " assert(Kind < CVT_NUM_SIGNATURES && \"Invalid signature!\");\n";
|
||||
CvtOS << " const uint8_t *Converter = ConversionTable[Kind];\n";
|
||||
if (HasOptionalOperands) {
|
||||
size_t MaxNumOperands = 0;
|
||||
for (const auto &MI : Infos) {
|
||||
MaxNumOperands = std::max(MaxNumOperands, MI->AsmOperands.size());
|
||||
}
|
||||
CvtOS << " unsigned DefaultsOffset[" << (MaxNumOperands) << "];\n";
|
||||
CvtOS << " assert(OptionalOperandsMask.size() == " << (MaxNumOperands)
|
||||
<< ");\n";
|
||||
CvtOS << " for (unsigned i = 0, NumDefaults = 0; i < " << (MaxNumOperands)
|
||||
<< "; ++i) {\n";
|
||||
CvtOS << " DefaultsOffset[i] = NumDefaults;\n";
|
||||
CvtOS << " NumDefaults += (OptionalOperandsMask[i] ? 1 : 0);\n";
|
||||
CvtOS << " }\n";
|
||||
CvtOS << " unsigned NumDefaults = 0;\n";
|
||||
}
|
||||
CvtOS << " unsigned OpIdx;\n";
|
||||
CvtOS << " Inst.setOpcode(Opcode);\n";
|
||||
CvtOS << " for (const uint8_t *p = Converter; *p; p+= 2) {\n";
|
||||
if (HasOptionalOperands) {
|
||||
// OpIdx has different semantics for Tied operands and the rest of the
|
||||
// operands. For Tied it is the index in the Inst, therefore we use it
|
||||
// directly. For the rest of the operands, we need to account for the
|
||||
// offset.
|
||||
CvtOS << " OpIdx = *(p + 1);\n";
|
||||
CvtOS << " OpIdx -= (*p != CVT_Tied) ? DefaultsOffset[*(p + 1) - 1] : "
|
||||
"0;\n";
|
||||
CvtOS << " OpIdx = *(p + 1) - NumDefaults;\n";
|
||||
} else {
|
||||
CvtOS << " OpIdx = *(p + 1);\n";
|
||||
}
|
||||
@ -2005,6 +1988,7 @@ static void emitConvertFuncs(CodeGenTarget &Target, StringRef ClassName,
|
||||
<< " " << Op.Class->DefaultMethod << "()"
|
||||
<< "->" << Op.Class->RenderMethod << "(Inst, "
|
||||
<< OpInfo.MINumOperands << ");\n"
|
||||
<< " ++NumDefaults;\n"
|
||||
<< " } else {\n"
|
||||
<< " static_cast<" << TargetOperandClass
|
||||
<< "&>(*Operands[OpIdx])." << Op.Class->RenderMethod
|
||||
|
Loading…
Reference in New Issue
Block a user