diff --git a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp --- a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp +++ b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp @@ -4270,24 +4270,6 @@ ForcedVEXEncoding != VEXEncoding_VEX3)) return Match_Unsupported; - // These instructions match ambiguously with their VEX encoded counterparts - // and appear first in the matching table. Reject them unless we're forcing - // EVEX encoding. - // FIXME: We really need a way to break the ambiguity. - switch (Opc) { - case X86::VCVTSD2SIZrm_Int: - case X86::VCVTSD2SI64Zrm_Int: - case X86::VCVTSS2SIZrm_Int: - case X86::VCVTSS2SI64Zrm_Int: - case X86::VCVTTSD2SIZrm: case X86::VCVTTSD2SIZrm_Int: - case X86::VCVTTSD2SI64Zrm: case X86::VCVTTSD2SI64Zrm_Int: - case X86::VCVTTSS2SIZrm: case X86::VCVTTSS2SIZrm_Int: - case X86::VCVTTSS2SI64Zrm: case X86::VCVTTSS2SI64Zrm_Int: - if (ForcedVEXEncoding != VEXEncoding_EVEX) - return Match_Unsupported; - break; - } - return Match_Success; } diff --git a/llvm/utils/TableGen/AsmMatcherEmitter.cpp b/llvm/utils/TableGen/AsmMatcherEmitter.cpp --- a/llvm/utils/TableGen/AsmMatcherEmitter.cpp +++ b/llvm/utils/TableGen/AsmMatcherEmitter.cpp @@ -636,6 +636,9 @@ if (RequiredFeatures.size() != RHS.RequiredFeatures.size()) return RequiredFeatures.size() > RHS.RequiredFeatures.size(); + if (TheDef->isSubClassOf("X86Inst")) + return TheDef->getID() < RHS.TheDef->getID(); + return false; }