[Mlir-commits] [mlir] [mlir][pass] Allow reregistration of pass with same typeids (PR #72067)
Maksim Levental
llvmlistbot at llvm.org
Sun Nov 12 20:18:22 PST 2023
================
@@ -181,4 +182,48 @@ TEST(PassManagerTest, PassInitialization) {
EXPECT_TRUE(succeeded(pm.run(module.get())));
}
+struct ReRegisterPass
+ : public PassWrapper<ReRegisterPass, OperationPass<ModuleOp>> {
+ MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(ReRegisterPass)
+
+ ReRegisterPass(std::string annotation) : annotation(annotation) {}
+
+ std::string annotation;
+
+ void runOnOperation() override {
+ ModuleOp op = this->getOperation();
+ Builder builder(op);
+ op->walk([this, &builder](Operation *op) {
+ op->setAttr(annotation, builder.getUnitAttr());
+ });
+ }
+};
+
+TEST(PassManagerTest, PassReRegistration) {
+ MLIRContext context;
+ context.allowUnregisteredDialects();
+
+ std::string moduleStr = R"mlir(
+ module {
+ "custom.op1"() : () -> ()
+ "custom.op2"() : () -> ()
+ }
+ )mlir";
+
+ OwningOpRef<ModuleOp> module =
+ parseSourceString<ModuleOp>(moduleStr, &context);
+
+ // Instantiate and run pass in first configuration.
+ auto pm = PassManager::on<ModuleOp>(&context);
+ pm.addPass(std::make_unique<ReRegisterPass>("custom.first"));
+ EXPECT_TRUE(succeeded(pm.run(module.get())));
+ module->walk([](Operation *op) { EXPECT_TRUE(op->hasAttr("custom.first")); });
+
+ // Adding a "reconfiguration" of the pass, i.e., with a different annotation.
+ pm.addPass(std::make_unique<ReRegisterPass>("custom.second"));
----------------
makslevental wrote:
Now maybe I'm missing something - it will fail because without the change. If you run the pass manager again, even after adding the "second" pass, you will not see `custom.second` attributes in the second walk right? I mean this isn't a question, I know I tested with and without locally.
https://github.com/llvm/llvm-project/pull/72067
More information about the Mlir-commits
mailing list