diff --git a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp --- a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp @@ -303,13 +303,20 @@ /// Given a single MLIR operation, create the corresponding LLVM IR operation /// using the `builder`. LogicalResult -ModuleTranslation::convertOperation(Operation &opInst, +ModuleTranslation::convertOperation(Operation &op, llvm::IRBuilderBase &builder) { - if (failed(iface.convertOperation(&opInst, builder, *this))) - return opInst.emitError("unsupported or non-LLVM operation: ") - << opInst.getName(); - - return convertDialectAttributes(&opInst); + const LLVMTranslationDialectInterface *opIface = iface.getInterfaceFor(&op); + if (!opIface) + return op.emitError("cannot be converted to LLVM IR: missing " + "`LLVMTranslationDialectInterface` registration for " + "dialect for op: ") + << op.getName(); + + if (failed(opIface->convertOperation(&op, builder, *this))) + return op.emitError("LLVM Translation failed for operation: ") + << op.getName(); + + return convertDialectAttributes(&op); } /// Convert block to LLVM IR. Unless `ignoreArguments` is set, emit PHI nodes