先来看看该文件定义的数据结构. 在td中使用两个关键字定义数据结构(llvm中称为records, 其实质对应的是tablegen中的一个类/类实例), class与def. 其中classes类似于模板, 用于描述一类抽象的records(e.g. Register, RegisterClass, Instruction). 而definitions用于表达一个具体的records(可以理解为一个特定的类). ...
然后在定义指令以及pattern的地方加上Predicates, 这个句式在tablegen中就是告知需要同时满足后续的条件才能添加定义或者指令匹配上 let Predicates = [Has3Sum] in def ADD3 : ALU_rrr<0b0010100, 0b000, "add3", Commutable=1>, Sched<[WriteIALU, ReadIALU, ReadIALU]>; let Predicates = [Has3Sum] ...
TableGen 文件由两个关键部分组成:“classes”和“definitions”,两者都被视为“records”。 TableGen records具有唯一名称、值列表和超类列表。值列表是 TableGen 为每一个record构建的主要数据;正是它保存了应用程序的领域特定信息。这些数据的解释留给特定的后端,但结构和格式规则由 TableGen 负责并规定。 TableGen defi...
机器IR(MIR)格式参考手册:MIR序列化格式的参考手册,用于测试LLVM的代码生成过程。 TableGen:描述了TableGen工具,LLVM代码生成器大量使用它。 LLVM别名分析基础结构:有关如何编写新别名分析实现,或如何使用现有分析的信息。 MemorySSA:有关LLVM中的MemorySSA实用程序的信息,以及如何使用。 使用LLVM进行垃圾收集:接口源语言...
PLCT实验室玄铁C910项目的系列报告第02弹报告人:陈影实习生PPT地址(也是提问地址):https://github.com/isrc-cas/PLCT-Open-Reports, 视频播放量 1372、弹幕量 1、点赞数 13、投硬币枚数 12、收藏人数 34、转发人数 5, 视频作者 lazyparser, 作者简介 一位励志当上知识区
具体工作内容包括:为LLVM的RISCV后端添加一个C910命令行选项,实现llvm-mc汇编器的支持,使用TableGen语言编写全部扩展指令的汇编代码,能够将玄铁C910汇编指令汇编生成二进制文件,并编写测试用例,验证汇编指令编码的正确性。本项目对于在LLVM中添加用户自定义指令具有良好的指导意义,未来计划考虑添加对其他指令集架构的支持。
全书分为3篇。第1篇介绍编译器基础知识,包括中间表示,重点介绍SSA、数据流分析、支配、循环等知识,此外还介绍了LLVM的后端描述语言TableGen。第二篇剖析分LLVM代码生成,其中对代码生成的每一步骤都有提及,着重介绍指令选择、指令调度、寄存器分配和编译优化。同时还以B
这些如 -ccc-print-phases 这样的 option 在编译时会生成.inc 这样的 C++ TableGen 文件。在 Options.td 可以看到全部的 option 定义。 在Clang 的 Pipeline 中很多实际行为都有对应的 Action,比如 preprocessor 时提供文件的 InputAction 和用于绑定机器架构的 BindArchAction。 使用clang main.c -arch i386 -arc...
这些如 -ccc-print-phases 这样的 option 在编译时会生成.inc 这样的 C++ TableGen 文件。在 Options.td 可以看到全部的 option 定义。 在Clang 的 Pipeline 中很多实际行为都有对应的 Action,比如 preprocessor 时提供文件的 InputAction 和用于绑定机器架构的 BindArchAction。