LogicalResult bufferizeModuleOp(ModuleOp moduleOp,
const OneShotBufferizationOptions &options);
+/// Remove bufferization attributes on every FuncOp arguments in the ModuleOp.
+void removeBufferizationAttributesInModule(ModuleOp moduleOp);
+
/// Run One-Shot Module Bufferization on the given module. Performs a simple
/// function call analysis to determine which function arguments are
/// inplaceable. Then analyzes and bufferizes FuncOps one-by-one with One-Shot
return success();
}
+void mlir::bufferization::removeBufferizationAttributesInModule(
+ ModuleOp moduleOp) {
+ moduleOp.walk([&](func::FuncOp op) {
+ for (BlockArgument bbArg : op.getArguments())
+ removeBufferizationAttributes(bbArg);
+ });
+}
+
LogicalResult mlir::bufferization::bufferizeModuleOp(
ModuleOp moduleOp, const OneShotBufferizationOptions &options) {
assert(options.bufferizeFunctionBoundaries &&
}
// Post-pass cleanup of function argument attributes.
- moduleOp.walk([&](func::FuncOp op) {
- for (BlockArgument bbArg : op.getArguments())
- removeBufferizationAttributes(bbArg);
- });
+ removeBufferizationAttributesInModule(moduleOp);
return success();
}
#include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h"
#include "mlir/Dialect/Bufferization/Transforms/Bufferize.h"
#include "mlir/Dialect/Bufferization/Transforms/OneShotAnalysis.h"
+#include "mlir/Dialect/Bufferization/Transforms/OneShotModuleBufferize.h"
#include "mlir/Dialect/Bufferization/Transforms/Transforms.h"
#include "mlir/Dialect/Func/IR/FuncOps.h"
#include "mlir/Dialect/SparseTensor/IR/SparseTensor.h"
}
return true;
});
- return bufferization::bufferizeOp(getOperation(), bufferizationOptions,
- /*copyBeforeWrite=*/false,
- &denseOpFilter);
+
+ if (failed(bufferization::bufferizeOp(getOperation(), bufferizationOptions,
+ /*copyBeforeWrite=*/false,
+ &denseOpFilter)))
+ return failure();
+
+ bufferization::removeBufferizationAttributesInModule(getOperation());
+ return success();
}
void runOnOperation() override {