CN103577241A - 编译系统以及编译方法 - Google Patents

编译系统以及编译方法 Download PDF

Info

Publication number
CN103577241A
CN103577241A CN201210342636.5A CN201210342636A CN103577241A CN 103577241 A CN103577241 A CN 103577241A CN 201210342636 A CN201210342636 A CN 201210342636A CN 103577241 A CN103577241 A CN 103577241A
Authority
CN
China
Prior art keywords
compiler
procedure code
program
storehouse
optimization
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201210342636.5A
Other languages
English (en)
Other versions
CN103577241B (zh
Inventor
柯林·A·麦克艾文
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
MStar Software R&D Shenzhen Ltd
MStar Semiconductor Inc Cayman Islands
MStar Semiconductor Inc Taiwan
Original Assignee
MStar Software R&D Shenzhen Ltd
MStar Semiconductor Inc Cayman Islands
MStar Semiconductor Inc Taiwan
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by MStar Software R&D Shenzhen Ltd, MStar Semiconductor Inc Cayman Islands, MStar Semiconductor Inc Taiwan filed Critical MStar Software R&D Shenzhen Ltd
Publication of CN103577241A publication Critical patent/CN103577241A/zh
Application granted granted Critical
Publication of CN103577241B publication Critical patent/CN103577241B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/37Compiler construction; Parser generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

本发明提供对一程序码库进行离线静态分析的技术,来建立专为那程序码库特制的一编译器以及一些工具。本发明在此所揭示的技术,可以让此程序库码的总体资讯可以在编译过程中,早点被采用,以便让最佳化比较可能有更好的结果。此离线静态分析可以产生一些特制化编译组件,以便用来重建编译器。这样,随着时间的演进,就可以得到专为此程序码库所特制的一编译器。此编码器在每次重建完成后,都会得到比较好的最佳化效果,而且也能继续保持有效率的编码时间。

Description

编译系统以及编译方法
技术领域
本发明相关于编译(compilation)与软件程序的最佳化(optimization),尤指对一程序码库(code base)进行离线静态分析,来重建一编译器,使其特别适用于该程序码库的方法。如此,可以让此程序码库的一些资讯可以在编译过程中,早点被采用。好处是可以改善最佳化的效果,降低编译所需的时间,也可以减少软件开发所需的时间。
背景技术
编译器是电脑程序的一种,可以将高阶程序语言所写的原始码,转换成另一种低阶程序语言,最终目的是产生一电脑可执行的程序。这里的低阶程序语言一般指的是组合语言或是机械码。在转换高阶程序语言的过程中,编译器会判定原始码语法上的正确性,产生目的码的有效执行时间组织(efficient run-time organization),并且依据连接器或是组合语言的规定,将输出的档案格式化。
软件程序的编译大致上是先将软件的每个原始码档案,或是依据原始码格式所写的每个物件,个别地经过一编译器,来编译成许多个处理器可执行的原生(native)档案或是机械码(machine code)档案。这些原生或是机械码档案接着将由一连结器处理,一起合并组合成为一完整的可执行程序。一个编译器可以执行以下所有的或是部分的动作:语汇分析(lexical analysis)、前置处理(preprocessing)、语法分析(parsing)、语意分析(semantic analysis)、程序码产生(code generation)、以及程序码最佳化(code optimization)。
调整编译器的输出以最小化或最大化所产生的可执行程序的一些属性,其所需要的程序,一般称为程序码最佳化。最常见的一些程序码最佳化的目的,举例来说,是将执行程序所需的时间最短化,或是将执行程序所要占用的存储器量最小化。编译器最佳化(compiler optimization)通常是以一连串的最佳化转换(optimizingtransformation)来实现。每个最佳化转换其实都是一种演算法(algorithm),可以将一个程序转换成语意上等同且占用比较少资源的另一个程序。
一种将可执行程序最佳化的已知作法,是让编译器对当下编译的单一目的档,在编译的过程中,施行所有的最佳化转换。举例来说,一些编译器所执行的最佳化操作包含有,基础类别结合(base binding)、函数复制(function cloning)、以及部份求值(partial evaluation)。
然而,以上所述的方法,每个目的码档案都是个别地被编译器编译而产生,所以都会碰到无法全域地知道整个程序状况的问题。这也意味着,许多在编译过程中执行的最佳化转换操作,其实是需要一些在连结许多个目的码档案时才能够获悉的资讯。因此,尽管一编译器可以仰赖某一部分特别片段资讯来执行一最佳化转换操作,此编译器无法得知并利用整个程序的总体特性(举例来说,操作码的分布情形、指令序列出现的频繁程度等),来达到真正的最佳化。
连结时间最佳化(link-time optimization),其施行的时机在于当程序的总体特性为已知,在连结操作时,对被编译的程序进行处理的一种已知程序最佳化方案。因为连结的主要目的是要连结并合并所有的目的码档案,以成为一单一可执行档案,所以此时可以得知整个程序的总体特性。连结时间最佳化可以对新连结成的档案,进行各式各样的最佳化处理。连结时间最佳化也可牵涉到重新编译整个程序,只不过,这样的方式将会消耗大量的运算处理。
另一种已知的最佳化方案称为跨程序最佳化(interprocedural optimization,IPO),其亦有能力分析整个程序。IPO采用一些传统的最佳化技巧,像是”行内化”(inline)程序、跨程序死码删除(interprocedural dead code elimination)、跨程序常数传递(constant propagation)、程序重组(procedure reordering)等等技巧,来尝试降低或是删除掉重复出现的运算、改善存储器的使用、并简化回圈步骤。IPO的动作可以在编译过程中的任何一个阶段进行,也可以当作连结时间最佳化的一部分。
以上这些最佳化方案,都无法同时兼顾到1)快速的编译时间与连结时间;以及2)较积极的程序总体最佳化。
发明内容
在此所揭示的技术提供了对一程序码库(code base)进行离线静态分析的技术,来建立专为那程序码库所特制的一编译器以及一些工具。先前技术中的最佳化方案往往因为缺乏该程序码库的总体资讯,所以无法有效地发挥效能。如果采用比较积极的最佳化方案,已知技术也会遭受过长的编译时间的问题。本发明在此所揭示的技术,可以让此程序码库的一些总体资讯可以在编译过程中,早点被采用,以便让最佳化比较可能有更好的结果。举例来说,可以在暂存器配置之前,就先找出一些共用的子序列,这样,子序列才可能可以再利用;否则,因为这些共用子序列使用了不同的暂存器,将会被认为是不同的子序列。当先前技术已经到了极限时,本发明所提供的技术可能可以更进一步地缩小所产生的目的码档案大小。
举例来说,编译器编译当下程序码库的建构过程中,编译器内的工具链(toolschain)会产生许多讯息,而静态自动分析依据这些资讯,来找出当下程序码库中,一些可以重复使用的码样式(pattern)。以通用公共授权条款(GNU)的编译器套件(GNU compiler collection)为例,静态自动分析先找出一些共用序列,然后产生组合源码(assembler source code)、区间程序码样式(peephole pattern)、以及C语言支援源码,其中,组合源码将给予库存函数(library functions)所使用,区间程序码样式将会用来检测应用程序码中的子序列(subsequence code)。静态自动分析程序收集这些资讯,来建构一些特制化的编译组件。这些特制化编译组件可以用来重建既有的编译器与编译程序库。
此外,静态自动分析程序也收集函数呼叫行的位置与出现次数的相关资料,以及一些在之后编译过程中可能可以用来协助判定的一些程序架构资讯。
在之后的编译过程中,这个特制的编译器,可供找出共用序列的出现位置,针对这些共用序列发出对应的程序库呼叫,并且运用既有的最佳化动作,来持续地最佳化编译程序库呼叫中的程序码档案。
这种在编译过程中找出可重复使用的码样式的方法,对于整个编译与连结时间上,仅仅会增加一点点的时间成本;但是,这方法却可以让码样式的比对,能够脱离暂存器配置所可能产生的限制。当下程序库码的基础架构,可以用来做码样式的辨认,以及更进一步的最佳化。
附图说明
图1显示已知一编译程序的流程图。
图2显示依据本发明所实施的一编译程序流程图。
图3为整个程序的静态分析的流程图。
图4显示编译器重建的流程图。
主要元件符号说明
100        编译程序
110        原始码档案
120        编译器
130、140   目的码档案
150        连结器
160        连结时间最佳化
170        可执行程序
200        编译程序流程
210        原始码档案
220        最佳化编译器
230        中介表示
240        静态分析
250        特制函数程序库
260        特制化编译组件
270        最佳化编译器重建程序
280        目的码档案
285        连结器
290        可执行程序
310        语法分析器
320        共用子序列
330        子序列库
340        程序码转换规则
350        最佳化动作效果检查
360        快速模式管理程序
410        手写程序码转换规则
420        指令集架构叙述
430        机械语法分析器
440        客制化编译组件
450        手写原始码
具体实施方式
本发明提供了对一程序码库(code base)进行离线静态分析的技术,可以让此程序码库的总体资讯提早在编译过程中被采用,以改善最佳化的结果。离线静态分析可以产生一些特制化编译组件,以便用来重建编译器。这样,随着时间的演进,就可以得到专为此程序码库所特制的一编译器。此编译器在每次建构完成后,都会得到比较好的最佳化效果,而且也能继续保持有效率的编码时间。当然的,重新建构与产出此编译器的流程,需要定期地、周期性地执行,如此,才能够随着此程序码库的改变或演变,有机会来定期地更新此程序码库的总体资讯。
图1显示已知一编译程序100的流程图。编译一个软件程序时,传统上是让软件程序的每个原始码档案110,或是每个用原始码格式所撰写的物件,个别地经过编译器120编译成相对应的一个处理器可执行的原生或是机械码档案,也就是一个目的码档案130。接着,连结器150可以运用连结时间最佳化160,来接手处理这些目的码档案130与140,把他们连结在一起以成为一可执行程序170。然而,这样传统的编译器并无法宏观地知道或是运用整体程序的全域特性(global property),因为每个目的码档案都是个别地被编译器编译而产生。尽管连结器能够看到整个程序在编译后的全域特性,要运用这样全域特性来最佳化程序码的话,可能需要重新编译,让最佳化动作变得非常多且复杂。
图2显示依据本发明所实施的一编译程序流程200,其中有采用整体程序分析的编译程序以及对编译器重新建构。整体程序分析用来产生一的特制的编译器,特别适用于当下的稳定程序库码。而这个编译器可以当作下一次程序码开发程序循环中所使用的最佳化编译器。
在每一次程序码开发程序循环中,最佳化编译器220编译原始码档案210,而且最佳化编译器220也会收集关于原始码档案的一些可以在之后用来最佳化目的码档案的资讯,像是语意、结构、流程等等资讯。编译器产生编译后的目的码档案280,也产生了对应目的码档案280的,被编译后编码的中介表示230。中介表示230是原本的原始码档案的一种编译结果,只是其所使用的程序语言与适用的硬件,跟原本的原始码档案所使用的不一样。
在本发明的一实施例中,中介表示230使用的程序语言是GCC暂存器转换语言(Register Transfer Language,RTL)。以GCC RTL实现较高阶程序语言指令时,GCC RTL详细说明了所需要的操作、暂存器之间的通讯以及相关步骤发生的时间点。这种以RTL表示,经由整个程序库码编译后所产生的中介表示,将会作为整个程序的静态分析240的输入。在其他实施例中,中介表示所采用的程序语言,将会视原始码档案的程序语言,以及所要特制的编译器的需求而决定。
整体码库的全部程序的静态分析240是在编译器具有全域视野的时候执行。这个自动化分析从中介表示230中找出一些共用序列(common code sequences),决定用来代表每个共用序列的”辞库”,或是一组最有效率的组合,以使整个程序的大小最佳化。全部程序的静态分析240接着产生组合源码(assembler source code)以及程序码转换规则(code transformation specifications)。组合源码用在特制化的函数程序库250中,以运用共用子序列。程序码转换规则是以特制化编译组件260的形式所构成。特制化函数程序库250跟编译组件260中都有程序序列的外显资讯(explicitknowledge)。这些外显资讯为被预期存在于程序码库中。特制化函数程序库250会用来扩增连结器程序库(linker libraries)。之后,在下次的编译循环,当连结器285连结编译后的目的码档案280时来产生一完整的可执行程序290时,连结器285将使用这更新过的连结器程序库。
特制化编译组件260具有区间程序码转换规则(peephole code)以及指令样式(instruction patterns)。这些特制化编译组件260用来重建特制化的编译器(步骤270),使此最佳化编译器220可以立即的辨识出、并置换程序码库中所出现的共用子序列。所以,在之后对于程序码库的原始码档案210的编译循环过程中,此被重建的特制化编译器220被当作最佳化的编译器对程序码库中的原始码档案210进行编译。
图3为整个程序的静态分析240的流程图,用来产生特制化编译组件。语法分析器(parser)310会将编译器的中介表示230重整,以符合之后可以运用的一种格式。共用子序列320可以采用既有的演算法来辨识出来,以便缩小容纳整个可执行程序所需要的存储器大小。举例来说,演算法可以采用S.Liao and Kurt Keutzler在1998年所发表的"Code Density Optimization for Embedded DSP Processors UsingData Compression Techniques”。另外,子序列库程序(subsequence library routines)以及具有呼叫那些程序的程序内文,也可用一样的技术辨识出来。如此,就可以产生由共用子序列320所构成的集合或是”辞库”,而且以中介表示的程序语言来表示。因为这个过程只有在要重新建构特制化编译器的当下才会执行,所以可以采用比较积极,甚至比较耗时的最佳化技巧,来找出最理想辞库。
如同"Code Density Optimization for Embedded DSP Processors Using DataCompression Techniques”中所提及的,选择最理想辞库这样的问题,可以视为集合涵盖程度的问题(set cover problem)的一种。尽管这样的问题之前已经有在程序压缩的文献中采用线性规划放松模型(linear programming relaxation)来解决,也可能可以用其他比较耗损处理器时间的方法,来找出最理想辞库。
本发明的实施例可以采用基因演算法(Genetic algorithm)的技巧,来找出最理想的辞库。举例来说,Wen-Chih Huang,Cheng-Yan Kao and Jorn-Tzong Horng所发表的"A Genetic Algorithm Approach for Set Covering Problems"。对一些程序库码而言,本发明的一实施例也可以采用分支界定法(branch-and-bound)的技巧,来作为找出最理想辞库的一种解法。
对于每一个共用子序列,实现这共用子序列的组合语言码被产生出来,然后放置在子序列库(subsequence library)330中。这子序列库(subsequence library)330之后会加到连结器所使用的连结器程序库(linker libraries)中,用来扩增连结器程序库(linker libraries)。程序码转换规则(code transformation specifications)与编译程序库请求(library call)也产生出来。程序码转换规则(code transformation specifications)340指出在甚么样的条件下,程序样式符合了共用子序列的样式。编译程序库请求则是用来取代共用子序列。
任何出现在连结器程序库(linker libraries)中,但是最后可能因为程序库码的变更等原因,而没有被用到的子序列,将在连结时间(link time)终了时,用一般的连结器函数删除(linker function elimination)方法,从连结器程序库中移除。
程序码转换规则有两个主要部分:样式部分(pattern component)以及取代样式部分(replacement pattern component)。“样式部分”是参数化后的片段中介表示码,与部分程序码的中介表示表示码相匹配(match)。当碰到样式毋须完全吻合的情况(举例来说,在指令中对于暂存器的选择是否相同),则没有吻合的部分以语意等同的“中介表示匹配表示”取代。“取代样式部分”也是参数化后的片段中介表示,其详细描述用来取代上述符合样式匹配条件的程序码的指令;每当样式毋须完全吻合的情况发生于程序码库被编译的过程中,此“取代样式部分”则被使用。参数化的用意在于,在取代的过程中,使得程序码中符合该“匹配表示”的元件在替换的程序码中被提及。
以下显示以简化的RTL表示的程序码转换样式的一个例子。
Figure BDA00002139629800081
只要把这样的规则加入本发明实施例的特制化的编译器,当这编译器找到了一个平移指令(shift)接着一加法指令(add),而这加法指令把平移指令的结果加上某个值,那么,编译器将会认定样式匹配条件成立,相关的指令会被替代掉。
在取代转换发生时的中介表示码大致跟程序码转换样式类似,只是其中的"match_operand"与"match_dup"的条件叙述式会以暂存器中真正的运算元(operand)来替代。举例来说,以下为某一转换:
这些程序指令将转换成
(set(reg:SI r4)
(call"generated_function_shift_add"(reg:SI r4)(reg:SI r3)(reg:SI r5)))
在一般正常编译程序将中介表示转换成组合语言之后,如果其中有辨认出共用子程序可以用来当作样式,子序列库(subsequence library)就会被产生出来。所产生的子序列库中,每一个被辨认的共用子程序可以配置于一个自己的段落,以使得连结器函数删除方法可以移除掉没有被使用的子序列。子序列库的使用可以透过编译器的一些设定编译的选项来控制,启用编译器的样式辨认,并用子序列库来扩增连结器程序库。多个子序列库可以组合在一起来扩增一个官方发表的程序库工具(atools release),每一个子序列库可以透过一个旗标(flag)来控制。
在本发明的另一个实施例中,程序码库中,函数呼叫行(function call site)的讯息可以用来预测某一个函数在编译的过程中可能被呼叫了几次。这样的讯息可以用来决定是否把那函数”行内化”(inline);也就是编译时把那函数直接展开来,不传递主控权。在先前技术中,在一函数被呼叫一次,且这函数有效的范围(或称为可视范围)局限于单一个编译单元时,这函数会被行内化。编译器220行内化(或是展开)这个函数,而不保留它为独立函数的决定,是因为行内化后,将会增加执行的效能,且不会增加整个程序码长度大小。但是,先前技术一般并没有办法对有效范围达全域的函数来进行行内化,因为编译并没有整个程序码库中,所有函数呼叫行的资讯。
本发明的一实施例所揭示的技术,可以移除这先前技术的限制。举例来说,如果整体程序的静态分析240所得到的先验知识(a-priori knowledge)指出,某一个可以被其他编译单元所呼叫的全域函数,碰巧在整个程序码库中只被呼叫一次,那就可以决定来行内化此全域函数,而不会增加编译后整个程序码长度大小。因此,适当地使用从整个程序码库所得到先验知识,就可以使最佳化编译器220有机会去行内化这些函数,此部分先前技术会忽略不做。
在本发明的另一个实施例中,从整个程序码库所得到的先验知识,可以用来加速编译流程。最佳化编译器220一般会依序执行许多最佳化动作(optimizationpasses)。一般来说,每个最佳化动作是先分析当下的程序码;然后依据分析的结果,对当下程序码做适当的转换。在整个程序的静态分析240的过程中,所输出的中介表示可以包含有最佳化编译器220所执行的每个最佳化动作的历史记录,而包含此历史记录的输出可以用来分析是否每个最佳化动作对于当下的程序码库具有影响。分析的结果可以收录在特制化编译组件260中,以便在编译器的重建过程时,提供一种快速模式,其使得没有效果的一些最佳化动作被省略而不执行。
运用最佳化编译器220所输出的中介表示中的历史记录,可以找出一个函数的中介表示在经历每一个最佳化动作之前与之后的变化,来判定最佳化动作是否具有影响。最佳化动作比较流程350就是执行这判别动作。如果某一个最佳化动作没有影响,就在一最佳化动作表列上做个记号。快速模式管理程序360可以使用这个最佳化动作表列,对每个最佳化动作达到一看管功能。举例来说,在快速模式时,看管功能可以使预计为没有影响的最佳化动作被直接跳过而不执行。这样的看管功能可以收纳在特制化编译组件260中,然后在后续重建编译器时,也放在特制的最佳化编译器中。
图4显示编译器重建的流程图。程序码转换规则(transformationspecification)340收录在特制化编译组件260中,作为特制的最佳化编译器重建程序270的输入。转换规则340、看管程序码(guard code)360、手写程序码转换规则(hand-written code transformation)410、以及指令集架构叙述(instruction setarchitecture description,ISA)420都经由GCC安装工具(GCC build system)中的机械语法分析器(machine description parser)430处理,来产生以C语言表达的客制化编译组件440。接着,客制化编译组件440跟编译器的手写原始码450一起被编译、连结,以重建最佳化编译器(步骤270)。最佳化编译器重建(步骤270)后,可以在之后的编译程序中使用,作为最佳化编译器220,以便最佳化所产生的执行档。因为特制的最佳化编译器220已经预先知道整个程序码库的外显资讯,而且使用特制函数程序库250,就可以直接找到正确的程序码,所以,特制的最佳化编译器220的执行速度,将会比执行内部程序最佳化(interprocedural optimisation)或连结时间最佳化(link time optimisation)来的快速。
以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。

Claims (20)

1.一种编译系统,用以编译在一程序码库中的一原始码档案,该编译系统包含有:
一最佳化编译器,为该程序码库而特制,编译该原始码档案,以输出多个目的码档案以及据以产生一中介表示;以及
一程序分析器,用以分析该中介表示,以获得并储存该程序码库的多个特性以用于该程序码库的一后续编译程序中。
2.如权利要求1所述的编译系统,其特征在于,该程序码库的这些特性包含有关于多个共用子序列的资讯,这些共用子序列于该程序码库中出现了许多次。
3.如权利要求2所述的编译系统,其特征在于,另包含有:
一连结器,将这些目的码档案连结,而产生一可执行程序,且该连结器包含有多个连结器程序库。
4.如权利要求3所述的编译系统,其特征在于,由该程序分析器所产生有关于这些共用子序列的该资讯另用以产生一特制化函数程序库,其实行这些共用子序列,以及,于该后续编译程序中,该连结器采用该特制化函数程序库以及这些连结器程序库,以连结这些目的码档案。
5.如权利要求4所述的编译系统,其特征在于,另包含有由该程序分析器所产生的多个特制化编译组件,用来找出该原始码档案中的这些共用子序列,其中,这些特制化编译组件被用来更新该最佳化编译器,以便于该程序码库的该后续编译程序中使用。
6.如权利要求1所述的编译系统,其特征在于,该程序码库的这些特性包含有关于多个最佳化动作的历史记录,该历史记录被该程序分析器所分析供决定每一个最佳化动作是否对该程序码库中的多个函数中的任何一个具有影响。
7.如权利要求6所述的编译系统,其特征在于,依据每一个最佳化动作是否对该程序码库中的至少一个函数具有影响,该最佳化编译器决定是否跳过任何一个最佳化动作。
8.如权利要求1所述的编译系统,其特征在于,这些特性包含有多个函数呼叫行所在位置的资讯,这些函数呼叫行呼叫该程序库码中数个函数的至少其中之
9.如权利要求8所述的编译系统,其特征在于,在该最佳化编译器编译该程序码库中的这些函数时,该最佳化编译器使用该多个函数呼叫行所在位置的该资讯,来决定是否将至少一函数采用行内化方式编译。
10.一种编译方法,用以编译在一程序码库中的一原始码档案,该编译方法包含有:
利用为该程序码库而特制的一最佳化编译器,来编译该原始码档案,并据以产生一中介表示;以及
分析该中介表示,以获得并储存该程序码库的多个特性
以用于该程序码库的一后续编译程序。
11.如权利要求10所述的编译方法,其特征在于,另包含有:
从这些特性中获得多笔可重复使用的资源;以及
以这些可重复使用的资源,在一后续编译程序中,最佳化被编译后产生的一目的码。
12.如权利要求11所述的编译方法,其特征在于,另包含有:
依据这些可重复使用的资源,重建该最佳化编译器,以用于该后续编译程序。
13.如权利要求11所述的编译方法,其特征在于,这些可重复使用的资源包含有关于多个共用子序列的资讯,这些共用子序列于该程序码库中被发现了许多次。
14.如权利要求13所述的编译方法,其特征在于,该最佳化步骤包含有:
找出该程序码库中的这些共用子序列;以及
最佳化被编译后产生的该目的码的大小。
15.如权利要求13所述的编译方法,其特征在于,另包含有:
从编译该原始码档案的过程中,输出多个目的码档案;以及
连结这些目的码档案,以产生一可执行程序。
16.如权利要求15所述的编译方法,其特征在于,该连结步骤另包含有:
采用一特制化函数程序库以及一连结器程序库,来连结这些目的码档案;
其中,该特制化函数程序库采用这些共用子序列。
17.如权利要求10所述的编译方法,其特征在于,另包含有:
产生关于多个最佳化动作的历史记录;以及
分析该历史记录,来决定每一个最佳化动作是否对该程序码库中的多个函数中的任何一个具有影响。
18.如权利要求17所述的编译方法,其特征在于,另包含有:
依据该分析步骤的结果,决定是否跳过这些最佳化动作中的任何一个。
19.如权利要求10所述的编译方法,其特征在于,这些特性包含有多个函数呼叫行所在位置的资讯,这些函数呼叫行呼叫该程序码库中多个函数的至少其中之一。
20.如权利要求19所述的编译方法,其特征在于,另包含有:
在该最佳化编译器编译该程序码库中的这些函数时,使用该多个函数呼叫行所在位置的该资讯来决定是否将至少一函数以行内化方式编译。
CN201210342636.5A 2012-07-18 2012-09-14 编译系统以及编译方法 Expired - Fee Related CN103577241B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
EP12176842.8A EP2687981B1 (en) 2012-07-18 2012-07-18 Automated compiler specialisation for global optimisation
EP12176842.8 2012-07-18

Publications (2)

Publication Number Publication Date
CN103577241A true CN103577241A (zh) 2014-02-12
CN103577241B CN103577241B (zh) 2017-05-17

Family

ID=46545274

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210342636.5A Expired - Fee Related CN103577241B (zh) 2012-07-18 2012-09-14 编译系统以及编译方法

Country Status (4)

Country Link
US (1) US9552193B2 (zh)
EP (1) EP2687981B1 (zh)
CN (1) CN103577241B (zh)
TW (1) TWI463404B (zh)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103984558A (zh) * 2014-05-30 2014-08-13 深圳市中兴移动通信有限公司 一种Web项目的自动构建装置及方法
US9569335B1 (en) * 2015-10-07 2017-02-14 Sap Se Exploiting software compiler outputs for release-independent remote code vulnerability analysis
US9727317B2 (en) 2015-11-04 2017-08-08 International Business Machines Corporation Optimized compilation using an auto-tuned compiler as a service
US10061571B2 (en) * 2015-11-16 2018-08-28 Qualcomm Innovation Center, Inc. System and method for link time optimization
US10133559B2 (en) * 2016-06-03 2018-11-20 International Business Machines Corporation Generating executable files through compiler optimization
JP2018041373A (ja) * 2016-09-09 2018-03-15 オムロン株式会社 実行可能プログラム作成装置、実行可能プログラム作成方法、および、実行可能プログラム作成プログラム
CN110119274A (zh) * 2018-02-05 2019-08-13 北京智明星通科技股份有限公司 一种数据编译的方法、装置以及电子终端、计算机可读存储介质
TWI696948B (zh) * 2018-05-30 2020-06-21 臺灣發展軟體科技股份有限公司 編譯器最佳化方法
US10664251B2 (en) 2018-10-05 2020-05-26 International Business Machines Corporation Analytics driven compiler
US10956137B2 (en) 2019-06-10 2021-03-23 International Business Machines Corporation Compiling source code using source code transformations selected using benchmark data
US11720340B2 (en) 2019-07-30 2023-08-08 Hewlett-Packard Development Company, L.P. Hash map of executable control blocks
US11238138B1 (en) * 2019-11-08 2022-02-01 BlueOwl, LLC Systems and methods to facilitate authorization key obfuscation validation
US11442845B2 (en) * 2020-12-07 2022-09-13 Diffblue Ltd Systems and methods for automatic test generation
US11847435B2 (en) * 2021-12-20 2023-12-19 International Business Machines Corporation Feedback-directed pass pipeline optimization in static compilation

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1637708A (zh) * 2003-12-22 2005-07-13 松下电器产业株式会社 编译方法、编译装置及编译程序
US20080120493A1 (en) * 2006-11-17 2008-05-22 Samsung Electronics Co., Ltd. Profiler for optimizing processor architecture and application
CN101751281A (zh) * 2008-12-10 2010-06-23 国际商业机器公司 编译器生成系统和方法

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1992015942A1 (en) * 1991-02-27 1992-09-17 Digital Equipment Corporation Analyzing inductive expressions in a multilanguage optimizing compiler
US5999734A (en) * 1997-10-21 1999-12-07 Ftl Systems, Inc. Compiler-oriented apparatus for parallel compilation, simulation and execution of computer programs and hardware models
US6308320B1 (en) * 1999-01-15 2001-10-23 Hewlett-Packard Company Method and apparatus for incremental selective compilation of intermediate code files during computer system compilation and linking
US6983459B1 (en) * 1999-04-06 2006-01-03 International Business Machines Corporation Incorporating register pressure into an inlining compiler
US6823507B1 (en) * 2000-06-06 2004-11-23 International Business Machines Corporation Detection of memory-related errors in computer programs
US7356802B2 (en) * 2003-09-29 2008-04-08 International Business Machines Corporation Automatic customization of classes
US20050125783A1 (en) * 2003-12-09 2005-06-09 Texas Instruments Incorporated Program optimization with intermediate code
TWI306215B (en) * 2005-04-29 2009-02-11 Ind Tech Res Inst Method and corresponding apparatus for compiling high-level languages into specific processor architectures
US7844957B2 (en) * 2005-08-19 2010-11-30 Sybase, Inc. Development system with methodology providing optimized message parsing and handling
US8910113B2 (en) * 2009-09-22 2014-12-09 Adobe Systems Incorporated Methods and systems for visual code refactoring
US20120089962A1 (en) * 2010-10-08 2012-04-12 International Business Machines Corporation Unchanged Object Management

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1637708A (zh) * 2003-12-22 2005-07-13 松下电器产业株式会社 编译方法、编译装置及编译程序
US20080120493A1 (en) * 2006-11-17 2008-05-22 Samsung Electronics Co., Ltd. Profiler for optimizing processor architecture and application
CN101751281A (zh) * 2008-12-10 2010-06-23 国际商业机器公司 编译器生成系统和方法

Also Published As

Publication number Publication date
TWI463404B (zh) 2014-12-01
US9552193B2 (en) 2017-01-24
TW201405424A (zh) 2014-02-01
US20140026127A1 (en) 2014-01-23
EP2687981B1 (en) 2017-12-27
EP2687981A1 (en) 2014-01-22
CN103577241B (zh) 2017-05-17

Similar Documents

Publication Publication Date Title
CN103577241A (zh) 编译系统以及编译方法
CA2288614C (en) Loop allocation for optimizing compilers
JP4823075B2 (ja) 最適化コードの自動発生システム
CN100465895C (zh) 编译器、编译方法
US20060123401A1 (en) Method and system for exploiting parallelism on a heterogeneous multiprocessor computer system
US20080104096A1 (en) Software development system
US20080250231A1 (en) Program code conversion apparatus, program code conversion method and recording medium
US20100083237A1 (en) Reducing trace overheads by modifying trace operations
EP0428560A4 (en) Machine process for translating programs in binary machine language into another binary machine language
US20110126179A1 (en) Method and System for Dynamic Patching Software Using Source Code
JPH11306026A (ja) コード最適化装置、コード最適化方法、及び、コード最適化プログラムを記録したコンピュータ読み取り可能な記録媒体
US20060048122A1 (en) Method, system and computer program product for hierarchical loop optimization of machine executable code
Chen et al. A refined decompiler to generate C code with high readability
US8037463B2 (en) Computer program functional partitioning system for heterogeneous multi-processing systems
US9507594B2 (en) Method and system of compiling program code into predicated instructions for execution on a processor without a program counter
US7478376B2 (en) Computer program code size partitioning method for multiple memory multi-processing systems
JPH0926884A (ja) バイナリ操作を必要とするタスク中に必要なフロー情報を使用可能とする方法および装置
KR100532467B1 (ko) 서로 다른 버전에서 생성된 디버깅 정보 파일들을 이용한소스 코드 레벨 디버깅을 제공하는 엠시유 응용프로그램검증 시스템 및 그 방법
US20170206068A1 (en) Program optimization based on directives for intermediate code
CN116382700A (zh) 面向vliw和simd架构的编译器自动调试方法及系统
Peng et al. Transforming GCC into a research-friendly environment: plugins for optimization tuning and reordering, function cloning and program instrumentation
JP2007226589A (ja) プログラム変換システム
Cheung et al. Predicated instructions for code compaction
Haine et al. Exploring and evaluating array layout restructuring for simdization
CN117472388B (zh) 一种优化程序性能的方法、系统及相关设备

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20170517

Termination date: 20190914

CF01 Termination of patent right due to non-payment of annual fee