[Mlir-commits] [mlir] [mlir][ODS] Include headers of used traits in generated declarations (PR #236155)

Mehdi Amini llvmlistbot at llvm.org
Wed Oct 28 04:14:31 PDT 2026


================
@@ -0,0 +1,93 @@
+// RUN: mlir-tblgen -gen-op-decls -I %S/../../include %s | FileCheck %s
+
+include "mlir/IR/OpBase.td"
+include "mlir/Interfaces/SideEffectInterfaceBase.td"
+
+def Test_Dialect : Dialect {
+  let name = "test";
+  let cppNamespace = "::test";
+}
+
+def NoHeaderTrait : NativeOpTrait<"NoHeaderTrait">;
+def OpTraitA : NativeOpTrait<"OpTraitA"> {
+  let declaredIn = ["test/OpTraitA.h"];
+}
+// A trait can be declared across several headers.
+def OpTraitB : NativeOpTrait<"OpTraitB"> {
+  let declaredIn = ["test/OpTraitB.h", "test/OpTraitBUtils.h"];
+}
+
+def BaseOpInterface : OpInterface<"BaseOpInterface"> {
+  let cppNamespace = "::test";
+  let declaredIn = ["test/BaseOpInterface.h"];
+}
+def DerivedOpInterface : OpInterface<"DerivedOpInterface", [BaseOpInterface]> {
+  let cppNamespace = "::test";
+  let declaredIn = ["test/DerivedOpInterface.h"];
+}
+def DeclaredMethodsOpInterface : OpInterface<"DeclaredMethodsOpInterface"> {
+  let cppNamespace = "::test";
+  let declaredIn = ["test/DeclaredMethodsOpInterface.h"];
+  let methods = [InterfaceMethod<"", "void", "foo">];
+}
+
+def TraitEffectInterface
+    : EffectOpInterfaceBase<"TraitEffectOpInterface", "::test::TraitEffect"> {
+  let cppNamespace = "::test";
+  let declaredIn = ["test/TraitEffects.h"];
+}
+def DecoratorEffectInterface
+    : EffectOpInterfaceBase<"DecoratorEffectOpInterface",
+                            "::test::DecoratorEffect"> {
+  let cppNamespace = "::test";
+  let declaredIn = ["test/DecoratorEffects.h"];
+}
+
+// The headers of all ops are emitted once, sorted, at the start of the class
----------------
joker-eph wrote:

```suggestion
// The headers of all used traits are emitted once, sorted, before the start of the class
```

https://github.com/llvm/llvm-project/pull/236155


More information about the Mlir-commits mailing list