From 2cff9ee46bffb5c62b97df51590c28cd4230c551 Mon Sep 17 00:00:00 2001 From: Eugene Zhulenev Date: Fri, 4 Feb 2022 10:20:12 -0800 Subject: [PATCH] [mlir] Use SetVector to deduplicate shape ops operands Do not use quadratic complexity algorithm to find unique operands Reviewed By: jpienaar Differential Revision: https://reviews.llvm.org/D119021 --- mlir/lib/Dialect/Shape/IR/Shape.cpp | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/mlir/lib/Dialect/Shape/IR/Shape.cpp b/mlir/lib/Dialect/Shape/IR/Shape.cpp index aaad72e..661f621 100644 --- a/mlir/lib/Dialect/Shape/IR/Shape.cpp +++ b/mlir/lib/Dialect/Shape/IR/Shape.cpp @@ -490,16 +490,12 @@ struct RemoveDuplicateOperandsPattern : public OpRewritePattern { LogicalResult matchAndRewrite(OpTy op, PatternRewriter &rewriter) const override { // Find unique operands. - SmallVector unique; - for (Value v : op.getOperands()) { - if (!llvm::is_contained(unique, v)) - unique.push_back(v); - } + SetVector unique(op.operand_begin(), op.operand_end()); // Reduce op to equivalent with unique operands. if (unique.size() < op.getNumOperands()) { - rewriter.replaceOpWithNewOp(op, op->getResultTypes(), unique, - op->getAttrs()); + rewriter.replaceOpWithNewOp(op, op->getResultTypes(), + unique.takeVector(), op->getAttrs()); return success(); } @@ -919,7 +915,7 @@ OpFoldResult CstrBroadcastableOp::fold(ArrayRef operands) { } LogicalResult CstrBroadcastableOp::verify() { - // Ensure that AssumingAllOp contains at least one operand + // Ensure that CstrBroadcastableOp contains at least two operands if (getNumOperands() < 2) return emitOpError("required at least 2 input shapes"); return success(); -- 2.7.4