From 3aae473658d62f5352a0e8b2fa77ebabcbf6a50a Mon Sep 17 00:00:00 2001 From: Lei Zhang Date: Fri, 18 Oct 2019 08:19:54 -0700 Subject: [PATCH] [DRR] Use eraseOp() to replace no-result ops PiperOrigin-RevId: 275475229 --- mlir/tools/mlir-tblgen/RewriterGen.cpp | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/mlir/tools/mlir-tblgen/RewriterGen.cpp b/mlir/tools/mlir-tblgen/RewriterGen.cpp index 07a3d7e..cefd1d6 100644 --- a/mlir/tools/mlir-tblgen/RewriterGen.cpp +++ b/mlir/tools/mlir-tblgen/RewriterGen.cpp @@ -542,18 +542,26 @@ void PatternEmitter::emitRewriteLogic() { os.indent(4) << val << ";\n"; } - // Process replacement result patterns. - os.indent(4) << "SmallVector tblgen_values;"; - for (int i = replStartIndex; i < numResultPatterns; ++i) { - DagNode resultTree = pattern.getResultPattern(i); - auto val = handleResultPattern(resultTree, offsets[i], 0); + if (numExpectedResults == 0) { + assert(replStartIndex >= numResultPatterns && + "invalid auxiliary vs. replacement pattern division!"); + // No result to replace. Just erase the op. + os.indent(4) << "rewriter.eraseOp(op0);\n"; + } else { + // Process replacement result patterns. + os.indent(4) << "SmallVector tblgen_values;"; + for (int i = replStartIndex; i < numResultPatterns; ++i) { + DagNode resultTree = pattern.getResultPattern(i); + auto val = handleResultPattern(resultTree, offsets[i], 0); + os.indent(4) << "\n"; + // Resolve each symbol for all range use so that we can loop over them. + os << symbolInfoMap.getAllRangeUse( + val, " for (auto *v : {0}) tblgen_values.push_back(v);", "\n"); + } os.indent(4) << "\n"; - // Resolve each symbol for all range use so that we can loop over them. - os << symbolInfoMap.getAllRangeUse( - val, " for (auto *v : {0}) tblgen_values.push_back(v);", "\n"); + os.indent(4) << "rewriter.replaceOp(op0, tblgen_values);\n"; } - os.indent(4) << "\n"; - os.indent(4) << "rewriter.replaceOp(op0, tblgen_values);\n"; + LLVM_DEBUG(llvm::dbgs() << "--- done emitting rewrite logic ---\n"); } -- 2.7.4