CN1512334A - 程序变换装置和程序变换方法 - Google Patents
程序变换装置和程序变换方法 Download PDFInfo
- Publication number
- CN1512334A CN1512334A CNA2003101202178A CN200310120217A CN1512334A CN 1512334 A CN1512334 A CN 1512334A CN A2003101202178 A CNA2003101202178 A CN A2003101202178A CN 200310120217 A CN200310120217 A CN 200310120217A CN 1512334 A CN1512334 A CN 1512334A
- Authority
- CN
- China
- Prior art keywords
- mentioned
- procedure
- program
- independent variable
- code
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
- G06F9/4484—Executing subprograms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/425—Lexical analysis
Abstract
本发明提供程序变换装置和程序变换方法。该装置具有进行源代码的词法分析和句法分析的代码分析单元110、变形执行程序的优化单元120、将变形后的执行程序变换为机器语言代码的输出代码生成单元130。这样,对于通过代码分析单元110分析的执行程序,优化单元120检测执行程序中的过程调用中的调用过程和被调用过程,在规定的估计条件下保护调用过程中描述的自变量的估计,变形执行程序,以便在参考自变量的情况下进行估计。
Description
技术领域
本发明涉及在计算机程序的编译中执行的优化处理。
背景技术
在描述通过计算机控制数据处理的程序的编程语言中,以数值传送变量的语言、即大多数过程语言中,过程调用中的调用过程(以下简单称为调用方)在过程调用之前会估计所有自变量(称之为先行估计(eager evaluation))。
先行估计自变量的优点是通过并行执行自变量估计和调用方本身的计算,使进行该自变量估计而造成的延迟时间和过程调用的延迟时间重叠,从而隐藏起来(实际上减小了延迟)。另一方面,具有在过程调用中,由于对在被调用过程(以下简单称为被调用方)中实际上未被参考的自变量进行了估计而造成的冗余。
因此,程序的开发需要一种在先行估计自变量的同时省略了所述冗余的方案。
在称为Scheme的语言中,通常对自变量的估计是进行先行估计,但也可以通过将自变量作为被称作约定(promise)的闭包(closure)传送到被调用方,而转换为延迟估计(lazy evaluation)(例如,参考非专利文献1)。
此外,当生成程序时,程序员通过把从用于在被调用方实际参考自变量的条件(以下称为参考条件)导出的适当条件(以下称为估计条件)插入调用方,可根据在被调用方是否参考了该自变量来适当地进行先行估计。然后,程序员本身在调用方的源代码中插入估计条件,从而保护过程调用本身。
而且,作为常规使用的程序优化技术,包括部分失效代码消去法(partial dead code elimination)。优化是把仅在一部分后续控制流中参考该值的命令移动到参考该值的命令之前,从而消除了其一部分的不用性(例如,参考非专利文献2)。
非专利文献1:R.Kelsey,W.Clinger,J.Rees(eds.),“Revised5Report on the Algorithmic Language Scheme”,Higher-Order andSymbolic Computation,Vol.11,No.1,September,1998,and ACMSIGPLAN Notices,Vol.33,No.9,October,1998.
非专利文献2:J.Knoop,O.Ruthing and B.Steffen,“PartialDead Code Elimination”,In PLDI’94,pp.147-158,June 1994.
非专利文献3:Steven S.Muchnick,“Advanced CompilerDesign and Implementation,Morgan Kaufmann Publishers,Inc.,1997,pp.465-470.
非专利文献4:Steven S.Muchnick,“Advanced CompilerDesign and Implementation,Morgan Kaufmann Publishers,Inc.,1997,pp.592-597.
但是,在上述各种现有技术中,分别有如下问题。
Scheme中的约定(promise)是这样的方式:通过将“delay”指定给调用方,将“force”指定给被调用方,将自变量估计从先行估计变换为延迟估计。因此,随着调用方、被调用方双方源代码的变更,产生了很多麻烦。当然,当变换为延迟估计时,就丢失了先行估计的所谓可通过并行执行而隐藏自变量估计造成的延迟时间、实质上减小延迟的优点。
此外,在编程中向调用方的源代码中插入估计条件的技术使本来集中在被调用方的参考条件分散到多个调用方。即,基于参考条件的估计条件必须插入调用该被调用过程的所有调用方中。因此,不易于进行程序的变更和维护。此外,被调用方的细节不一定是公开的,即使是已经公开的细节,参考条件也不一定是能够从调用方调用的公共函数和公共构件(member)。因此,在调用方的源代码中插入估计条件的方案在理论上有时是不能实现的。
而且,部分失效代码消去法是能除去任意无效代码的有力优化技术,但计算量非常大,达到命令数的3-5次幂。因此,不适用于Java(美国太阳微系统公司的商标)中的JIT(Just In Time)编译器这样的在执行程序时进行动态编译的编译器。
发明内容
因此,本发明的目的是生成能根据需要在被调用方参考自变量与否、来执行自变量的先行估计的有效程序。
本发明的目的是提供一种编译器,在编译程序时能将程序优化为有效的程序。
为了达到上述目的,本发明提供一种程序变换装置,读出执行程序的源代码,变换为机器语言代码,其构成如下。即,所述程序变换装置具有:代码分析单元,进行源代码的字句分析和语法分析;优化单元,变形该执行程序;代码生成单元,将通过优化单元变形的执行程序变换为机器语言代码。此外,优化单元的特征在于,对于由代码分析单元分析的执行程序,检测该执行程序中过程调用中的调用过程和被调用过程,在规定的估计条件下保护调用过程中描述的自变量的估计,变形执行程序,以便在参考自变量时进行估计。
估计条件可以是这样的条件:在简单的条件下保护被调用过程时的相关条件或包含该条件的条件。或者,该条件可以是被调用过程中用于参考上述自变量的参考条件或包含该条件的条件。
此外,本发明的另一个程序变换装置具有代码分析单元、优化单元和代码生成单元,优化单元的特征在于,对于由代码分析单元分析的执行程序,检测在执行程序中进行给自变量赋值的过程调用的位置,变换执行程序,以便改变进行过程调用的位置上的自变量估计和参考条件估计的顺序。
本发明的再一个程序变换装置具有代码分析单元、优化单元和代码生成单元,优化单元的特征在于,具有第一变形装置,检测执行程序中的过程调用中的调用过程和被调用过程,将被调用过程直接插入调用过程中;第二变形装置,从直接插入的被调用过程开头回扫(retrace)控制流,得到规定的命令列,将被调用过程中用于参考自变量的参考条件移动到该命令列之前,同时,复制命令列,插入到从参考条件分支的各例程中;第三变形装置,在插入从参考条件分支的各例程中的命令列中,除去不参考自变量的例程的无效命令列。
为了达到上述目的,本发明还提供一种程序变换方法,控制计算机,变形作为处理对象的程序,其特征在于,包含:第一步骤,从规定的存储装置中读出作为处理对象的程序,检测程序中的过程调用中的调用过程和被调用过程;第二步骤,在规定条件下保护调用过程中描述的自变量的估计,变形程序,以便在参考该自变量的情况下进行估计,将变形后的程序存储在规定的存储装置中。
本发明的另一个程序变换方法,其特征在于,包含:第一步骤,从规定的存储装置中读出作为处理对象的程序,检测程序中进行自变量赋值的过程调用的位置;步骤,变形程序,以便改变进行程序的过程调用的位置的自变量估计和参考条件估计的顺序,将变形后的程序存储在规定的存储装置中。
本发明的再一个程序变换方法,其特征在于,包含:第一步骤,从规定的存储装置中读出作为处理对象的程序,检测程序中的过程调用中的调用过程和被调用过程;第二步骤,在调用过程中插入被调用过程;第三步骤,从直接插入的被调用过程开头回扫控制流,得到规定的命令列,将被调用过程中用于参考自变量的参考条件移动到该命令列之前,同时,复制命令列,插入到从参考条件分支的各例程中;第四步骤,在插入从参考条件分支的各例程中的命令列中,除去不参考自变量的例程的无效命令列;第五步骤,把除去无效命令列的程序存储在规定的存储装置中。
此外,本发明提供一种程序,控制计算机实现上述程序变换装置的各个功能,或者在计算机中执行对应上述程序变换方法中的各个步骤的处理。该程序可存储在磁盘、光盘、半导体存储器及其他存储介质中进行分配,或者通过网络进行分配。
附图说明
图1是实现本实施例的数据处理方法的计算机系统的系统结构图;
图2说明了本实施例中的编译器的结构;
图3说明了本实施例中回扫控制流的范围;
图4示出了本实施例中,超过了控制合流点的范围中的命令列被移动到参考条件(估计条件)之后的样子;
图5是说明根据本实施例的优化处理的全体流程的流程图;
图6说明了通过本实施例的优化而使程序的控制流变化,示出了检测出的调用方和被调用方的控制流的例子;
图7说明了通过本实施例的优化而使程序的控制流变化,示出了插入图6所示的控制流中的样子;
图8说明了通过本实施例的优化而使程序的控制流变化,示出了“自变量估计”从图7状态移动到条件分支后面的状态;
图9说明了通过本实施例的优化而使程序的控制流变化,示出了从图8状态中除去无效的“自变量估计”的状态。
具体实施方式
以下,根据附图所示的实施例详细说明本发明。
图1是实现本实施例的数据处理方法的计算机系统的系统结构图。
参考图1,本实施例中的计算机系统具有:编译器100,编译源程序(输入代码);程序执行单元200,执行在编译器100中编译的目标程序(输出代码),并进行各种处理;存储器300。编译器100和程序执行单元200由在个人计算机和工作站等计算机系统中进行程序控制的CPU实现。存储器300是计算机装置的主存储器,用RAM等实现。在存储器300中,存储用于控制CPU使其作为编译器100工作的程序和被编译的程序,同时,在编译器100的编译处理中,临时存储从寄存器中挽救的变量。另外,当然,存储在存储器300中的程序可以根据需要保存在磁盘这样的外部存储装置中。
图1中,编译器100输入用规定的编程语言描述的输入代码并进行处理,生成用机器语言描述的输出代码后输出。输入代码的输入是通过直接输入在代码生成装置400中生成的输入代码,或者从用于存储代码生成装置400所生成的输入代码的存储装置500输入,或者经网络600从位于网络600上的代码生成装置400和存储装置500输入等方式执行。通过编译器100生成的输出代码由程序执行单元200执行。
图2说明了本实施例中编译器100的结构。
参考图2,编译器100具有:代码分析单元110,进行输入代码的词法分析和句法分析;优化单元120,通过各种优化方式进行程序的变换;输出代码生成单元130,将优化的程序变换(生成)为输出代码后输出。
而且,作为优化单元120的功能单元,编译器100具有:直接插入执行单元10,直接插入规定的过程调用部分;自变量估计移动单元20,使程序中对自变量进行估计的部分移动到条件分支(参考条件)的后面;无效代码除去单元30,用于除去在自变量估计移动单元20的处理中所产生的无效代码。
图2所示的编译器100的各构成要素是在由计算机程序控制的CPU中实现的虚拟软件块。控制CPU的计算机程序通过分配存储在磁盘、光盘、半导体存储器等记录介质中,或者经网络传送来提供。
图2所示的优化单元120的各个功能单元涉及本实施例的特有功能。尽管未在图中具体示出,但作为程序优化的装置,除了本实施例说明的技术以外,实际上还有其他各种技术,可以和根据本实施例的技术结合使用。
根据本实施例,在通过赋值传递自变量的过程调用中,通过在适当的条件(估计条件)下保护调用方的自变量估计,抑制调用方的无效自变量估计。这里,估计条件通常和用于被调用方实际参考自变量的条件(参考条件)相同。即,根据本实施例的优化的本质是改变对自变量和参考条件的估计顺序。
通常,在调用方的自变量估计和使用估计后的自变量的过程调用之间可以插入任意计算。但是,本实施例中,作为优化的主要对象的、用于调试或将消息输出到日志中的过程调用中,以下倾向是显著的:估计后的自变量不是作为临时变量被接受,而是直接描述在过程调用的实际变量部分中(即自变量估计位于过程调用之前)。这时的被调用方(根据在调试或调谐时使功能生效、在实际运行时为了避免多余开销而使其失效等要求)倾向于在唯一的简单条件(参考条件)下保护整个过程。因此,通过将条件分支(参考条件)之前的命令列移动到条件分支之后和参考自变量的部分之前,可实现削减多余自变量估计的优化。
为了避免不出现由于颠倒了自变量和参考条件的估计顺序而可能产生的副作用和出现认为不会产生的副作用,当(通过合成参考条件而得到的)估计条件引起副作用时,自变量估计不能引起副作用。这里,副作用是指例外、漏值(escape)等。可以以消除副作用、削减计算量等为理由,变更(简化)估计条件,这时,确定变更后的估计条件,以包含原来的估计条件。
而且,为了根据作为调用方代码的参考条件来合成估计条件,必须在调用方的编译期间确定其调用点上的被调用方集合。在被调用方唯一确定的静态调用、由测试代码静态约束的动态调用、以及诸如C++虚拟函数这样的在方法执行期间不伴随过载的动态调用中满足该条件。Java虚拟函数这样的在方法执行期间伴随过载的动态调用仅对在编译调用方时已知的被调用方执行根据本实施例的优化,通过检测在执行期间被调用方的集合被改变来执行该优化,结合对安全侧修补代码的运行时间来使用动态调用。而且,如果在编译调用方时,已知的被调用方集合由多个要素组成,则用测试代码唯一静态地约束每个要素之后,执行根据本实施例的优化。
在图2所示的结构中,在程序中的过程调用中,直接插入执行单元10检查是否满足诸如上述副作用和被调用方唯一性等条件,然后将被调用过程嵌入调用方中,进行直接插入。直接插入本身是作为现有的优化技术之一的公知技术(例如,参考非专利文献3)。在本实施例中,可适用现有的直接插入技术。
自变量估计移动单元20将位于调用方的自变量估计部分移动到参考条件(估计条件)之后。具体地说,首先,从通过直接插入执行单元10而直接插入的被调用方(由于直接插入,调用方和被调用方不再有区别,但为了方便,仍沿用原来的调用方和被调用方这种称呼)过程的开头反向进行控制流分析,回扫控制流到控制被合并的基本块的最初命令(在估计条件产生副作用时,以控制合流的基本块的最初命令为上限,将控制流回归至最低的产生副作用的命令之后)。这样,将参考条件移动到得到的命令列之前并设为估计条件,同时,复制该命令列,并将其插入到估计条件之后的各个例程中。由此,在程序的命令列中,自变量的估计顺序和参考条件(估计条件)的估计顺序被改变了。此外,当参考条件被移动并设定为估计条件时,可以如上所述按需简化估计条件。
这里,在本实施例中,位于原始调用方的命令列向被调用方移动,跨越大致被调用方之前的一个基本块的长度。
图3说明了回扫控制流的范围。
如图3所示,以控制合流点(merge)为上限进行复制,然后移动到参考条件(估计条件)之后。
但是,该上限不意味着理论上可复制和可移动的操作的上限。理论上,可以通过控制流分析、不受任何限制地回扫控制流,和将复制的命令列移动到参考条件(估计条件)之后。因此,可以越过控制合流点回扫控制流,并将复制的命令列移动到参考条件(估计条件)之后。
图4示出了超过控制合流点的范围的命令列移动到参考条件(估计条件)之后的样子。
但是,作为本实施例的优化的主要对象的用于测试或向日志输出消息的过程调用中,以下倾向是显著的:估计后的自变量不是作为临时变量被接受,而是直接描述在过程调用的实际变量部分中(即自变量估计位于过程调用之前)。因此,可以说即使移动命令列越过合流点,也几乎不改变优化的效果。因此,实际上,如上所述,只要回扫控制流至控制被合流的基本块的最初命令(或者,以基本块的最初命令为上限,将控制流回扫至最低的产生副作用的命令之后的命令),和将复制的命令列移动到参考条件(估计条件)之后,就是令人满意的。
此外,不对选定的估计自变量的命令进行上述命令列的复制,而是对通过控制流获得的范围的全部命令列进行复制操作。从而,可以避免分析单个命令的复杂工作。
无效代码除去单元30除去包含通过自变量估计移动单元20移向估计条件之后的各个例程的自变量估计的命令列中的不用的命令。即,自变量估计移动单元20简单地将命令列移动到条件分支的后面并且仅对其进行复制,因此,无论估计条件是真是伪,都在各例程中插入包含自变量估计的命令列。因此,无效代码除去单元30检查估计条件的真伪,通过无效代码消去法(dead code elimination)除去复制到估计条件为伪(false)侧的例程中的自变量估计。此外,在无效代码消去法中可以使用作为优化方法之一的公知的现有方法(例如,参考非专利文献4)。
下面,具体说明本实施例的优化的作用。
图5是说明根据本实施例的优化的全部流程的流程图。图6至图9说明了通过本实施例的优化引起的程序控制流的变化。
作为初始操作,编译器100输入作为处理对象的程序,对其已经进行了词法分析和句法分析等处理。这些分析完的程序(中间代码)暂时存储在存储器300中。
如图5所示,在编译器100中,通过控制流分析等手段检测作为处理对象的程序中的过程调用中的调用方和被调用方(步骤501)。图6示出了一例检测出的调用方和被调用方的控制流。图6中,通过调用方的“过程调用”来调用并执行被调用方的过程。
接着,编译器100的直接插入执行单元10检查在步骤501中检测出的过程调用的整个调用方是否在唯一的简单条件(参考条件)下得到保护(步骤502)。图6所示的过程调用中的被调用方满足该条件。因此,接着,直接插入执行单元10将被调用方直接插入到调用方中(步骤503)。实施直接插入处理的程序被保存在存储器300中。
图7示出了直接插入图6所示控制流的样子。在这种状态下,“自变量估计”位于“参考条件”之前。
接着,自变量估计移动单元20从存储器300中读出程序,从直接插入的过程(原始被调用方)的开头开始逆向回扫控制流,获得控制被合流的基本块的最初命令之前(或者以基本块的最初命令为上限,最低的产生副作用的命令之后)的命令列。接着,将参考条件移动到该命令列之前并设为估计条件,同时,复制该命令列并将其插入到估计条件之后的各例程中(步骤504)。通过自变量估计移动单元20变形后的程序被保存在存储器300中。
图8示出了“自变量估计”从图7的状态移动到条件分支后面的状态。图8中,称为“估计条件”的条件分支代替“参考条件”,在真伪例程中都插入“自变量估计”。
最后,无效代码除去单元30从存储器300中读出程序,除去通过自变量估计移动单元20而插入到估计条件后面的各例程中的自变量估计中的不需要的自变量估计命令列(步骤505)。除去了不需要的命令列的程序保存在存储器300中。
图9示出了从图8的状态中除去不用的“自变量估计”后的状态。图9中,删除位于不进行“自变量参考”的例程(“估计条件”为伪的例程)中的“自变量估计”。
之后,实施了优化的程序变换为目标代码,通过图1所示的程序执行单元200执行该目标代码。
如上所述,在本实施例中,编译程序时,编译器100可以把从用于在被调用方参考自变量的条件(参考条件)导出的条件(估计条件)自动插入到调用方。这和变换为可通过Scheme设定的延迟估计(1azy evaluation)不同,不需要所谓改写源代码这样的繁杂工作。满足估计条件的情况下,因为将先行估计用于自变量估计,所以仍保留了实际延迟时间缩短的优点。
在本实施例中,在编译程序时,编译器100可以将估计条件自动插入调用方。这和程序开发人员通过手工作业向调用方源代码插入估计条件的情况不同,因为在源代码上参考条件仍聚集在被调用方,所以仍然很容易改变和维护程序。向调用方插入估计条件时,不需要知道安装细节,也不受访问权限的限制。
而且,在本实施例中,改变自变量估计和参考条件(估计条件)的估计顺序之后,除去无效代码,其计算量不超过基本块数(估计条件产生副作用时的命令数)的1次幂。因此,和需要大至命令数的3次幂到5次幂的计算量的现有部分无效代码消去法不同,适用于在程序执行时动态进行编译的编译器。
发明效果
如上所述,根据本发明,根据被调用方是否需要进行自变量的先行估计,可生成执行自变量先行估计的有效程序。
根据本发明,在编译程序时,可提供优化为这种有效程序的编译器。
Claims (16)
1.一种程序变换装置,用于读入执行程序的源代码,并将其变换为机器语言代码,其特征在于,具有:
代码分析单元,进行源代码的词法分析和句法分析;
优化单元,对于由代码分析单元分析的执行程序,检测该执行程序中的过程调用中的调用过程和被调用过程,在规定的估计条件下保护该调用过程中描述的自变量估计,并变换该执行程序,以便在参考自变量时进行估计;
代码生成单元,将通过上述优化单元变换的上述执行程序变换为上述机器语言代码。
2.根据权利要求1所述的程序变换装置,其特征在于,上述优化单元将用于在上述被调用过程中参考上述自变量的参考条件或包含该参考条件的规定条件作为上述估计条件。
3.一种程序变换装置,用于读入执行程序的源代码,并将其变换为机器语言代码,其特征在于,具有:
代码分析单元,进行源代码的词法分析和句法分析;
优化单元,对于由代码分析单元分析的执行程序,检测在执行程序中通过为自变量赋值而进行过程调用的位置,并变换该执行程序,以便改变进行过程调用的位置上的自变量估计和参考条件估计的顺序;
代码生成单元,将通过上述优化单元变换的上述执行程序变换为上述机器语言代码。
4.一种程序变换装置,用于读入执行程序的源代码,并将其变换为机器语言代码,其特征在于,具有:
代码分析单元,进行源代码的词法分析和句法分析;
优化单元,对于由代码分析单元分析的执行程序,实施规定变换;
代码生成单元,将通过上述优化单元变换的上述执行程序变换为上述机器语言代码;
其中上述优化单元具有:
第一变形装置,检测该执行程序中的过程调用中的调用过程和被调用过程,将该被调用过程直接插入上述调用过程中;
第二变形装置,从直接插入的上述被调用过程的开头开始、回扫控制流,得到规定的命令列,将被调用过程中用于参考自变量的参考条件移动到该命令列之前,同时,复制命令列,并将其插入到根据参考条件而分支的各例程中;
第三变形装置,在插入到根据上述参考条件而分支的各例程中的上述命令列中,除去不参考上述自变量的例程的无效命令列。
5.根据权利要求4所述的程序变换装置,其特征在于,上述第二变形装置将命令流从上述被调用过程的开头回扫至控制被合流的基本块的最初命令,或者从上述被调用过程的开头回扫至以控制被合流的基本块的最初命令为上限其最低的产生副作用的命令之后的命令,并得到上述规定的命令列。
6.一种程序变换方法,用于控制计算机,对作为处理对象的程序进行变形,其特征在于,包含:
第一步骤,从规定的存储装置中读出作为处理对象的程序,检测该程序中的过程调用中的调用过程和被调用过程;
第二步骤,在规定的估计条件下保护上述调用过程中描述的自变量估计,变换上述程序、以便在参考该自变量的情况下进行该估计,并将变形后的程序存储在规定的存储装置中。
7.一种程序变换方法,用于控制计算机,对作为处理对象的程序进行变形,其特征在于,包含:
第一步骤,从规定的存储装置中读出作为上述处理对象的程序,检测程序中通过为自变量赋值而进行过程调用的位置;
变形上述程序、以便改变在进行上述程序的上述过程调用的位置上的自变量估计和参考条件估计的顺序,并将变形后的程序存储在规定的存储装置中的步骤。
8.一种程序变换方法,用于控制计算机,对作为处理对象的程序进行变形,其特征在于,包含:
第一步骤,从规定的存储装置中读出作为上述处理对象的程序,检测该程序中的过程调用中的调用过程和被调用过程;
第二步骤,在上述调用过程中直接插入上述被调用过程;
第三步骤,从直接插入的上述被调用过程的开头开始回扫控制流,得到规定的命令列,将用于在上述被调用过程中参考自变量的参考条件移动到该命令列之前,同时,复制该命令列,并将其插入到根据参考条件而分支的各例程中;
第四步骤,在插入到根据上述参考条件而分支的各例程中的上述命令列中,除去不参考上述自变量的例程的无效命令列;
第五步骤,把除去上述无效命令列的程序存储在规定的存储装置中。
9.一种程序,用于控制计算机,将执行程序的源代码变换为机器语言,其特征在于,在上述计算机中执行:
第一处理,从规定的存储装置中读出作为处理对象的上述执行程序的源代码,检测该执行程序中的过程调用中的调用过程和被调用过程;
第二处理,在规定的估计条件下保护上述调用过程中描述的自变量估计,变形上述执行程序,以便在参考自变量时进行估计;
第三处理,将变形后的上述执行程序变换为上述机器代码,存储在规定的存储装置中。
10.根据权利要求9所述的程序,其特征在于,在计算机中执行:
在上述第一处理中,在以简单条件保护上述被调用过程的过程调用中,检测上述调用过程和上述被调用过程;
在上述第二处理中,将上述简单条件或者包含该条件的条件作为上述估计条件进行处理。
11.根据权利要求9所述的程序,其特征在于,在计算机中执行这样的处理:在上述第二处理中,将用于在上述被调用过程中参考上述自变量的参考条件或包含该参考条件的规定条件作为上述估计条件。
12.一种程序,用于控制计算机,将执行程序的源代码变换为机器语言,其特征在于,在上述计算机中执行:
第一处理,从规定的存储装置中读出作为处理对象的上述执行程序的源代码,检测在该执行程序中通过为自变量赋值而进行过程调用的位置;
第二处理,变形上述执行程序,以便改变进行上述过程调用的位置上的自变量估计和参考条件估计的顺序;
第三处理,将变形后的上述执行程序变换为上述机器代码,并存储在规定的存储装置中。
13.一种程序,用于控制计算机,将执行程序的源代码变换为机器语言,其特征在于,在上述计算机中执行:
第一处理,从上述规定的存储装置中读出作为处理对象的上述执行程序的源代码,检测上述执行程序中的过程调用中的调用过程和被调用过程;
第二处理,在上述调用过程中直接插入上述被调用过程;
第三处理,从直接插入的上述被调用过程的开头开始回扫控制流,得到规定的命令列,将用于在上述被调用过程中参考自变量的参考条件移动到该命令列之前,同时,复制该命令列,并将其插入到根据参考条件而分支的各例程中;
第四处理,在插入到根据上述参考条件而分支的各例程中的上述命令列中,除去不参考上述自变量的例程的无效命令列;
第五处理,把除去上述无效命令列的上述执行程序变换为上述机器语言代码,并存储在规定的存储装置中。
14.根据权利要求13所述的程序,其特征在于,在上述第三处理中,将命令流从上述被调用过程的开头开始回扫至控制被合流的基本块的最初命令,或者从上述被调用过程的开头开始回扫至以控制合流的基本块的最初命令为上限其最低的产生副作用的命令之后的命令,并得到上述规定的命令列。
15.根据权利要求13所述的程序,其特征在于,在上述第三处理中,还在上述计算机中执行将上述参考条件代替为包含该参考条件的其他条件的处理。
16.一种记录介质,其中记录有计算机可读取的如权利要求9至15中任一项所述的程序。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002377992A JP3956131B2 (ja) | 2002-12-26 | 2002-12-26 | プログラム変換装置、プログラム変換方法及びプログラム |
JP377992/2002 | 2002-12-26 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1512334A true CN1512334A (zh) | 2004-07-14 |
CN1243306C CN1243306C (zh) | 2006-02-22 |
Family
ID=32814996
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2003101202178A Expired - Fee Related CN1243306C (zh) | 2002-12-26 | 2003-12-09 | 程序变换装置和程序变换方法 |
Country Status (3)
Country | Link |
---|---|
US (2) | US7363621B2 (zh) |
JP (1) | JP3956131B2 (zh) |
CN (1) | CN1243306C (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100405294C (zh) * | 2005-03-15 | 2008-07-23 | 国际商业机器公司 | 在运行时期间优化计算机程序的系统与方法 |
CN101116054B (zh) * | 2005-02-03 | 2010-05-19 | 三菱电机株式会社 | 程序码生成支持装置及方法、程序执行装置及方法、程序码压缩装置及方法及其程序 |
US8448158B2 (en) | 2005-02-03 | 2013-05-21 | Mitsubishi Electric Corporation | Program code generation support device and method, program execution device and method, and program code compression processing device and method and program thereof |
US8527967B2 (en) | 2005-02-03 | 2013-09-03 | Mitsubishi Electric Corporation | Program code compression processing device and method and program thereof |
CN108027748A (zh) * | 2015-07-23 | 2018-05-11 | 国立大学法人东京工业大学 | 指令集模拟器及其模拟器生成方法 |
CN110488738A (zh) * | 2019-07-23 | 2019-11-22 | 中车青岛四方机车车辆股份有限公司 | 一种代码生成方法及装置 |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2443049A1 (en) * | 2003-09-26 | 2005-03-26 | Ali I. Sheikh | Method for computer program optimization in a dynamic compiling environment |
US20050198624A1 (en) * | 2004-03-02 | 2005-09-08 | Chipman Timothy W. | Method and system for program transformation |
US8341613B2 (en) * | 2007-12-04 | 2012-12-25 | International Business Machines Corporation | Reducing stack space consumption via head-call optimization |
US8261240B2 (en) * | 2008-01-15 | 2012-09-04 | Microsoft Corporation | Debugging lazily evaluated program components |
EP2698710A3 (en) * | 2008-02-12 | 2014-05-28 | Scrutiny, INC. | Systems and methods for information flow analysis |
US8302078B2 (en) * | 2008-03-10 | 2012-10-30 | The Boeing Company | Lazy evaluation of geometric definitions of objects within procedural programming environments |
CN102123713A (zh) * | 2008-05-09 | 2011-07-13 | Qlt栓塞输送公司 | 治疗青光眼和眼高血压的活性剂的持续释放递送 |
US9489366B2 (en) * | 2010-02-19 | 2016-11-08 | Microsoft Technology Licensing, Llc | Interactive synchronization of web data and spreadsheets |
US8683451B1 (en) | 2010-04-30 | 2014-03-25 | The United States Of America As Represented By The Secretary Of The Navy | System and method for translating software code |
US8966463B2 (en) * | 2011-11-29 | 2015-02-24 | Microsoft Technology Licensing, Llc | Eliminating redundant function calls |
JP5936118B2 (ja) * | 2012-04-16 | 2016-06-15 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | コード変換方法、プログラム及びシステム |
JP2013235386A (ja) * | 2012-05-08 | 2013-11-21 | Internatl Business Mach Corp <Ibm> | 最適化装置、最適化方法、及び最適化プログラム |
US10558458B2 (en) | 2016-06-06 | 2020-02-11 | Microsoft Technology Licensing, Llc | Query optimizer for CPU utilization and code refactoring |
US11144840B2 (en) | 2018-07-26 | 2021-10-12 | International Business Machines Corporation | Completing decision logic to avoid a side effect |
Family Cites Families (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS63163636A (ja) | 1986-12-26 | 1988-07-07 | Hitachi Ltd | 並列処理実行方式 |
US5701489A (en) * | 1995-06-06 | 1997-12-23 | International Business Machines Corporation | System for partial in-line expansion of procedure calls during program compilation |
US6091897A (en) * | 1996-01-29 | 2000-07-18 | Digital Equipment Corporation | Fast translation and execution of a computer program on a non-native architecture by use of background translator |
US6226789B1 (en) * | 1996-01-29 | 2001-05-01 | Compaq Computer Corporation | Method and apparatus for data flow analysis |
JPH1040106A (ja) | 1996-07-19 | 1998-02-13 | Nec Corp | 関数型言語処理装置 |
JP3284956B2 (ja) * | 1998-01-26 | 2002-05-27 | 日本電気株式会社 | プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体 |
US6151706A (en) * | 1998-06-16 | 2000-11-21 | Silicon Graphics, Inc. | Method, system, and computer program product for extending sparse partial redundancy elimination to support speculative code motion within an optimizing compiler |
US6481007B1 (en) * | 1999-06-03 | 2002-11-12 | Oracle Corporation | Optimizing parameter passing |
US6560774B1 (en) * | 1999-09-01 | 2003-05-06 | Microsoft Corporation | Verifier to check intermediate language |
JP3640081B2 (ja) * | 1999-12-27 | 2005-04-20 | 日本電気株式会社 | Mpiプログラムのコンパイルにおける最適化方法 |
US7577834B1 (en) * | 2000-05-09 | 2009-08-18 | Sun Microsystems, Inc. | Message authentication using message gates in a distributed computing environment |
US6810519B1 (en) * | 2000-09-29 | 2004-10-26 | International Business Machines Corporation | Achieving tight binding for dynamically loaded software modules via intermodule copying |
US6993754B2 (en) * | 2001-11-13 | 2006-01-31 | Hewlett-Packard Development Company, L.P. | Annotations to executable images for improved dynamic optimization functions |
US7086044B2 (en) * | 2001-03-22 | 2006-08-01 | International Business Machines Corporation | Method, article of manufacture and apparatus for performing automatic intermodule call linkage optimization |
US6817014B2 (en) * | 2001-04-11 | 2004-11-09 | Hewlett-Packard Development Company, L.P. | Analysis of executable program code using compiler-generated function entry points and endpoints with other sources of function entry points and endpoints |
US7065757B2 (en) * | 2001-09-28 | 2006-06-20 | Hewlett-Packard Development Company, L.P. | Efficient compilation of family of related functions |
JP3813087B2 (ja) * | 2001-12-20 | 2006-08-23 | インターナショナル・ビジネス・マシーンズ・コーポレーション | プログラム変換方法、コンピュータ装置及びプログラム |
US20030237079A1 (en) * | 2002-06-17 | 2003-12-25 | Aneesh Aggarwal | System and method for identifying related fields |
JP3900485B2 (ja) * | 2002-07-29 | 2007-04-04 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 最適化装置、コンパイラプログラム、最適化方法、及び記録媒体 |
US7356813B2 (en) * | 2002-09-26 | 2008-04-08 | Hewlett-Packard Development Company, L.P. | System and method for optimizing a program |
US7299458B2 (en) * | 2002-10-31 | 2007-11-20 | Src Computers, Inc. | System and method for converting control flow graph representations to control-dataflow graph representations |
US6983456B2 (en) * | 2002-10-31 | 2006-01-03 | Src Computers, Inc. | Process for converting programs in high-level programming languages to a unified executable for hybrid computing platforms |
US20050097533A1 (en) * | 2003-10-31 | 2005-05-05 | Chakrabarti Dhruva R. | Run-time performance with call site inline specialization |
US7302679B2 (en) * | 2003-10-31 | 2007-11-27 | Hewlett-Packard Development Company, L.P. | Scalable cross-file inlining through locality-based transformation ordering |
US7996825B2 (en) * | 2003-10-31 | 2011-08-09 | Hewlett-Packard Development Company, L.P. | Cross-file inlining by using summaries and global worklist |
US7340732B2 (en) * | 2003-11-26 | 2008-03-04 | Sun Microsystems, Inc. | Updating profile frequency for procedure inlining |
-
2002
- 2002-12-26 JP JP2002377992A patent/JP3956131B2/ja not_active Expired - Fee Related
-
2003
- 2003-12-09 CN CNB2003101202178A patent/CN1243306C/zh not_active Expired - Fee Related
- 2003-12-18 US US10/739,730 patent/US7363621B2/en not_active Expired - Fee Related
-
2007
- 2007-11-26 US US11/945,087 patent/US8225299B2/en not_active Expired - Fee Related
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101116054B (zh) * | 2005-02-03 | 2010-05-19 | 三菱电机株式会社 | 程序码生成支持装置及方法、程序执行装置及方法、程序码压缩装置及方法及其程序 |
US8448158B2 (en) | 2005-02-03 | 2013-05-21 | Mitsubishi Electric Corporation | Program code generation support device and method, program execution device and method, and program code compression processing device and method and program thereof |
US8527967B2 (en) | 2005-02-03 | 2013-09-03 | Mitsubishi Electric Corporation | Program code compression processing device and method and program thereof |
US8572557B2 (en) | 2005-02-03 | 2013-10-29 | Mitsubishi Electric Corporation | Program code generation support device and method, program execution device and method, and program code compression processing device and method and program thereof |
CN100405294C (zh) * | 2005-03-15 | 2008-07-23 | 国际商业机器公司 | 在运行时期间优化计算机程序的系统与方法 |
CN108027748A (zh) * | 2015-07-23 | 2018-05-11 | 国立大学法人东京工业大学 | 指令集模拟器及其模拟器生成方法 |
CN108027748B (zh) * | 2015-07-23 | 2019-09-10 | 国立大学法人东京工业大学 | 指令集模拟器及其模拟器生成方法 |
CN110488738A (zh) * | 2019-07-23 | 2019-11-22 | 中车青岛四方机车车辆股份有限公司 | 一种代码生成方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
JP2004206625A (ja) | 2004-07-22 |
CN1243306C (zh) | 2006-02-22 |
US7363621B2 (en) | 2008-04-22 |
US20080098372A1 (en) | 2008-04-24 |
US8225299B2 (en) | 2012-07-17 |
US20040210882A1 (en) | 2004-10-21 |
JP3956131B2 (ja) | 2007-08-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1243306C (zh) | 程序变换装置和程序变换方法 | |
CN1153141C (zh) | 调试优化代码的方法和设备 | |
Vallée-Rai et al. | Optimizing Java bytecode using the Soot framework: Is it feasible? | |
Rus et al. | Hybrid analysis: static & dynamic memory reference analysis | |
US7493610B1 (en) | Versioning optimization for dynamically-typed languages | |
US7725883B1 (en) | Program interpreter | |
Agrawal et al. | Interprocedural partial redundancy elimination and its application to distributed memory compilation | |
JPH07129412A (ja) | コンパイル方法及び装置 | |
JP2010079894A (ja) | トレース操作の修正によるトレースのオーバーヘッドの削減 | |
CN109799971A (zh) | 一种文件生成装置和方法 | |
US6751791B2 (en) | Method of optimizing an MPI procedure by altering to a procedure other than the invoked MPI procedure portion or by altering the execution sequence | |
Arabnejad et al. | Autopar-clava: An automatic parallelization source-to-source tool for c code applications | |
CN102981836A (zh) | 异构系统的编译方法和编译器 | |
JP3790707B2 (ja) | プログラム変換方法、これを用いたコンピュータ装置及びプログラム | |
Briggs et al. | Goal-directed interprocedural optimization | |
US6983459B1 (en) | Incorporating register pressure into an inlining compiler | |
Tinnerholm et al. | Towards introducing just-in-time compilation in a Modelica compiler | |
CN1129846C (zh) | 程序执行方法 | |
Gustafsson | Worst case execution time analysis of object-oriented programs | |
Barve et al. | Parallelism in C++ programs targeting objects | |
Beringer et al. | A bytecode logic for JML and types | |
Chauhan et al. | Slice-hoisting for array-size inference in MATLAB | |
CN1811713A (zh) | 系统执行故障预防方法及系统及其编译器 | |
JP3276479B2 (ja) | コンパイル方式 | |
JP2011181114A (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 | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20060222 Termination date: 20181209 |