diff --git a/llvm/tools/llvm-exegesis/lib/X86/Target.cpp b/llvm/tools/llvm-exegesis/lib/X86/Target.cpp index ae5c2e8d25e8..1a7d290b1afd 100644 --- a/llvm/tools/llvm-exegesis/lib/X86/Target.cpp +++ b/llvm/tools/llvm-exegesis/lib/X86/Target.cpp @@ -26,7 +26,14 @@ static llvm::Error IsInvalidOpcode(const Instruction &Instr) { if (OpcodeName.startswith("POPF") || OpcodeName.startswith("PUSHF") || OpcodeName.startswith("ADJCALLSTACK")) return llvm::make_error( - "Unsupported opcode: Push/Pop/AdjCallStack"); + "unsupported opcode: Push/Pop/AdjCallStack"); + // We do not handle second-form X87 instructions. We only handle first-form + // ones (_Fp), see comment in X86InstrFPStack.td. + for (const Operand &Op : Instr.Operands) + if (Op.isReg() && Op.isExplicit() && + Op.getExplicitOperandInfo().RegClass == llvm::X86::RSTRegClassID) + return llvm::make_error( + "unsupported second-form X87 instruction"); return llvm::Error::success(); }