
GCC编译器相关
文章平均质量分 88
GCC编译器相关内容
Maxwell47
这个作者很懒,什么都没留下…
展开
-
RTL处理及优化
数据相关是指指令之间由于操作数的使用而引入的一些相关关系,这种关系决定了指令之间的执行顺序。数据之间的关系主要包括以下几种形式:(1)真相关(2)反相关(3)输出相关。原创 2024-06-01 23:54:38 · 497 阅读 · 0 评论 -
gcc源码分析 词法和语法分析
*c_token结构体来描述一个C语言中的语法符号*//* 记录标识符的类型. *//* 若一个标识符是关键字,非关键字的keyword默认为为 RID_MAX *//* 编译制导的标识符 *//* 记录token在源代码中的位置 */tree value;声明说明符是由一个个说明符(specifier)构成的,这些说明符被分为6个不同的大类,分别是:存储类说明符(storage-class-specifier)类型说明符(type-specifier)原创 2024-06-09 15:18:03 · 1058 阅读 · 0 评论 -
gcc编译器前端简要分析
词法分析的过程就是将源代码识别成一个一个的词法符号,并在词法分析的过程中创建一些树节点,用来保存某些词法符号的值(value)。函数c_parse_filer如上所述,是C语法分析的入口函数,该函数首先对当前的词法符号进行判断,如果该符号的编译制导类型是PRAGMA_GCC_PCH_PREPROCESS,则调用函数c_parser_pragma_pch_preprocess对进行源代码的预处理,否则,调用函数c_parser_translation_unit()进行语法推导。原创 2024-05-05 21:04:01 · 561 阅读 · 0 评论 -
gcc源码分析(AST抽象语法树)
一个scope在解析过程中会依赖于其所能看到的所有标识符的绑定(代表其声明),其中此scope内层的标识符绑定只在当前scope中有效,在当前scope解析完毕后当前scope内在标识符上的绑定应该被删除,同时当前scope内生成的所有声明以及子scope的信息均会被保存到一个tree_block节点并返回:tree_block->vars顺序链接当前scope内所有的声明节点,而tree_block->subblocks顺序链接当前scope内所有子scope生成的block节点。原创 2024-05-25 11:07:35 · 1525 阅读 · 0 评论 -
从GIMPLE到RTL
变量展开的核心功能就是为各种各样不同类型的变量分配空间,并生成对应的RTX,主要包括以下两种典型情况:(1)对于GIMPLE语句中的GIMPLE临时变量,一般为该变量分配虚拟寄存器,创建类型为REG的RTX,通过该寄存器RTX访问该变量;(2)如果是函数中的自动变量,则使用堆栈进行空间分配,因此必须创建内存类型为的RTX(其RTX_CODE=MEM),一般通过基址寄存器(virtual_stack_vars_rtx)+偏移量的方式给出该变量的内存地址。原创 2024-05-29 09:15:02 · 1201 阅读 · 0 评论 -
gcc源码分析 GIMPLIFY相关
GCC通过前端的词法/语法分析后,将高级编程语言转换成抽象的AST中间表示。为了对AST中间表示进行语言无关的处理和优化,GCC引入了GIMPLE。GENERIC就是规范的AST。一般来说,如果一种前端语言的AST树均可以使用树节点表示,那么该AST就是GENERIC/AST,GIMPLE为是了处理不同的前端语言及其相应的AST/GENERIC, GCC引入的一种与前端语言无关的中间表示。GIMPLE是一种三地址码的中间表示形式。在从AST向GIMPLE转换的过程中,GIMPLE的生成先后经历了两个阶段,分原创 2024-05-29 09:07:15 · 943 阅读 · 0 评论