当前位置:首页 » 编程软件 » 编译器前端代码

编译器前端代码

发布时间: 2024-12-27 15:14:59

编译器的代码分析

编译器分析(compiler analysis)的对象是前端生成并传递过来的中间代码,现代的优化型编译器(optimizing compiler)常常用好几种层次的中间代码来表示程序,高层的中间代码(high level IR)接近输入的源程序的格式,与输入语言相关(language dependent),包含更多的全局性的信息,和源程序的结构;中层的中间代码(middle level IR)与输入语言无关,低层的中间代码(Low level IR)与机器语言类似。 不同的分析,优化发生在最适合的那一层中间代码上。
常见的编译分析有函数调用树(call tree),控制流程图(Control flow graph),以及在此基础上的 变量定义-使用,使用-定义链(define-use/use-define or u-d/d-u chain),变量别名分析(alias analysis),指针分析(pointer analysis),数据依赖分析(data dependence analysis)等。
程序分析结果是编译器优化(compiler optimization)和程序变形(compiler transformation)的前提条件。常见的优化和变形有:函数内嵌(inlining),无用代码删除(Dead code elimination),标准化循环结构(loop normalization),循环体展开(loop unrolling),循环体合并,分裂(loop fusion,loop fission),数组填充(array padding),等等。 优化和变形的目的是减少代码的长度,提高内存(memory),缓存(cache)的使用率,减少读写磁盘,访问网络数据的频率。更高级的优化甚至可以把序列化的代码(serial code)变成并行运算,多线程的代码(parallelized,multi-threadedcode)。
机器代码的生成是优化变型后的中间代码转换成机器指令的过程。现代编译器主要采用生成汇编代码(assembly code)的策略,而不直接生成二进制的目标代码(binary object code)。即使在代码生成阶段,高级编译器仍然要做很多分析,优化,变形的工作。例如如何分配寄存器(register allocatioin),如何选择合适的机器指令(instruction selection),如何合并几句代码成一句等等。

热点内容
百度网盘下载源码 发布:2024-12-28 08:30:54 浏览:847
判断访问 发布:2024-12-28 08:30:12 浏览:65
三菱plcc语言 发布:2024-12-28 08:27:43 浏览:744
上传dna序列 发布:2024-12-28 08:27:42 浏览:78
我的世界notch的服务器 发布:2024-12-28 08:00:33 浏览:779
c在线编程器 发布:2024-12-28 07:33:08 浏览:740
nba2k22安卓手游什么时候上线 发布:2024-12-28 07:33:06 浏览:246
优化算法矩阵 发布:2024-12-28 07:32:22 浏览:647
树莓派3搭建服务器 发布:2024-12-28 07:21:40 浏览:570
android获取渠道 发布:2024-12-28 07:14:35 浏览:784