标签:#编译器最佳化

共 3 篇文章

循环不变代码外提

循环不变代码外提(,缩写)在计算机编程中是指将循环不变的语句或表达式移到循环体之外,而不改变程序的语义。循环不变代码外提在英文中又被称为或,是编译器中常见的优化方法。 示例 假设有如下代码: for (int i = 0; i 其中x = y + z与x x这两步运算是循环不变的,会在优化中被移出循环体之外。经LICM优化后的代码为: x = y + z; t1 = x x; for (int i = 0; i 参见 循环不变量 参考文…

循环展开

循环展开(Loop unwinding或loop unrolling),是一种牺牲程序的大小来加快程序执行速度的优化方法。可以由-{zh-hans:程序员; zh-hant:程式設計師;}-完成,也可由编译器自动优化完成。 循环展开最常用来降低循环开销,为具有多个功能单元的处理器提供指令级并行。也有利于-{zh-hans:指令流水线; zh-hant:指令管線化;}-的调度。 例子 for (i = 1; i 可以如此循环展开: for…

别名分析

别名分析(Alias analysis)是编译器理论中的一种程序分析技术。当程序中同时出现两个甚至多个符号代表同样一个内存位置时,这些符号便可称作别名。与此相对应的,当两个或更多指针指向同一个地址时,那些指针称作别名指针。别名分析则是判断一个程序内是否存在别名的算法。 别名(Alias)的存在会增加编译器的优化难度,甚至阻止某种优化的发生。因此,别名是否存在于程序中,对于一些优化手段是不可或缺的一个信息。在这种场景下,别名分析显得尤为重…