哈尔滨建设网站公司哪家好,网站备案 不关站,邢台网站建设行情,门户网站登录页面4.3.4. 图区域
在MLIR中#xff0c;区域里类似图的语义由RegionKind::Graph来表示。对没有控制流的并发语义#xff0c;以及通用有向图数据结构的建模#xff0c;图区域是合适的。图区域适用于表示耦合值之间的循环关系#xff0c;这些关系没有基本的序。例如#xff0c;…4.3.4. 图区域
在MLIR中区域里类似图的语义由RegionKind::Graph来表示。对没有控制流的并发语义以及通用有向图数据结构的建模图区域是合适的。图区域适用于表示耦合值之间的循环关系这些关系没有基本的序。例如一个图区域里的操作可能表示独立线程的控制流具有表示数据流的值。就像通常在MLIR里一样区域的特定语义完全由它包含的操作确定。图区域可能仅包含单个基本块入口块。
基本原理当前的图区域被随意限制为单个基本块虽然这个限制没有特别的语义方面的原因。加入这个限制使得稳定遍基本架构以及常用于处理图区域的遍恰当地处理反馈循环更容易。未来可能允许多基本块区域如果出现要求它的用例。
在图区域中MLIR操作自然地代表节点而每个MLIR值代表连接源节点与多个目的节点的一条多边multi-edge。所有在区域里定义作为操作结果的值作用域在区域内可以被区域里的任意其他操作访问。在图区域中一个基本块内存在的次序以及一个区域内基本块的次序是没有语义意义的例如非终结符操作可以通过规范化任意重排。其他类型图比如带有多个源节点与多个目的节点的图也可以被图区域表示为MLIR操作。
注意在图区域中的单个基本块里或者基本块之间会出现环。
test.graph_region() ({ // A Graph region %1 op1(%1, %3) : (i32, i32) - (i32) // OK: %1, %3 allowed here %2 test.ssacfg_region() ({ %5 op2(%1, %2, %3, %4) : (i32, i32, i32, i32) - (i32) // OK: %1, %2, %3, %4 all defined in the containing region }) : () - (i32) %3 op2(%1, %4) : (i32, i32) - (i32) // OK: %4 allowed here %4 op3(%1) : (i32) - (i32) }) : () - () 4.3.5. 参数与结果
区域第一个基本块的参数被视为该区域的参数。这些参数的源由父操作的语义定义。它们可能对应这个操作本身使用的一些值。
区域产生可能是空C的一组值。操作语义定义了区域结果与操作结果之间的关系。
4.3.6. 一些ODS定义
在ODS里region是这样的定义
1638 class RegionPred condition, string descr :
1639 RegionConstraintcondition, descr;
基类RegionConstraint的定义是
185 class RegionConstraintPred predicate, string description :
186 Constraintpredicate, description;
在MLIR里操作可能包含各种形式的region因此有这些region派生定义
表示任意region的AnyRegion
1642 def AnyRegion : RegionCPredtrue, any region; 表示包含指定数量基本块的SizedRegion
1645 class SizedRegionint numBlocks : Region
1646 CPred::llvm::hasNItems($_self, # numBlocks # ),
1647 region with # numBlocks # blocks;
表示包含0或多个基础region的变长VaridadicRegion
1650 class VariadicRegionRegion region
1651 : Regionregion.predicate, region.description; 一个使用这些Region派生类定义的例子是TestOps.td
1230 def SSACFGRegionOp : TEST_Opssacfg_region, [
1231 DeclareOpInterfaceMethodsRegionKindInterface] {
1232 let summary operation with an SSACFG region;
1233 let description [{
1234 Test op that defines an SSACFG region.
1235 }];
1236
1237 let regions (region VariadicRegionAnyRegion:$regions);
1238 let arguments (ins VariadicAnyType);
1239 let results (outs VariadicAnyType);
1230 }
上面1230行的region是MLIR引入的关键字而$regions里的regions将是由mlir-tblgen生成的访问函数的名字。