[Mlir-commits] [mlir] [mlir][emitc] Clean up EmitC tests (PR #152327)

Andrey Timonin llvmlistbot at llvm.org
Thu Aug 7 02:52:00 PDT 2025


https://github.com/EtoAndruwa updated https://github.com/llvm/llvm-project/pull/152327

>From 9cb1e9383b96a92934f74d09c249105ecefdad27 Mon Sep 17 00:00:00 2001
From: EtoAndruwa <timonina1909 at gmail.com>
Date: Thu, 7 Aug 2025 12:24:48 +0300
Subject: [PATCH] [mlir][emitc] Clean up EmitC tests

Changes:
    - Unnecessary `-verify-diagnostics` flags were removed from tests.
    - `mlir/test/mlir-translate/emitc_classops.mlir` was moved to
      `mlir/test/Target/Cpp/class.mlir`.
    - The `transfrom.mlir` test was renamed to `form-expressions.mlir`
      for clarity.
    - Test for `emitc.class`, `emitc.field` and `emitc.get_field` was
      added to `mlir/test/Dialect/EmitC/ops.mlir`.
    - `wrap_emitc_func_in_class.mlir` and `wrap_emitc_func_in_class_noAttr.mlir`
      were combined into `wrap-func-in-class.mlir`.
---
 mlir/test/Dialect/EmitC/attrs.mlir            |  4 +-
 ...{transforms.mlir => form-expressions.mlir} |  7 +-
 mlir/test/Dialect/EmitC/ops.mlir              | 12 +++
 mlir/test/Dialect/EmitC/types.mlir            |  6 +-
 .../Dialect/EmitC/wrap-func-in-class.mlir     | 57 ++++++++++++++
 .../EmitC/wrap_emitc_func_in_class.mlir       | 40 ----------
 .../wrap_emitc_func_in_class_noAttr.mlir      | 17 ----
 mlir/test/Target/Cpp/class.mlir               | 78 +++++++++++++++++++
 mlir/test/mlir-translate/emitc_classops.mlir  | 78 -------------------
 9 files changed, 154 insertions(+), 145 deletions(-)
 rename mlir/test/Dialect/EmitC/{transforms.mlir => form-expressions.mlir} (98%)
 create mode 100644 mlir/test/Dialect/EmitC/wrap-func-in-class.mlir
 delete mode 100644 mlir/test/Dialect/EmitC/wrap_emitc_func_in_class.mlir
 delete mode 100644 mlir/test/Dialect/EmitC/wrap_emitc_func_in_class_noAttr.mlir
 create mode 100644 mlir/test/Target/Cpp/class.mlir
 delete mode 100644 mlir/test/mlir-translate/emitc_classops.mlir

diff --git a/mlir/test/Dialect/EmitC/attrs.mlir b/mlir/test/Dialect/EmitC/attrs.mlir
index 11251b88ff0c9..5a219c462678e 100644
--- a/mlir/test/Dialect/EmitC/attrs.mlir
+++ b/mlir/test/Dialect/EmitC/attrs.mlir
@@ -1,6 +1,6 @@
-// RUN: mlir-opt -verify-diagnostics %s | FileCheck %s
+// RUN: mlir-opt %s | FileCheck %s
 // check parser
-// RUN: mlir-opt -verify-diagnostics %s | mlir-opt -verify-diagnostics | FileCheck %s
+// RUN: mlir-opt %s | mlir-opt | FileCheck %s
 
 // CHECK-LABEL: func @opaque_attrs() {
 func.func @opaque_attrs() {
diff --git a/mlir/test/Dialect/EmitC/transforms.mlir b/mlir/test/Dialect/EmitC/form-expressions.mlir
similarity index 98%
rename from mlir/test/Dialect/EmitC/transforms.mlir
rename to mlir/test/Dialect/EmitC/form-expressions.mlir
index a38f396dad953..1ac053bf1215f 100644
--- a/mlir/test/Dialect/EmitC/transforms.mlir
+++ b/mlir/test/Dialect/EmitC/form-expressions.mlir
@@ -1,4 +1,4 @@
-// RUN: mlir-opt %s --form-expressions --verify-diagnostics --split-input-file | FileCheck %s
+// RUN: mlir-opt %s -form-expressions | FileCheck %s
 
 // CHECK-LABEL: func.func @single_expression(
 // CHECK-SAME:                               %[[VAL_0:.*]]: i32, %[[VAL_1:.*]]: i32, %[[VAL_2:.*]]: i32, %[[VAL_3:.*]]: i32) -> i1 {
@@ -83,7 +83,6 @@ func.func @expression_with_dereference(%arg0: i32, %arg1: i32, %arg2: !emitc.ptr
   return %c : i1
 }
 
-
 // CHECK-LABEL: func.func @expression_with_address_taken(
 // CHECK-SAME:      %[[VAL_0:.*]]: i32, %[[VAL_1:.*]]: i32, %[[VAL_2:.*]]: !emitc.ptr<i32>) -> i1 {
 // CHECK:         %[[VAL_3:.*]] = "emitc.variable"() <{value = #emitc.opaque<"">}> : () -> !emitc.lvalue<i32>
@@ -121,9 +120,8 @@ func.func @no_nested_expression(%arg0: i32, %arg1: i32) -> i1 {
   return %a : i1
 }
 
-
 // CHECK-LABEL: func.func @single_result_requirement
-//   CHECK-NOT:  emitc.expression
+// CHECK-NOT:  emitc.expression
 
 func.func @single_result_requirement() -> (i32, i32) {
   %0:2 = emitc.call_opaque "foo" () : () -> (i32, i32)
@@ -152,7 +150,6 @@ func.func @single_result_requirement() -> (i32, i32) {
 // CHECK:           return %[[VAL_9]] : i1
 // CHECK:         }
 
-
 func.func @expression_with_load(%arg0: i32, %arg1: !emitc.ptr<i32>) -> i1 {
   %c0 = "emitc.constant"() {value = 0 : i64} : () -> i64
   %0 = "emitc.variable"() <{value = #emitc.opaque<"42">}> : () -> !emitc.lvalue<i32>
diff --git a/mlir/test/Dialect/EmitC/ops.mlir b/mlir/test/Dialect/EmitC/ops.mlir
index ad40313f95df9..acee0a8d53fe4 100644
--- a/mlir/test/Dialect/EmitC/ops.mlir
+++ b/mlir/test/Dialect/EmitC/ops.mlir
@@ -310,3 +310,15 @@ func.func @switch() {
 
   return 
 }
+
+emitc.class final @finalClass {
+  emitc.field @fieldName0 : !emitc.array<1xf32>
+  emitc.field @fieldName1 : !emitc.array<1xf32>
+  emitc.func @execute() {
+    %0 = "emitc.constant"() <{value = 0 : index}> : () -> !emitc.size_t
+    %1 = get_field @fieldName0 : !emitc.array<1xf32>
+    %2 = get_field @fieldName1 : !emitc.array<1xf32>
+    %3 = subscript %1[%0] : (!emitc.array<1xf32>, !emitc.size_t) -> !emitc.lvalue<f32>
+    return
+  }
+}
diff --git a/mlir/test/Dialect/EmitC/types.mlir b/mlir/test/Dialect/EmitC/types.mlir
index d4dd94457f39b..ce1e03a83e5d1 100644
--- a/mlir/test/Dialect/EmitC/types.mlir
+++ b/mlir/test/Dialect/EmitC/types.mlir
@@ -1,6 +1,6 @@
-// RUN: mlir-opt -verify-diagnostics -allow-unregistered-dialect %s | FileCheck %s
-// check parser
-// RUN: mlir-opt -verify-diagnostics -allow-unregistered-dialect %s | mlir-opt -verify-diagnostics --allow-unregistered-dialect | FileCheck %s
+// RUN: mlir-opt %s -allow-unregistered-dialect | FileCheck %s
+// Check parser
+// RUN: mlir-opt %s -allow-unregistered-dialect | mlir-opt -allow-unregistered-dialect | FileCheck %s
 
 // CHECK-LABEL: func @array_types(
 func.func @array_types(
diff --git a/mlir/test/Dialect/EmitC/wrap-func-in-class.mlir b/mlir/test/Dialect/EmitC/wrap-func-in-class.mlir
new file mode 100644
index 0000000000000..809febd0267b1
--- /dev/null
+++ b/mlir/test/Dialect/EmitC/wrap-func-in-class.mlir
@@ -0,0 +1,57 @@
+// RUN: mlir-opt %s -wrap-emitc-func-in-class -split-input-file | FileCheck %s
+
+emitc.func @foo(%arg0 : !emitc.array<1xf32>) {
+  emitc.call_opaque "bar" (%arg0) : (!emitc.array<1xf32>) -> ()
+  emitc.return
+}
+
+// CHECK: module {
+// CHECK:   emitc.class @fooClass {
+// CHECK:     emitc.field @fieldName0 : !emitc.array<1xf32>
+// CHECK:     emitc.func @execute() {
+// CHECK:       %0 = get_field @fieldName0 : !emitc.array<1xf32>
+// CHECK:       call_opaque "bar"(%0) : (!emitc.array<1xf32>) -> ()
+// CHECK:       return
+// CHECK:     }
+// CHECK:   }
+// CHECK: }
+
+// -----
+
+module attributes { } {
+  emitc.func @model(%arg0: !emitc.array<1xf32> {emitc.name_hint = "another_feature"},
+   %arg1: !emitc.array<1xf32> {emitc.name_hint = "some_feature"},
+   %arg2: !emitc.array<1xf32> {emitc.name_hint = "output_0"}) attributes { } {
+    %0 = "emitc.constant"() <{value = 0 : index}> : () -> !emitc.size_t
+    %1 = subscript %arg1[%0] : (!emitc.array<1xf32>, !emitc.size_t) -> !emitc.lvalue<f32>
+    %2 = load %1 : <f32>
+    %3 = subscript %arg0[%0] : (!emitc.array<1xf32>, !emitc.size_t) -> !emitc.lvalue<f32>
+    %4 = load %3 : <f32>
+    %5 = add %2, %4 : (f32, f32) -> f32
+    %6 = subscript %arg2[%0] : (!emitc.array<1xf32>, !emitc.size_t) -> !emitc.lvalue<f32>
+    assign %5 : f32 to %6 : <f32>
+    return
+  }
+}
+
+// CHECK: module {
+// CHECK:   emitc.class @modelClass {
+// CHECK:     emitc.field @fieldName0 : !emitc.array<1xf32> {emitc.name_hint = "another_feature"}
+// CHECK:     emitc.field @fieldName1 : !emitc.array<1xf32>  {emitc.name_hint = "some_feature"}
+// CHECK:     emitc.field @fieldName2 : !emitc.array<1xf32>  {emitc.name_hint = "output_0"}
+// CHECK:     emitc.func @execute() {
+// CHECK:       get_field @fieldName0 : !emitc.array<1xf32>
+// CHECK:       get_field @fieldName1 : !emitc.array<1xf32>
+// CHECK:       get_field @fieldName2 : !emitc.array<1xf32>
+// CHECK:       "emitc.constant"() <{value = 0 : index}> : () -> !emitc.size_t
+// CHECK:       subscript {{.*}}[{{.*}}] : (!emitc.array<1xf32>, !emitc.size_t) -> !emitc.lvalue<f32>
+// CHECK:       load {{.*}} : <f32>
+// CHECK:       subscript {{.*}}[{{.*}}] : (!emitc.array<1xf32>, !emitc.size_t) -> !emitc.lvalue<f32>
+// CHECK:       load {{.*}} : <f32>
+// CHECK:       add {{.*}}, {{.*}} : (f32, f32) -> f32
+// CHECK:       subscript {{.*}}[{{.*}}] : (!emitc.array<1xf32>, !emitc.size_t) -> !emitc.lvalue<f32>
+// CHECK:       assign {{.*}} : f32 to {{.*}} : <f32>
+// CHECK:       return
+// CHECK:     }
+// CHECK:   }
+// CHECK: }
diff --git a/mlir/test/Dialect/EmitC/wrap_emitc_func_in_class.mlir b/mlir/test/Dialect/EmitC/wrap_emitc_func_in_class.mlir
deleted file mode 100644
index 029fa78a3f528..0000000000000
--- a/mlir/test/Dialect/EmitC/wrap_emitc_func_in_class.mlir
+++ /dev/null
@@ -1,40 +0,0 @@
-// RUN: mlir-opt --wrap-emitc-func-in-class %s | FileCheck %s
-
-module attributes { } {
-  emitc.func @model(%arg0: !emitc.array<1xf32> {emitc.name_hint = "another_feature"}, 
-   %arg1: !emitc.array<1xf32> {emitc.name_hint = "some_feature"},
-   %arg2: !emitc.array<1xf32> {emitc.name_hint = "output_0"}) attributes { } {
-    %0 = "emitc.constant"() <{value = 0 : index}> : () -> !emitc.size_t
-    %1 = subscript %arg1[%0] : (!emitc.array<1xf32>, !emitc.size_t) -> !emitc.lvalue<f32>
-    %2 = load %1 : <f32>
-    %3 = subscript %arg0[%0] : (!emitc.array<1xf32>, !emitc.size_t) -> !emitc.lvalue<f32>
-    %4 = load %3 : <f32>
-    %5 = add %2, %4 : (f32, f32) -> f32
-    %6 = subscript %arg2[%0] : (!emitc.array<1xf32>, !emitc.size_t) -> !emitc.lvalue<f32>
-    assign %5 : f32 to %6 : <f32>
-    return
-  }
-}
-
-
-// CHECK: module {
-// CHECK-NEXT:   emitc.class @modelClass {
-// CHECK-NEXT:     emitc.field @fieldName0 : !emitc.array<1xf32> {emitc.name_hint = "another_feature"}
-// CHECK-NEXT:     emitc.field @fieldName1 : !emitc.array<1xf32>  {emitc.name_hint = "some_feature"}
-// CHECK-NEXT:     emitc.field @fieldName2 : !emitc.array<1xf32>  {emitc.name_hint = "output_0"}
-// CHECK-NEXT:     emitc.func @execute() {
-// CHECK-NEXT:       get_field @fieldName0 : !emitc.array<1xf32>
-// CHECK-NEXT:       get_field @fieldName1 : !emitc.array<1xf32>
-// CHECK-NEXT:       get_field @fieldName2 : !emitc.array<1xf32>
-// CHECK-NEXT:       "emitc.constant"() <{value = 0 : index}> : () -> !emitc.size_t
-// CHECK-NEXT:       subscript {{.*}}[{{.*}}] : (!emitc.array<1xf32>, !emitc.size_t) -> !emitc.lvalue<f32>
-// CHECK-NEXT:       load {{.*}} : <f32>
-// CHECK-NEXT:       subscript {{.*}}[{{.*}}] : (!emitc.array<1xf32>, !emitc.size_t) -> !emitc.lvalue<f32>
-// CHECK-NEXT:       load {{.*}} : <f32>
-// CHECK-NEXT:       add {{.*}}, {{.*}} : (f32, f32) -> f32
-// CHECK-NEXT:       subscript {{.*}}[{{.*}}] : (!emitc.array<1xf32>, !emitc.size_t) -> !emitc.lvalue<f32>
-// CHECK-NEXT:       assign {{.*}} : f32 to {{.*}} : <f32>
-// CHECK-NEXT:       return
-// CHECK-NEXT:     }
-// CHECK-NEXT:   }
-// CHECK-NEXT: }
diff --git a/mlir/test/Dialect/EmitC/wrap_emitc_func_in_class_noAttr.mlir b/mlir/test/Dialect/EmitC/wrap_emitc_func_in_class_noAttr.mlir
deleted file mode 100644
index 92ed20c4b14e3..0000000000000
--- a/mlir/test/Dialect/EmitC/wrap_emitc_func_in_class_noAttr.mlir
+++ /dev/null
@@ -1,17 +0,0 @@
-// RUN: mlir-opt --wrap-emitc-func-in-class %s | FileCheck %s
-
-emitc.func @foo(%arg0 : !emitc.array<1xf32>) {
-  emitc.call_opaque "bar" (%arg0) : (!emitc.array<1xf32>) -> ()
-  emitc.return
-}
-
-// CHECK: module {
-// CHECK-NEXT:   emitc.class @fooClass {
-// CHECK-NEXT:     emitc.field @fieldName0 : !emitc.array<1xf32>
-// CHECK-NEXT:     emitc.func @execute() {
-// CHECK-NEXT:       %0 = get_field @fieldName0 : !emitc.array<1xf32>
-// CHECK-NEXT:       call_opaque "bar"(%0) : (!emitc.array<1xf32>) -> ()
-// CHECK-NEXT:       return
-// CHECK-NEXT:     }
-// CHECK-NEXT:   }
-// CHECK-NEXT: }
diff --git a/mlir/test/Target/Cpp/class.mlir b/mlir/test/Target/Cpp/class.mlir
new file mode 100644
index 0000000000000..32c6699f3f666
--- /dev/null
+++ b/mlir/test/Target/Cpp/class.mlir
@@ -0,0 +1,78 @@
+// RUN: mlir-translate -mlir-to-cpp %s | FileCheck %s
+
+emitc.class @modelClass {
+  emitc.field @fieldName0 : !emitc.array<1xf32>
+  emitc.field @fieldName1 : !emitc.array<1xf32>
+  emitc.func @execute() {
+    %0 = "emitc.constant"() <{value = 0 : index}> : () -> !emitc.size_t
+    %1 = get_field @fieldName0 : !emitc.array<1xf32>
+    %2 = get_field @fieldName1 : !emitc.array<1xf32>
+    %3 = subscript %1[%0] : (!emitc.array<1xf32>, !emitc.size_t) -> !emitc.lvalue<f32>
+    return
+  }
+}
+
+// CHECK-LABEL: class modelClass {
+// CHECK-NEXT:   public:
+// CHECK-NEXT:    float fieldName0[1];
+// CHECK-NEXT:    float fieldName1[1];
+// CHECK-NEXT:    void execute() {
+// CHECK-NEXT:     size_t v1 = 0;
+// CHECK-NEXT:     return;
+// CHECK-NEXT:    }
+// CHECK-NEXT:  };
+
+emitc.class final @finalClass {
+  emitc.field @fieldName0 : !emitc.array<1xf32>
+  emitc.field @fieldName1 : !emitc.array<1xf32>
+  emitc.func @execute() {
+    %0 = "emitc.constant"() <{value = 0 : index}> : () -> !emitc.size_t
+    %1 = get_field @fieldName0 : !emitc.array<1xf32>
+    %2 = get_field @fieldName1 : !emitc.array<1xf32>
+    %3 = subscript %1[%0] : (!emitc.array<1xf32>, !emitc.size_t) -> !emitc.lvalue<f32>
+    return
+  }
+}
+
+// CHECK-LABEL: class finalClass final {
+// CHECK-NEXT:   public:
+// CHECK-NEXT:    float fieldName0[1];
+// CHECK-NEXT:    float fieldName1[1];
+// CHECK-NEXT:    void execute() {
+// CHECK-NEXT:     size_t v1 = 0;
+// CHECK-NEXT:     return;
+// CHECK-NEXT:    }
+// CHECK-NEXT:  };
+
+emitc.class @mainClass {
+  emitc.field @fieldName0 : !emitc.array<2xf32> = dense<0.0> {attrs = {emitc.name_hint = "another_feature"}}
+  emitc.func @get_fieldName0() {
+    %0 = emitc.get_field @fieldName0 : !emitc.array<2xf32>
+    return
+  }
+}
+
+// CHECK-LABEL: class mainClass {
+// CHECK-NEXT:   public:
+// CHECK-NEXT:    float fieldName0[2] = {0.0e+00f, 0.0e+00f};
+// CHECK-NEXT:    void get_fieldName0() {
+// CHECK-NEXT:     return;
+// CHECK-NEXT:    }
+// CHECK-NEXT:  };
+
+emitc.class @reflectionClass {
+  emitc.field @reflectionMap : !emitc.opaque<"const std::map<std::string, std::string>"> = #emitc.opaque<"{ { \22another_feature\22, \22fieldName0\22 } }">
+  emitc.func @get_reflectionMap() {
+    %0 = emitc.get_field @reflectionMap : !emitc.opaque<"const std::map<std::string, std::string>">
+    return
+  }
+}
+
+// CHECK-LABEL: class reflectionClass {
+// CHECK-NEXT:   public:
+// CHECK-NEXT:    const std::map<std::string, std::string> reflectionMap = { { "another_feature", "fieldName0" } };
+// CHECK-NEXT:    void get_reflectionMap() {
+// CHECK-NEXT:     return;
+// CHECK-NEXT:    }
+// CHECK-NEXT:  };
+
diff --git a/mlir/test/mlir-translate/emitc_classops.mlir b/mlir/test/mlir-translate/emitc_classops.mlir
deleted file mode 100644
index d880f9b16dfc6..0000000000000
--- a/mlir/test/mlir-translate/emitc_classops.mlir
+++ /dev/null
@@ -1,78 +0,0 @@
-// RUN: mlir-translate --mlir-to-cpp %s | FileCheck %s
-
-emitc.class @modelClass {
-    emitc.field @fieldName0 : !emitc.array<1xf32> 
-    emitc.field @fieldName1 : !emitc.array<1xf32> 
-    emitc.func @execute() {
-        %0 = "emitc.constant"() <{value = 0 : index}> : () -> !emitc.size_t
-        %1 = get_field @fieldName0 : !emitc.array<1xf32>
-        %2 = get_field @fieldName1 : !emitc.array<1xf32>
-        %3 = subscript %1[%0] : (!emitc.array<1xf32>, !emitc.size_t) -> !emitc.lvalue<f32>
-        return
-    }
-}
-
-// CHECK-LABEL: class modelClass {
-// CHECK-NEXT: public:
-// CHECK-NEXT:  float fieldName0[1];
-// CHECK-NEXT:  float fieldName1[1];
-// CHECK-NEXT:  void execute() {
-// CHECK-NEXT:    size_t v1 = 0;
-// CHECK-NEXT:    return;
-// CHECK-NEXT:  }
-// CHECK-NEXT: };
-
-emitc.class final @finalClass {
-    emitc.field @fieldName0 : !emitc.array<1xf32> 
-    emitc.field @fieldName1 : !emitc.array<1xf32> 
-    emitc.func @execute() {
-        %0 = "emitc.constant"() <{value = 0 : index}> : () -> !emitc.size_t
-        %1 = get_field @fieldName0 : !emitc.array<1xf32>
-        %2 = get_field @fieldName1 : !emitc.array<1xf32>
-        %3 = subscript %1[%0] : (!emitc.array<1xf32>, !emitc.size_t) -> !emitc.lvalue<f32>
-        return
-    }
-}
-
-// CHECK-LABEL: class finalClass final {
-// CHECK-NEXT: public:
-// CHECK-NEXT:  float fieldName0[1];
-// CHECK-NEXT:  float fieldName1[1];
-// CHECK-NEXT:  void execute() {
-// CHECK-NEXT:    size_t v1 = 0;
-// CHECK-NEXT:    return;
-// CHECK-NEXT:  }
-// CHECK-NEXT: };
-
-emitc.class @mainClass {
-  emitc.field @fieldName0 : !emitc.array<2xf32> = dense<0.0> {attrs = {emitc.name_hint = "another_feature"}}
-  emitc.func @get_fieldName0() {
-    %0 = emitc.get_field @fieldName0 : !emitc.array<2xf32>
-    return 
-  }
-}
-
-// CHECK-LABEL: class mainClass {
-// CHECK-NEXT: public:
-// CHECK-NEXT:  float fieldName0[2] = {0.0e+00f, 0.0e+00f};
-// CHECK-NEXT:  void get_fieldName0() {
-// CHECK-NEXT:    return;
-// CHECK-NEXT:  }
-// CHECK-NEXT: };
-
-emitc.class @reflectionClass {
-  emitc.field @reflectionMap : !emitc.opaque<"const std::map<std::string, std::string>"> = #emitc.opaque<"{ { \22another_feature\22, \22fieldName0\22 } }"> 
-  emitc.func @get_reflectionMap() {
-    %0 = emitc.get_field @reflectionMap : !emitc.opaque<"const std::map<std::string, std::string>">
-    return 
-  }
-}
-
-// CHECK-LABEL: class reflectionClass {
-// CHECK-NEXT: public:
-// CHECK-NEXT:  const std::map<std::string, std::string> reflectionMap = { { "another_feature", "fieldName0" } };
-// CHECK-NEXT:  void get_reflectionMap() {
-// CHECK-NEXT:    return;
-// CHECK-NEXT:  }
-// CHECK-NEXT: };
-



More information about the Mlir-commits mailing list