[mlir][SIdeEffectInterface][NFC] Move several InterfaceMethods to the extraClassDecla...
authorRiver Riddle <riddleriver@gmail.com>
Tue, 27 Oct 2020 23:02:59 +0000 (16:02 -0700)
committerRiver Riddle <riddleriver@gmail.com>
Tue, 27 Oct 2020 23:16:51 +0000 (16:16 -0700)
All InterfaceMethods will have a corresponding entry in the interface model, and by extension have an implementation generated for every operation type. This can result in large binary size increases when a large amount of operations use an interface, such as the side effect interface.

Differential Revision: https://reviews.llvm.org/D90084

mlir/include/mlir/Interfaces/SideEffectInterfaces.td

index f1498fb..4f26cb9 100644 (file)
@@ -54,33 +54,6 @@ class EffectOpInterfaceBase<string name, string baseEffect>
          (ins "SmallVectorImpl<::mlir::SideEffects::EffectInstance<"
               # baseEffect # ">> &":$effects)
     >,
-    InterfaceMethod<[{
-        Collects all of the operation's effects into `effects`.
-      }],
-      "void", "getEffectsOnValue",
-         (ins "Value":$value,
-              "SmallVectorImpl<::mlir::SideEffects::EffectInstance<"
-              # baseEffect # ">> &":$effects), [{
-          $_op.getEffects(effects);
-          llvm::erase_if(effects, [&](auto &it) {
-            return it.getValue() != value;
-          });
-       }]
-    >,
-    InterfaceMethod<[{
-        Collects all of the effects that are exhibited by this operation on the
-        given resource and place them in 'effects'.
-      }],
-      "void", "getEffectsOnResource",
-         (ins "SideEffects::Resource *":$resource,
-              "SmallVectorImpl<::mlir::SideEffects::EffectInstance<"
-              # baseEffect # ">> &":$effects), [{
-          $_op.getEffects(effects);
-          llvm::erase_if(effects, [&](auto &it) {
-            return it.getResource() != resource;
-          });
-       }]
-    >
   ];
 
   let extraClassDeclaration = [{
@@ -126,6 +99,26 @@ class EffectOpInterfaceBase<string name, string baseEffect>
         return interface.hasNoEffect();
       return op->hasTrait<::mlir::OpTrait::HasRecursiveSideEffects>();
     }
+
+    /// Collect all of the effect instances that operate on the provided value
+    /// and place them in 'effects'.
+    void getEffectsOnValue(::mlir::Value value,
+              llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<
+              }] # baseEffect # [{>> & effects) {
+      getEffects(effects);
+      llvm::erase_if(effects, [&](auto &it) { return it.getValue() != value; });
+    }
+
+    /// Collect all of the effect instances that operate on the provided
+    /// resource and place them in 'effects'.
+    void getEffectsOnValue(::mlir::SideEffects::Resource *resource,
+              llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<
+              }] # baseEffect # [{>> & effects) {
+      getEffects(effects);
+      llvm::erase_if(effects, [&](auto &it) {
+        return it.getResource() != resource;
+      });
+    }
   }];
 
   // The base effect name of this interface.