ConvertStandardToLLVM: replace assertion with graceful failure
authorAlex Zinenko <zinenko@google.com>
Mon, 18 Nov 2019 19:25:52 +0000 (11:25 -0800)
committerA. Unique TensorFlower <gardener@tensorflow.org>
Mon, 18 Nov 2019 19:26:24 +0000 (11:26 -0800)
The assertion was introduced in the early days of dialect conversion
infrastructure when we had the matching function separate from the rewriting
function. The infrastructure evolved to have a common matchAndRewrite function
and the separate matching function was dropped without chaning the rewriting
that became matchAndRewrite. This has led to assertion being triggered. Return
a matchFailure instead of failing an assertion on unsupported types.

Closes tensorflow/mlir#230

PiperOrigin-RevId: 281113741

mlir/lib/Conversion/StandardToLLVM/ConvertStandardToLLVM.cpp

index 59a112d..dc38ae3 100644 (file)
@@ -565,8 +565,8 @@ struct OneToOneLLVMOpLowering : public LLVMLegalizationPattern<SourceOp> {
     if (numResults != 0) {
       packedType = this->lowering.packFunctionResults(
           llvm::to_vector<4>(op->getResultTypes()));
-      assert(packedType && "type conversion failed, such operation should not "
-                           "have been matched");
+      if (!packedType)
+        return this->matchFailure();
     }
 
     auto newOp = rewriter.create<TargetOp>(op->getLoc(), packedType, operands,