MLIR笔记
文章平均质量分 78
wuhui_gdnt
这个作者很懒,什么都没留下…
展开
-
MLIR笔记(6)
69行的getGlobalDialectRegistry()返回一个类型为llvm::ManagedStatic<DialectRegistry>的对象dialectRegistry,它过可视为DialectRegistry的静态对象,这个类通过一个类型为std::map<std::string, std::pair<TypeID, DialectAllocatorFunction>>的容器registry来记录标准方言。方言对象的构造发生在载入时,在载入时刻,不仅构造方言对象,相关的接口也会一并准备好。原创 2023-12-11 17:26:03 · 520 阅读 · 1 评论 -
MLIR笔记(5)
所有在区域里定义作为操作结果的值,作用域在区域内,可以被区域里的任意其他操作访问。在图区域中,一个基本块内存在的次序以及一个区域内基本块的次序是没有语义意义的,例如非终结符操作可以通过规范化任意重排。对没有控制流的并发语义,以及通用有向图数据结构的建模,图区域是合适的。例如,一个图区域里的操作可能表示独立线程的控制流,具有表示数据流的值。上面1230行的region是MLIR引入的关键字,而$regions里的regions将是由mlir-tblgen生成的访问函数的名字。这些参数的源由父操作的语义定义。原创 2023-12-01 10:31:28 · 382 阅读 · 0 评论 -
MLIR笔记——目录
2.2. 方言间转换的例子。2. 命令行选项的解析。原创 2023-11-13 15:05:28 · 472 阅读 · 0 评论 -
MLIR笔记(4)
操作也可能将控制流传递入在其他操作里指定的区域,特别是那些像在一个call操作里使用的给定操作定义的值或符号。所有在区域里定义作为操作结果的值,作用域在区域内,可以被区域里的任意其他操作访问。在图区域中,一个基本块内存在的次序以及一个区域内基本块的次序是没有语义意义的,例如非终结符操作可以通过规范化任意重排。在操作执行后,执行基本块里的下一个操作,直到基本块末尾的终结符操作,在这个情形下将执行其他某个操作。注意,如果操作触发了区域的异步执行,操作的调用者负责等待要执行的区域,确保任意直接使用的值保持存活。原创 2023-11-24 13:50:43 · 334 阅读 · 0 评论 -
MLIR笔记(3)
类似地,区域提供了值可见性的一个自然的辖域:定义在一个区域里的值不会逃逸到包含它的区域(如果有的话)。默认地,区域里的操作可以援引定义在外部区域的值,只要包含它操作的操作数援引这些值是合法的,但这局限于使用特性(trait),比如OpTrait::IsolatedFromAbove,或定制的验证器。Standard方言利用这个功能来定义具有单入口多出口(Single-Entry-Multiple-Exit,SEME)的区域,在区域中可能流经不同的基本块,并从任一带有return操作的基本块退出。原创 2023-11-20 14:12:00 · 335 阅读 · 0 评论 -
MLIR笔记(2)
C++支持类型间的自动转换(如operator =声明的转换),但在转换的调用链里自动转换只能调用一次,这固然是避免给编译器带来过分的复杂性,但更重要的是允许自动转换接力调用几乎很难避免出现递归调用,而且调用链过长会很快失去控制,给人带来意想不到的结果。也就是说,下一个对象的位置由前一个对象返回,这也是合理的,因为只有找到前一个对象才能知道它后面的对象在哪里。对于我们最终调用的第二个版本来说,所谓的转换就是一个简单的C形式的强制转换,不过,由于前面的一系列检查,这个转换是安全的。原创 2023-11-15 14:04:59 · 592 阅读 · 2 评论 -
MLIR笔记(1)
则保存了命令行上出现选项的具体信息(它是一个模板类,这里的特化以所服务的信息类型为基类,在这个上下文里就是GenInfo的派生类),这里因为在声明opt_storage基类时把ExternalStorage指定为false,因此generator的opt_storage部分将用于保存命令行上出现的选项所对应的GenInfo实例。MLIR是Multi-layer IR的缩写,它是基于LLVM IR发展的一个中间语言形式,是Clang/LLVM的发明者Chris Lattner在加盟谷歌后又一个重要的发明。原创 2023-11-13 15:04:00 · 532 阅读 · 0 评论