# tablegen_study **Repository Path**: chenchang/tablegen_study ## Basic Information - **Project Name**: tablegen_study - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-27 - **Last Updated**: 2025-09-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TableGen 学习示例 这个项目包含了几个简单的 TableGen 文件示例,用于学习 LLVM TableGen 的基本用法。**所有文件都是完全自包含的,不依赖任何外部类定义。** ## 文件说明 ### 1. simple.td 最简单的 TableGen 文件,包含: - 基类定义 (Instruction, Register, Operand) - 基本的指令定义 (ADD, SUB) - 寄存器定义 (R0, R1) - 操作数定义 (Imm8, Imm16) ### 2. complete_example.td 完整的 TableGen 文件,包含: - 基类定义 (Instruction, Register, Operand, InstructionFormat) - 多个具体指令 (ADD, SUB, MUL) - 多个寄存器 (R0, R1, R2) - 多种操作数类型 (Imm8, Imm16) - 指令格式定义 ### 3. codegen_example.td 代码生成示例,包含: - 使用继承的指令类定义 - 算术指令 (ADD, SUB, MUL, DIV) - 逻辑指令 (AND, OR, XOR) - 更完整的寄存器定义 - 不同大小的立即数操作数 ## 如何使用 ### 1. 验证 TableGen 文件语法 ```bash llvm-tblgen simple.td ``` ### 2. 生成 C++ 代码 ```bash llvm-tblgen -gen-emitter simple.td -o simple_emitter.inc ``` ### 3. 生成指令信息 ```bash llvm-tblgen -gen-instr-info complete_example.td -o instr_info.inc ``` ### 4. 生成寄存器信息 ```bash llvm-tblgen -gen-register-info complete_example.td -o register_info.inc ``` ## TableGen 基本概念 1. **记录 (Records)**: TableGen 中的基本数据结构 2. **类 (Classes)**: 定义记录的模板 3. **定义 (Definitions)**: 基于类创建的具体记录 4. **字段 (Fields)**: 记录中的属性 5. **继承**: 类可以继承其他类 ## 学习建议 1. 从 `simple.td` 开始,理解基本的语法 2. 学习 `complete_example.td` 中的基类定义 3. 研究 `codegen_example.td` 中的继承和代码生成 4. 尝试修改这些文件,添加自己的指令和寄存器 5. 学习如何使用 TableGen 生成器生成不同的输出格式