CN1752934A - 编译器、编译方法以及编译程序 - Google Patents

编译器、编译方法以及编译程序 Download PDF

Info

Publication number
CN1752934A
CN1752934A CN200510105134.0A CN200510105134A CN1752934A CN 1752934 A CN1752934 A CN 1752934A CN 200510105134 A CN200510105134 A CN 200510105134A CN 1752934 A CN1752934 A CN 1752934A
Authority
CN
China
Prior art keywords
code
intermediate code
branch
execution route
variable
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
CN200510105134.0A
Other languages
English (en)
Other versions
CN100465895C (zh
Inventor
田中旭
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.)
Socionext Inc
Original Assignee
Matsushita Electric Industrial Co Ltd
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 Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Publication of CN1752934A publication Critical patent/CN1752934A/zh
Application granted granted Critical
Publication of CN100465895C publication Critical patent/CN100465895C/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/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis

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)

Abstract

本发明涉及一种编译器,其转换具有多执行路径的程序以扩展指定执行路径的基本程序块同时维持程序的完整性。该编译器产生新的基本程序块B103和B104。基本程序块B104由(i)通过替换热路径200中的局部源程序(基本程序块B1-B7)中的替换目标变量产生的语句,和(ii)通过修改热路径200中的分支指令产生的包括用于执行热路径的分支条件的分支指令构成。基本程序块B103由用于将替换目标变量恢复为恢复目标变量的语句。然后如果在基本程序块B103中的分支指令为真,则转换该源程序以执行基本程序块B104后的基本程序块B103,如果为假则执行基本程序块B1。

Description

编译器、编译方法以及编译程序
本申请以在日本提交的申请号为2004-275573的专利申请为基础,在此引入其内容作为参考。
技术领域
本发明涉及编译器,尤其涉及一种用于提高执行速度的优化编译技术。
背景技术
通常,为了提高安装在处理大量数据的计算机系统中的程序性能,使用优化的编译器来优化该程序以缩短程序执行时间。
一种优化方法为重新排列程序语句以提高执行效率的指令调度。
在进行优化时,编译器分析集中于分支和分支对象的程序控制流以将程序划分为称作基本程序块的单元。基本程序块为不包括分支和合并的连续语句序列,并因此从头到尾顺序执行。然而,各基本程序块在其末端均包含分支。
由于基本程序块在中间不包括分支和合并,因此可以容易地执行各基本程序块内部的指令调度。然而,应该注意在基本程序块内部的局部优化仅能产生有限的效果。为此,希望扩大基本程序块,使得指令调度可以发生在程序的更宽范围内。
对于包含多分支的程序,应该知道哪一条执行路径经常执行(以下将该执行路径称为“热路径”)。根据公知方法,移动热路径上的语句以扩展基本程序块,从而提高热路径的执行效率(参见Ikuo NAKATA于2004年福冈出版社出版的“编译器结构及优化”,第358-381页)。
这里,以图5A所示的程序为实施例说明如何扩展存在于热路径中的基本程序块。图5A所示为局部程序,而图5B示出了表示控制流程的程序控制流程图。在图中,连接基本程序块B1-B7的端部为分支和合并。在该实施例中,通过顺序连接基本程序块B1、B2、B4、B5和B7的虚线200所示的执行路径为热路径。
如图6所示,将包括在基本程序块B4中的语句S8转移到基本程序块B2中。接下来,对于从基本程序块B3到基本程序块B4分支出来的路径,通过复制语句S8产生语句S81并将其插入到基本程序块B3中(图7)。通过该结构,将存在于热路径中的基本程序块B2扩展而同时维持了程序的完整性。
然而,在图8所示的将语句10从基本程序块B5转移到基本程序块B2的情况中存在问题。假设执行路径为顺序的沿着基本程序块B1、B2和B4,并且在基本程序块B4中的语句S9的分支条件为假。在这种情况下,在基本程序块B6中由语句S12参考的变量“a”的值必须保持在基本程序块B1中由语句S1确定的值。然而,变量“a”保持由已经转移到基本程序块B2的语句S10确定的值。因此,不能保持程序的完整性。
如上所述,会存在如果越过其最后语句为分支指令的基本程序块而转移语句,则不能确认程序中的数据从属性的情况。在该情况下,语句的重新排列受限制并因此不能扩展基本程序块。
发明内容
根据上述问题,本发明旨在提供一种在维持程序完整性的同时允许扩展指定执行路径中的基本程序块的编译器。
根据本发明的一方面,提供了一种用于将包括分支指令的源程序转换为由目标代码行构成的目标程序的编译器。该编译器包括:用于指定源程序中包括分支指令的局部串指令(partial series of instruction)的多个执行路径其中之一的执行路径指定单元;用于产生至少包括与存在于指定执行路径中除分支指令以外的指令相对应的目标代码的执行路径代码的执行路径代码产生单元,该代码产生涉及通过另一变量替换需要在指定执行路径的入口点激活并且在指定执行路径上定义的变量;用于产生用来将需要在指定执行路径的出口点激活的各替换后变量恢复为原始变量的恢复代码的恢复代码产生单元;用于产生对应于局部串指令的局部代码的局部代码产生单元;以及用于基于存在于指定执行路径中的分支指令的分支条件产生分支代码的分支代码产生单元。如果分支条件为真,该分支代码从执行路径代码的末端引导到恢复代码的起始端,并且如果分支条件为假,会引起从执行路径代码的末端到局部代码的起始端的分支。
注意由于代码的顺序执行或分支使得该执行路径代码的末端通向恢复代码的起始端。
通过上述结构,存在于指定执行路径中的基本程序块得到扩展。因此,指令调度可以在代码的较宽范围内发生,从而更加有效执行优化。此外,通过上述结构,通过较高的优先权执行指定执行路径中的语句并且语句中不包括分支指令。因此,尤其在指定执行路径比其他路径使用频率更高时,可以提高执行路径代码的执行速度。
如上所述,根据本发明的编译器能够以提高频繁执行路径的执行速度的方式转换包括多执行路径的程序。由于具有该优点,该编译器得到广泛应用,诸如通过将其安装于包括数字家电的信息处理器件中。
这里,所述执行路径代码产生单元还用于将执行路径代码置于紧挨局部串指令起始端之前的串指令后的位置,所述恢复代码产生单元还用于将恢复代码置于紧随执行路径代码末端之后的位置并且用于将紧随局部串指令末端的串指令置于紧随恢复代码之后的位置。该分支代码产生单元还用于产生引起从局部代码末端到紧随局部串指令末端的串指令分支的分支代码。
通过上述结构,将新产生的执行路径代码连续地置于跟随除局部串指令之外的源程序之后。因此,在执行源程序时,可以有效的分配高速存储器。此外,由于在执行路径代码和源程序之间不存在分支,尤其在指定执行路径频繁采用时,可以提高整个程序的执行速度。
这里,所述编译器基于句法分析将源程序转换为中间码,并将中间码转换为目标程序,所述执行路径代码产生单元包括:用于基于句法分析通过包括在由局部串指令转换的局部中间码中的变量获得要替换的目标变量的变量信息获得子单元;执行路径中间码产生子单元,用于通过另一变量替换包括在中间码中的各目标变量来产生至少包括包含在局部中间码中并且与存在于指定执行路径中除分支指令以外的指令相对应的中间码的执行路径中间码;以及判断中间码产生子单元,用于将包括在执行路径中间码中的所有分支条件转换为用于采用指定执行路径的单分支条件并用于产生对分支条件作出判断的判断中间码。所述恢复代码产生单元包括用来产生用于将需要在指定执行路径的出口点激活的各替换后的变量恢复为原始变量的恢复中间码的恢复中间码产生子单元。所述分支代码产生单元包括:分支中间码产生子单元,如果判断中间码中的分支条件为假,用于产生引起向局部中间码的起始端分支的分支中间码;以及用于将局部中间码、执行路径中间码、判断中间码、恢复中间码和分支中间码转换为构成目标程序的可执行代码的可执行代码产生子单元。
通过上述结构,首先将源程序转换为中间程序,这样更易于编译器处理,从而更有效的产生可执行程序。此外,由于中间程序包括通过结合多个分支指令产生的单个分支指令,因此可以更有效的执行中间程序的优化。
这里,编译器可以基于句法分析将源程序转换为中间码,并将中间码转换为目标程序,该执行路径代码产生单元包括:用于基于句法分析通过包括在由局部串指令转换的局部中间码中的变量获得要替换的目标变量的变量信息获得子单元;执行路径中间码产生子单元,用于通过另一变量替换包括在中间码中的各目标变量来产生至少包括包含在局部中间码中并且与存在于指定执行路径中除分支指令以外的指令相对应的中间码的执行路径中间码;以及判断中间码产生子单元,用于单独的将包括在执行路径中间码中的各分支条件分别转换为用于采用指定执行路径的独立分支条件并用于产生对各自分支条件作出判断的单独判断中间码。所述恢复代码产生单元包括:用来产生用于将需要在指定执行路径的出口点激活的各替换变量恢复为原始变量的恢复中间码的恢复中间码产生子单元。所述分支代码产生单元包括:分支中间码产生子单元,如果各组判断中间码其中之一的分支条件为假,用于单独产生引起向局部中间码的起始端分支的多组分支中间码,并且如果所述分支条件为真,则通向恢复中间码的起始端;以及用于将局部中间码、执行路径中间码、判断中间码、恢复中间码和分支中间码转换为构成目标程序的可执行代码的可执行代码产生子单元。
通过上述结构,判断中间码产生子单元分别将各包括在执行路径代码中的分支条件转换为用于指定执行路径的单独分支条件并产生对于单独分支条件其中之一作出判断的单组分支中间码。因此,在该情况下,例如,在没有频繁采用指定执行路径的情况下,在程序执行的前期采用通向另一执行路径的分支。
这里,编译器具有用于顺序执行源程序的解释程序功能。该编译器还包括用于在采用解释程序功能的局部串指令执行期间通过收集关于采用的执行路径的信息提取频繁执行的路径的提取单元。该执行路径指定单元可以指定通过提取单元提取的执行路径。
通过上述结构,基于通过程序的实际执行获得的信息指定频繁采用的执行路径。因此,允许扩展存在于指定的频繁执行路径中的基本程序块。
这里,编译器优化通过局部代码产生单元、执行路径代码产生单元、恢复代码产生单元以及分支代码产生单元产生的目标代码。
通过上述结构,优化产生的目标程序以进一步提高执行速度。
附图说明
通过以下的说明以及结合本发明的具体实施方式的附图,将使本发明的这些和其它目的、优点和特征变得更加明显。
附图中:
图1所示为根据本发明实施方式的编译器的功能框图;
图2所示为编译器的操作流程图;
图3所示为通过变量信息计算单元121执行的变量信息计算处理流程图;
图4所示为通过执行路径中间码产生单元122执行的变量替换处理流程图;
图5A和5B所示为用于说明编译器操作的示意图;
图6为用于说明现有技术和通过本发明要解决的问题的示意图;
图7为用于说明现有技术和通过本发明要解决的问题的示意图;
图8为用于说明现有技术和通过本发明要解决的问题的示意图;
图9为用于说明编译器操作的示意图;
图10A、10B和10C所示为通过变量信息计算单元121计算的变量信息的结构和示例性内容,以及通过执行路径中间码产生单元122产生的变量对历史的结构和示例性内容;
图11为通过程序转换器120转换的程序控制流程图;
图12所示为在通过优化器12进行指令调度后的执行路径中间码示意图;
图13所示为根据本发明变型1的控制流程图;
图14所示为根据本发明变型2的控制流程图;
图15所示为在通过根据变型2的优化器12进行指令调度后的执行路径中间码示意图。
具体实施方式
根据本发明的第一实施方式,编译器(i)读取源程序,(ii)执行将源程序分为称作“词法标记”的符号序列的词法分析,(iii)基于词法标记执行构建句法树结构的句法分析,(iv)基于该句法树结构,产生以编译器所使用的一种具体中间语言编写的中间程序,(v)通过诸如指令调度等优化该中间程序并对变量分配诸如寄存器的资源,以及(vi)将该优化的中间程序转换为可执行程序。
结构
图1所示为根据本发明实施方式的编译器1的功能框图。
编译器1由诸如句法分析器11、优化器12、资源分配器13以及可执行代码产生器14等功能块构成。
具体地,通过通常由微处理器、只读存储器(ROM)、随机存储器(RAM)和硬盘构成的计算机系统实施该编译器1。所述ROM或者硬盘存储计算机程序。
通过微处理器执行计算机程序实施图1所示的编译器1的功能块。此外,该RAM和硬盘用来实现功能块的信息存储以及功能块之间的信息转移。
以下对各功能块进行说明。
句法分析器11读取源程序51,执行句法分析以确定源程序51的控制结构,产生由中间码行构成的中间程序,并在编译器1内存储该中间程序。该中间码表示具有等效控制结构的源程序并通过采用条件分支指令和标号产生。
优化器12包括程序转换器120。该优化器12对通过句法分析器11产生的中间程序执行控制流分析和数据流分析,并向程序转换器120发送该分析结果,这一点将在下文中详细描述。此外,优化器12在程序转换器120将中间码转换为可执行代码时执行优化。
这里提到的控制流分析为分析中间程序的控制流以将中间程序分为基本程序块的过程。另一方面,数据流分析为对于出现在程序中的变量,确定变量激活(alive)的部分、变量定义点以及变量参考(reference)点的过程。
注意这里以如下的意义使用变量的“定义”和对变量的“参考”等术语。
当语句更新其变量保持值时,称为该语句定义了该变量,并且称该语句为变量定义点。当语句使用该变量保持值时,称为该语句参考了该变量,并且称该语句为变量参考点。
接下来,对程序转换器120进行说明。
通常程序转换器120由变量信息计算单元121、执行路径中间码产生单元122、判断中间码产生单元123、恢复中间码产生单元124以及分支中间码产生单元125构成。
在从外界源接收给编译器1的热路径信息时,程序转换器120在其中存储该热路径信息并执行包括该热路径的子程序的程序转换。
该热路径信息由用户输入并表示由用户提前确定的执行路径。
变量信息计算单元121基于从优化器12接收的分析结果对各基本程序块计算活性(liveness)信息和定义信息。采用该活性信息、定义信息以及热路径信息,变量信息计算单元121得出路径入口变量、路径出口变量、替换目标变量以及恢复目标变量。将该得出的替换目标变量发送到执行路径中间码产生单元122,而将恢复目标变量发送给恢复中间码产生单元124。
对于根据控制流分析产生的各基本程序块,活性信息表示在基本程序块入口点(以下为“活性信息IN”)和在基本程序块出口点(以下为“活性信息OUT”)激活的变量。具体地说,活性信息IN表示在从各基本程序块的入口点限定的后处理程序以前参考的变量,而活性信息OUT表示在从各基本程序块的出口点限定的后处理程序以前参考的变量。定义信息(以下为“定义信息DEF”)表示在各基本程序块中定义的变量。
在由Addison Welsey出版公司于1986年出版的、由A.V.Aho、R.Sethi和J.D.Ullman编著的“编译器:原理、技术以及工具”一书,以及由SAIENSU-SHA有限公司于1990年出版的由Kenichi Harada翻译的日文版“编译器I和II”一书的第631-632页中可以找到关于变量活性的相似说明。
路径入口变量为在热路径的入口点的激活变量,即由热路径上第一基本程序块的活性信息IN表示的变量。路径出口变量为在热路径的出口点的激活变量,即由热路径上最后基本程序块的活性信息OUT表示的变量。
替换目标变量为在热路径上定义的路径入口变量。恢复目标变量既是替换目标变量又是路径出口变量。
执行路径中间码产生单元122读取存储在程序转换器120中的热路径信息52以及存储在编译器1中的中间程序。然后,通过替换从变量信息计算单元121发送的替换目标变量的标志符,该执行路径中间码产生单元122从包括部分读取的对应于热路径的中间程序的串语句中产生执行路径中间码。将该产生的执行路径中间码发送给判断中间码产生单元123。
这里,对替换目标变量标志符进行替换的过程进行说明。
执行路径中间码产生单元122通过不存在于变量表中的不同标识符替换该替换目标变量的标志符。每次发生变量替换时,执行路径中间码产生单元122使替换目标变量和用于替换该替换目标变量的变量配对(以下,将该对的替换之前和之后的变量称为“变量对”),并在程序转换器120中存储该变量对。注意通过收集在程序中声明的所有变量的标志符和类型信息的词法分析产生变量表。在编译器1内存储该变量表。
判断中间码产生单元123通过修改包括在从执行路径中间码产生单元122发送的执行路径中间码中的分支指令而产生包括用于执行热路径的分支条件的判断中间码。然后,判断中间码产生单元123将该判断中间码插入到该执行路径中间码中,从而在除分支指令以外的执行路径中间码之后执行判断中间码。在程序转换器120中存储得到的执行路径中间码。
恢复中间码产生单元124基于从变量信息计算单元121发送的恢复目标变量而产生用于将恢复目标变量的标志符恢复到原始标志符的恢复中间码。在程序转换器120中存储该产生的恢复中间码。
分支中间码产生单元125从程序转换器120读取插入在执行路径中间码中的判断中间码以产生分支中间码。在执行路径中间码执行以后,如果判断中间码的分支条件为真,则该产生的分支中间码引起执行恢复中间码,如果判断中间码的分支条件为假,则执行局部中间码。然后,该分支中间码产生单元125将分支中间码插入到执行路径中间码中,使得在判断中间码之后执行分支中间码。在程序转换器120中存储所得到的执行路径中间码。
资源分配器13读取产生的整个中间码。在从中间码产生可执行代码时,该资源分配器13基于出现在整个中间码中变量的活性信息进行诸如寄存器和存储器的硬件资源分配。
在资源分配后,可执行代码产生器14将整个中间码转换为以合适的机器语言编写的可执行程序53。然后将该可执行程序53输出到编译器1的外部。
数据
现在,对于实施方式中编译器1使用的数据进行说明。
图10A所示为由变量信息计算单元121对于图5B所示的控制流程图的各基本程序块计算的活性信息IN 302、活性信息OUT 304以及定义信息DEF303。
图10B所示为由变量信息计算单元121基于图10A所示的信息推出的路径入口变量401、路径出口变量402、替换目标变量403以及恢复目标变量404。
图10C所示为对于图9所示的控制流程图的各基本程序块的变量对产生历史示意图。如上所述,在对替换目标代码进行替换时通过执行路径中间码产生单元122产生各变量对。图9所示的控制流程图表示通过复制存在于图5B所示的热路径200中的语句并且对复制语句执行变量替换处理而由执行路径中间码产生单元122新产生的执行路径。
操作
接下来,参考图2所示的操作流程,主要对体现本发明技术特征的程序转换器120的操作进行说明。
注意,在该实施方式中,程序转换器120执行这里称作局部程序的子程序。该子程序包括共用单个入口点和单个出口点的多条执行路径。
首先,句法分析器11在接收时对局部程序进行句法分析,产生对应于局部程序的局部中间码,并在编译器1中存储产生的局部中间码。(步骤11)
接下来,在输入热路径信息52(图1)时,程序转换器120在其中存储该热路径信息。(步骤12)
接着步骤12,优化器12读取局部中间码,执行控制流分析和数据流分析以产生并向变量信息计算单元121发送该分析结果。基于该分析结果,变量信息计算单元121对于局部程序的各基本程序块计算活性信息IN、活性信息OUT以及定义信息DEF。(步骤13)
接下来,基于在步骤13计算的活性信息IN、活性信息OUT和定义信息DEF以及在步骤12接收的热路径信息,变量信息计算单元121得出路径入口变量、路径出口变量、替换目标变量以及恢复目标变量。该变量信息计算单元121向执行路径中间码产生单元122发送替换目标变量并向恢复中间码产生单元124发送恢复目标变量。(步骤14)
接着步骤14,执行路径中间码产生单元122读取热路径信息和局部中间码,复制对应于局部中间码的热路径的语句,并通过对替换目标变量的标志符进行替换而修改该复制语句以产生执行路径中间码。将该产生的执行路径中间码发送给判断中间码产生单元123。(步骤15)
在接收到执行路径中间码时,判断中间码产生单元123通过将包括在执行路径中间码中的分支条件修改为用于执行热路径的分支条件而产生判断中间码。然后该判断中间码产生单元123将判断中间码插入到执行路径中间码中,使得该判断中间码在除分支指令之外的执行路径中间码语句之后执行。在程序转换器120中存储所得的执行路径中间码。(步骤16)
接下来,恢复中间码产生单元124产生用于恢复从变量信息计算单元121接收的恢复目标变量的恢复中间码,并在程序转换器120中存储该恢复中间码。(步骤17)
在步骤17之后,分支中间码产生单元125读取存储在步骤16中的执行路径中间码,产生分支中间码,并将该分支中间码插入执行路径中间码中。在判断中间码执行后,如果判断中间码的分支条件不能满足,该产生的分支中间码引起从局部中间码的起始端执行在步骤11产生的局部中间码。如果分支条件得到满足,在判断中间码之后引起执行步骤17中产生的恢复中间码。(步骤18)
优化器12读取存储在步骤11中的局部中间码、在步骤16中存储的执行路径中间码以及在步骤17中存储的恢复中间码,并优化所有读取的中间码。(步骤19)
变量信息计算处理
接下来,参考图3对变量信息计算处理进行说明。
首先,优化器12对局部程序执行控制流和数据流分析(步骤21)。基于该分析结果,变量信息计算单元121计算与出现在局部程序中的变量相关的活性信息IN、活性信息OUT以及定义信息DEF(步骤22)。
接下来,变量信息计算单元121从在步骤22计算的活性信息IN获得用于热路径上第一程序块的路径入口变量,以及从在步骤22计算的活性信息OUT获得用于热路径上最后程序块的路径出口变量。(步骤23)
在步骤23以后,变量信息计算单元121推出由与热路径相关的定义信息DEF表示作为替换目标变量的路径入口变量(步骤24)。
接下来,变量信息计算单元121得出既是在步骤24中得出的替换目标变量又是路径出口变量并且作为恢复目标变量的变量。然后该变量信息计算单元121将恢复目标变量和替换目标变量发送给执行路径中间码产生单元122(步骤25)。
变量替换处理
在从变量信息计算单元121接收到表示替换目标变量的信息时,该执行路径中间码产生单元122读取局部中间码和热路径信息,复制对应于该局部中间码的热路径的语句,对包括在复制语句中的各替换目标变量重复进行变量替换处理,并产生变量对。
以下,参考图4对变量替换处理进行说明。
执行路径中间码产生单元122对包括在复制语句中的各替换目标变量重复进行变量替换处理(步骤30)。
执行路径中间码产生单元122判断当前处理的替换目标变量是否由任何语句参考(步骤31)并是否包括在存在的变量对中(步骤32)。当判断结果均为肯定时(步骤31:是,步骤32:是),执行路径中间码产生单元122通过将替换目标变量的标志符替换为在相关变量对中成对的标志符来修改语句(步骤33),然后转向步骤34。当步骤31和步骤32的判断结果其中任何之一为否时(步骤31:否或步骤32:否),处理简单的转向步骤34。
接下来,执行路径中间码产生单元122判断当前处理的替换目标变量是否由任何语句定义(步骤34)并是否包括在存在的变量对中(步骤35)。当判断结果均为肯定时(步骤34:是,步骤35:是),执行路径中间码产生单元122删除包含替换目标变量的变量对(步骤36),并转向步骤37。当在步骤35判断不存在相应的变量对时(步骤35:否),处理简单的转向步骤37。
在步骤37中,执行路径中间码产生单元122确定要用来替换已定义的替换目标变量的变量,并通过该确定的变量对替换目标变量进行替换,并产生由替换之前和之后的变量组成的新变量对。
操作实施例
接下来,采用图5A的局部源程序对图2所示的操作流程给出具体实施例。在以下的说明中还参考图5B以及图9到图12。在该实施例中,假设中间码相对接近于源程序。
在步骤11,句法分析器11对局部程序进行句法分析并产生局部中间码,并在编译器1中存储该产生的局部中间码。(步骤11)
接下来,在步骤12,程序转换器120接收指定为路径200的热路径信息作为热路径,路径200顺序连接控制流程图(图5B)所示的基本程序块B1、B2、B4、B5和B7。在接收时,该程序转换器120在其中存储热路径信息。
在步骤13,优化器12执行控制流分析和数据流分析。基于该分析,变量信息计算单元121对于控制流程图(图5B)中各基本程序块B1-B7计算活性信息IN、活性信息OUT以及定义信息DEF(图10A)。具体地,对于基本程序块B1的活性信息IN表示为图10A中“B1”行“IN”列302所示的变量。对于基本程序块B1的活性信息OUT表示为图10A中同一行“OUT”列304所示的变量。对于基本程序块B1的定义信息DEF表示为同一行“DEF”列303所示的变量。
接下来,在步骤14,基于图10A所示的活性信息和定义信息以及在步骤12输入的热路径信息,变量信息计算单元121得出路径入口变量401、路径出口变量402、替换目标变量403以及恢复目标变量404(图10B)。
路径入口变量401在热路径的入口点为激活态。换句话说,路径入口变量由基本程序块B1(图5B)的活性信息IN表示并因此包括在“B1”行“IN”列302中(图10A)。
路径出口变量402在热路径的出口点为激活态。换句话说,路径出口变量402由基本程序块B7(图5B)的活性信息OUT表示并因此包括在“B7”行“OUT”列304中(图10A)。
替换目标变量403为包含在存在于热路径200中的基本程序块B1、B2、B4、B5和B7中DEF列303(图10A)中的路径入口变量401。
恢复目标变量404既包括在路径出口变量402又包括在替换目标变量403中。
在图10所示的实施例中,DEF列303包括变量{a,c,d,f,x},而路径入口变量为{b,c,d,e,g,z,w,y}。因此,替换目标变量为{c,d}。此外,路径出口变量为{a,c,e,f,z,w,x,y}。因此,仅有一个恢复目标变量为{c}。
变量信息计算单元121向执行路径中间码产生单元122发送替换目标变量并向恢复中间码产生单元124发送恢复目标变量。
在接下来的步骤S15中,执行路径中间码产生单元122读取局部中间码和热路径信息,复制存在于图5所示的热路径200中的语句S1-S15,并通过复制语句产生新的基本程序块B12-B72。然后,执行路径中间码产生单元122执行变量替换处理以替换包括在复制语句中的替换目标变量并产生变量对。图9所示为通过对复制的语句执行变量替换处理新产生的执行路径。
现在,采用图9所示的基本程序块B12和B22对变量替换处理(图4)进行说明。
在进行变量替换处理前,包括在基本程序块B12中的复制语句和包括在图5B所示的基本程序块B1中的语句相同。在基本程序块B12中复制语句S12和变量“c”有关,其为替换目标变量(图4,步骤31:是)。然而,不存在包含变量“c”的变量对(图4,步骤32:否),使得执行路径中间码产生单元122不会替换变量“c”。此外,语句S12没有定义任何替换目标变量(图4,步骤34:否)。因此,向下执行复制语句S22。执行路径中间码产生单元122判断在变量替换处理之前的复制语句S22定义了替换目标变量“c”(图4,步骤34:是)并且没有包括变量“c”的变量对(图4,步骤35:否)。因此,执行路径中间码产生单元122通过既不包含在变量表中也不包含在变量对中的“t1”替换变量“c”的标志符来修改语句S22并产生新的变量对(c,t1)(图4,步骤37)。要接下来执行的语句S32不涉及任何替换目标变量并且没有定义任何替换目标变量。因此,不会发生变量替换。接下来,执行包括在下一基本程序块B22中的语句S42。(注意,图10c中“变量对产生历史”的“B12”行502列示出了对基本程序块进行变量替换处理而产生的变量对。
随后,判断在变量替换处理前的语句S42和变量“c”有关(图4,步骤31:是)并且变量对(c,t1)已经存在于图10c所示的“B12”行502列(图4,步骤32:是)。因此,执行路径中间码产生单元122通过由“t1”替换变量“c”修改语句S42(图4,步骤33)。接下来,判断到语句S42定义了替换目标变量“c”(图4,步骤34:是)并且变量对(c,t1)已经存在(图4,步骤35:是)。因此,该执行路径中间码产生单元122删除变量对(c,t1)(图4,步骤36),通过由“t2”替换变量“c”的标志符来修改语句S42,该“t2”既不包括在变量表中也不在变量对中,并产生新的变量对(c,t2)(图4,步骤37)。
图10c所示为通过由执行路径中间码产生单元122对于直到基本程序块B72的S152的各语句重复进行变量替换处理已经存储的变量对产生历史500。
执行路径中间码产生单元122向恢复中间码产生单元124发送图10c中在程序块501列中显示的“B72”行所示的变量对(c,t2)和(d,t3)。此外,执行路径中间码产生单元122向判断中间码产生单元123发送包括图9所示的执行路径中间码的语句S12-S152。
接下来,在步骤16,判断中间码产生单元123将包括在接收语句中的分支条件S32和S92转换为包括用于执行热路径分支条件的分支中间码的语句S201(图11在基本程序块B104所示)。然后该判断中间码产生单元123产生包括语句S201的基本程序块B104并在程序转换器120中存储所得的基本程序块B104。
接下来,在步骤17,恢复中间码产生单元124基于从变量信息计算单元121发送的恢复目标变量{c}和变量对{c,t2}产生用于将变量“t2”恢复为“c”的恢复中间码的语句S301。然后,恢复中间码产生单元124通过恢复中间码的语句S301产生基本程序块B103(图11)。
在步骤18,分支中间码产生单元125读取图11所示的基本程序块B104并产生分支中间码。如果语句S201的判断为真,则这里产生的分支中间码引起执行基本程序块B103中的语句S301,如果判断为假,则这里产生的分支中间码引起执行从基本程序块B1的语句S1开始的串语句。然后,分支中间码产生单元125将分支中间码插入到执行路径中间码中。
在步骤19,优化器12优化通过直到步骤18处理产生的中间码以提高执行速度。
图12所示为对基本程序块B104执行指令调度产生的基本程序块B124。注意图中的符号“//”表示对符号前后的语句进行并行处理。
变型1
根据上述的实施方式,判断中间码产生单元123通过采用逻辑与连接图9所示的分支条件S32和S92产生包括用于执行热路径的分支条件的分支指令S201。然而,如图13所示的语句S202,对该分支条件S32和S92取反(invert)也是适用的。
此外,可以形成如图13所示的结构,使得局部程序作为子程序执行并且连接新产生的基本程序块B114和B103的路径用作主执行路径。为此,基本程序块B114位于紧随语句S0之后的位置,该语句S0为位于局部程序之前的基本程序块B0中的最后语句。此外,基本程序块B103位于紧挨语句S17之前的位置,该S17为紧随局部程序的基本程序块B8中的第一语句。
以下,参考图2,对形成的上述结构的处理过程进行说明。
注意,提前在程序转换器120中存储表示位于局部程序前后的语句的中间码。
在步骤15,执行路径中间码产生单元122复制位于存在于热路径200上的语句S1-S15并且对复制的语句进行变量替换处理以产生包括执行路径中间码的语句S12-S152(图9)。
执行路径中间码产生单元122在语句S0之后的位置插入语句S12-S152,并且将产生的中间码存储到程序转换器120中。此外,执行路径中间码产生单元122向判断中间码产生单元123发送语句S12-S152。
在步骤16,判断中间码产生单元123对包括在接收语句中的分支条件S32和S92取反的分支条件,并连接该取反的分支条件以产生判断中间码。然后该判断中间码产生单元123存储包括存储在程序转换器120内的语句S12-S152的基本程序块B114并因此产生判断中间码。
接下来,在步骤17,恢复中间码产生单元124产生基本程序块B103,该基本程序块103包括恢复中间码的语句S301。此外,恢复中间码产生单元124将基本程序块B103置于紧随存储在程序转换器120的基本程序块B114之后的位置,并将从语句S17开始的串语句置于紧随基本程序块B103之后的位置。
在步骤18,分支中间码产生单元125读取基本程序块B114,并且如果满足判断中间码的分支条件,则产生引起向基本程序块B1中的语句S1分支的分支中间码。将该产生的分支中间码插入判断中间码,从而产生语句S202。然后分支中间码产生单元125产生包括语句S202的基本程序块B114,并在程序转换器120中存储该基本程序块B114。
此外,分支中间码产生单元125产生引起从语句S15向语句S17分支的分支中间码的语句S16。然后分支中间码产生单元125在紧随语句S15之后的位置插入语句S16,并在程序转换器120内存储产生的中间码。
如上所述,对语句重新排序,使得局部程序作为子程序执行并且将除局部程序以外的执行路径代码和源程序代码用作主路径。该结构去除了从执行路径代码向源程序分支的分支指令。在期望以高频率执行所述执行路径代码的情况下,寄存器被有效分配,从而可以提高整个主路径的执行速度。
变型2
在如上所述的变型1中,判断中间码产生单元123通过连接分支条件S3和S9产生语句S202。然而,也可以将分支指令转换为单独的判断中间码作为如图14所示的分支条件S202和S203。
在这种情况下,在步骤16,判断中间码产生单元123对分支条件S32和S92取反,将取反的语句转换为单独的判断中间码。
在步骤18,分支中间码产生单元125在对应于各语句S32和S92的各判断中间码的各自分支条件为真时产生引起向基本程序块B1上部的语句S1分支的单独的分支中间码。然后该分支中间码产生单元125将分支中间码插入各自判断中间码以产生语句S202和S203。最后,分支中间码产生单元125产生基本程序块B134并在程序转换器120中存储该基本程序块B134。
图15所示为采用指令调度通过优化器12在步骤19已经优化的基本程序块B144中语句的中间码实施例。
如图15所示,分别对于各分支条件产生判断中间码和分支中间码。因此,可以更早的判断是否采用热路径。在不采用该热路径时该结构提前产生另一要采用的路径。该结构在不希望频繁采用热路径时尤其有效。
补充注释
对于这一点,通过实施方式和变型已经说明了根据本发明的编译器。但是,应该清楚的理解本发明不限于具体的实施方式和变型。
(1)根据上述实施方式,程序转换器120通过首先复制对应于热路径的中间码语句然后替换包括在复制语句中的替换目标变量来进行变量替换处理。还可以通过顺序参考语句执行变量替换处理并产生执行路径中间码,而不必涉及语句的复制。
(2)根据上述实施方式的变量替换处理,在定义替换目标变量时,替换变量定义点处的变量,对于各替换后的变量进行变量对的替换。此外,在参考替换目标变量时,通过在相应变量对中所示的标志符替换变量定义点处的变量。但是,使用相同的标志符替换变量定义点和变量参考点的替换目标变量也是适用的。
(3)根据上述实施方式,由用户向程序转换器120输入热路径信息。然而,在编译器具有顺序解释程序并执行程序的解释程序功能或编译器与可以执行程序的诸如调试器的器件结合工作的情况下存在选择余地。在该情况下,依次执行源程序并动态存储与已经采用的存在于存储器或其他存储设备中的执行路径相关的信息。该程序转换器120使用该存储信息以提取频繁采用的执行路径。
(4)根据上述实施方式,程序转换器120通过转换由句法分析器11转换并进行变量替换处理的中间程序而产生可执行程序。然而,也可以对存在于热路径中的源程序执行变量替换处理,然后将产生的源程序转换为可执行程序。
(5)本发明可以通过由计算机执行的计算机程序实施以进行各种各样的上述处理。此外,本发明可以实施为表示计算机程序的数字信号。本发明可以实施为存储任何程序和数字信号的计算机可读记录介质。计算机可读记录介质可以为软盘、硬盘、CD-ROM、MO盘、DVD或半导体存储器。可选择地,本发明可以实施为计算机程序和经由诸如电子通信网络、有线或者无线通信网络或互联网等网络发送的电子信号。
尽管已经参照附图以实施例的方式对本发明进行了充分描述,但是应该注意的是,很显然对于本领域的技术人员而言,可以对本发明做出各种变型和改进。因此,除非这些变型和改进脱离开本发明的范围,否则将认为它们包含在本发明中。

Claims (12)

1、一种用于将包括分支指令的源程序转换为由目标代码行构成的目标程序的编译器,该编译器包括:
用于指定源程序中包括分支指令的局部串指令的多个执行路径其中之一的执行路径指定单元;
用于产生至少包括对应于存在于指定执行路径中除分支指令以外的指令的目标代码的执行路径代码的执行路径代码产生单元,所述代码产生涉及通过另一变量替换需要在指定执行路径的入口点激活并且在指定执行路径上定义的变量;
用于产生用来将需要在指定执行路径的出口点激活的各替换后变量恢复为原始变量的恢复代码的恢复代码产生单元;
用于产生对应于局部串指令的局部代码的局部代码产生单元;
用于基于存在于指定执行路径上的分支指令的分支条件产生分支代码的分支代码产生单元,其中
如果分支条件为真,所述分支代码从执行路径代码的末端引导到恢复代码的起始端,并且如果分支条件为假,会引起从执行路径代码的末端到局部代码的起始端的分支。
2、根据权利要求1所述的编译器,其特征在于,
所述执行路径代码产生单元还用于将执行路径代码置于紧挨局部串指令起始端之前的串指令后的位置,
所述恢复代码产生单元还用于将恢复代码置于紧随执行路径代码末端之后的位置并且用于将紧随局部串指令末端的串指令置于紧随恢复代码之后的位置,以及
所述分支代码产生单元还用于产生引起从局部代码末端到紧随局部串指令末端之后的串指令分支的分支代码。
3、根据权利要求2所述的编译器,其特征在于,
所述编译器基于句法分析将源程序转换为中间码,并将中间码转换为目标程序,
所述执行路径代码产生单元包括:
用于基于句法分析通过包括在由局部串指令转换的局部中间码中的变量获得要替换的目标变量的变量信息获得子单元;
执行路径中间码产生子单元,用于通过另一变量替换包括在中间码中的各目标变量来产生至少包括包含在局部中间码中并且与存在于指定执行路径中除分支指令以外的指令相对应的中间码的执行路径中间码;以及
判断中间码产生子单元,用于将包括在执行路径中间码中的所有分支条件转换为用于采用指定执行路径的单分支条件并用于产生对分支条件作出判断的判断中间码,
所述恢复代码产生单元包括:
用来产生用于将需要在指定执行路径的出口点激活的各替换后的变量恢复为源变量的恢复中间码的恢复中间码产生子单元,并且所述分支代码产生单元包括:
分支中间码产生子单元,如果在判断中间码中的分支条件为假时,用于产生引起向局部中间码起始端分支的分支中间码;以及
用于将局部中间码、执行路径中间码、判断中间码、恢复中间码和分支中间码转换为构成目标程序的可执行代码的可执行代码产生子单元。
4、根据权利要求2所述的编译器,其特征在于,
所述编译器基于句法分析将源程序转换为中间码,并将中间码转换为目标程序,
所述执行路径代码产生单元包括:
用于基于句法分析通过包括在由局部串指令转换的局部中间码中的变量获得要替换的目标变量的变量信息获得子单元;
执行路径中间码产生子单元,用于通过另一变量替换包括在中间码中的各目标变量来产生至少包括包含在局部中间码中并且与存在于指定执行路径中除分支指令以外的指令相对于的中间码的执行路径中间码;以及
判断中间码产生子单元,用于单独将包括在执行路径中间码中的各分支条件分别转换为用于采用指定执行路径的独立分支条件并用于产生对各自分支条件作出判断的单独判断中间码,
所述恢复代码产生单元包括:
用来产生用于将在指定执行路径的出口点激活的各替换变量恢复为源变量的恢复中间码的恢复中间码产生子单元,以及
所述分支代码产生单元包括:
分支中间码产生子单元,如果各组判断中间码其中之一的分支条件为假时,用于单独产生引起向局部中间码起始端分支的多组分支中间码,并且如果所述分支条件为真时,则通向恢复中间码的起始端;以及
用于将局部中间码、执行路径中间码、判断中间码、恢复中间码和分支中间码转换为构成目标程序的可执行代码的可执行代码产生子单元。
5、根据权利要求1所述的编译器,其特征在于,
所述编译器具有用于顺序执行源程序的解释程序功能,
所述编译器还进一步包括:
用于在采用解释程序功能的局部串指令执行期间通过收集关于采用的执行路径的信息而提取频繁执行的路径,并且
所述执行路径指定单元指定通过提取单元提取的执行路径。
6、根据权利要求1所述的编译器,其特征在于,
所述编译器优化通过局部代码产生单元、执行路径代码产生单元、恢复代码产生单元以及分支代码产生单元产生的目标代码。
7、一种用于将包括分支指令的源程序转换为由目标代码行构成的目标程序的编译方法,该方法包括的步骤为:
指定源程序中包括分支指令的局部串指令的多个执行路径其中之一;
产生至少包括与存在于指定执行路径中除分支指令以外的指令相对应的目标代码的执行路径代码,所述代码产生涉及通过另一变量替换需要在指定执行路径的入口点激活并且在指定执行路径上定义的变量;
产生用于将需要在指定执行路径的出口点激活的各替换后变量恢复为原始变量的恢复代码;
产生对应于局部串指令的局部代码;以及
基于存在于指定执行路径上的分支指令的分支条件产生分支代码,其中
如果分支条件为真,则所述分支代码从执行路径代码的末端引导到恢复代码的起始端,并且如果分支条件为假,会引起从执行路径代码的末端到局部代码的起始端的分支。
8、根据权利要求7所述的编译方法,其特征在于,
所述执行路径代码产生步骤还进一步包括将执行路径代码置于在紧挨局部串指令起始端之前的串指令之后的位置,
所述恢复代码产生步骤还进一步包括将恢复代码置于紧随执行路径代码末端之后的位置并且将紧随局部串指令末端的串指令置于紧随恢复代码之后的位置,
所述分支代码产生步骤还进一步包括产生引起从局部代码末端到紧随局部串指令末端的串指令分支的分支代码。
9、根据权利要求8所述的编译方法,其特征在于,
所述编译方法基于句法分析将源程序转换为中间码,并将中间码转换为目标程序,
所述执行路径代码产生步骤包括如下分步骤:
基于句法分析通过包括在由局部串指令转换的局部中间码中的变量获得要替换的目标变量;
通过另一变量替换包括在中间码中的各目标变量来产生至少包括包含在局部中间码中并且与存在于指定执行路径中除分支指令以外的指令相对应的中间码的执行路径中间码;以及
将包括在执行路径中间码中的所有分支条件转换为用于采用指定执行路径的单分支条件并用于产生对分支条件作出判断的判断中间码,所述恢复代码产生步骤包括如下子步骤:
产生用于将需要在指定执行路径的出口点激活的各替换后的变量恢复为原始变量的恢复中间码,并且
所述分支代码产生步骤包括子步骤:
如果在判断中间码中的分支条件为假时,则产生引起向局部中间码起始端分支的分支中间码;以及
将局部中间码、执行路径中间码、判断中间码、恢复中间码和分支中间码转换为构成目标程序的可执行代码。
10、根据权利要求8所述的编译方法,其特征在于
所述编译方法基于句法分析将源程序转换为中间码,并将中间码转换为目标程序,
所述执行路径代码产生步骤包括子步骤:
基于句法分析通过包括在由局部串指令转换的局部中间码中的变量获得要替换的目标变量;
通过另一变量替换包括在中间码中的各目标变量来产生至少包括包含在局部中间码中并且与存在于指定执行路径中除分支指令以外的指令相对应的中间码的执行路径中间码;以及
单独将包括在执行路径中间码中的各分支条件分别转换为用于采用指定执行路径的独立分支条件并用于产生对各自分支条件作出判断的单独判断中间码,
所述恢复代码产生步骤包括子步骤:
产生用于将需要在指定执行路径的出口点激活的各替换变量恢复为原始变量的恢复中间码,以及
所述分支代码产生步骤包括子步骤:
如果各组判断中间码其中之一的分支条件为假,则单独产生引起向局部中间码起始端分支的多组分支中间码,并且如果所述分支条件为真,则通向恢复中间码的起始端;以及
将局部中间码、执行路径中间码、判断中间码、恢复中间码和分支中间码转换为构成目标程序的可执行代码。
11、根据权利要求7所述的编译方法,其特征在于,
所述编译方法通过解释程序顺序执行源程序,
所述编译方法还进一步包括子步骤:
在采用解释程序功能的局部串指令执行期间,通过收集关于采用的执行路径的信息提取频繁执行的路径,并且
所述执行路径指定步骤指定在提取步骤中提取的执行路径。
12、根据权利要求7所述的编译方法,其特征在于,
所述编译方法优化通过局部代码产生步骤、执行路径代码产生步骤、恢复代码产生步骤以及分支代码产生步骤中产生的目标代码。
CNB2005101051340A 2004-09-22 2005-09-22 编译器、编译方法 Expired - Fee Related CN100465895C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2004275573 2004-09-22
JP2004275573 2004-09-22

Publications (2)

Publication Number Publication Date
CN1752934A true CN1752934A (zh) 2006-03-29
CN100465895C CN100465895C (zh) 2009-03-04

Family

ID=36075417

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2005101051340A Expired - Fee Related CN100465895C (zh) 2004-09-22 2005-09-22 编译器、编译方法

Country Status (2)

Country Link
US (1) US7784039B2 (zh)
CN (1) CN100465895C (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101957742A (zh) * 2010-10-09 2011-01-26 南京恩瑞特实业有限公司 单任务运行环境下实现软件运行时间确定的方法
CN101963898A (zh) * 2010-09-17 2011-02-02 广州迪庆电子科技有限公司 反编译过程中的寄存器传播方法、装置及反编译器
CN103838616A (zh) * 2014-03-05 2014-06-04 北京工业大学 基于树型程序分支的计算机程序即时编译方法
CN104081350A (zh) * 2012-02-03 2014-10-01 苹果公司 使用动态编程语言的元数据的运行时优化
CN105843659A (zh) * 2016-03-17 2016-08-10 深圳市金玺智控技术有限公司 一种嵌入式c编译器的实现方法及系统

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6748589B1 (en) 1999-10-20 2004-06-08 Transmeta Corporation Method for increasing the speed of speculative execution
JP4884297B2 (ja) * 2006-05-26 2012-02-29 パナソニック株式会社 コンパイラ装置、コンパイル方法およびコンパイラプログラム
US8108315B2 (en) * 2006-06-19 2012-01-31 Hewlett-Packard Development Company, L.P. Discovering software code subject to licenses
US8156484B2 (en) * 2007-08-22 2012-04-10 International Business Machines Corporation LDAP server performance object creation and use thereof
US8732676B1 (en) * 2007-08-29 2014-05-20 Parasoft Corporation System and method for generating unit test based on recorded execution paths
US7493610B1 (en) 2008-03-27 2009-02-17 International Business Machines Corporation Versioning optimization for dynamically-typed languages
JP2010039536A (ja) * 2008-07-31 2010-02-18 Panasonic Corp プログラム変換装置、プログラム変換方法およびプログラム変換プログラム
US8875111B2 (en) * 2009-04-23 2014-10-28 Microsoft Corporation Intermediate language representation and modification
CN102292709B (zh) * 2009-04-28 2014-05-21 国际商业机器公司 用于变换在多线程上工作的程序的程序代码的方法和系统
US9164743B2 (en) * 2012-07-02 2015-10-20 International Business Machines Corporation Strength reduction compiler optimizations for operations with unknown strides
US9552195B2 (en) * 2013-03-08 2017-01-24 Facebook, Inc. Enlarging control regions to optimize script code compilation
WO2017072615A1 (en) * 2015-11-01 2017-05-04 Centipede Semi Ltd. Hardware-based run-time mitigation of conditional branches
US20170123798A1 (en) 2015-11-01 2017-05-04 Centipede Semi Ltd. Hardware-based run-time mitigation of blocks having multiple conditional branches
US10025690B2 (en) 2016-02-23 2018-07-17 International Business Machines Corporation Method of reordering condition checks
CN117555535B (zh) * 2024-01-09 2024-05-14 云筑信息科技(成都)有限公司 一种React框架中实现多环境代码复用方法

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3606387B2 (ja) * 1994-09-13 2005-01-05 松下電器産業株式会社 コンパイル装置
JP3494489B2 (ja) * 1994-11-30 2004-02-09 株式会社ルネサステクノロジ 命令処理装置
JP3650649B2 (ja) * 1995-06-16 2005-05-25 松下電器産業株式会社 最適化装置
CA2175711A1 (en) * 1996-05-01 1997-11-02 Lee Richard Nackman Incremental compilation of c++ programs
US6170083B1 (en) * 1997-11-12 2001-01-02 Intel Corporation Method for performing dynamic optimization of computer code
US20020147969A1 (en) * 1998-10-21 2002-10-10 Richard A. Lethin Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method
JP2000330780A (ja) * 1999-05-19 2000-11-30 Hitachi Ltd ソフトウェアのパッチデータ自動生成装置
US6681387B1 (en) * 1999-12-01 2004-01-20 Board Of Trustees Of The University Of Illinois Method and apparatus for instruction execution hot spot detection and monitoring in a data processing unit
GB2366879B (en) * 2000-09-16 2005-02-16 Ibm Tracing the execution path of a computer program
US6986131B2 (en) * 2002-06-18 2006-01-10 Hewlett-Packard Development Company, L.P. Method and apparatus for efficient code generation for modulo scheduled uncounted loops

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101963898A (zh) * 2010-09-17 2011-02-02 广州迪庆电子科技有限公司 反编译过程中的寄存器传播方法、装置及反编译器
CN101957742A (zh) * 2010-10-09 2011-01-26 南京恩瑞特实业有限公司 单任务运行环境下实现软件运行时间确定的方法
CN101957742B (zh) * 2010-10-09 2013-01-09 南京恩瑞特实业有限公司 单任务运行环境下实现软件运行时间确定的方法
CN104081350A (zh) * 2012-02-03 2014-10-01 苹果公司 使用动态编程语言的元数据的运行时优化
CN104081350B (zh) * 2012-02-03 2017-06-23 苹果公司 使用动态编程语言的元数据的运行时优化方法和系统
CN103838616A (zh) * 2014-03-05 2014-06-04 北京工业大学 基于树型程序分支的计算机程序即时编译方法
CN103838616B (zh) * 2014-03-05 2017-04-05 北京工业大学 基于树型程序分支的计算机程序即时编译方法
CN105843659A (zh) * 2016-03-17 2016-08-10 深圳市金玺智控技术有限公司 一种嵌入式c编译器的实现方法及系统

Also Published As

Publication number Publication date
US7784039B2 (en) 2010-08-24
US20060064682A1 (en) 2006-03-23
CN100465895C (zh) 2009-03-04

Similar Documents

Publication Publication Date Title
CN1752934A (zh) 编译器、编译方法以及编译程序
CN1302385C (zh) 编译装置
CN1152287C (zh) 二进制程序转换设备和转换方法
CN1265290C (zh) 优化链接后代码的方法
CN1284080C (zh) 基于值特化来优化软件代码的方法和装置
CN1877532A (zh) 编译装置
CN1302380C (zh) 处理器和编译器
CN1258154C (zh) 多处理器系统、数据处理系统和数据处理方法
CN1842767A (zh) 用于多个异常处理模型的中间表示
CN1252144A (zh) 一可编程组件中可构元件的自同步方法
CN1804803A (zh) 具有对异步程序流程建模的软件工具
CN1570870A (zh) 终极管道和最优重排技术
CN1842081A (zh) 扩展巴克斯范式字符串模式匹配和解析的方法及装置
CN101036127A (zh) 源码检查器、方法、程序以及存储介质
CN1655118A (zh) 处理器和编译器
CN1609796A (zh) 应用编程接口(api)的设计
CN1924858A (zh) 一种获取新词的方法、装置以及一种输入法系统
CN1228558A (zh) 程序变换方法和程序变换系统
WO2007113369A1 (en) Parallel program generation method
CN1900910A (zh) 二进制翻译中经由跳转表的多目标分支语句的识别方法
CN1313926C (zh) 模板编译方法
CN1143774A (zh) 优化器
CN1892602A (zh) 一种二进制翻译中库函数调用的处理方法
CN1991765A (zh) 手持终端应用程序的开发装置和方法
JP2007094731A (ja) コンパイラ装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20151105

Address after: Kanagawa

Patentee after: Co., Ltd. Suo Si future

Address before: Osaka

Patentee before: Matsushita Electric Industrial Co., Ltd.

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

Granted publication date: 20090304

Termination date: 20200922

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