# symbol方言 `symbol`方言用于定义与动态形状相关的操作,表达张量维度与符号量之间的映射与约束关系。 ## 操作定义 ### symbol.bind_symbolic_shape (symbol::BindSymbolicShapeOp) **功能**:通过符号索引的仿射映射,将形状表达式绑定到张量。该操作为张量绑定形状表达式以描述其动态维度的计算规则,接收一组SSA符号值,与仿射映射中声明的局部符号按顺序一一对应;仿射映射包含每个维度对应的仿射形状表达式,表达式的自变量均来自传入的符号。 **示例**: ```mlir symbol.bind_symbolic_shape %arg0, [%0, %1], affine_map<()[s0, s1] -> (s0, s1, 3)> : tensor symbol.bind_symbolic_shape %out0, [%0, %1, %2], affine_map<()[s0, s1, s2] -> (s0, s1 * 2 + s2, 3)> : tensor ``` **属性**: | 属性名 | MLIR类型 | 说明 | | :-----: | ----------- | ---- | | `shape_expressions` | `::mlir::AffineMapAttr` | 封装AffineMap对象的仿射映射属性

语法:
`affine-map-attribute ::= affine_map`

示例:
`affine_map<(d0) -> (d0)>`
`affine_map<(d0, d1, d2) -> (d0, d1)>` | **操作数**: | 操作数 | 说明 | | :-----: | ----------- | | `operand` | 待绑定形状的目标值,支持任意类型 | | `shape_symbols` | 变长index类型符号列表,与仿射映射中的符号按顺序一一对应 | ### symbol.symbolic_int (symbol::SymbolicIntOp) **功能**:表示带范围约束的符号整数。该操作定义一个具名的符号整数值,最终以`index`类型返回,通过`min_val`与`max_val`属性指定符号值的闭区间取值边界,符号名称由符号属性声明,通常用于表示张量的动态维度,或其他带有已知取值约束的符号整数量。 **示例**: ```mlir %0 = symbol.symbolic_int @s0 {min_val = 5, max_val = 10} : index %1 = symbol.symbolic_int @s1 {min_val = 2, max_val = 20} : index %2 = symbol.symbolic_int @s2 [%0, %1], affine_map<()[s1, s2] -> (s1 * s2)> {min_val = 2, max_val = 20} : index ``` **特性**:`AlwaysSpeculatableImplTrait` **接口**:`ConditionallySpeculatable`、`NoMemoryEffect`、`OpAsmOpInterface` **内存效应**:`MemoryEffects::Effect{}` **属性**: | 属性名 | MLIR类型 | 说明 | | :-----: | ----------- | ---- | | `symbol_name` | `::mlir::FlatSymbolRefAttr` | 扁平符号引用属性 | | `min_val` | `::mlir::IntegerAttr` | 64位无符号整数属性,定义符号取值的下界(闭区间) | | `max_val` | `::mlir::IntegerAttr` | 64位无符号整数属性,定义符号取值的上界(闭区间) | | `int_expressions` | `::mlir::AffineMapAttr` | 封装AffineMap对象的仿射映射属性

语法:
`affine-map-attribute ::= affine_map`

示例:
`affine_map<(d0) -> (d0)>`
`affine_map<(d0, d1, d2) -> (d0, d1)>` | **操作数**: | 操作数 | 说明 | | :-----: | ----------- | | `int_symbols` | 变长index类型符号列表 | **结果**: | 结果 | 说明 | | :----: | ----------- | | `result` | index类型的符号整数值 |