'wasmssa' Dialect
The wasmssa
dialect is intended to represent WebAssembly
modules in SSA form for easier manipulation.
Operations ¶
wasmssa.abs
(wasmssa::AbsOp) ¶
Floating point absolute value
Syntax:
operation ::= `wasmssa.abs` $src`:` type($src) attr-dict
Example:
```mlir
%a = wasmssa.abs %b : f32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
src | 32-bit float or 64-bit float |
Results: ¶
Result | Description |
---|---|
result | 32-bit float or 64-bit float |
wasmssa.add
(wasmssa::AddOp) ¶
Sum two values
Syntax:
operation ::= `wasmssa.add` $lhs $rhs `:` type($lhs) attr-dict
Example:
```mlir
%a = wasmssa.add %b %c : i32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
lhs | 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float |
rhs | 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float |
wasmssa.and
(wasmssa::AndOp) ¶
Compute the bitwise AND between two values
Syntax:
operation ::= `wasmssa.and` $lhs $rhs `:` type($lhs) attr-dict
Example:
```mlir
%a = wasmssa.and %b %c : i32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
lhs | 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float |
rhs | 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float |
wasmssa.block
(wasmssa::BlockOp) ¶
Create a nesting level
Syntax:
operation ::= `wasmssa.block` (`(`$inputs^`)` `:` type($inputs))? attr-dict `:` $body `>` $target
Traits: Terminator
Interfaces: LabelLevelOpInterface
Operands: ¶
Operand | Description |
---|---|
inputs | variadic of 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float or 128-bit signless integer or Opaque type for function reference or Opaque type for external reference |
Successors: ¶
Successor | Description |
---|---|
target | any successor |
wasmssa.block_return
(wasmssa::BlockReturnOp) ¶
Return from the current block
Syntax:
operation ::= `wasmssa.block_return` ($inputs^ `:` type($inputs))? attr-dict
Marks a return from the current block.
Example:
wasmssa.block_return
Traits: Terminator
Interfaces: LabelBranchingOpInterface
Operands: ¶
Operand | Description |
---|---|
inputs | variadic of 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float or 128-bit signless integer or Opaque type for function reference or Opaque type for external reference |
wasmssa.branch_if
(wasmssa::BranchIfOp) ¶
Jump to target level if condition has non-zero value
Syntax:
operation ::= `wasmssa.branch_if` $condition `to` `level` $exitLevel (`with` `args` `(`$inputs^ `:` type($inputs)`)`)? `else` $elseSuccessor attr-dict
Jump to target level if the condition is has a non-zero value.
Example:
wasmssa.branch_if %a to level 0 with args(%b : i32) else ^bb1
Traits: Terminator
Interfaces: LabelBranchingOpInterface
Attributes: ¶
Attribute | MLIR Type | Description |
---|---|---|
exitLevel | ::mlir::IntegerAttr | 32-bit unsigned integer attribute |
Operands: ¶
Operand | Description |
---|---|
condition | 32-bit signless integer |
inputs | variadic of 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float or 128-bit signless integer or Opaque type for function reference or Opaque type for external reference |
Successors: ¶
Successor | Description |
---|---|
elseSuccessor | any successor |
wasmssa.call
(wasmssa::FuncCallOp) ¶
Calling a Wasm function
Syntax:
operation ::= `wasmssa.call` $callee (`(`$operands^`)`)? attr-dict `:` functional-type($operands, $results)
Emits a call to a defined function
Example:
%a = wasmssa.call @func_0 : () -> i32
Attributes: ¶
Attribute | MLIR Type | Description |
---|---|---|
callee | ::mlir::FlatSymbolRefAttr | flat symbol reference attribute |
Operands: ¶
Operand | Description |
---|---|
operands | variadic of 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float or 128-bit signless integer or Opaque type for function reference or Opaque type for external reference |
Results: ¶
Result | Description |
---|---|
results | variadic of 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float or 128-bit signless integer or Opaque type for function reference or Opaque type for external reference |
wasmssa.ceil
(wasmssa::CeilOp) ¶
Ceil rounding of floating point value
Syntax:
operation ::= `wasmssa.ceil` $src`:` type($src) attr-dict
Example:
```mlir
%a = wasmssa.ceil %b : f32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
src | 32-bit float or 64-bit float |
Results: ¶
Result | Description |
---|---|
result | 32-bit float or 64-bit float |
wasmssa.clz
(wasmssa::ClzOp) ¶
Count leading zeroes of an integer
Syntax:
operation ::= `wasmssa.clz` $src`:` type($src) attr-dict
Example:
```mlir
%a = wasmssa.clz %b : i32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
src | 32-bit signless integer or 64-bit signless integer |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer or 64-bit signless integer |
wasmssa.const
(wasmssa::ConstOp) ¶
Operator that represents a constant value
Syntax:
operation ::= `wasmssa.const` $value attr-dict
Defines a constant value.
Example:
// Example of integer constant
%a = wasmssa.const 1 : i32
// Example of floating point constant
%b = wasmssa.const 9.000000e+00 : f64
Traits: ConstantExprOpTrait
Interfaces: InferTypeOpInterface
Attributes: ¶
Attribute | MLIR Type | Description |
---|---|---|
value | ::mlir::TypedAttr | TypedAttr instance
|
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float |
wasmssa.convert_s
(wasmssa::ConvertSOp) ¶
_Convert integer interpreted as 2’s complement signed value to floating-point value.
Consume an integer and produces a floating point value containing the rounded value of the original operand. Rounding is round to nearest, tie to even._
Syntax:
operation ::= `wasmssa.convert_s` $input `:` type($input) `to` type($result) attr-dict
Example:
```mlir
%a = wasmssa.convert_s %b : i32 to f64
```
Operands: ¶
Operand | Description |
---|---|
input | 32-bit signless integer or 64-bit signless integer |
Results: ¶
Result | Description |
---|---|
result | 32-bit float or 64-bit float |
wasmssa.convert_u
(wasmssa::ConvertUOp) ¶
_Convert integer, interpreted as binary encoded positive value, to floating-point value.
Consume an integer and produces a floating point value containing the rounded value of the original operand. Rounding is round to nearest, tie to even._
Syntax:
operation ::= `wasmssa.convert_u` $input `:` type($input) `to` type($result) attr-dict
Example:
```mlir
%a = wasmssa.convert_u %b : i32 to f64
```
Operands: ¶
Operand | Description |
---|---|
input | 32-bit signless integer or 64-bit signless integer |
Results: ¶
Result | Description |
---|---|
result | 32-bit float or 64-bit float |
wasmssa.copysign
(wasmssa::CopySignOp) ¶
Copy sign from one floating point value to the other.
Syntax:
operation ::= `wasmssa.copysign` $lhs $rhs `:` type($lhs) attr-dict
Example:
```mlir
%a = wasmssa.copysign %b %c : f32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
lhs | 32-bit float or 64-bit float |
rhs | 32-bit float or 64-bit float |
Results: ¶
Result | Description |
---|---|
result | 32-bit float or 64-bit float |
wasmssa.ctz
(wasmssa::CtzOp) ¶
Count trailing zeroes of an integer
Syntax:
operation ::= `wasmssa.ctz` $src`:` type($src) attr-dict
Example:
```mlir
%a = wasmssa.ctz %b : i32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
src | 32-bit signless integer or 64-bit signless integer |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer or 64-bit signless integer |
wasmssa.demote
(wasmssa::DemoteOp) ¶
Convert a f64 value to f32
Syntax:
operation ::= `wasmssa.demote` $input `:` type($input) `to` type($result) attr-dict
Example:
```mlir
%a = wasmssa.demote %b : f64 to f32
```
Operands: ¶
Operand | Description |
---|---|
input | 64-bit float |
Results: ¶
Result | Description |
---|---|
result | 32-bit float |
wasmssa.div
(wasmssa::DivOp) ¶
Division between floating point values
Syntax:
operation ::= `wasmssa.div` $lhs $rhs `:` type($lhs) attr-dict
Example:
```mlir
%a = wasmssa.div %b %c : f32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
lhs | 32-bit float or 64-bit float |
rhs | 32-bit float or 64-bit float |
Results: ¶
Result | Description |
---|---|
result | 32-bit float or 64-bit float |
wasmssa.div_si
(wasmssa::DivSIOp) ¶
Divide values interpreted as signed int
Syntax:
operation ::= `wasmssa.div_si` $lhs $rhs `:` type($lhs) attr-dict
Example:
```mlir
%a = wasmssa.div_si %b %c : i32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
lhs | 32-bit signless integer or 64-bit signless integer |
rhs | 32-bit signless integer or 64-bit signless integer |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer or 64-bit signless integer |
wasmssa.div_ui
(wasmssa::DivUIOp) ¶
Divide values interpreted as unsigned int
Syntax:
operation ::= `wasmssa.div_ui` $lhs $rhs `:` type($lhs) attr-dict
Example:
```mlir
%a = wasmssa.div_ui %b %c : i32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
lhs | 32-bit signless integer or 64-bit signless integer |
rhs | 32-bit signless integer or 64-bit signless integer |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer or 64-bit signless integer |
wasmssa.eq
(wasmssa::EqOp) ¶
Check if two values are equal
Syntax:
operation ::= `wasmssa.eq` $lhs $rhs `:` type($lhs) `->` type($result) attr-dict
Example:
```mlir
%a = wasmssa.eq %b %c : i32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
lhs | 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float |
rhs | 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer |
wasmssa.eqz
(wasmssa::EqzOp) ¶
Check if the given value is equal to zero
Syntax:
operation ::= `wasmssa.eqz` $input`:` type($input) `->` type($result) attr-dict
Example:
```mlir
%a = wasmssa.eqz %b : i64 -> i32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
input | 32-bit signless integer or 64-bit signless integer |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer |
wasmssa.extend
(wasmssa::ExtendLowBitsSOp) ¶
Syntax:
operation ::= `wasmssa.extend` $bitsToTake `low` `bits` `from` $input `:` type($input) attr-dict
Extend low bytes of a value to fit a given width. For instance, signed extension from 8 low bits of the 32-bits integer value 254 (0x000000FE) would produce the value -2 (0xFFFFFFFE).
This corresponds to the extendnn
instruction of Wasm, which shouldn’t be
confused with the extend_inn
Wasm instruction, for which all input bits
are used and widened to wider output type.
In this operation, input and output types are the same.
Example:
%a = wasmssa.extend 16 low bits from %[[VAL_0]]: i64
Interfaces: InferTypeOpInterface
Attributes: ¶
Attribute | MLIR Type | Description |
---|---|---|
bitsToTake | ::mlir::IntegerAttr | An Attribute containing a integer value
|
Operands: ¶
Operand | Description |
---|---|
input | 32-bit signless integer or 64-bit signless integer |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer or 64-bit signless integer |
wasmssa.extend_i32_s
(wasmssa::ExtendSI32Op) ¶
Sign extend i32 to i64.
Syntax:
operation ::= `wasmssa.extend_i32_s` $input `to` type($result) attr-dict
Example:
```mlir
%a = wasmssa.extend_i32_s %b to i64
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
input | 32-bit signless integer |
Results: ¶
Result | Description |
---|---|
result | 64-bit signless integer |
wasmssa.extend_i32_u
(wasmssa::ExtendUI32Op) ¶
Zero extend i32 to i64.
Syntax:
operation ::= `wasmssa.extend_i32_u` $input `to` type($result) attr-dict
Example:
```mlir
%a = wasmssa.extend_i32_s %b to i64
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
input | 32-bit signless integer |
Results: ¶
Result | Description |
---|---|
result | 64-bit signless integer |
wasmssa.floor
(wasmssa::FloorOp) ¶
Floor rounding of floating point value
Syntax:
operation ::= `wasmssa.floor` $src`:` type($src) attr-dict
Example:
```mlir
%a = wasmssa.floor %b : f32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
src | 32-bit float or 64-bit float |
Results: ¶
Result | Description |
---|---|
result | 32-bit float or 64-bit float |
wasmssa.func
(wasmssa::FuncOp) ¶
Represents a Wasm function definition.
In Wasm function, locals and function arguments are interchangeable.
They are for instance both accessed using local.get
instruction.
On the other hand, a function type is defined as a pair of tuples of Wasm value types. To model this, the wasm.func operation has:
A function type that represents the corresponding Wasm type (tuples of value types)
Arguments of the entry block of type
!wasm<local T>
, with T the corresponding type in the function type.
Example:
// A simple function with no arguments that returns a float32
wasmssa.func @my_f32_func() -> f32
// A function that takes a local ref argument
wasmssa.func @i64_wrap(%a: !wasmssa<local ref to i64>) -> i32
Traits: AffineScope
, AutomaticAllocationScope
, IsolatedFromAbove
Interfaces: ArgAndResultAttrsOpInterface
, CallableOpInterface
, FunctionOpInterface
, Symbol
Attributes: ¶
Attribute | MLIR Type | Description |
---|---|---|
sym_name | ::mlir::StringAttr | string attribute |
functionType | ::mlir::TypeAttr | type attribute of function type |
arg_attrs | ::mlir::ArrayAttr | Array of dictionary attributes |
res_attrs | ::mlir::ArrayAttr | Array of dictionary attributes |
sym_visibility | ::mlir::StringAttr | string attribute |
wasmssa.ge
(wasmssa::GeOp) ¶
Check if a float value is greater or equal to another
Syntax:
operation ::= `wasmssa.ge` $lhs $rhs `:` type($lhs) `->` type($result) attr-dict
Example:
```mlir
%a = wasmssa.ge %b %c : i32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
lhs | 32-bit float or 64-bit float |
rhs | 32-bit float or 64-bit float |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer |
wasmssa.ge_si
(wasmssa::GeSIOp) ¶
Check if a signed integer value is greater or equal to another
Syntax:
operation ::= `wasmssa.ge_si` $lhs $rhs `:` type($lhs) `->` type($result) attr-dict
Example:
```mlir
%a = wasmssa.ge_si %b %c : i32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
lhs | 32-bit signless integer or 64-bit signless integer |
rhs | 32-bit signless integer or 64-bit signless integer |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer |
wasmssa.ge_ui
(wasmssa::GeUIOp) ¶
Check if an unsigned integer value is greater or equal to another
Syntax:
operation ::= `wasmssa.ge_ui` $lhs $rhs `:` type($lhs) `->` type($result) attr-dict
Example:
```mlir
%a = wasmssa.ge_ui %b %c : i32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
lhs | 32-bit signless integer or 64-bit signless integer |
rhs | 32-bit signless integer or 64-bit signless integer |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer |
wasmssa.global
(wasmssa::GlobalOp) ¶
WebAssembly global value
WebAssembly global variable.
Body contains the initialization instructions for the variable value.
The body must contain only instructions considered const
in a webassembly context,
such as wasmssa.const
or global.get
.
Example:
// Define a global_var, a mutable i32 global variable equal to 10.
wasmssa.global @global_var i32 mutable nested : {
%[[VAL_0:.*]] = wasmssa.const 10 : i32
wasmssa.return %[[VAL_0]] : i32
}
Traits: AffineScope
, AutomaticAllocationScope
, ConstantExpressionInitializerOpTrait
, IsolatedFromAbove
Interfaces: Symbol
Attributes: ¶
Attribute | MLIR Type | Description |
---|---|---|
sym_name | ::mlir::StringAttr | string attribute |
type | ::mlir::TypeAttr | type attribute of 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float or 128-bit signless integer or Opaque type for function reference or Opaque type for external reference |
isMutable | ::mlir::UnitAttr | unit attribute |
sym_visibility | ::mlir::StringAttr | string attribute |
wasmssa.global_get
(wasmssa::GlobalGetOp) ¶
Returns the value of the global passed as argument.
Syntax:
operation ::= `wasmssa.global_get` $global attr-dict `:` type($global_val)
Retrieves the value of the global passed as argument and stores it in a variable
Example:
// Gets the value of `@global_0` and stores its value in %a
%a = wasmssa.global_get @global_0 : i32
Traits: ConstantExprOpTrait
Interfaces: SymbolUserOpInterface
Attributes: ¶
Attribute | MLIR Type | Description |
---|---|---|
global | ::mlir::FlatSymbolRefAttr | flat symbol reference attribute |
Results: ¶
Result | Description |
---|---|
global_val | 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float or 128-bit signless integer or Opaque type for function reference or Opaque type for external reference |
wasmssa.gt
(wasmssa::GtOp) ¶
Check if a float value is greater than another
Syntax:
operation ::= `wasmssa.gt` $lhs $rhs `:` type($lhs) `->` type($result) attr-dict
Example:
```mlir
%a = wasmssa.gt %b %c : i32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
lhs | 32-bit float or 64-bit float |
rhs | 32-bit float or 64-bit float |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer |
wasmssa.gt_si
(wasmssa::GtSIOp) ¶
Check if a signed integer value is greater than another
Syntax:
operation ::= `wasmssa.gt_si` $lhs $rhs `:` type($lhs) `->` type($result) attr-dict
Example:
```mlir
%a = wasmssa.gt_si %b %c : i32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
lhs | 32-bit signless integer or 64-bit signless integer |
rhs | 32-bit signless integer or 64-bit signless integer |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer |
wasmssa.gt_ui
(wasmssa::GtUIOp) ¶
Check if an unsigned integer value is greater than another
Syntax:
operation ::= `wasmssa.gt_ui` $lhs $rhs `:` type($lhs) `->` type($result) attr-dict
Example:
```mlir
%a = wasmssa.gt_ui %b %c : i32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
lhs | 32-bit signless integer or 64-bit signless integer |
rhs | 32-bit signless integer or 64-bit signless integer |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer |
wasmssa.if
(wasmssa::IfOp) ¶
Execute the if region if condition value is non-zero, the else region otherwise.
Syntax:
operation ::= `wasmssa.if` $condition (`(`$inputs^`)` `:` type($inputs))? attr-dict `:` $if custom<ElseRegion>($else) `>` $target
Execute the if region if the condition is non-zero. Otherwise the else region is executed. The else region can be empty but must return the same datatype as the if region. If clauses can be nested.
Example:
// Runs the if clause is %a is non-zero
wasmssa.if %a {
// Execute if %a is non-zero
} else {
// else clause
}
Traits: Terminator
Interfaces: LabelLevelOpInterface
Operands: ¶
Operand | Description |
---|---|
condition | 32-bit signless integer |
inputs | variadic of 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float or 128-bit signless integer or Opaque type for function reference or Opaque type for external reference |
Successors: ¶
Successor | Description |
---|---|
target | any successor |
wasmssa.import_func
(wasmssa::FuncImportOp) ¶
Importing a function variable
Syntax:
operation ::= `wasmssa.import_func` $importName `from` $moduleName `as` $sym_name attr-dict
Imports a function from another module
Example:
// Imports foo(i32) -> () from the module my_module
wasmssa.import_func "foo" from "my_module" as @func_0 {sym_visibility = "nested", type = (i32) -> ()}
Interfaces: ArgAndResultAttrsOpInterface
, CallableOpInterface
, ImportOpInterface
, Symbol
Attributes: ¶
Attribute | MLIR Type | Description |
---|---|---|
sym_name | ::mlir::StringAttr | string attribute |
moduleName | ::mlir::StringAttr | string attribute |
importName | ::mlir::StringAttr | string attribute |
type | ::mlir::TypeAttr | type attribute of function type |
arg_attrs | ::mlir::ArrayAttr | Array of dictionary attributes |
res_attrs | ::mlir::ArrayAttr | Array of dictionary attributes |
sym_visibility | ::mlir::StringAttr | string attribute |
wasmssa.import_global
(wasmssa::GlobalImportOp) ¶
Importing a global variable
Imports a global from another module
Example:
// Imports the "glob" i32 global from the module my_module as "global_0"
wasmssa.import_global "glob" from "my_module" as @global_0 nested : i32
Interfaces: ImportOpInterface
, Symbol
Attributes: ¶
Attribute | MLIR Type | Description |
---|---|---|
sym_name | ::mlir::StringAttr | string attribute |
moduleName | ::mlir::StringAttr | string attribute |
importName | ::mlir::StringAttr | string attribute |
type | ::mlir::TypeAttr | type attribute of 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float or 128-bit signless integer or Opaque type for function reference or Opaque type for external reference |
isMutable | ::mlir::UnitAttr | unit attribute |
sym_visibility | ::mlir::StringAttr | string attribute |
wasmssa.import_mem
(wasmssa::MemImportOp) ¶
Importing a memory
Syntax:
operation ::= `wasmssa.import_mem` $importName `from` $moduleName `as` $sym_name attr-dict
Import a memory from another module.
Example:
// Import the memory `mem` from `my_module` as @mem_0
wasmssa.import_mem "mem" from "my_module" as @mem_0 {limits = !wasmssa<limit[2:]>}
Interfaces: ImportOpInterface
, Symbol
Attributes: ¶
Attribute | MLIR Type | Description |
---|---|---|
sym_name | ::mlir::StringAttr | string attribute |
moduleName | ::mlir::StringAttr | string attribute |
importName | ::mlir::StringAttr | string attribute |
limits | ::mlir::TypeAttr | type attribute of Wasm limit type |
sym_visibility | ::mlir::StringAttr | string attribute |
wasmssa.import_table
(wasmssa::TableImportOp) ¶
Importing a table
Syntax:
operation ::= `wasmssa.import_table` $importName `from` $moduleName `as` $sym_name attr-dict
Import a table from another module.
Example:
// Import the table `table` from `my_module` as @table_0
wasmssa.import_table "table" from "my_module" as @table_0 {type = !wasmssa<tabletype !wasmssa.funcref [2:]>}
Interfaces: ImportOpInterface
, Symbol
Attributes: ¶
Attribute | MLIR Type | Description |
---|---|---|
sym_name | ::mlir::StringAttr | string attribute |
moduleName | ::mlir::StringAttr | string attribute |
importName | ::mlir::StringAttr | string attribute |
type | ::mlir::TypeAttr | type attribute of Wasm table type |
sym_visibility | ::mlir::StringAttr | string attribute |
wasmssa.le
(wasmssa::LeOp) ¶
Check if a float value is less or equal to another
Syntax:
operation ::= `wasmssa.le` $lhs $rhs `:` type($lhs) `->` type($result) attr-dict
Example:
```mlir
%a = wasmssa.le %b %c : i32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
lhs | 32-bit float or 64-bit float |
rhs | 32-bit float or 64-bit float |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer |
wasmssa.le_si
(wasmssa::LeSIOp) ¶
Check if a signed integer value is less or equal to another
Syntax:
operation ::= `wasmssa.le_si` $lhs $rhs `:` type($lhs) `->` type($result) attr-dict
Example:
```mlir
%a = wasmssa.le_si %b %c : i32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
lhs | 32-bit signless integer or 64-bit signless integer |
rhs | 32-bit signless integer or 64-bit signless integer |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer |
wasmssa.le_ui
(wasmssa::LeUIOp) ¶
Check if an unsigned integer value is less or equal to another
Syntax:
operation ::= `wasmssa.le_ui` $lhs $rhs `:` type($lhs) `->` type($result) attr-dict
Example:
```mlir
%a = wasmssa.le_ui %b %c : i32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
lhs | 32-bit signless integer or 64-bit signless integer |
rhs | 32-bit signless integer or 64-bit signless integer |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer |
wasmssa.local
(wasmssa::LocalOp) ¶
Declaration of local variable
Syntax:
operation ::= `wasmssa.local` `of` `type` $type attr-dict
Declares a local variable
Example:
// Declares `%a`, a float32 local
%a = wasmssa.local of type f32
Interfaces: InferTypeOpInterface
Attributes: ¶
Attribute | MLIR Type | Description |
---|---|---|
type | ::mlir::TypeAttr | type attribute of 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float or 128-bit signless integer or Opaque type for function reference or Opaque type for external reference |
Results: ¶
Result | Description |
---|---|
result | Type of a local variable |
wasmssa.local_get
(wasmssa::LocalGetOp) ¶
Set local to value and return the operand.
Syntax:
operation ::= `wasmssa.local_get` $localVar `:` type($localVar) attr-dict
Gets the value of a local variable and returns a reference to it.
Example:
// Retrieves a reference to `%a`, a float32 local
%b = wasmssa.local_get %a : ref to f32
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
localVar | Type of a local variable |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float or 128-bit signless integer or Opaque type for function reference or Opaque type for external reference |
wasmssa.local_set
(wasmssa::LocalSetOp) ¶
Set local to given value
Syntax:
operation ::= `wasmssa.local_set` $localVar `:` type($localVar) `to` $value `:` type($value) attr-dict
Sets the value of a local variable.
Example:
// Sets `%d`, to the value of `%c`
wasmssa.local_set %d : ref to i32 to %c : i32
Operands: ¶
Operand | Description |
---|---|
localVar | Type of a local variable |
value | 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float or 128-bit signless integer or Opaque type for function reference or Opaque type for external reference |
wasmssa.local_tee
(wasmssa::LocalTeeOp) ¶
Set local to value and return the operand.
Syntax:
operation ::= `wasmssa.local_tee` $localVar `:` type($localVar) `to` $value `:` type($value) attr-dict
Sets the value of a local variable and returns it.
Example:
// Sets `%b`, to the value of `%c` and returns it in %a
%a = wasmssa.local_tee %b : ref to i32 to %c : i32
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
localVar | Type of a local variable |
value | 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float or 128-bit signless integer or Opaque type for function reference or Opaque type for external reference |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float or 128-bit signless integer or Opaque type for function reference or Opaque type for external reference |
wasmssa.loop
(wasmssa::LoopOp) ¶
Create a nesting level similar to Block Op, except that it has itself as a successor.
Syntax:
operation ::= `wasmssa.loop` (`(`$inputs^`)` `:` type($inputs))? attr-dict `:` $body `>` $target
Traits: Terminator
Interfaces: LabelLevelOpInterface
Operands: ¶
Operand | Description |
---|---|
inputs | variadic of 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float or 128-bit signless integer or Opaque type for function reference or Opaque type for external reference |
Successors: ¶
Successor | Description |
---|---|
target | any successor |
wasmssa.lt
(wasmssa::LtOp) ¶
Check if a float value is less than another
Syntax:
operation ::= `wasmssa.lt` $lhs $rhs `:` type($lhs) `->` type($result) attr-dict
Example:
```mlir
%a = wasmssa.lt %b %c : i32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
lhs | 32-bit float or 64-bit float |
rhs | 32-bit float or 64-bit float |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer |
wasmssa.lt_si
(wasmssa::LtSIOp) ¶
Check if a signed integer value is less than another
Syntax:
operation ::= `wasmssa.lt_si` $lhs $rhs `:` type($lhs) `->` type($result) attr-dict
Example:
```mlir
%a = wasmssa.lt_si %b %c : i32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
lhs | 32-bit signless integer or 64-bit signless integer |
rhs | 32-bit signless integer or 64-bit signless integer |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer |
wasmssa.lt_ui
(wasmssa::LtUIOp) ¶
Check if an unsigned integer value is less than another
Syntax:
operation ::= `wasmssa.lt_ui` $lhs $rhs `:` type($lhs) `->` type($result) attr-dict
Example:
```mlir
%a = wasmssa.lt_ui %b %c : i32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
lhs | 32-bit signless integer or 64-bit signless integer |
rhs | 32-bit signless integer or 64-bit signless integer |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer |
wasmssa.max
(wasmssa::MaxOp) ¶
Compute the minimum of two floating point values.
Syntax:
operation ::= `wasmssa.max` $lhs $rhs `:` type($lhs) attr-dict
Example:
```mlir
%a = wasmssa.max %b %c : f32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
lhs | 32-bit float or 64-bit float |
rhs | 32-bit float or 64-bit float |
Results: ¶
Result | Description |
---|---|
result | 32-bit float or 64-bit float |
wasmssa.memory
(wasmssa::MemOp) ¶
WebAssembly memory definition
Syntax:
operation ::= `wasmssa.memory` $sym_name custom<WasmVisibility>($sym_visibility) $limits attr-dict
Define a memory to be used by the program. Multiple memories can be defined in the same module.
Example:
// Define the `mem_0` memory with defined bounds of 0 -> 65536
wasmssa.memory @mem_0 !wasmssa<limit[0:65536]>
Interfaces: Symbol
Attributes: ¶
Attribute | MLIR Type | Description |
---|---|---|
sym_name | ::mlir::StringAttr | string attribute |
limits | ::mlir::TypeAttr | type attribute of Wasm limit type |
sym_visibility | ::mlir::StringAttr | string attribute |
wasmssa.min
(wasmssa::MinOp) ¶
Compute the minimum of two floating point values.
Syntax:
operation ::= `wasmssa.min` $lhs $rhs `:` type($lhs) attr-dict
Example:
```mlir
%a = wasmssa.min %b %c : f32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
lhs | 32-bit float or 64-bit float |
rhs | 32-bit float or 64-bit float |
Results: ¶
Result | Description |
---|---|
result | 32-bit float or 64-bit float |
wasmssa.mul
(wasmssa::MulOp) ¶
Multiply two values
Syntax:
operation ::= `wasmssa.mul` $lhs $rhs `:` type($lhs) attr-dict
Example:
```mlir
%a = wasmssa.mul %b %c : i32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
lhs | 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float |
rhs | 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float |
wasmssa.ne
(wasmssa::NeOp) ¶
Check if two values are different
Syntax:
operation ::= `wasmssa.ne` $lhs $rhs `:` type($lhs) `->` type($result) attr-dict
Example:
```mlir
%a = wasmssa.ne %b %c : i32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
lhs | 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float |
rhs | 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer |
wasmssa.neg
(wasmssa::NegOp) ¶
Floating point negation
Syntax:
operation ::= `wasmssa.neg` $src`:` type($src) attr-dict
Example:
```mlir
%a = wasmssa.neg %b : f32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
src | 32-bit float or 64-bit float |
Results: ¶
Result | Description |
---|---|
result | 32-bit float or 64-bit float |
wasmssa.or
(wasmssa::OrOp) ¶
Compute the bitwise OR of two values
Syntax:
operation ::= `wasmssa.or` $lhs $rhs `:` type($lhs) attr-dict
Example:
```mlir
%a = wasmssa.or %b %c : i32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
lhs | 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float |
rhs | 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float |
wasmssa.popcnt
(wasmssa::PopCntOp) ¶
Population count of an integer.
Syntax:
operation ::= `wasmssa.popcnt` $src`:` type($src) attr-dict
Example:
```mlir
%a = wasmssa.popcnt %b : i32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
src | 32-bit signless integer or 64-bit signless integer |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer or 64-bit signless integer |
wasmssa.promote
(wasmssa::PromoteOp) ¶
Get f64 representation of a f32 value.
Syntax:
operation ::= `wasmssa.promote` $input `:` type($input) `to` type($result) attr-dict
Example:
```mlir
%a = wasmssa.promote %b : f32 to f64
```
Operands: ¶
Operand | Description |
---|---|
input | 32-bit floating-point type |
Results: ¶
Result | Description |
---|---|
result | 64-bit floating-point type |
wasmssa.reinterpret
(wasmssa::ReinterpretOp) ¶
Reinterpret the value represented by a bit vector by bit-casting it to another type of same representation width.
Syntax:
operation ::= `wasmssa.reinterpret` $input `:` type($input) `as` type($result) attr-dict
Example:
```mlir
%a = wasmssa.reinterpret %b : f32 as i32
```
Operands: ¶
Operand | Description |
---|---|
input | 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float |
wasmssa.rem_si
(wasmssa::RemSIOp) ¶
Calculate the remainder of dividing two integer values as signed integer
Syntax:
operation ::= `wasmssa.rem_si` $lhs $rhs `:` type($lhs) attr-dict
Example:
```mlir
%a = wasmssa.rem_si %b %c : i32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
lhs | 32-bit signless integer or 64-bit signless integer |
rhs | 32-bit signless integer or 64-bit signless integer |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer or 64-bit signless integer |
wasmssa.rem_ui
(wasmssa::RemUIOp) ¶
Calculate the remainder of dividing two integer values as an unsigned integer
Syntax:
operation ::= `wasmssa.rem_ui` $lhs $rhs `:` type($lhs) attr-dict
Example:
```mlir
%a = wasmssa.rem_ui %b %c : i32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
lhs | 32-bit signless integer or 64-bit signless integer |
rhs | 32-bit signless integer or 64-bit signless integer |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer or 64-bit signless integer |
wasmssa.return
(wasmssa::ReturnOp) ¶
Return from the current function frame
Syntax:
operation ::= `wasmssa.return` attr-dict ($operands^ `:` type($operands))?
Traits: Terminator
Operands: ¶
Operand | Description |
---|---|
operands | variadic of 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float or 128-bit signless integer or Opaque type for function reference or Opaque type for external reference |
wasmssa.rotl
(wasmssa::RotlOp) ¶
_Rotate left.
Consume an integer and an integer rotate. The first
integer shall be rotated left by N bits, where N is the value of the
second integer._
Syntax:
operation ::= `wasmssa.rotl` $val `by` $bits `bits` `:` type($val) attr-dict
Example:
```mlir
%a = wasmssa.rotl %b by %c bits : i64
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
val | 32-bit signless integer or 64-bit signless integer |
bits | 32-bit signless integer or 64-bit signless integer |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer or 64-bit signless integer |
wasmssa.rotr
(wasmssa::RotrOp) ¶
_Rotate right.
Consume an integer, and an integer rotate. The first
integer shall be rotated right by N bits, where N is the value of the
second integer._
Syntax:
operation ::= `wasmssa.rotr` $val `by` $bits `bits` `:` type($val) attr-dict
Example:
```mlir
%a = wasmssa.rotr %b by %c bits : i64
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
val | 32-bit signless integer or 64-bit signless integer |
bits | 32-bit signless integer or 64-bit signless integer |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer or 64-bit signless integer |
wasmssa.shl
(wasmssa::ShLOp) ¶
Consume an integer and an integer shift amount. The first integer shall be shifted left by N bits, where N is the value of the second integer.
Syntax:
operation ::= `wasmssa.shl` $val `by` $bits `bits` `:` type($val) attr-dict
Example:
```mlir
%a = wasmssa.shl %b by %c bits : i64
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
val | 32-bit signless integer or 64-bit signless integer |
bits | 32-bit signless integer or 64-bit signless integer |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer or 64-bit signless integer |
wasmssa.shr_s
(wasmssa::ShRSOp) ¶
_Arithmetic right shift.
Consume an integer and an integer shift amount. The first
integer shall be shifted right by N bits, where N is the value of the
second integer.
Vacated bits on the left shall be filled with the sign bit._
Syntax:
operation ::= `wasmssa.shr_s` $val `by` $bits `bits` `:` type($val) attr-dict
Example:
```mlir
%a = wasmssa.shr_s %b by %c bits : i64
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
val | 32-bit signless integer or 64-bit signless integer |
bits | 32-bit signless integer or 64-bit signless integer |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer or 64-bit signless integer |
wasmssa.shr_u
(wasmssa::ShRUOp) ¶
_Logical right shift.
Consume an integer, and an integer shift amount. The first
integer shall be shifted right by N bits, where N is the value of the
second integer.
Vacated bits on the left shall be filled with zeroes._
Syntax:
operation ::= `wasmssa.shr_u` $val `by` $bits `bits` `:` type($val) attr-dict
Example:
```mlir
%a = wasmssa.shr_u %b by %c bits : i64
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
val | 32-bit signless integer or 64-bit signless integer |
bits | 32-bit signless integer or 64-bit signless integer |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer or 64-bit signless integer |
wasmssa.sqrt
(wasmssa::SqrtOp) ¶
Floating point square root
Syntax:
operation ::= `wasmssa.sqrt` $src`:` type($src) attr-dict
Example:
```mlir
%a = wasmssa.sqrt %b : f32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
src | 32-bit float or 64-bit float |
Results: ¶
Result | Description |
---|---|
result | 32-bit float or 64-bit float |
wasmssa.sub
(wasmssa::SubOp) ¶
Subtract two values
Syntax:
operation ::= `wasmssa.sub` $lhs $rhs `:` type($lhs) attr-dict
Example:
```mlir
%a = wasmssa.sub %b %c : i32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
lhs | 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float |
rhs | 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float |
wasmssa.table
(wasmssa::TableOp) ¶
WebAssembly table value
Syntax:
operation ::= `wasmssa.table` $sym_name custom<WasmVisibility>($sym_visibility) $type attr-dict
Interfaces: Symbol
Attributes: ¶
Attribute | MLIR Type | Description |
---|---|---|
sym_name | ::mlir::StringAttr | string attribute |
type | ::mlir::TypeAttr | type attribute of Wasm table type |
sym_visibility | ::mlir::StringAttr | string attribute |
wasmssa.trunc
(wasmssa::TruncOp) ¶
Trunc of floating point value
Syntax:
operation ::= `wasmssa.trunc` $src`:` type($src) attr-dict
Example:
```mlir
%a = wasmssa.trunc %b : f32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
src | 32-bit float or 64-bit float |
Results: ¶
Result | Description |
---|---|
result | 32-bit float or 64-bit float |
wasmssa.wrap
(wasmssa::WrapOp) ¶
Cast an i64 to i32 by using a wrapping mechanism: y = x mod 2^32
Syntax:
operation ::= `wasmssa.wrap` $input `:` type($input) `to` type($result) attr-dict
Example:
```mlir
%a = wasmssa.wrap %b : i64 to i32
```
Operands: ¶
Operand | Description |
---|---|
input | 64-bit signless integer |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer |
wasmssa.xor
(wasmssa::XOrOp) ¶
Compute the bitwise XOR of two values
Syntax:
operation ::= `wasmssa.xor` $lhs $rhs `:` type($lhs) attr-dict
Example:
```mlir
%a = wasmssa.xor %b %c : i32
```
Interfaces: InferTypeOpInterface
Operands: ¶
Operand | Description |
---|---|
lhs | 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float |
rhs | 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float |
Results: ¶
Result | Description |
---|---|
result | 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float |
Types ¶
ExternRefType ¶
Opaque type for external reference
Syntax: !wasmssa.externref
FuncRefType ¶
Opaque type for function reference
Syntax: !wasmssa.funcref
LimitType ¶
Wasm limit type
Syntax:
!wasmssa.limit<
uint32_t, # min
std::optional<uint32_t> # max
>
Parameters: ¶
Parameter | C++ type | Description |
---|---|---|
min | uint32_t | |
max | std::optional<uint32_t> |
LocalRefType ¶
Type of a local variable
Syntax:
!wasmssa.local<
::mlir::Type # elementType
>
Parameters: ¶
Parameter | C++ type | Description |
---|---|---|
elementType | ::mlir::Type | 32-bit signless integer or 64-bit signless integer or 32-bit float or 64-bit float or 128-bit signless integer or Opaque type for function reference or Opaque type for external reference |
TableType ¶
Wasm table type
Syntax:
!wasmssa.tabletype<
::mlir::Type, # reference
::mlir::wasmssa::LimitType # limit
>
Parameters: ¶
Parameter | C++ type | Description |
---|---|---|
reference | ::mlir::Type | Opaque type for function reference or Opaque type for external reference |
limit | ::mlir::wasmssa::LimitType | Wasm limit type |