mirror of
https://github.com/intel/llvm.git
synced 2026-01-24 08:30:34 +08:00
[mlir][NFC] Avoid OpBuilder::setListener when possible
`setListener` is dangerous because an already registered listener may accidentally be overwritten/replaced. (A `ForwardingListener` must be used in such cases.) This change updates a few trivial call sites of `setListener`, where no forwarding listener is needed. Differential Revision: https://reviews.llvm.org/D155599
This commit is contained in:
@@ -151,7 +151,9 @@ protected:
|
||||
/// conversions.
|
||||
class OneToNPatternRewriter : public PatternRewriter {
|
||||
public:
|
||||
OneToNPatternRewriter(MLIRContext *context) : PatternRewriter(context) {}
|
||||
OneToNPatternRewriter(MLIRContext *context,
|
||||
OpBuilder::Listener *listener = nullptr)
|
||||
: PatternRewriter(context, listener) {}
|
||||
|
||||
/// Replaces the results of the operation with the specified list of values
|
||||
/// mapped back to the original types as specified in the provided type
|
||||
|
||||
@@ -44,8 +44,7 @@ class ExpandIfCondition : public OpRewritePattern<OpTy> {
|
||||
auto ifOp = rewriter.create<scf::IfOp>(op.getLoc(), TypeRange(),
|
||||
op.getIfCond(), false);
|
||||
rewriter.updateRootInPlace(op, [&]() { op.getIfCondMutable().erase(0); });
|
||||
auto thenBodyBuilder = ifOp.getThenBodyBuilder();
|
||||
thenBodyBuilder.setListener(rewriter.getListener());
|
||||
auto thenBodyBuilder = ifOp.getThenBodyBuilder(rewriter.getListener());
|
||||
thenBodyBuilder.clone(*op.getOperation());
|
||||
rewriter.eraseOp(op);
|
||||
} else {
|
||||
|
||||
@@ -1278,17 +1278,16 @@ mlir::affine::makeComposedFoldedAffineApply(OpBuilder &b, Location loc,
|
||||
ArrayRef<OpFoldResult> operands) {
|
||||
assert(map.getNumResults() == 1 && "building affine.apply with !=1 result");
|
||||
|
||||
// Temporarily disconnect the listener, so that no notification is triggered
|
||||
// if the op is folded.
|
||||
// Create new builder without a listener, so that no notification is
|
||||
// triggered if the op is folded.
|
||||
// TODO: OpBuilder::createOrFold should return OpFoldResults, then this
|
||||
// workaround is no longer needed.
|
||||
OpBuilder::Listener *listener = b.getListener();
|
||||
b.setListener(nullptr);
|
||||
auto listenerResetter =
|
||||
llvm::make_scope_exit([listener, &b] { b.setListener(listener); });
|
||||
OpBuilder newBuilder(b.getContext());
|
||||
newBuilder.setInsertionPoint(b.getInsertionBlock(), b.getInsertionPoint());
|
||||
|
||||
// Create op.
|
||||
AffineApplyOp applyOp = makeComposedAffineApply(b, loc, map, operands);
|
||||
AffineApplyOp applyOp =
|
||||
makeComposedAffineApply(newBuilder, loc, map, operands);
|
||||
|
||||
// Get constant operands.
|
||||
SmallVector<Attribute> constOperands(applyOp->getNumOperands());
|
||||
@@ -1299,7 +1298,7 @@ mlir::affine::makeComposedFoldedAffineApply(OpBuilder &b, Location loc,
|
||||
SmallVector<OpFoldResult> foldResults;
|
||||
if (failed(applyOp->fold(constOperands, foldResults)) ||
|
||||
foldResults.empty()) {
|
||||
if (listener)
|
||||
if (OpBuilder::Listener *listener = b.getListener())
|
||||
listener->notifyOperationInserted(applyOp);
|
||||
return applyOp.getResult();
|
||||
}
|
||||
@@ -1347,17 +1346,15 @@ template <typename OpTy>
|
||||
static OpFoldResult makeComposedFoldedMinMax(OpBuilder &b, Location loc,
|
||||
AffineMap map,
|
||||
ArrayRef<OpFoldResult> operands) {
|
||||
// Temporarily disconnect the listener, so that no notification is triggered
|
||||
// if the op is folded.
|
||||
// Create new builder without a listener, so that no notification is
|
||||
// triggered if the op is folded.
|
||||
// TODO: OpBuilder::createOrFold should return OpFoldResults, then this
|
||||
// workaround is no longer needed.
|
||||
OpBuilder::Listener *listener = b.getListener();
|
||||
b.setListener(nullptr);
|
||||
auto listenerResetter =
|
||||
llvm::make_scope_exit([listener, &b] { b.setListener(listener); });
|
||||
OpBuilder newBuilder(b.getContext());
|
||||
newBuilder.setInsertionPoint(b.getInsertionBlock(), b.getInsertionPoint());
|
||||
|
||||
// Create op.
|
||||
auto minMaxOp = makeComposedMinMax<OpTy>(b, loc, map, operands);
|
||||
auto minMaxOp = makeComposedMinMax<OpTy>(newBuilder, loc, map, operands);
|
||||
|
||||
// Get constant operands.
|
||||
SmallVector<Attribute> constOperands(minMaxOp->getNumOperands());
|
||||
@@ -1368,7 +1365,7 @@ static OpFoldResult makeComposedFoldedMinMax(OpBuilder &b, Location loc,
|
||||
SmallVector<OpFoldResult> foldResults;
|
||||
if (failed(minMaxOp->fold(constOperands, foldResults)) ||
|
||||
foldResults.empty()) {
|
||||
if (listener)
|
||||
if (OpBuilder::Listener *listener = b.getListener())
|
||||
listener->notifyOperationInserted(minMaxOp);
|
||||
return minMaxOp.getResult();
|
||||
}
|
||||
|
||||
@@ -289,9 +289,9 @@ OneToNConversionPattern::matchAndRewrite(Operation *op,
|
||||
// drive the pattern application ourselves, which is a lot
|
||||
// of additional boilerplate code. This seems to work fine,
|
||||
// so I leave it like this for the time being.
|
||||
OneToNPatternRewriter oneToNPatternRewriter(rewriter.getContext());
|
||||
OneToNPatternRewriter oneToNPatternRewriter(rewriter.getContext(),
|
||||
rewriter.getListener());
|
||||
oneToNPatternRewriter.restoreInsertionPoint(rewriter.saveInsertionPoint());
|
||||
oneToNPatternRewriter.setListener(rewriter.getListener());
|
||||
|
||||
// Apply actual pattern.
|
||||
if (failed(matchAndRewrite(op, oneToNPatternRewriter, operandMapping,
|
||||
|
||||
Reference in New Issue
Block a user