[Mlir-commits] [mlir] [MLIR][WasmSSA] Enable strict property assembly format (PR #217285)

Mehdi Amini llvmlistbot at llvm.org
Wed Aug 19 03:51:03 PDT 2026


https://github.com/joker-eph created https://github.com/llvm/llvm-project/pull/217285

Enable the strict properties assembly format mode for the WasmSSA dialect. Spell import operation type and limit metadata directly in the assembly formats so those inherent attributes are not parsed from attr-dict in strict mode.

Assisted-by: Codex

>From 8e3aad3979d9338140f2d53824220067e8d32650 Mon Sep 17 00:00:00 2001
From: Mehdi Amini <joker.eph at gmail.com>
Date: Wed, 6 May 2026 13:34:18 -0700
Subject: [PATCH] [MLIR][WasmSSA] Enable strict property assembly format

Enable the strict properties assembly format mode for the WasmSSA dialect.
Spell import operation type and limit metadata directly in the assembly
formats so those inherent attributes are not parsed from attr-dict in strict
mode.

Assisted-by: Codex
---
 .../mlir/Dialect/WasmSSA/IR/WasmSSABase.td       |  1 +
 .../mlir/Dialect/WasmSSA/IR/WasmSSAOps.td        |  8 +++++---
 .../Dialect/WasmSSA/custom_parser/import.mlir    | 16 ++++++++--------
 mlir/test/Target/Wasm/add_div.mlir               |  2 +-
 mlir/test/Target/Wasm/import.mlir                |  8 ++++----
 5 files changed, 19 insertions(+), 16 deletions(-)

diff --git a/mlir/include/mlir/Dialect/WasmSSA/IR/WasmSSABase.td b/mlir/include/mlir/Dialect/WasmSSA/IR/WasmSSABase.td
index f2777a7b155ed..0e93fdd060962 100644
--- a/mlir/include/mlir/Dialect/WasmSSA/IR/WasmSSABase.td
+++ b/mlir/include/mlir/Dialect/WasmSSA/IR/WasmSSABase.td
@@ -14,6 +14,7 @@ include "mlir/IR/OpBase.td"
 
 def WasmSSA_Dialect : Dialect {
   let name = "wasmssa";
+  let useStrictPropertiesInAssemblyFormat = 1;
   let cppNamespace = "::mlir::wasmssa";
   let description = [{
     The `wasmssa` dialect is intended to represent WebAssembly
diff --git a/mlir/include/mlir/Dialect/WasmSSA/IR/WasmSSAOps.td b/mlir/include/mlir/Dialect/WasmSSA/IR/WasmSSAOps.td
index c206ea8c05583..8961f6d7dc7f0 100644
--- a/mlir/include/mlir/Dialect/WasmSSA/IR/WasmSSAOps.td
+++ b/mlir/include/mlir/Dialect/WasmSSA/IR/WasmSSAOps.td
@@ -283,7 +283,9 @@ def WasmSSA_FuncImportOp : WasmSSA_Op<"import_func", [
                    "StringRef":$importName,
                    "FunctionType": $type)>
   ];
-  let assemblyFormat = "$importName `from` $moduleName `as` $sym_name attr-dict";
+  let assemblyFormat = "$importName `from` $moduleName `as` $sym_name `:` $type "
+                       "(`arg_attrs` `=` $arg_attrs^)? "
+                       "(`res_attrs` `=` $res_attrs^)? attr-dict";
 }
 
 def WasmSSA_GlobalOp : WasmSSA_Op<"global", [
@@ -577,7 +579,7 @@ def WasmSSA_MemImportOp : WasmSSA_Op<"import_mem", [Symbol, ImportOpInterface]>
        return ::mlir::SymbolTable::Visibility::Nested;
       };
    }];
-  let assemblyFormat = "$importName `from` $moduleName `as` $sym_name attr-dict";
+  let assemblyFormat = "$importName `from` $moduleName `as` $sym_name $limits attr-dict";
 }
 
 def WasmSSA_TableOp : WasmSSA_Op<"table", [Symbol]> {
@@ -617,7 +619,7 @@ def WasmSSA_TableImportOp : WasmSSA_Op<"import_table", [Symbol, ImportOpInterfac
        return ::mlir::SymbolTable::Visibility::Nested;
     };
   }];
-  let assemblyFormat = "$importName `from` $moduleName `as` $sym_name attr-dict";
+  let assemblyFormat = "$importName `from` $moduleName `as` $sym_name $type attr-dict";
 }
 
 def WasmSSA_ReturnOp : WasmSSA_Op<"return", [Terminator]> {
diff --git a/mlir/test/Dialect/WasmSSA/custom_parser/import.mlir b/mlir/test/Dialect/WasmSSA/custom_parser/import.mlir
index dc232299afadd..ba11195d0d80a 100644
--- a/mlir/test/Dialect/WasmSSA/custom_parser/import.mlir
+++ b/mlir/test/Dialect/WasmSSA/custom_parser/import.mlir
@@ -1,17 +1,17 @@
 // RUN: mlir-opt %s | FileCheck %s
 
 module {
-  wasmssa.import_func "foo" from "my_module" as @func_0 {sym_visibility = "nested", type = (i32) -> ()}
-  wasmssa.import_func "bar" from "my_module" as @func_1 {sym_visibility = "nested", type = (i32) -> ()}
-  wasmssa.import_table "table" from "my_module" as @table_0 {sym_visibility = "nested", type = !wasmssa<tabletype !wasmssa.funcref [2:]>}
-  wasmssa.import_mem "mem" from "my_module" as @mem_0 {limits = !wasmssa<limit[2:]>, sym_visibility = "nested"}
+  wasmssa.import_func "foo" from "my_module" as @func_0 : (i32) -> () {sym_visibility = "nested"}
+  wasmssa.import_func "bar" from "my_module" as @func_1 : (i32) -> () {sym_visibility = "nested"}
+  wasmssa.import_table "table" from "my_module" as @table_0 !wasmssa<tabletype !wasmssa.funcref [2:]> {sym_visibility = "nested"}
+  wasmssa.import_mem "mem" from "my_module" as @mem_0 !wasmssa<limit[2:]> {sym_visibility = "nested"}
   wasmssa.import_global "glob" from "my_module" as @global_0 : i32
   wasmssa.import_global "glob_mut" from "my_other_module" as @global_1 mutable : i32
 }
 
-// CHECK-LABEL:   wasmssa.import_func "foo" from "my_module" as @func_0 {sym_visibility = "nested", type = (i32) -> ()}
-// CHECK:         wasmssa.import_func "bar" from "my_module" as @func_1 {sym_visibility = "nested", type = (i32) -> ()}
-// CHECK:         wasmssa.import_table "table" from "my_module" as @table_0 {sym_visibility = "nested", type = !wasmssa<tabletype !wasmssa.funcref [2:]>}
-// CHECK:         wasmssa.import_mem "mem" from "my_module" as @mem_0 {limits = !wasmssa<limit[2:]>, sym_visibility = "nested"}
+// CHECK-LABEL:   wasmssa.import_func "foo" from "my_module" as @func_0 : (i32) -> () {sym_visibility = "nested"}
+// CHECK:         wasmssa.import_func "bar" from "my_module" as @func_1 : (i32) -> () {sym_visibility = "nested"}
+// CHECK:         wasmssa.import_table "table" from "my_module" as @table_0 !wasmssa<tabletype !wasmssa.funcref [2:]> {sym_visibility = "nested"}
+// CHECK:         wasmssa.import_mem "mem" from "my_module" as @mem_0 !wasmssa<limit[2:]> {sym_visibility = "nested"}
 // CHECK:         wasmssa.import_global "glob" from "my_module" as @global_0 : i32
 // CHECK:         wasmssa.import_global "glob_mut" from "my_other_module" as @global_1 mutable : i32
diff --git a/mlir/test/Target/Wasm/add_div.mlir b/mlir/test/Target/Wasm/add_div.mlir
index 8a87c6084892d..015726d9fe81c 100644
--- a/mlir/test/Target/Wasm/add_div.mlir
+++ b/mlir/test/Target/Wasm/add_div.mlir
@@ -19,7 +19,7 @@
   (export "add" (func $add)))
 */
 
-// CHECK-LABEL:   wasmssa.import_func "twoTimes" from "env" as @func_0 {type = (i32) -> i32}
+// CHECK-LABEL:   wasmssa.import_func "twoTimes" from "env" as @func_0 : (i32) -> i32
 
 // CHECK-LABEL:   wasmssa.func exported @add(
 // CHECK-SAME:      %[[ARG0:.*]]: !wasmssa<local ref to i32>,
diff --git a/mlir/test/Target/Wasm/import.mlir b/mlir/test/Target/Wasm/import.mlir
index dcdfa52703539..65df468819f8d 100644
--- a/mlir/test/Target/Wasm/import.mlir
+++ b/mlir/test/Target/Wasm/import.mlir
@@ -11,9 +11,9 @@
 )
 */
 
-// CHECK-LABEL:   wasmssa.import_func "foo" from "my_module" as @func_0 {type = (i32) -> ()}
-// CHECK:         wasmssa.import_func "bar" from "my_module" as @func_1 {type = (i32) -> ()}
-// CHECK:         wasmssa.import_table "table" from "my_module" as @table_0 {type = !wasmssa<tabletype !wasmssa.funcref [2:]>}
-// CHECK:         wasmssa.import_mem "mem" from "my_module" as @mem_0 {limits = !wasmssa<limit[2:]>}
+// CHECK-LABEL:   wasmssa.import_func "foo" from "my_module" as @func_0 : (i32) -> ()
+// CHECK:         wasmssa.import_func "bar" from "my_module" as @func_1 : (i32) -> ()
+// CHECK:         wasmssa.import_table "table" from "my_module" as @table_0 !wasmssa<tabletype !wasmssa.funcref [2:]>
+// CHECK:         wasmssa.import_mem "mem" from "my_module" as @mem_0 !wasmssa<limit[2:]>
 // CHECK:         wasmssa.import_global "glob" from "my_module" as @global_0 : i32
 // CHECK:         wasmssa.import_global "glob_mut" from "my_other_module" as @global_1 mutable : i32



More information about the Mlir-commits mailing list