CN1155884C - 通过大范围的同值关系的解析来消除传输命令的优化装置 - Google Patents
通过大范围的同值关系的解析来消除传输命令的优化装置 Download PDFInfo
- Publication number
- CN1155884C CN1155884C CNB971116121A CN97111612A CN1155884C CN 1155884 C CN1155884 C CN 1155884C CN B971116121 A CNB971116121 A CN B971116121A CN 97111612 A CN97111612 A CN 97111612A CN 1155884 C CN1155884 C CN 1155884C
- Authority
- CN
- China
- Prior art keywords
- equivalence
- register
- order
- field
- transmission command
- 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.)
- Expired - Fee Related
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
- G06F8/4434—Reducing the memory space required by the program code
- G06F8/4435—Detection or removal of dead or redundant code
-
- 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
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)
- Programmable Controllers (AREA)
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
根据本发明,基本区段分割部2把命令串分割为作为执行顺序连续的命令串的基本区段。控制流程解析部3解析所分割的基本区段间的控制流程。大范围同值关系解析部4沿着基本区段间的控制流程来跨在基本区段上地解析寄存器和存储器等的资源间的同值关系。利用所解析的资源间的同值关系,进行码的优化。本发明大范围地研究程序中的资源间的同值关系,利用该同值关系来进行码的优化,由此,就能谋求程序的码尺寸的缩小、执行时间的最短化。
Description
技术领域
本发明涉及对程序进行传输命令的消除和操作数的置换等的优化装置。
背景技术
近年来,盛行开发使用针对内部用途的微处理器而适应于各种各样的需要的信息装置。在这样的信息装置的开发中,在软件方面,要求处理的高速化和硬件的缩减(存储器尺寸的缩小)的彻底。在内部用途中,由于把程序安装到ROM中,就会因存储器尺寸的增大而使生产成本增加。用于内部用途的程序彻底地除去了冗长的传输命令,用应最大限度地引出具有微处理器功能的汇编语言来进行软件的开发。因此,汇编语言的语法因处理器的命令系统而使开发效率低下,而在移植性上存在问题。
如果用高级编程语言来开发针对内部用途的软件,就能提高开发效率。但是,其反而会因在向机器语言编译时生成很多的冗长命令,而使软件的存储器尺寸变大。
下面参照图1的示意图来说明从高级编程语言所生成的机器语言程序的存储器尺寸是如何变大的。图1是用『{』记号表示以高级编程语言所记述的运算和机器语言命令的对应关系的图。
在该图中,『mov1,(sp+4)』~『jsr_f2』的一连串的命令通过『{』记号来对应于源程序中的函数调用命令『f2(1,2);』。其表示:调用子程序f2的子程序调用命令被编译为该图中的『mov1,(sp+4)』~『jsr_f2』的三个命令。
从『mov(sp+24),r1』『mov(sp+20),r2』到『add r1,r2』『mov r2,(sp+4)』的命令在该图中通过『{』记号而对应于『a=p1+p2』。其表示:仅在子程序f2中所使用的变量(称为自变量)的加法运算『a=p1+p2』被编译成由『mov(sp+24),r1』~『add r1,r2』『mov(sp+20),r2』~『mov r2,(sp+4)』组成的四个命令。
而且,『mov(sp+24),r1』~『sub r1,r2』『mov r1,(sp)』的命令在该图中通过『{』记号而对应于『b=p1-p2』。其表示:子程序f2中的自变量的减法运算『b=p1-p2』在该图中被编译成由『mov(sp+24),r2』~『sub r2,r1』『mov r1,(sp)』组成的四个命令。
以该图所示的高级编程语言所记述的运算和机器语言命令的对应关系是一对多的关系。即,可以知道,实现以高级编程语言所记述的运算,却生成多个『mov~』这样的传输命令。如果在这样的传输命令中重写冗长的或高明的程序,就不需要这样。
为了生成多个传输命令,要求在对高级编程语言编译时有效地进行机器语言命令的优化。在开发内部用途的程序中,由于开发效率和存储器尺寸是对立的,就特别需要优化的彻底。在谋求提高机器语言程序的执行时间和存储器尺寸的方法中,常数的传输处理和叠入等为已知的。在仅消除冗长码的方法中,存在『使用同值关系的冗长命令的消除』。
下面参照图2的示意图来对『使用同值关系的冗长命令的消除』进行说明。图2是表示对应于基本区段内的各命令的同值关系的变化的样子的图。
在重写程序中,如果在列的中途存在跳跃命令或在列的中途成为跳跃对方,就有由命令的重写而破坏算法的危险。这样,在优化中,就要求程序的执行顺序连续进行。而成为不发生从中途向外部分支或不发生从外部向中途的分支的命令列,成为优化的对象的执行顺序的连续部称为基本区段。
在图2的程序中,分支命令『bra L4』是分支命令,其分支对方为标记L4。条件分支命令『bne L3』是根据零标志的0、1而改变分支对方的带条件分支命令,零标志为0则向标记L3分支。由于存在该条件分支命令『bne L3』和分支命令『braL4』,则在原来的条件下,就不能使程序全体为优化对象。因此,根据这些分支命令和分支对方的标记而把程序分成为基本区段。
在图2的例子中,由于从传输命令『mov#10,D0…(1)』到条件分支命令『bne L3…(3)』,执行顺序连续进行,而成为一个基本区段。由于从传输命令『mov(2,SP),D1…(6)』到分支命令『bra L4…(11)』,执行顺序连续进行,该范围成为一个基本区段。在传输命令『mov(2,SP),D1…(6)』以后,存在作为分支命令『braL4…(11)』的分支对方的标记L4。由于标记L4加在传输命令『mov #100,D1…(16)』上,则从传输命令『mov(10,SP),D1…(12)』到传输命令『mov D0,A0…(21)』成为一个基本区段。
当这样分成为基本区段时,对于各个基本区段而进行同值关系的检出。在基本区段中,当把最初的命令之前、两个相邻的命令之间和最后的命令之后称为点时,在程序中的某点上,某个资源,在保持与另一个资源相同的值时,这两个资源在该点上为同值关系。例如,在某点A上,当寄存器D0和寄存器A0保持相同的值时,寄存器D0和寄存器A0在点A上为同值关系;当在点B上寄存器D1保持当前值10时,寄存器D1和当前值10在点B上为同值关系。
在图2的右侧的表内,记述了传输命令『mov(2,SP),D1…(6)』、减法命令『sub#1,D1…(7)』、传输命令『mov D1,(2,SP)…(8)』、传输命令『mov(2,SP),D1…(9)』,在其旁边设有称为『D0=』、『D1=』、『A0=』的寄存器的一览表。他们表示在执行基本区段内的各命令时各寄存器是否与任一个码为同值关系。
存在把由传输命令『mov(2,SP),D1…(6)』所指示的存储器区域的保持值传输给数据寄存器D1的传输命令(所谓『以(2,SP)所指示的存储器区域』是指从栈指示的保持值隔2的存储器区域)。在该图的表中,传输命令『mov(2,SP),D1…(6)』的右边记述为『数据寄存器D1=栈(2,SP)』。其表示:通过传输命令『mov(2,SP),D1…(6)』的执行而使数据寄存器D1与栈(2,SP)成为同值关系。即,该图表示传输命令『mov(2,SP),D1…(6)』中的同值关系。
减法运算命令『sub#1,D1…(7)』是只减去数据寄存器D1的保持值的命令。在该图的表中,在传输命令『mov(2,SP),D1…(6)』的右边记述为『数据寄存器D1=栈(2,SP)』,但是在减法运算命令『sub#1,D1…(7)』的右边,其被消除。其表示:由于通过减法运算命令『sub#1,D1…(7)』的执行而减去数据寄存器D1,则数据寄存器D1-栈(2,SP)之间的同值关系破坏。
传输命令『mov(2,SP),D1…(8)』是把数据寄存器D1的保持值传输给由(2,SP)所指示的地址的栈区域的传输命令。在该图的表中,在传输命令『mov(2,SP),D1…(8)』的右边记述为『数据寄存器D1=栈(2,SP)』。其表示:通过传输命令『mov(2,SP),D1…(8)』的执行而使数据寄存器D1和栈(2,SP)再次成为同值关系。
传输命令『mov(2,SP),D1…(9)』是把由(2,SP)所指示的存储器区域的保持值传输给数据寄存器D1的传输命令。在该图的表中,在传输命令『mov(2,SP),D1…(9)』的右边记述为『数据寄存器D1=栈(2,SP)』。
传输命令『mov D0,A0…(10)』是把数据寄存器D0的保持值传输给地址寄存器A0的传输命令。在该图的表中,传输命令『mov D0,A0…(10)』的右边记述为『数据寄存器D1=栈(2,SP)』『数据寄存器D0=地址寄存器A0』『地址寄存器A0=地址寄存器A0』。其表示:通过传输命令『mov D0,A0…(10)』的执行而生成数据寄存器D0-地址寄存器A0之间的同值关系。
根据上述那样明确同值关系,在传输命令『mov D1,(2,SP)…(8)』中,不管成为『数据寄存器D1=栈(2,SP)』的同值关系确立,在传输命令『mov(2,SP),D1…(9)』中,进行永远确立同样的同值关系的传输。即,为了以传输命令『movD1,(2,SP)…(8)』确立同值关系,以传输命令『mov(2,SP),D1…(9)』的传输为浪费的。当通过这样的同值关系判明冗长的传输命令时,消除作为该冗长的命令的传输命令『mov(2,SP),D1…(9)』。
如果按上述那样来解析各基本区段中的同值关系,消除冗长命令,就能减少程序内的命令的个数,就能提高执行时间和存储器尺寸。
但是,在上述现有技术中的同值关系的解析中,由于不允许解析区域超出基本区段,则存在冗长命令的消除的余地,而存在存储器尺寸和执行时间的改善不彻底的问题。下面参照图3~图4来说明该消除的余地。图3是表示在图2的一例中消除未进行的传输命令的图。图4是表示图3所示的传输命令『mov A0,D0…(17)』不能消除的模式(不可消除模式)的图。图5表示图3所示的传输命令『mov A0,D0…(17)』能够消除的模式(可消除模式)的图。
在该图中,由椭圆所围绕的基本区段B4内的传输命令『mov A0,D0…(17)』是确立地址寄存器A0-数据寄存器D0之间的同值关系的传输命令。基本区段B2内的传输命令『mov D0,A0…(10)』是确立地址寄存器A0-数据寄存器D0之间的同值关系的传输命令,基本区段B3内的传输命令『mov A0,D0…(15)』是确立数据寄存器D0-地址寄存器A0之间的同值关系的传输命令。在传输命令『mov D0,A0…(10)』~传输命令『mov A0,D0…(17)』之间不存在使减法运算命令和加法运算命令这样的数据寄存器D0和地址寄存器A0的保持值变化的命令,在传输命令『mov D0,A0…(15)』~传输命令『mov A0,D0…(17)』之间不存在使减法运算命令和加法运算命令这样的数据寄存器D0和地址寄存器A0的保持值变化的命令,因此,在图3所见的范围内,应该可以作为冗长命令来消除传输命令『mov A0,D0…(17)』。
若参照图4、图5,在该基本区段后,存在基本区段M1、M2,在这些基本区段的末尾存在向基本区段B4分支的分支命令。在图4中,在通过分支命令向基本区段B4分支的路径中,存在来自基本区段B2的路径(1)、来自基本区段B3的路径(2)、来自基本区段M1的路径(3)、来自基本区段M2的路径(4)。下面参照图5来说明通过这些路径数据寄存器D0-地址寄存器A0之间的同值关系是否变化。在图5的一例中,在基本区段M1、基本区段M2的末尾存在传输命令『mov D0,A0…(31)』、传输命令『mov D0,A0…(32)』这样的传输命令。即,在图5的模式中,传输命令『mov A0,D0…(17)』的消除不会产生任何障碍。
在图4的一例中,在基本区段M1、基本区段M2的某处存在把其他值设定在地址寄存器A0中的传输命令『mov D1,A0…(31)』、传输命令『mov#30,A0…(32)』。如果在此情况下,当消除了传输命令『mov A0,D0…(17)』时,在从基本区段M1、M2分支的情况下,地址寄存器A0的保持值的设定失常,算法被破坏。即,在图4的模式中,不可能实现传输命令『mov A0,D0…(17)』的消除。
在消除基本区段之间的同值关系时,要求确实地弄清楚是图4的不可消除模式还是图5的可消除模式。但是,机器语言程序因由分支命令而存在按怎样的执行顺序,就不能弄清楚该图4、图5的模式。这样,在由自动编码器进行的编译后,在图5的可消除模式被见到的命令(17)这样的冗长的传输命令中,方法不能得到。由此,不会留出传输命令的消除的余地。在用复制传送等谋求机器语言程序的提高的方法中,与『使用同值关系的冗长命令的消除』相同,在基本区段内存在用于保障程序的算法的优化的对象。由此,即使存在多个图5的模式的码,也不能取出他们。
发明内容
鉴于上述问题,本发明的目的是提供一种优化装置,通过解析跨在基本区段之间的同值关系,消除传输命令,缩小程序的码尺寸,谋求彻底地使命令执行时间最短。
为实现上述目的,一种优化装置,从具有按条件分支的多个执行顺序的程序中,以其中任一个执行顺序来解析保持值为相同的硬件资源,使用解析结果来消除传输命令,其特征在于,包括:
·执行顺序信息生成装置,生成通过多个基本区段及这些的分支来源和分支对方的关系所表现的执行顺序信息,
其中,所述的基本区段是根据分支命令和分支对方标记所隔开的程序的小单位;
·后状态解析装置,在上述执行顺序信息中的分支来源基本区段中所包含的命令由处理器全部执行后的后状态下,解析哪个硬件资源和哪个硬件资源是否为相同的保持值,在后状态下对各分支来源基本区段制成由成为相同的保持值的资源名组成的同值集合;
·前状态解析装置,在以共同的基本区段作为分支对方的全部的分支来源基本区段之间选择同值集合的共同元素,由此,在分支对方基本区段的先头命令的执行前的前状态下,制成由成为相同的保持值的资源名组成的同值集合;
·区段内解析装置,当得到前状态中的同值关系集合时,在分支对方基本区段中所包含的各命令的执行步骤中,解析在前状态中的同值集合中所包含的共同元素是否增减,作为每个命令而得到命令的每个执行步骤的同值集合;
·资源名判定装置,当得到命令的每个执行步骤的同值集合时,判定位于这些命令之后的命令是否把在同值集合中所示的资源名指定给传输来源、传输对方;
·传输命令消除装置,当判定为指定给传输对方时,消除相应次序的命令。
根据以上的优化装置,通过在分支对方相同的基本区段之间取得集合积,即使在按照任一执行顺序的情况下,也能判定作为同值关系的寄存器、存储器和当前值。因此,就能确实地弄清楚不依存于条件分支的路径的同值关系。由于在确实弄清楚的基础上消除传输命令,就能更彻底地实现优化。
其中,其特征在于,包括:状态表存储装置,把多个资源名作为索引项目,在每个基本区段中存储包含对应于这些索引项目的写入字段的对应表;初始化装置,从程序检出指示传输来源资源的码(以下称为源码)和指示传输对方资源的码(以下称为目标(デイストネ一シヨン)码)的全部,通过把他们写入状态表中的分支对方基本区段的写入字段,进行写入字段的初始化;后状态解析装置包括:第一取出装置,当进行由初始化装置所产生的写入时,从开头到末尾依次取出每个基本区段内的命令;命令解读装置,每当取出一个命令,解读所取出的命令是哪个命令;第一擦除装置,当解读为传输命令或运算命令时,在状态表存储装置中,擦除已写入到以对应命令的目标(デイストネ—シヨン)码的资源名进行索引的写入字段中的全部的码;操作数识别装置,识别所解读的传输命令的目标(デイストネ—シヨン)码和源码表示哪个资源名;第一写入装置,当源码的资源名被识别时,把目标(デイストネ—シヨン)码写入由所识别的资源名所索引的写入字段,当目标(デイストネ—シヨン)码的资源名被识别时,把源码写入由所识别的资源名索引的写入字段;指示装置,当完成写入到写入字段中时,指示给取出装置以取出次序的命令;决定装置,当通过反复进行由指示装置所产生的指示而取出至末尾的命令时,把在此之前施加的写入和擦除的状态表存储装置的存储内容决定为在每个基本区段的后状态下的同值集合。
根据该优化装置,由于把可以成为同值关系的全部的码设定到状态表存储装置中,而以删去这些同值集合而进行的形式来求出同值关系,因而,在分支对方的基本区段内,就能在同值集合中不遗漏地反映全部同值关系不变的资源。
前状态解析装置包括:设定装置,把后状态中的同值集合设定在状态表存储装置的存储内容中对应于分支对方的基本区段的写入字段中;上述优化装置进一步包括:备忘存储装置,当通过设定装置设定同值集合时,存储在状态表存储装置内所得到的同值集合作为备用;第一启动装置,当通过设定装置把同值集合设定到写入字段中时,再启动后状态解析装置;核对装置,当通过后状态解析装置而在状态表存储装置内得到新的同值集合时,把所得到的同值集合与存储在备忘存储装置中的备用进行核对,而判定同值集合中的变化的有无;第二启动装置,当判定了核对的结果同值集合的码数的变化时,再次启动后状态解析装置和集合积装置;区段内解析装置在核对的结果为判定为码数的变化时,最后,把取得的集合积结果作为前状态中的同值关系集合而开始各命令的执行状态中的解析。
根据该优化装置,通过反复进行集合积的运算,就能逐渐地使同值关系的元素数减少。即使处理对象的程序由基本区段B1、B2、B3、B4、B5组成,末尾的基本区段B5向开头的基本区段B1分支而形成循环处理的情况下,通过反复进行集合积的运算,就能使程序的大范围的同值关系进行匹配。
第一写入装置包括第一写入部,在通过操作数识别装置而识别寄存器名、存储器地址的组合时,把存储器地址写入由状态表存储装置中的寄存器名进行索引的写入字段中;第二写入装置进一步包括第二写入部,判定已写入到以由操作数识别装置所识别的寄存器名进行索引的写入字段中的寄存器名,在由判定的寄存器名进行索引的写入字段中写入所识别的存储器地址,由此,在状态表存储装置中反映出通过命令解读装置解读的传输命令而成为相同保持值的存储器地址。
根据该优化装置,由于在状态表存储装置中反映出通过传输命令而成为同值关系的寄存器名、存储器地址、当前值,则使写入字段中的成分增加。通过这样的同值关系成分的增加就能提高冗长传输命令的消除的概率。
第二写入装置进一步包括:第一写入字段-寄存器检出部,当由操作数识别装置识别了寄存器名、存储器地址的组合时,检出在写入字段已写入的所识别的存储器地址的索引项目的寄存器名;第三写入部,把已写入到由通过第一写入字段-寄存器检出部所检出的寄存器名进行索引的写入字段中全部的码复制到由操作数识别装置所识别的寄存器名的写入字段中,把由第一写入字段-寄存器检出部所检出的寄存器名写入到由操作数识别装置所识别的寄存器名的写入字段中,把由操作数识别装置所识别的寄存器写入到由第一写入字段-寄存器检出部所检出的寄存器名进行索引的写入字段中,由此,在状态表存储装置中反映出通过命令解读装置解读的传输命令而成为相同保持值的寄存器名或存储器地址。
根据该优化装置,在操作数的码为寄存器和存储器的组合时,探测出把所识别的寄存器写入到写入字段中的存储器地址,由此,在状态表存储装置中反映出更多的同值关系。由此,就能时同值关系的成分增加。通过该增加就能提高冗长传输命令的消除的概率。
第一写入装置包括:第四写入部,在由操作数识别装置识别寄存器名、当前值码的组合时,把当前值码写入到由寄存器名进行索引的写入字段中。
根据该优化装置,在操作数的码为寄存器和当前值的组合时,通过在该寄存器的写入字段中写入当前值,而增加状态表存储装置中的同值关系。由此,就能时同值关系的成分增加,通过该增加就能提高冗长传输命令的消除的概率。
第二写入装置,包括:第二写入字段-寄存器检出部,在由操作数识别装置识别寄存器名、当前值码的组合时,如果存在把相对应的当前值码写入到写入字段中的寄存器名,就检出其;第五写入部,把已写入到以由第二写入字段-寄存器检出部所检出的寄存器名进行索引的写入字段中的全部的码复制到以由操作数识别装置所识别的寄存器名的写入字段中,写入由第二写入字段-寄存器检出部所检出的寄存器名,把所识别的寄存器名写入到以所检出的寄存器名进行索引的写入字段中。
根据该优化装置,即使在操作码中包含当前值,通过追寻当前值的同值关系,就能因在状态表存储装置中反映出更多的同值关系而使同值关系的成分增加。通过该增加就能提高冗长传输命令的消除的概率。
第二写入装置,包括:第三写入字段-寄存器检出部,在由操作数识别装置识别存储器地址、当前值码的组合时,如果存在把所识别的当前值码或存储器地址写入到写入字段中的寄存器名,则检出其;第六写入部,把当前值码和存储器地址写入到以由第三写入字段-寄存器检出部所检出的寄存器名进行索引的写入字段中。
根据该优化装置,即使操作码为当前值和存储器的组合,也能通过追寻他们的同值关系而在状态表存储装置中反映出更多的同值关系。由此,就能使同值关系的成分增加。通过该增加就能提高冗长传输命令的消除的概率。
第二写入装置,包括:第四写入字段-寄存器检出部,在由操作数识别装置识别存储器地址、存储器地址的组合时,如果存在把所识别的存储器地址写入到写入字段中的寄存器名,则检出其;第七写入部,把所识别的存储器地址写入到以所检出的寄存器名进行索引的写入字段中。
根据该优化装置,即使操作码为存储器之间的组合,也能通过追寻存储器的同值关系而在状态表存储装置中反映出更多的同值关系。由此,就能使同值关系的成分增加,通过该增加就能提高冗长传输命令的消除的概率。
其中寄存器的任一个是在子程序调用命令的开头和末尾不进行退避-恢复保持值的破坏寄存器,第二擦除命令完全进行擦除以成为:如果由第一取出装置所取出的命令是子程序调用命令,则在状态表存储装置的存储内容中,在已写入到对应于破坏寄存器的寄存器名的写入字段中的码因该命令而成为没有相同的保持值,第三擦除装置进行擦除以成为:在第一、第二存储装置的存储内容中,在已写入到以除破坏寄存器之外的寄存器名进行索引的写入字段中的全部的码中,破坏寄存器的寄存器名因该命令而成为没有相同的保持值。
根据该优化装置,由于考虑破坏寄存器的使用而生成同值关系,就能高效地优化从高级编程语言所生成的码。
根据本发明的一种优化装置,从具有由按件分支按怎样的执行顺序的程序中,以其中任一个执行顺序来解析保持值为相同的硬件资源,使用解析结果来消除传输命令,其特征在于,包括:
·执行顺序信息生成装置,生成通过多个基本区段名及这些的分支来源-分支对方的关系所表现的执行顺序信息,
其中,所述的基本区段是根据分支命令和分支对方标记所隔开的程序的小单位;
·后状态解析装置,在上述执行顺序信息中的分支来源基本区段中所包含的命令由处理器全部执行的后状态下,解析哪个硬件资源和哪个硬件资源是否为相同的保持值,在后状态下对各分支来源基本区段制成由成为相同的保持值的资源名组成的同值集合;
·前状态解析装置,在以共同的基本区段作为分支对方的分支来源基本区段之间选择同值集合的共同元素,由此,在分支对方基本区段的先头命令的执行前的前状态下,制成由成为相同的保持值的资源名组成的同值集合;
·区段内解析装置,当得到前状态中的同值关系集合时,在分支对方基本区段中所包含的各命令的执行步骤中,解析在前状态中的同值集合中所包含的共同元素是否增减,作为每个命令的解析结果而得到命令的每个执行步骤的同值集合;
·资源名判定装置,当得到命令的每个执行步骤的同值集合时,判定这些次序的命令是否把在同值集合中所示的资源名指定给源码或目标码;
·预测装置,当被判定为是指定时,预测表示以相应的命令的执行步骤中的同值集合内的各资源名置换次序的命令的集合名时的次序的命令中的执行时间和/或存储器尺寸的命令成本;
·置换装置,置换对方,当命令成本变少时,用所预测的相同保持值的资源名置换次序的命令的资源名。
根据该优化装置,由于把传输命令和运算命令的操作数码置换为命令成本更小的操作数码,就能缩小程序尺寸。
根据本发明的一种优化装置,从具有按条件分支的多个执行顺序的程序中,以其中任一个执行顺序来解析保持值为相同的硬件资源,使用解析结果来消除传输命令,其特征在于,包括:
·执行顺序信息生成装置,生成通过多个基本区段名及这些的分支来源-分支对方的关系所表现的执行顺序信息,
其中,所述的基本区段是根据分支命令和分支对方标记所隔开的程序的小单位;
·后状态解析装置,在上述执行顺序信息中的分支来源基本区段中所包含的命令由处理器全部执行的后状态下,解析哪个硬件资源和哪个硬件资源是否为相同的保持值,在后状态下对各分支来源基本区段制成由成为相同的保持值的资源名组成的同值集合;
·前状态解析装置,在以共同的基本区段作为分支对方的全部的分支来源基本区段之间选择同值集合的共同元素,由此,在分支对方基本区段的先头命令的执行前的前状态下,制成由成为相同的保持值的资源名组成的同值集合;
·区段内解析装置,当得到前状态中的同值关系集合时,在分支对方基本区段中所包含的各命令的执行步骤中,解析在前状态中的同值集合中所包含的共同元素是否增减,作为每个命令而得到命令的每个执行步骤的同值集合;
·资源名判定装置,当得到命令的每个执行步骤的同值集合时,判定位于这些命令之后的命令是否把在同值集合中所示的资源名指定给传输来源、传输对方;
·参照侧命令检出装置,当得到命令的每个执行步骤的同值集合时,从全部的分支对方的基本区段检出把在参照侧命令的执行步骤中的同值集合中包含的资源名作为传输来源、传输对方的传输命令或运算命令;
·定义侧传输命令检出装置,从全部的分支对方的基本区段的各个中检出把值设定在检出的命令的源码中的定义侧的传输命令;
·置换可否判定装置,根据在参照侧命令的执行步骤中的同值集合来判定是否可以把由参照侧命令检出装置所检出的命令的源码置换为所检出的定义侧传输命令的源码;
·传输命令消除装置,如果可以置换,则执行上述置换,消除处于执行后分支对方的基本区段中的所置换的传输命令所对应的全部的定义侧传输命令。
根据该优化装置,由于能够集中位于图5的一例所示的分支对方的基本区段中的传输命令『mov D0,A0…(10)』、传输命令『mov D0,A0…(15)』来进行消除,就能消除更多的传输命令。
附图说明
图1是用『{』记号表示以高级编程语言所记述的运算和机器语言命令的对应关系的图;
图2是表示对应于基本区段内的各命令的同值关系的变化的样子的图;
图3是表示图2的一例中消除未进行的命令的图;
图4是表示图3所示的传输命令『mov D0,A0…(17)』不能消除的模式(不可消除模式)的图;
图5是表示图3所示的传输命令『mov D0,A0…(17)』可消除的模式(可消除模式)的图;
图6是表示第一实施例所涉及的优化装置的构成图;
图7是表示大范围同值关系解析处理的主流程、Out集合计算处理、同值关系消除处理的分流程;
图8是表示图7的流程图的步骤b4中的同值关系生成处理的分流程;
图9是表示图6所示的同值资源间传输命令消除部5的处理的流程图;
图10是表示第二实施例所涉及的优化装置的构成图;
图11是表示图10所示的操作数置换部6的处理的流程图;
图12是表示第三实施例所涉及的优化装置的构成图;
图13是表示图12所示的复制传送部7的处理的流程图;
图14是表示图13所示的步骤g8的可消除命令的消除处理的处理的流程图;
图15是用实线的箭头代表基本区段间的控制流程信息的示意图;
图16是用虚线的箭头代表图15所示的各基本区段间的同值集合被设定为哪个的示意图;
图17是表示基本区段内的各命令所对应的同值关系消除后、同值关系生成后的同值关系的变化样子的图;
图18是表示各基本区段的全部集合、基本区段的In集合、Out集合的图;
图19是表示在表示图7所示的大范围同值关系解析处理的主流程、Out集合计算处理、同值关系消除处理的分流程的第一轮的步骤a7中的处理中更新各基本区段的In集合的样子的图;
图20是表示在表示图7所示的大范围同值关系解析处理的主流程、Out集合计算处理、同值关系消除处理的分流程的第一轮的步骤a8中的处理中更新各基本区段的Out集合的样子的图;
图21是表示在表示图7所示的大范围同值关系解析处理的主流程、Out集合计算处理、同值关系消除处理的分流程的第二轮的步骤a7中的处理中更新各基本区段的In集合的样子的图;
图22是表示最终生成的基本区段的的In集合、Out集合的图;
图23(a)是表示从分支对方的基本区段检出根据图22所示的In集合所更新的同值集合和该内容的传输命令的样子的图;
图23(b)是表示从分支对方的基本区段消除根据图22所示的In集合所更新的同值集合和该内容的传输命令的样子的图;
图24(a)是第二实施例的处理对象的源程序的例子;
图24(b)是在(a)的程序例子中所使用的命令的示意图;
图24(c)是分割为基本区段后的(a)的程序例子;
图25表示命令成本表的一例的图;
图26表示第二实施例的处理对象的基本区段间的控制流程信息、基本区段的In集合、Out集合的图;
图27表示复制传送处理的样子的示意图;
图28(a)是成为第三实施例的处理对象的程序例子;
图28(b)是表示把(a)的程序例子分割为哪样的图;
图29表示图28的程序例子的基本区段间的控制流程信息、基本区段的In集合、Out集合的图;
图30表示可消除命令的选择的样子的图;
图31复制传送处理后的程序的一例。
具体实施方式
(第一实施例)
下面参照附图对本发明的优化装置的实施例进行说明。首先对在本说明书中所引用的术语进行说明。
·基本区段
是执行顺序连续的命令串,即程序中的连续命令串,把在串的途中不跳跃并且不向途中跳跃的命令串称为基本区段。其中,在程序被分割为子程序调用命令的情况下,各个子程序不会在基本区段内。在子程序调用中,即使跳跃到其他的子程序调用命令中,也必须返回到该子程序调用命令的下一个命令中,因此,执行顺序连续进行。由此,在本实施例中,以把子程序作为一个程序进行处理的子程序单位来进行向基本区段的分割。
·上游区段
沿着控制的流程,到达某个基本区段的全部的路径。在这些路径中,在顺着控制的流程而追寻基本区段时,把位于该基本区段之前的全部的基本区段称为上游区段。如果考虑图2的程序例子,基本区段B2、B3的上游基本区段为基本区段B1,基本区段B4的上游基本区段为基本区段B2、B3。如果这样考虑,不存在开始进行程序处理的开始基本区段B1的上游区段。
·等效传输命令
所谓等效传输命令代表mov等的符号·尺寸相等的传输命令。
·命令成本
把命令的码尺寸和命令执行时间称为命令成本。所谓命令成本小的命令是指码尺寸小的命令或执行时间短的命令。
·同值集合
把与某个资源具有同值关系的全部的资源作为元素的集合称为同值关系集合。例如,在图2的命令3之前的点上,寄存器D0的同值关系集合为{当前值10、(_a)}。
本发明中的同值关系全部以与寄存器资源的同值关系集合这样的形式进行保持。把每个寄存器资源的同值关系集合集中起来而称为同值集合。
把以用于基本区段内的全部的传输命令的基本区段的出口所代表的同值关系的集合称为Out集合。由上游基本区段所提供的同值集合是本区段的入口中的同值集合,由此称为In集合。在图16中,
表示In集合、Out集合的例子。 图15是用实线的箭头代表基本区段间的控制流程信息的示意图。在图2所示 的的现有技术的优化中,从传输命令『mov(2,SP),D1…(6)』到分支命令『bra L4…(11)』探索基本区段内的命令,反复进行同值关系的消除、同值关系的 确立。由这样的反复,通过分支命令『bra L4…(11)』,而确立『数据寄存 器D0=地址寄存器A0』『数据寄存器D1=栈(2,SP)』『地址寄存器A0=数据 寄存器D0 』这样的同值关系。这样的同值关系是从基本区段B2内的命令开头 到末尾执行的结果而在基本区段的出口上代表的同值关系。
在考虑基本区段间的同值关系的情况下,象在分支命令『bra L4…(11)』中的同值关系那样,在各基本区段的末尾,同值关系为哪个,或者,这些同值关系提供给哪个后续的基本区段,是重要的。参照图16来说明向该后续的基本区段的同值关系所产生的影响。图16是用虚线的箭头代表图15所示的各基本区段间的同值集合被设定为哪个的示意图。当分支不存在,上游基本区段为一个时,该上游基本区段的Out集合为后续基本区段的In集合。与此相对应,在基本区段B4中,存在基本区段B2、基本区段B3、基本区段M1、基本区段M2这样的四个上游基本区段。在此情况下,可以提供给基本区段B4的同值关系是基本区段B2、基本区段B3、基本区段M1、基本区段M2的Out集合中的共同元素。换句话说,在基本区段B2的Out集合、基本区段B3的Out集合、基本区段M1的Out集合、基本区段M2的Out集合中,共同的元素可以设定在基本区段B4的In集合中。这样一来,在基本区段B4的In集合中,可以设定作为上游基本区段的基本区段B2、基本区段B3、基本区段M1、基本区段M2的Out集合中的共同元素。
由上述内容,当在具有多个上游基本区段的基本区段中设定In集合时,通过在这些上游基本区段之间提取Out集合的集合积,就能求出In集合的元素。
通过后述的大范围同值关系解析部4来取得同值集合的集合积。在图2的一例中,由于对数据寄存器D0、D1、A0的各个求出同值关系,而对这些全部算出集合积。
·对于源程序
下面对本实施例中使用的源程序中的命令进行说明。在图2所示的源程序中,D0、A0分别代表数据寄存器D0、地址寄存器A0,(xx、SP)代表栈。(_xx)代表外部存储器,#xx代表当前值。
图2所示的源程序的各命令的操作数A、B分别代表源操作数、目标(デイストネ—シヨン)操作数。例如在mov命令中,源操作数A是栈(2,SP),目标(デイストネ—シヨン)操作数是寄存器D0,这样一来,该mov命令进行这样的动作:把源操作数的栈(2,SP)的内容存储到目标(デイストネ—シヨン)操作数的数据寄存器D0中。在add命令中,源操作数A为当前值1,目标(デイストネ—シヨン)操作数为寄存器D1,这样一来,该add命令进行这样的动作:把源操作数的当前值1与目标(デイストネ—シヨン)操作数的寄存器D1的内容进行加法运算,把运算结果存储到目标(デイストネ—シヨン)操作数的寄存器D1中。这样,在上述例子中所示的mov命令中,栈(2,SP)的值由于仅被参照而不变化而为被参照的资源,寄存器D0由于值变化而为定义侧的资源。在上述例子中所示的add命令中,当前值1成为被参照的资源,寄存器D1成为被定义的资源。
而且,在本实施例中,由于是以把从自动编码器所输出的码作为输入为前提,则通过执行子程序调用命令,而把在子程序调用命令前后保持的值可以变化的某个寄存器(破坏寄存器)作为与自动编码器使用的破坏寄存器相同的。
·被参照·定义的资源
在本说明书中,把寄存器、栈(内部存储器)、外部存储器、当前值统称为资源。在下述中,把栈和外部存储器合并而称为资源。所谓间接参照是指代表存储器的操作数的表示法的一种,是用栈、寄存器名来代表外部存储器的表示法。虽然存储器资源在用_a这样的标记名代表时存在,但是,大多通过间接参照而用栈(2,SP)、(3,A0)等这样的寄存器名-当前值的组合、栈批示字-当前值的组合来代表。在本说明书中,为了处理用寄存器名-当前值的组合、栈指示字-当前值的组合来代表的存储器资源,而以在源侧的操作数中所记述的码(源码)和在目标侧的操作数中所记述的码(目标(デイストネ—シヨン)码)来表现同值关系。
进而,在构成某个命令的操作数的寄存器和存储器等资源中,源码,除了在单项算符外,仅参照被保持在该资源中的值而其值不变化。这样,把这样的资源称为『被参照的资源』。另一方面,目标(デイストネ—シヨン)码通过命令而变化为新的值。把这样的资源称为『被定义的资源』。例如在图2所示的源程序的(10)的命令『mov D0,A0』中,寄存器D0是被参照的资源,寄存器A0是被定义的资源。
下面,参照附图对本发明的优化装置的一个实施例进行说明。图6是本发明的一个实施例中的优化装置的构成图。在图6中,优化装置由基本区段分割部2、控制流程解析部3、大范围同值关系解析部4、同值资源间传输命令消除部5构成,读入以文件形式保存在外部存储装置中的汇编程序源码并对其进行处理。
同值集合保持部1保持用于算出各基本区段的Out集合-In集合的作业用的对照表。本对照表,如图6所示的那样,在纵向上存在各基本区段的In集合的记入用的栏,在横向上存在专用目的计算机的寄存器的一览表和分支来源基本区段用的栏以及分支对方基本区段用的栏。该表在由上述大范围同值关系解析部4所产生的处理中被适当地更新而表示出图16所示的控制流程和Out集合-In集合。用下面那样表示的表示法来表示该对照表的内容。而且,为了说明的简练,Out集合-In集合算出的样子仅对基本区段B1~B4进行记载。
B1:In D0={} D1={} A0={}
Out D0={} D1={} A0={}
B2:In D0={} D1={} A0={}
Out D0={} D1={} A0={}
B3:In D0={} D1={} A0={}
Out D0={} D1={} A0={}
B4:In D0={} D1={} A0={}
Out D0={} D1={} A0={}
基本区段分割部2把程序分割为子程序单位,把各个子程序分割为基本区段。在下面,把该被分割的基本区段作为处理对象进行处理。当图2所示的源程序被基本区段分割部2进行处理时,得到图15所示的基本区段。
基本区段分割部2在向基本区段的分割后,按箭头a1所示的那样,根据分割结果而扩展保持在同值集合保持部1中的对照表,把对照表的各项目与被分割的基本区段进行对应。在图6的一例中,在对照表中,依次把In集合、Out集合栏分配给基本区段B1;把In集合、Out集合栏分配给基本区段B2;把In集合、Out集合栏分配给基本区段B3;把In集合、Out集合栏分配给基本区段B4。
控制流程解析部3进行基本区段的上游区段的解析等、各基本区段间的控制的流程的解析。在图15中表示出了控制流程解析部3处理图6所示的程序的结果。在图15中,B1、B2、B3、B4分别代表基本区段,基本区段间的箭头代表基本区段间的控制流程。例如,表示出从基本区段B1向基本区段B2、B3的箭头。其表示控制的流程从该基本区段B1移到基本区段B2、B3。
基本区段B2的上游区段是位于控制流程之前的基本区段B1,同样,基本区段B4的上游区段是基本区段B2、B3。在对上述基本区段分割部2、控制流程解析部3进行详细的说明中,虽然由于不是本发明的着眼点的公知技术而省略其说明,但是,通过该控制流程的解析结果来把握是上游基本区段还是后续基本区段。控制流程解析部3,如实线的箭头a2所示的那样,在对照表中的分支来源基本区段和分支对方基本区段栏中反映出控制流程的解析结果。
大范围同值关系解析部4沿着由控制流程解析部3所解析的基本区段间的控制流程来解析基本区段间的同值关系。大范围同值关系解析部4按虚线的箭头a3所示的那样把作为解析结果所得到的Out集合、In集合写入到各基本区段的栏中。
下面参照图7的流程图来说明大范围同值关系解析部4的处理程序。图7是表示大范围同值关系解析处理的主流程、Out集合计算处理、同值关系消除处理的分流程。而且,图7、图8的流程图的细目中,图7的步骤a1~步骤a12是主流程,其右边的由步骤b1~步骤b5组成的流程图是Out集合计算处理的流程图。其右边的由步骤c1~步骤c13组成的流程图是同值关系消除处理的流程图,图8的流程图是同值关系生成处理的分流程图。在这些流程图中,使用不同的字母的参照标号来进行相互区别,而成为:主流程中的步骤为步骤a,Out集合计算处理的流程中的步骤为步骤b,同值关系消除处理的流程中的步骤为步骤c。
大范围同值关系解析部4的主流程为反复进步骤a2~步骤a4和步骤a6~步骤a11的结构。步骤a2~步骤a4是用于检出局部的同值关系的重复部,步骤a6~步骤a11是用于检出全程的同值关系(称为大范围同值关系)的重复部。局部的同值关系是在一个基本区段内部进行归结,而全程的同值关系取决于各基本区段的分支来源。局部的同值关系的检出通过步骤a1中的In集合的设定和步骤a3中的Out集合计算处理来进行。与此相对应,全程的同值关系的检出是通过步骤a7中的In集合的设定和步骤a8中的Out集合计算处理来进行。即,通过是以步骤a1还是以步骤a7设定In集合来切换局部、全程的同值关系检出。
担当着全程的同值关系检出的步骤a6~步骤a11的反复处理,在步骤a12中,到判定Out集合变化标志的OFF为止。换句话说,当Out集合变化标志是ON时,反复进行步骤a6~步骤a11的循环处理。Out集合变化标志为仅当在步骤a9中检出Out集合的变化时所设定的标志,步骤a6~步骤a11为反复进行直到该步骤a9变为NO为止的循环结构。
本流程图的步骤a3和步骤a8中的Out集合计算处理为对基本区段内的各命令反复进行图7的步骤b1~b5的一连串处理的循环构造,为这样的构造:循环处理每进行一轮,就执行同值关系生成处理的流程图的步骤b1~b13中的一连串的同值关系消除处理和图8的流程图的步骤d1~步骤d22中的同值关系生成处理。
通过该同值关系消除处理-同值关系生成处理,大范围同值关系解析部4依照这样的程序进行:首先对于定义侧的资源,到此之前所检出的同值关系进行消除,第二改变该命令中的同值关系并进行设定。
位于图7的右半部分的流程图是同值关系消除处理,用步骤c1、步骤c2、步骤c3、步骤c4、步骤c7、步骤c10一连串的判定步骤来解读各命令,根据该解读结果而选择地执行步骤c5、步骤c6、步骤c8、步骤c9、步骤c11、步骤c12、步骤c13,由此,适当地消除同值集合内。
图8是表示图7的流程图的步骤b4中的同值关系生成处理的分流程。图8的流程图用步骤d1、步骤d2、步骤d3、步骤d6、步骤d7、步骤d11、步骤d14、步骤d15、步骤d19、步骤d21一连串的判定步骤来识别各命令的操作数码,根据该识别结果而选择地执行步骤d4、步骤d5、步骤d8~步骤d10、步骤d12~步骤d13、步骤d16~步骤d18、步骤d20、步骤d22,由此生成同值集合。
下面以参照标号的顺序来说明这些流程图的各个步骤。在步骤a1中,把开始基本区段的In集合设定为空集合。如果把In集合设定为空集合,在按在现有技术中说明的那样的基本区段内进行归结的同值关系通过步骤a3的执行而生成。对于该开始基本区段的设定,从哪个基本区段所分支的基本区段的In集合在全部集合栏中进行初始化。所谓全部集合是指全部列举出程序内的操作数的码的集合。在图2的程序例子中,全部结合U为下列这样:
U={#10,D0,(_a),(10,SP),D1,#0,(2,SP),1,A0,(20,SP),#100,(4,SP)}
下面描述全体集合栏所产生的初始化的意义。具有这样的可能性:除开始基本区段之外的基本区段继承分支来源的基本区段的同值关系。由于该可能性,成为分支对方的基本区段在In集合栏中设定全体集合。
例如,在基本区段的入口之前,同值关系成立,具有该同值关系的资源的值在基本区段内部完全不变化。例如,在图2中,由于在基本区段B2中,数据寄存器D0、当前值10、外部存储器(_a)的值在基本区段B2内没有任何变化,则该同值关系被维持到基本区段的出口为止。
当成为分支来源的基本区段的In集合为空集合时,这样的同值关系就不能表示在基本区段的In集合栏中。即,不能检出可以从分支来源继承的同值关系。对于成为分支来源的基本区段,由于往往检出一个可以成为In集合栏中的资源,作为成为分支来源的基本区段在该In集合栏中设定全体集合。
而且,全体集合U的算出可以用这样的简易方法实现:收集在想要处理的程序中包含的全部命令的源码、目标(デイストネ—シヨン)码,把他们进行集中。
在步骤a2~步骤a4中,对于全部的基本区段,转换到下述的Out集合计算处理。
在步骤a5中,使表示Out集合是否变化的Out集合变化志成为Off。
在步骤a6、a7、a8、a9、a10、a11中,对于除开始基本区段之外的全部基本区段,进行In集合、Out集合的计算。
特别是,在步骤a7中,从全部的上游区段的Out集合的集合积求出In集合。如图5所示的示意图的基本区段B4那样,在存在四个上游基本区段(基本区段B2、基本区段B3、基本区段M1、基本区段M2)的情况下,如果提取集合积,就能求出作为上游基本区段的(基本区段B2、基本区段B3、基本区段M1、基本区段M2的同值关系的共同元素。在步骤a7中,之所以提取集合积,是因为要把该共同元素设定在In集合栏中。
在步骤a8中,把由步骤a7所计算的In集合作为初始值,对于该基本区段而转换到下述的Out集合计算处理。
在步骤a9中,判定Out集合的成分是否从上次计算的Out集合的成分发生了变化。在发生了变化的情况下,转换到步骤a10,在未发生变化的情况下,转换到步骤a11。
在步骤a10中,使表示Out集合变化的Out集合变化标志成为On。
在步骤a12中,判定表示Out集合变化的Out集合变化标志是否为On。在是On的情况下,转换到步骤a5,在不是On的情况,结束处理。
下面参照图19~图21对步骤a1~步骤a12的处理进行说明。图19表示通过图7所示的主流程的第一轮中的步骤a7的处理来使基本区段的In集合更新的样子。图20表示通过图7所示的主流程的第一轮中的步骤a8的处理来使各基本区段的In集合更新的样子。图21表示通过图7所示的主流程的第二轮中的步骤a7的处理来使各基本区段的In集合更新的样子。这些示意图典型地表示出集合积的算出处理和In集合的更新处理。
在图19中,带有采用『In』『Out』的文字串的直线、曲线表示各基本区段的In集合、Out集合,围绕采用『算出集合积』的文字串的曲线表示步骤a7中的集合积算出处理。在这些Out集合中,用箭头连接分支对方相同的部分。即这些箭头表示In集合与Out集合的对应关系。在该图中,实线的箭头从基本区段B2、M1、M2延伸,该箭头对方到达集合积算出处理,但是,其表示用图19所示的分支对方相同的基本区段的Out集合彼此来算出集合积。虚线的箭头从基本区段B2、M3延伸,该箭头对方到达集合积算出处理,但是,其表示用图19所示的分支对方相同的基本区段的Out集合彼此来算出集合积。
箭头从集合积算出处理延伸,该箭头对方到达基本区段B3、基本区段B4的In集合,但是,其表示基本区段B3、基本区段B4的In集合被更新为集合积结果。
图20表示在由图19算出In集合后在步骤a8中再次算出Out集合的样子。图21表示第二轮的集合积算出处理和In集合的设定处理。与图19不同之点是表示在由图20算出Out集用集合只再次算出Out集合的样子。
如果反复进行步骤a1~步骤a12的处理,就能反复进行图19~图21所示的集合积的算出和In集合的更新。
<步骤a6~步骤a11的反复处理的收敛性>
处理对象的程序由基本区段B1、B2、B3、B4、B5组成,末尾的基本区段B5向开头的基本区段B1分支而形成循环处理。在此情况下,依次算出基本区段B1~B4的Out集合,如果算出基本区段B4的Out集合,就必须重新计算基本区段B1的In集合。在步骤a6~步骤a11的处理中,在In集合的变化成为没有之前进行同值关系消除处理,但是,当使形成循环处理的程序为处理对象的情况下,存在步骤a6~步骤a11的处理怎样进行收敛的问题。
通过反复处理而进行除开始基本区段之外的各基本区段的In集合、Out集合的计算,但是,在接在开始基本区段之后的区段(后续区段)中,由于在该In集合的计算时提取开始基本区段的Out集合和集合积,在该区段的In集合栏中包含的同值关系就不会多于在开始基本区段的Out集合栏中包含的同值关系。即,如果通过集合积的算出,同值关系的元素数量确实地减少了。这样,如果反复进行该集合积算出处理和In集合的设定,同值关系的数量必然收敛,本流程图的处理在有限时间内结束。即使在处理对象的程序具有循环并且程序内的最后的基本区段返回到开头的基本区段的情况下,由于数次通过上述步骤a6~步骤a11的循环处理来反复算出Out集合、In集合,就能谋求分支来源-分支对方的同值关系的匹配。
在Out集合计算处理中,使基本区段的入口处的In集合为来源,从该基本区段的开头命令对最后的命令依次进行同值关系的消除处理-生成处理,而转换到基本区段的出口处的Out集合的计算。
下面,参照图7的流程图来说明Out集合计算处理的处理过程。在步骤b1中,把所算出的In集合设定为对应的基本区段。
在步骤b2、b3、b4、b5中,对全部的命令反复进行同值关系消除处理和同值关系生成处理,在进行了基本区段的最后的命令的处理之后,结束处理。
接着参照图7的流程图来说明同值关系消除处理的处理过程。
<步骤c1~步骤c3、步骤c10…命令的识别处理>
在步骤c1中,判定正在进行处理的命令(处理对象命令)是否是使资源的值变化的命令。在发生变化的情况下,转换到步骤c2,在未发生变化的情况下,转换到步骤c10。
在步骤c2中,判定处理对象命令是否是等效传输命令。在为等效传输命令的情况下,转换到步骤c3,在不是等效传输命令的情况下,转换到步骤c4。
在步骤c10中,判定处理对象命令是否是子程序调用命令。在是子程序调用命令的情况下,转换到步骤c11,在不是子程序调用命令的情况下,结束命令。
通过并行进行上述的步骤c1、步骤c2、步骤c10的判定步骤,来识别处理对象的命令是哪个。如果作为处理对象的命令是不使比较命令等资源发生变化的命令,在步骤c1中变为No,在步骤c10中变为No,结束处理。在命令不是等效传输命令的情况下,或者,在等效传输命令的被定义的资源和被参照的资源不是同值关系的情况下,在步骤c1中变为Yes,在步骤c2中变为Yes,在步骤c3中变为Yes,而结束处理。如果是子程序调用命令,在步骤c1中变为No,在步骤c10中变为Yes,而转换到步骤c11。
<步骤c4~步骤c9…源码、目标(デイストネ—シヨン)码的组合所对应的同值关系消除处理>
在步骤c4中,判定以处理对象命令被定义的资源是否是寄存器。在是寄存器的情况下,转换到步骤c5,在不是寄存器的情况下,转换到步骤c7。
在步骤c7中,判定以处理对象命令被定义的资源是否是存储器。在是存储器的情况下,转换到步骤c8,在不是存储器的情况下,转换到步骤c9。
当判定为等效传输命令而转换到步骤c4时,如果所定义的资源是寄存器,则在步骤c4中,变为Yes,进行由步骤c5、步骤c6所产生的同值关系的消除。如果所定义的资源是存储器,则在步骤c7中,变为Yes,进行由步骤c8所产生的同值关系的消除。
在步骤c5中,使对应于寄存器r的同值关系集合为空集合。之所以这样消除寄存器r的同值关系,是因为建筑在同值集合写入字段的基础上的寄存器r的同值关系崩溃了。
在步骤c6中,根据对应于全部寄存器的各个同值关系集合来进行寄存器r的消除。
对于基本区段B2的传输命令『mov(2,SP),D1』,以进行步骤c5、步骤c6的处理的情况为具体例,来详细说明由上述步骤进行的处理。在执行步骤c4时,各寄存器的同值集合通过步骤a1而设定为下式{代数式1}这样:
{代数式1}
寄存器D0=U
寄存器D1=U
寄存器A0=U
其中,当步骤c5的处理完成而使对应于寄存器r(寄存器D0)的同值关系集合为空集合时,变化为{代数式2}:
{代数式2}
寄存器D0=U
寄存器D1=φ
寄存器A0=U (※φ是空集合。存在记为“{}”的情况。)
进而,当步骤c6的处理完成时,从对应于除寄存器r之外的全部寄存器的各个同值关系集合消除数据寄存器D1而成为{代数式3}:
{代数式3}
寄存器D0=U-{D1}
寄存器D1=φ
寄存器A0=U-{D1}
在步骤c8中,从对应于全部寄存器的各个同值关系集合消除存储器m。
在步骤c9中,从对应于全部寄存器的各个同值关系集合完全消除存储器m。
对于基本区段B2的传输命令『movD1,(2,SP)』,以进行步骤c8的处理的情况为具体例,来详细说明由上述步骤c8进行的处理。在步骤c7的执行时,各寄存器的同值集合被设定为下式{代数式4}这样:
寄存器D0=U-{D1}
寄存器D1=φ
寄存器A0=U-{D1}
进而,当步骤c8的处理完成时,从对应于全部寄存器的各个同值关系集合消除栈(2,SP)而成为{代数式5}:
{代数式5}
寄存器D0=U-{D1、(2,SP)}
寄存器D1=φ
寄存器A0=U-{D1、(2,SP)}
在步骤c11、步骤c12、步骤c13中,通过执行子程序调用命令而使各破坏寄存器保持的同值关系集合成为空集合,从对应于除破坏寄存器之外的全部寄存器的各个同值关系集合消除全部破坏寄存器。
下面参照图8的流程图来说明同值关系生成处理的处理过程。
<步骤d1~步骤d2命令的解读处理>
在步骤d1中,判定处理对象命令是否是等效传输命令。当是等效传输命令时,转换到步骤d2,当不是等效传输命令时,结束处理。
在步骤d2中,判定由处理对象命令所定义-参照的资源相互间是否具有同值关系。当具有同值关系时,结束处理,当不具有同值关系时,转换到步骤d3。
通过并行进行由上述步骤d1、步骤d2组成的一连串的判定步骤,来解读处理对象的命令是怎样的。如果处理对象命令是使比较命令等资源不发生变化的命令,则在步骤d1中变为No,而结束处理。在不是等效传输命令时,或在等效传输命令的被定义的资源和被参照的资源没有同值关系时,在步骤d1中变为Yes,在步骤d2中变为No,而转换到步骤d3。在是等效传输命令,以及等效传输命令的被定义的资源和被参照的资源具有同值关系的情况下,在步骤d1中变为Yes,在步骤d2中变为Yes,而结束处理。
<步骤d3、步骤d6、步骤d11、步骤d14、步骤d19、步骤d21识别源码、目标(デイストネ—シヨン)码的组合>
在步骤d3中,判定由处理对象命令所定义的资源是否是寄存器而且被参照的资源是否是寄存器。在满足该条件的情况下,转换到步骤d4,在未满足该条件的情况下,转换到步骤d6。
在步骤d6中,判定由处理对象命令所定义的资源是否是寄存器而且被参照的资源是否是存储器。在满足该条件的情况下,转换到步骤d7,在未满足该条件的情况下,转换到步骤d11。
在步骤d11中,判定由处理对象命令所定义的资源是否是存储器而且被参照的资源是否是寄存器。在满足该条件的情况下,转换到步骤d12,在未满足该条件的情况下,转换到步骤d14。
在步骤d14中,判定由处理对象命令所定义的资源是否是寄存器而且被参照的资源是否是当前值。在满足该条件的情况下,转换到步骤d15,在未满足该条件的情况下,转换到步骤d19。
在步骤d19中,判定由处理对象命令所定义的资源是否是存储器而且被参照的资源是否是当前值。在满足该条件的情况下,转换到步骤d20,在未满足该条件的情况下,转换到步骤d21。
在步骤d21中,判定由处理对象命令所定义的资源是否是存储器而且被参照的资源是否是存储器。在满足该条件的情况下,转换到步骤d22,在未满足该条件的情况下,结束处理。
如果执行步骤d3、步骤d6、步骤d11、步骤d14、步骤d19、步骤d21的一连串的步骤,如果是源码-寄存器、目标(デイストネ—シヨン)码-寄存器的组合,则在步骤d3中变为Yes,在步骤d4~步骤d5中进行同值关系的生成。如果是目标(デイストネ—シヨン)码-存储器、源码-寄存器的组合,则在步骤d11中变为Yes,在步骤d12~步骤d13中进行同值关系的生成。
如果是目标(デイ ストネ—シヨン)码-寄存器、源码-当前值的组合,则在步骤d14中变为Yes,在步骤d15~步骤d18中进行同值关系的生成。如果是目标(デイストネ—シヨン)码-存储器、源码-当前值的组合,则在步骤d19中变为Yes,在步骤d20中进行同值关系的生成。如果是目标(デイストネ—シヨン)码-存储器、源码-存储器的组合,则在步骤d21中变为Yes,在步骤d22中进行同值关系的生成。
{(1)目标(デイストネ—シヨン)码-寄存器、源码-寄存器的组合的情况}
在目标(デイストネ—シヨン)码-寄存器、源码-寄存器的组合的情况下,在步骤d4和步骤d5中生成同值关系。在步骤d4中,把已写入到参照测的资源寄存器s的同值关系集合中的全部成分复制到定义侧的资源寄存器d的同值集合写入字段中。进而,把寄存器s写入到寄存器d的同值集合写入字段中。在步骤d5中,判定与寄存器d具有同值关系的全部寄存器的同值集合写入字段,通过把寄存器d写入到判定的同值关系集合栏中,而结束处理。
下面以把同值关系设定为{代数式7}这样而对传输命令『mov D0,A0…(10)』进行处理的情况作为具体例子,来详细说明由步骤d5进行的处理。在{代数式7}中,之所以地址寄存器A0的同值集合为空集合,是因为经过了步骤c5的处理,之所以在数据寄存器D0、数据寄存器D1的同值集合中不存在地址寄存器A0,是因为经过了步骤c6的处理。
{代数式7}
寄存器D0={#10、(2,SP)、D1}
寄存器D1={#10、(2,SP)、D0}
寄存器A0=φ
其中,当步骤d4的处理完成,并且把寄存器S(数据寄存器D0)的同值集合的成分写入到寄存器d(地址寄存器A0)的同值集合写入字段中时,同值集合变为{代数式8}。通过这样的写入,地址寄存器A0就能继承与数据寄存器D0具有同值关系的全部的资源。地址寄存器A0就能通过数据寄存器D0而增加同值集合的成分。
{代数式8}
寄存器D0={#10、(2,SP)、D1}
寄存器D1={#10、(2,SP)、D0}
寄存器A0={#10、(2,SP)、D1}←其变化为
接着,当通过步骤d4的处理,而把寄存器S(数据寄存器D0)追加到寄存器d(地址寄存器A0)的同值集合写入字段中时,同值集合变{代数式9}。
{代数式9}
寄存器D0={#10、(2,SP)、D1}
寄存器D1={#10、(2,SP)、D0}
寄存器A0={#10、(2,SP)、D1、D0} ←其变化为
接着,当通过步骤d5的处理,而把寄存器S(地址寄存器A0)设定到与寄存器d(地址寄存器A0)具有同值关系的全部寄存器(数据寄存器D0、数据寄存器D1)同值集合写入字段中时,同值集合变为{代数式10}。由于数据寄存器D0-地址寄存器A0的同值关系确立,已经与数据寄存器D0具有同值关系的数据寄存器D1通过数据寄存器D0而变为与地址寄存器A0具有同值关系。由于在数据寄存器D1的同值集合中追加了地址寄存器A0,数据寄存器D1就能通过数据寄存器D0而使同值集合的成分增加。
通过上述步骤d4、步骤d5的处理,地址寄存器A0、数据寄存器D0就能构筑通过传输命令的间接的同值关系。
{代数式10}
寄存器D0={#10、(2,SP)、D1、A0} ←其变化为
寄存器D1={#10、(2,SP)、D0、A0} ←其变化为
寄存器A0={#10、(2,SP)、D1、D0}
{(2)目标(デイストネ—シヨン)码-寄存器、源码-存储器组合的情况}
在判定为目标(デイストネ—シヨン)码-寄存器、源码-寄存器的组合的情况下,在步骤d7~步骤d10中生成同值关系。
在步骤d7中,判定在除处理对象命令中的定义侧的资源寄存器d之外的全部寄存器中,是否存在与作为参照侧资源的存储器s具有同值关系的寄存器r。在存在时,转换到步骤d8,在不存在时,转换步骤d10。
在步骤d8、步骤d9中,把寄存器r的同值关系集合的全部成分复制到寄存器d的同值集合写入字段中,进而,在寄存器d的同值集合写入字段中追加寄存器r。此后,判定与寄存器d具有同值关系的全部的寄存器的同值集合写入字段,通过在判定的同值关系写入字段中写入寄存器d,而结束处理。
在步骤d10中,通过在定义侧的资源寄存器d的同值集合写入字段中写入参照侧的资源存储器s,而结束处理。
下面以把同值关系设定为{代数式11}这样而对传输命令『mov(2,SP),D1…(9)』进行处理的情况作为具体例子,来详细说明由步骤d8、步骤d9进行的处理。
{代数式11}
寄存器D0={#10、(2,SP)、A0}
寄存器D1=φ
寄存器A0={#10、(2,SP)、D0}
其中,当步骤d7的处理完成,并且除寄存器d(数据寄存器D1)之外把数据寄存器D0判定为与栈(2,SP)具有同值关系的寄存器r。
接着进行步骤d8的处理,在寄存器d(数据寄存器D1)的同值集合写入字段中设定寄存器r(数据寄存器D0)的同值集合的全部码。其结果作为{代数式12}那样。如从{代数式12}判断的那样,数据寄存器D1能够通过栈(2,SP)来增加同值集合的成分。上述步骤d6~步骤d8的处理通过栈(2,SP)的中介而使数据寄存器D0、数据寄存器D1、地址寄存器A0的同值集合成分增加。
{代数式12}
寄存器D0={#10、(2,SP)、A0}
寄存器D1={#10、(2,SP)、A0}
寄存器A0={#10、(2,SP)、D0}
通过步骤d8的处理,在寄存器d(数据寄存器D1)的同值集合写入字段中追加寄存器r(数据寄存器D0)。其结果,成为{代数式13}那样:
{代数式13}
寄存器D0={#10、(2,SP)、A0}
寄存器D1={#10、(2,SP)、A0,D0}
寄存器A0={#10、(2,SP)、D0}
通过步骤d9中的处理,在与寄存器d(数据寄存器D1)具有同值关系的全部的寄存器(数据寄存器D0、地址寄存器A0)中追加寄存器d(数据寄存器D1)。其结果,成为{代数式14}那样。借助栈(2,SP)的中介,通过成为同值关系的数据寄存器D0,地址寄存器A0就能构筑与数据寄存器D1的同值关系。上述步骤d6~步骤d9的处理通过栈(2,SP)的中介,使数据寄存器D0、数据寄存器D1、地址寄存器A0的同值集合成分增加。这样的同值关系成分的增加提高了冗长传输命令的消除的概率。
{代数式14}
寄存器D0={#10、(2,SP)、A0,D1}
寄存器D1={#10、(2,SP)、A0,D0}
寄存器A0={#10、(2,SP)、D0,D1}
{(3)目标(デイストネ—シヨン)码-存储器、源码-寄存器的组合的情况}
在目标(デイストネ—シヨン)码-存储器、源码-寄存器的组合的情况下,在步骤d12~步骤d13中生成同值关系。
在步骤d12、步骤d13中,判定与处理对象命令的寄存器s具有同值关系的全部寄存器的同值集合写入字段,在判定的同值关系集合栏中写入定义侧的存储器d。然后,在寄存器s的同值集合写入字段中写入存储器d,而结束处理。
{(4)目标(デイストネ—シヨン)码-寄存器、源码-当前值的组合的情况}
在目标(デイストネ—シヨン)码-寄存器、源码-当前值的组合的情况下,在步骤d15~步骤d18中生成同值关系。
在步骤d15中,判定在除处理对象命令中的定义侧的资源寄存器d之外的全部寄存器中,是否存在与作为参照侧资源的当前值s具有同值关系的寄存器。在存在时,转换到步骤d16,在不存在时,转换到步骤d18。
在步骤d16、步骤d17中,把与当前值s具有同值关系的寄存器r的同值关系集合的全部成分复制到寄存器d的同值集合写入字段中,进而,在寄存器d的同值集合写入字段中写入寄存器r。此后,判定与寄存器d具有同值关系的全部的寄存器的同值集合写入字段,在判定的同值关系写入字段中写入寄存器d,而结束处理。
在步骤d18中,通过在定义侧的资源寄存器d的同值集合写入字段中写入作为参照侧的资源的当前值s,而结束处理。
下面以把同值关系设定为{代数式15}这样而对传输命令『 mov #100,D1』进行处理的情况作为具体例子,来详细说明由步骤d16、步骤d17进行的处理。
{代数式15}
寄存器D0={#100、(2,SP)}
寄存器D1=φ
寄存器A0=φ
其中,当步骤d15的处理完成,并且除寄存器d(数据寄存器D1)之外把数据寄存器D0判定为与当前值#100具有同值关系的寄存器r。
接着进行步骤d16的处理,在寄存器d(数据寄存器D1)的同值集合写入字段中设定寄存器r(数据寄存器D0)的同值集合的成分,此时成为{代数式16}那样。在{代数式16}中,数据寄存器D1构筑起与当前值#100的同值关系,同时,通过当前值#100就能构筑起与栈(2,SP)的同值关系。
{代数式16}
寄存器D0={#100、(2,SP)}
寄存器D1={#100、(2,SP)}
寄存器A0=φ
接着在步骤d8中,当追加了寄存器r(数据寄存器D0)时,成为{代数式17}那样。在{代数式17}中,数据寄存器D1通过当前值#100就能构筑起与数据寄存器D0的同值关系。
{代数式17}
寄存器D0={#100、(2,SP)}
寄存器D1={#100、(2,SP)、D0} ←其变化为
寄存器A0=φ
在步骤d17中,当在与寄存器d(数据寄存器D1)具有同值关系的全部的寄存器的同值集合(数据寄存器D0)中追加寄存器d(数据寄存器D1)时,而成为{代数式18}那样。在{代数式18}中,数据寄存器D0通过当前值#100就能构筑与数据寄存器D1的同值关系。如上述那样,上述步骤d15~步骤d17的处理通过当前值#100的中介,使数据寄存器D0、数据寄存器D1的同值集合成分增加。这样的同值关系成分的增加提高了冗长传输命令的消除的概率。
{代数式18}
寄存器D0={#100、(2,SP)、D1} ←其变化为
寄存器D1={#100、(2,SP)、D0}
寄存器A0=φ
{(5)目标(デイストネ—シヨン)码-存储器、源码-当前值的组合的情况}
在目标(デイストネ—シヨン)码-存储器、源码-当前值的组合的情况下,在步骤d20中生成同值关系。
在步骤d20中,判定与作为参照侧的当前值s具有同值关系的全部寄存器的同值集合写入字段,在判定的同值关系集合栏中写入作为定义侧资源的存储器d,而结束处理。
{(6)目标(デイストネ—シヨン)码-存储器、源码-存储器的组合的情况}
在步骤d22中,判定与作为参照侧的存储器s具有同值关系的全部寄存器的同值集合写入字段,在判定的同值关系集合栏中写入作为定义侧资源的存储器d,而结束处理。
下面作为该大范围同值关系解析部4所产生的处理的一例来说明对应于图2所示的源程序的处理。
首先,把基本区段B1的In集合初始化为空集合,把基本区段B2、B3、B4的In集合初始化为全体集合栏(步骤a1)。
在步骤a1中,求出U={#10,D0,(_a),(10,SP),D1,#0,(2,SP),#1,A0,(20,SP),#100,(4,SP)},把各基本区段的In集合设定为{代数式19}这样:
{代数式19}
B1:In D0={} D1={} A0={}
Out D0={} D1={} A0={}
B2:In D0=U D1=U A0=U
Out D0={} D1={} A0={}
B3:In D0=U D1=U A0=U
Out D0={} D1={} A0={}
B4:In D0=U D1=U A0=U
Out D0={} D1={} A0={}
接着进行各基本区段的Out集合计算处理(步骤a3)。在Out集合计算处理中,各命令反复进行同值关系消除处理(步骤b3)和同值关系生成处理(步骤b4)。作为处理例子表示出对应于基本区段B1的Out集合计算处理的处理过程。
最初,转换到同值关系消除处理。首先,在步骤c1中,判定传输命令『mov#10,D0...(1)』是否是使资源值发生变化的命令。由于传输命令『mov#10,D0...(1)』是使资源值发生变化的命令,就会转换到步骤c2。在步骤c2中,由于传输命令『mov#10,D0...(1)』是等效传输命令,就会转换到步骤c3。在步骤c3中,由于作为定义侧的资源的寄存器D0的同值关系集合尚未由传输命令『mov#10,D0...(1)』进行设定,就会转换到步骤c4。在步骤c4中,由于由传输命令『mov#10,D0...(1)』所定义的资源是寄存器,就会转换到步骤c5。在步骤c5、步骤c6中,使寄存器D0的同值关系集合成为空集合,从除寄存器D0之外的全部寄存器的同值关系集合中消除寄存器D0,而结束同值关系消除处理。用图17的箭头a表示同值关系消除处理后的同值集合。
接着,转换到图8所示的同值关系生成处理。首先,在步骤d1中,判定传输命令『mov#10,D0...(1)』是否是等效传输命令。由于传输命令『mov#10,D0...(1)』是等效传输命令,就会转换到步骤d2。在步骤d2中,由于作为定义侧的资源的寄存器D0的同值关系集合尚未由传输命令『mov#10,D0...(1)』进行设定,就会转换到步骤d3。在步骤d3中,由于由传输命令『mov#10,D0...(1)』所定义的资源是寄存器,被参照的资源是当前值,而在步骤d3、d6、d11的判定中全部变为No,在步骤d14的判定中变为Yes,而转换到步骤d15。在步骤d15中,由于除寄存器D0之外,与当前值10具有同值关系的寄存器不存在,而转换到步骤d18。在步骤d18中,在寄存器D0的同值集合写入字段中设定当前值10,结束同值关系生成处理。用图7的箭头b表示同值关系生成处理后的同值集合。
当对于传输命令『mov D0,(_a)...(2)』、传输命令『mov(10,SP),D1...(3)』、比较命令『cmp#0,D1...(4)』、条件分支命令『bne L3』...(5)进行上述同值关系消除处理、同值关系生成处理时,在各个命令中的同值关系表示为图17那样。
这样,基本区段B1的Out集合为图18所示的集合。接着,对基本区段B2、基本区段B3、基本区段B4进行Out集合计算处理,反复进行同值关系消除处理、同值关系生成处理。对于传输命令『mov(2,SP),D1...(6)』~传输命令『mov D0,A0...(21)』,进行图7、图8的同值关系消除处理、同值关系生成处理。其结果,寄存器D0,D1,A0的同值关系为以下这样:
{基本区段B2传输命令『mov(2,SP),D1...(6)』~分支命令『bra L4...(11)』}
由于传输命令『mov(2,SP),D1...(6)』的同值关系为D0=U D1=U A0=U,则数据寄存器D1与栈(2,SP)具有同值关系。这样,在步骤c3中成为Yes,而消除未完成。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0=U D1=U A0=U
由于传输命令『mov(2,SP),D1...(6)』的同值关系为D0=U D1=U A0=U,则数据寄存器D1与栈(2,SP)具有同值关系。这样,在步骤c2中成为Yes,而生成未完成。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0=U D1=U A0=U
由于减法命令『sub#1,D1...(7)』是减法命令,而进行步骤c5、步骤c6的同值关系消除处理,而终止处理。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0=U-{D1} D1={} A0=U-{D1}
由于传输命令『mov D1,(2,SP)...(8)』是源码-寄存器、目标(デイストネ—シヨン)码-存储器的组合,而进行步骤c8的同值关系消除处理。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0=U-{D1,(2,SP)}D1={} A0=U-{D1,(2,SP)}
由于传输命令『mov D1,(2,SP)...(8)』是源码-寄存器、目标(デイストネ—シヨン)码-存储器的组合,而进行步骤d12、步骤d13的同值关系生成处理。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0=U-{D1,(2,SP)} D1={(2,SP)} A0=U-{D1,(2,SP)}
由于传输命令『mov(2,SP),D1...(9)』的同值关系是D0=U-{D1,(2,SP)}D1={(2,SP)} A0=U-{D1,(2,SP)},则数据寄存器D1和栈(2,SP)具有同值关系。这样,在步骤c3中变为Yes,而消除未完成。
其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0=U-{D1,(2,SP)} D1={(2,SP)} A0=U-{D1,(2,SP)}
由于传输命令『mov(2,SP),D1...(9)』的同值关系是D0=U-{D1,(2,SP)}D1={(2,SP)} A0=U-{D1,(2,SP)},则数据寄存器D1和栈(2,SP)具有同值关系。这样,在步骤d2中变为Yes,而生成未完成。
其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0=U-{D1,(2,SP)} D1={(2,SP)} A0=U-{D1,(2,SP)}
由于传输命令『mov D0,A0...(10)』的同值关系是D0=U-{D1,(2,SP)} D1={(2,SP)} A0=U-{D1,(2,SP)},则数据寄存器D0和地址寄存器A0具有同值关系。这样,在步骤c3中变为Yes,而消除未完成。
其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0=U-{D1,(2,SP)} D1={(2,SP)} A0=U-{D1,(2,SP)}
由于传输命令『mov D0,A0...(10)』的同值关系是D0=U-{D1,(2,SP)} D1={(2,SP)} A0=U-{D1,(2,SP)},则数据寄存器D0和地址寄存器A0具有同值关系。这样,在步骤d2中变为Yes,而生成未完成。
其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0=U-{D1,(2,SP)} D1={(2,SP)} A0=U-{D1,(2,SP)}
{基本区段B3『mov(10,SP),D1...(12)』~『mov D0,A0...(15)』}
由于传输命令『mov(10,SP),D1...(12)』的同值关系为D0=U D1=UA0=U,则栈(2,SP)和数据寄存器D1具有同值关系。这样,在步骤c3中变为Yes,而消除未完成。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0=U D1=U A0=U
由于传输命令『mov(10,SP),D1...(12)』的同值关系为D0=U D1=UA0=U,则栈(2,SP)和数据寄存器D1具有同值关系。这样,在步骤d2中变为Yes,而生成未完成。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0=U D1=U A0=U
由于传输命令『mov(20,SP),D0...(13)』的同值关系为D0=U D1=UA0=U,则栈(2,SP)和数据寄存器D0具有同值关系。这样,在步骤c3中变为Yes,而消除未完成。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0=U D1=U A0=U
由于传输命令『mov(20,SP),D0...(13)』的同值关系为D0=U D1=UA0=U,则栈(2,SP)和数据寄存器D0具有同值关系。这样,在步骤d2中变为Yes,而生成未完成。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0=U D1=U A0=U
由于加法命令『add D1,D0...(14)』是加法命令,仅进行同值关系消除处理并终止。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0={} D1=U-{D0} A0=U-{D0}
由于传输命令『mov D0,A0...(15)』的同值关系为D0={} D1=U-{D0}A0=U-{D0},则因源码-寄存器、目标(デイストネ—シヨン)码-寄存器的组合而进行图7的步骤c5、步骤c6的同值关系消除处理。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0={} D1=U-{D0,A0} A0={}
由于传输命令『mov D0,A0...(15)』的同值关系为D0={} D1=U-{D0}A0=U-{D0},则因源码-寄存器、目标(デイストネ—シヨン)码-寄存器的组合而进行图7的步骤d4~步骤d5的同值关系生成处理。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0={} D1=U-{D0,A0} A0={D0}
{基本区段B4传输命令『mov#100,D1...(16)』~传输命令『mov D0,A0...(21)』}
由于传输命令『mov#100,D1...(16)』的同值关系为D0=U D1=U A0=U,则数据寄存器D1与#100具有同值关系。这样,在步骤c3中成为Yes,而消除未完成。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0=U D1=U A0=U
由于传输命令『mov#100,D1...(16)』的同值关系为D0=U D1=U A0=U,则#100与数据寄存器D1具有同值关系。这样,在步骤d2中成为Yes,而生成未完成。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0=U D1=U A0=U
由于传输命令『mov D0,A0...(17)』的同值关系为D0=U D1=U A0=U,则地址寄存器A0与数据寄存器D0具有同值关系。这样,在步骤c3中成为Yes,而消除未完成。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0=U D1=U A0=U
由于传输命令『mov D0,A0...(17)』的同值关系为D0=U D1=U A0=U,则地址寄存器A0与数据寄存器D0具有同值关系。这样,在步骤d2中成为Yes,而生成未完成。其结果,寄存器D0,D1,A0的同情关系为以下这样:
D0=U D1=U A0=U
由于传输命令『mov D1,(4,SP)...(18)』的同值关系为D0=U D1=UA0=U,则栈(4,SP)与数据寄存器D1具有同值关系。这样,在步骤c3中成为Yes,而消除未完成。
其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0=U D1=U A0=U
由于传输命令『mov D1,(4,SP)...(18)』的同值关系为D0=U D1=UA0=U,则栈(4,SP)与数据寄存器D1具有同值关系。这样,在步骤d2中成为Yes,而生成未完成。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0=U D1=U A0=U
由于传输命令『mov D1,D0...(19)』的同值关系为D0=U D1=U A0=U,则数据寄存器D1与数据寄存器D0具有同值关系。这样,在步骤c3中成为Yes,而消除未完成。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0=U D1=U A0=U
由于传输命令『mov D1,D0...(19)』的同值关系为D0=U D1=U A0=U,则数据寄存器D1与数据寄存器D0具有同值关系。这样,在步骤d2中成为Yes,而生成未完成。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0=U D1=U A0=U
由于加法命令『add D0,A0...(20)』是加法命令,仅进行同值关系消除处理并终止。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0=U-{A0} D1=U-{D0} A0={}
由于传输命令『mov D0,A0...(21)』的同值关系为D0=U-{A0}D1=U-{D0} A0={},则栈(4,SP)与数据寄存器D0具有同值关系。这样,在步骤c3中成为Yes,而消除来完成。
其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0=U-{A0} D1=U-{D0} A0={}
由于传输命令mov D0,A0...(21)』的同值关系为D0=U-{A0}D1=U-{D0} A0={},则栈(4,SP)与数据寄存器D0具有同值关系。这样,在步骤d2中成为Yes,而生成未完成。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0=U-{A0} D1=U-{D0} A0={}
如上述那样,当在步骤a3中进行局部的Out集合计算处理时,得到下示的各基本区段的In集合、Out集合。
B1:In D{}={} D1={} A0={}
Out D0={#10,(_a)} D1={(10,SP)} A0={}
B2:In D0=U D1=U A0=U
Out D0=U-{D1,(2,SP)} D1={(2,SP)} A0=U-{D1,(2,SP)}
B3:In D0=U D1=U A0=U
Out D0={A0} D1=U-{D0,A0} A0={D0}
B4:In D0=U D1=U A0=U
Out D0=U-{A0} D1=U-{A0} A0={}
{全程的同值关系检出处理}
接着,利用控制流程信息,转换到基本区段间的同值集合的计算。在图19~图20中表示该处理的样子。
首先,在大范围同值关系解析部4的步骤a5中,使Out集合变化标志成为Off,转换到步骤a6的循环2。在循环2的处理中,从该基本区段的全部的上游区段中的Out集合的集合积来求出在步骤a7中正在处理的基本区段的In集合。基本区段B2、B3,当参照图15时,象看到的那样,上游区段仅是基本区段B1。这样,基本区段B2、B3的In集合为基本区段B1的Out集合。另一方面,由于基本区段B4的上游区段有基本区段B2、B3两个,则基本区段B4的In集合成为基本区段B2、B3的Out集合的集合积。
基本区段B4的上游基本区段为基本区段B2和基本区段B3。基本区段B2的Out集合为D0=U-{D1,(2,SP)} D1={(2,SP)} A0=U-{D1,(2,SP)},基本区段B3的Out集合为D0={A0}D1={D0,A0} A0={D0}。这些的集合积结果成为D0={A0}D1={(2,SP)}A0={D0}。在基本区段B4的In集合栏中设定作为该集合积结果的D0={A0} D1={(2,SP)} A0={D0}。
通过上述步骤a7的处理,各基本区段的In集合被设定为以下这样:
B1:In D0={} D1={} A0=P{}
Out D0={#10,(_a)} D1={(10,SP)} A0={}
B2:In D0={#10,(_a)} D1={(10,SP)} A0={} ←In集合设定
Out D0=U-{D1,(2,SP)} D1={(2,SP)} A0=U-{D1,(2,SP)}
B3:In D0={#10,(_a)} D1={(10,SP)} A0={} ←In集合设定
Out D0={A0} D1=U-{D0,A0} A0={D0}
B4:In D0={A0} D1={(10,SP)} A0={D0} In集合设定
Out D0=U-{A0} D1=U-{A0} A0={}
根据在步骤a7中所设定的In集合,在步骤a8中进行Out集合计算处理。
在传输命令『mov(2,SP),D1...(6)』中,进行具有源码-存储器、目标(デイストネ—シヨン)码-寄存器的组合的同值关系消除处理。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0={#10,(_a)} D1={} A0={}
在传输命令『mov(2,SP),D1...(6)』中,进行具有源码-存储器、目标(デイストネ—シヨン)码-寄存器的组合的同值关系生成处理。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0={#10,(_a)} D1={(2,SP)} A0={}
在减法命令『sub #1,D1...(7)』中,进行具有减法命令的同值关系消除处理。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0={#10,(_a)} D1={} A0={}
在传输命令『mov D1,(2,SP)...(8)』中,进行具有源码-寄存器、目标(デイストネ—シヨン)码-存储器的组合的同值关系消除处理。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0={#10,(_a)} D1={} A0={}
在传输命令『mov D1,(2,SP)...(8)』中,进行具有源码-寄存器、目标(デイストネ—シヨン)码-存储器的组合的同值关系生成处理。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0={#10,(_a)} D1={} A0={}
在传输命令『mov(2,SP),D1...(9)』中,数据寄存器D1与(2,SP)具有同值关系。这样,在步骤c3和步骤d2中,由于分别变为Yes,消除、生成都未完成。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0={#10,(_a)} D1={(2,SP)} A0={}
在传输命令『mov D0,A0...(10)』中,进行具有源码-寄存器、目标(デイストネ—シヨン)码-寄存器的组合的同值关系消除处理。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0={#10,(_a)} D1={(2,SP)} A0={}
在传输命令『mov D0,A0...(10)』中,进行具有源码-寄存器、目标(デイストネ—シヨン)码-寄存器的组合的同值关系生成处理。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0={#10,(_a)} D1={(2,SP)} A0={#10,(_a),D0}
在传输命令『mov(10,SP),D1...(12)』中,基本区段B3的In集合中的同值关系为D0={#10,(_a),A0} D1={(10,SP)} A0={},同值关系消除处理和同值关系消除处理都未完成。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0={#10,(_a),A0} D1={(10,SP)} A0={}
在传输命令『mov(20,SP),D0...(13)』中,进行具有源码-存储器、目标(デイストネ—シヨン)码-寄存器的组合的同值关系消除处理。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0={} D1={(10,SP)} A0={}
在传输命令『mov(20,SP),D0...(13)』中,进行具有源码-存储器、目标(デイストネ—シヨン)码-寄存器的组合的同值关系生成处理。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0={(20,SP)} D1={(10,SP)} A0={}
在加法命令『add D1,D0...(14)』中,进行加法命令下的同值关系消除处理。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0={} D1={(10,SP)} A0={}
在传输命令『mov D0,A0...(15)』中,进行具有源码-寄存器、目标(デイストネ—シヨン)码-寄存器的组合的同值关系消除处理和生成处理。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0={A0} D1={(10,SP)} A0={D0}
在传输命令『mov#100,D1...(16)』中,进行具有源码-当前值、目标(デイストネ—シヨン)码-寄存器的组合的同值关系消除处理。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0={A0} D1={(10,SP)} A0={D0}
在传输命令『mov#100,D1...(16)』中,进行具有源码-当前值、目标(デイストネ—シヨン)码-寄存器的组合的同值关系生成处理。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0={A0} D1={#100} A0={D0}
在传输命令『mov D0,A0...(17)』中,当参照寄存器D0,D1,A0的同值关系D0={A0} D1={#100} A0={D0}时,A0,D0成为同值关系。这样,在步骤c3、步骤d2中,变为Yes,消除、生成都未完成。
D0={A0} D1={#100,(4,SP)} A0={D0}
在传输命令『mov D1,(4,SP)...(18)』中,进行具有源码-寄存器、目标(デイストネ—シヨン)码-存储器的组合的同值关系消除处理。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0={A0} D1={#100} A0={D0}
在传输命令『mov D1,(4,SP)...(18)』中,进行具有源码-寄存器、目标(デイストネ—シヨン)码-存储器的组合的同值关系生成处理。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0={A0} D1={#100,(4,SP)} A0={D0}
在传输命令『mov D1,D0...(19)』中,进行具有源码-寄存器、目标(デイストネ—シヨン)码-寄存器的组合的同值关系消除处理。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0={} D1={#100,(4,SP)} A0={}
在传输命令『mov D1,D0...(19)』中,进行具有源码-寄存器、目标(デイストネ—シヨン)码-寄存器的组合的同值关系生成处理。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0={D1,#100,(4,SP)} D1={D0,#100,(4,SP)} A0={}
在加法命令『add D0,A0...(20)』中,进行加法命令下的同值关系消除处理。其结果,寄存器D0,D1,A0的同值关系为以下这样:
D0={D1,#100,(4,SP)} D1={D0,#100,(4,SP)} A0={}
在传输命令『mov D0,A0...(21)』中,(4,SP)与D0具有同值关系。这样,在步骤c2、步骤d2中,分别变为Yes,因此,消除、生成都未完成。
D0={D1,#100,(4,SP)} D1={D0,#100,(4,SP)} A0={}
在步骤a9中,在计算后的Out集合从计算前的Out集合变化时,步骤a10进行,使Out集合变化标志成为On,反复进行循环2。下面表示进行循环2的处理的结果:
B1:In D0={} D1={} A0={}
Out D0={#10,(_a)} D1={(10,SP)} A0={}
B2:In D0={#10,(_a)} D1={(10,SP)} A0={}
Out D0={#10,(_a),A0} D1={(2,SP)} A0={#10,(_a),D0}
B3:In D0={#10,(_a)} D1={(10,SP)} A0={}
Out D0={A0} D1={(10,SP)} A0={D0}
B4:In D0={A0} D1={} A0={D0}
Out D0={#100,(4,SP),D1} D1={#100,(4,SP),D1} A0={}
而且,在循环3中,处理基本区段的顺序即使以哪个顺序进行处理也必须收敛,但是,当以称为深度优先顺序的顺序进行处理时,可以使重复次数减少。
在循环3的处理结束后,在步骤a12中,当Out集合变化标志为On时,转换到步骤a5,当为Off时,结束大范围同值关系解析部4的处理。在此情况下,由于从计算前的Out集合发生了变化,再次重复进行循环3的处理。但是,即使重复进行,哪个基本区段的Out集合也不变化,因此,在此结束大范围同值关系解析部4的处理。
<包含传输命令的消除的码的优化>
同值资源间传输命令消除部5,当由于传输命令所定义的资源和被参照的资源具有同值关系时,把该传输命令判定为冗长的传输命令,而按图6所示的双线箭头a4所示的那样进行传输命令的消除。下面参照图9的流程图来说明同值资源间传输命令消除部5的处理。
同值资源间传输命令消除部5,在步骤e1、e2、e9中,对全部的基本区段,在该基本区段的In集合栏中使基本区段内的同值集合写入字段初始化,重复进行从步骤e3至步骤e8的循环处理。对于全部的基本区段,当处理结束时,结束同值资源间传输命令消除部5的处理。步骤e2中的处理用图23(a)的示意图来表示。图23(a)是表示从图22所示的In集合求出的同值集合和从分支对方的基本区段检出该内容的传输命令的样子的图。图23(b)是表示从图22所示的In集合求出的同值集合和从分支对方的基本区段消除该内容的传输命令的样子的图。
在图23(a)中,由曲线围绕的基本区段B2的In集合通过箭头而同基本区段B2的入口部进行结合,但是,其在基本区段B2中表示提供以大范围同值关系解析部4进行的处理所得到的In集合。由曲线围绕的基本区段B3的In集合通过箭头而同基本区段B3的入口部进行结合,但是,其在基本区段B3中表示提供以大范围同值关系解析部4进行的处理所得到的In集合。
对于以后的图9的流程图,随着标号的顺序来进行说明。本流程图,在从步骤e3至步骤e8中,从基本区段的开头的命令至最后的命令依次反复进行以下处理。
在步骤e4中,判定处理对象命令是否是等效传输命令。在是等效传输命令时,转换到步骤e5,在不是等效传输命令时,转换到步骤e7。
在步骤e5中,判定由处理对象命令所参照的资源s与被定义的资源d是否具有同值关系。在具有同值关系时,转换到步骤e6,在不具有同值关系时,转换到步骤e7。
在步骤e6中,消除处理对象命令,转换到步骤e8。
步骤e2中的处理由图23(b)的示意图进行表示。在该图中,作为进行与提供给基本区段B3的In集合相同内容的的传输的传输命令,传输命令『mov(10,SP),D1...(12)』被消除。详细地说,In集合的寄存器的同值关系写入字段以D1={(10,SP)}这样而明确寄存器D1-存储器(10,SP)之间的同值关系。传输命令『mov(10,SP),D1...(12)』,由于源码是栈(10,SP)、目标(デイストネ—シヨン)码是数据寄存器D1而进行与在同值关系写入字段中所示的的同值集合相同内容的传输。即,判断传输命令『mov(10,SP),D1...(12)』是冗长的,由步骤e6进行消除。
在该图中,表示出:作为进行与提供给基本区段B4的In集合相同内容的的传输的传输命令,传输命令『mov D0,A0...(17)』被消除。详细地说,In集合的寄存器的同值关系写入字段以D0={A0}这样而明确寄存器D0-地址寄存器A0之间的同值关系。传输命令『mov D0,A0...(17)』,由于源码是地址寄存器A0、目标(デイストネ-シヨン)码是数据寄存器D0而进行与在同值关系写入字段中所示的的同值集合相同内容的传输。即,判断传输命令『movD0,A0...(17)』是冗长的,由步骤e6进行消除。
在步骤e7中,更新同值关系。这是因为在步骤e4、步骤e5中判定为No时,更新由该命令所产生的同值关系的变化。而且,其中的同值关系更新处理不过是组合了上述同值关系消除处理、同值关系生成处理的情况。下面沿着对应于图2所示的源程序的一例的处理过程来说明以上的处理。
首先,基本区段分割部2把相应的源程序分割为基本区段。在图18中表示出所分割的结果。接着,由控制流程解析部3解析基本区段间的控制流程。在图15中容易理解地表示出处理被分割为图18所示的基本区段的程序的结果。
进而,基本区段分割部2利用由控制流程解析部3所解析的基本区段间的控制流程,大范围同值关系解析部4解析跨在基本区段上的大范围同值关系。在图22中表示出对应于图2所示的源程序的一例的大范围同值关系解析部4的处理结果、所计算的各基本区段中的In集合、Out集合。该集合作为大范围的同值关系由同值资源间传输命令消除部5所利用。
最初,在步骤e2中,把基本区段内的同值集合初始化为基本区段B3的In集合(箭头c),转换到步骤e3以后的循环2的处理。
首先,在步骤e4中,由于传输命令『mov(10,SP),D1...(12)』为等效传输命令,则执行步骤e5。接着,在步骤e5中,由于由传输命令『mov(10,SP),D1...(12)』所定义的资源寄存器D1和被参照的资源栈(10,SP)具有同值关系,则转换到步骤e6,消除传输命令『mov(10,SP),D1...(12)』。接着,转换到步骤e8,返同到步骤e3而重复进行循环2。
接着的传输命令『mov(20,SP),D0...(13)』同样进行处理。虽然传输命令『mov(20,SP),D0...(13)』为等效传输命令,但是,由于由传输命令『mov(20,SP),D0...(13)』所定义的资源寄存器D0和被参照的资源栈(20,SP)不具有同值关系,则进行步骤e7的更新,重复进行循环2。
由于接着的加法命令『add D1,D0...(14)』不是等效传输命令,则在步骤e4中,被判定为No,而进行步骤e7的同值关系的更新,重复进行循环2。
虽然传输命令『mov D0,A0...(15)』为等效传输命令,但是,由于由传输命令『mov D0,A0...(15)』所定义的资源寄存器A0和被参照的资源存储器D0不具有同值关系,则转换到步骤e7的同值关系的更新。其中,由于传输命令『mov D0,A0...(15)』是基本区段B3内的最后的命令,结束循环2的处理而转换到步骤e9,重复进行循环1。
对于剩余的全部的基本区段,当重复进行同样的处理时,就被判定为基本区段B2内的传输命令『mov(2,SP),D1...(9)』、基本区段B4内的传输命令『mov D0,A0...(17)』、传输命令『mov D0,A0...(21)』为同值资源间的传输命令而被消除。
对应于图2所示的源程序,大范围同值关系解析部4解析大范围同值关系。利用该同值关系,同值资源间传输命令消除部5进行同值资源间的传输命令消除处理。其结果,被判定为:图18的传输命令『mov(2,SP),D1...(9)』、传输命令『mov(10,SP),D1...(12)』、传输命令『mov D0,A0...(17)』、传输命令『mov D0,A0...(21)』是同值资源间的传输命令,被消除。
如上述那样,根据本实施例,通过在分支对方相同的基本区段之间提取集合积,在经过任一种执行顺序的情况下,就能判定成为同值关系的寄存器、存储器和当前值。
在图5的一例的可以消除的模式下,基本区段间的地址寄存器A0-数据寄存器D0间的同值关系留在In集合之间的集合积的结果中。在图4的不可消除模式下,基本区段间的地址寄存器A0-数据寄存器D0间的同值关系通过In集合之间的集合积而被除外。因而就能确实地弄清楚不依赖于条件分支的根源。由于在确实地弄清楚的基础上而进行传输命令的消除,在本实施例中,就能实现彻底的优化。
(第二实施例)
在第二实施例中,利用基本区段间的同值关系而通过操作数置换来谋求成本提高。所谓操作数置换是指如果在命令的源码、目标(デイストネ—シヨン)码中存在同值关系的寄存器、存储器,在他们中,进行置换而成为命令成本更小的。在图10中表示出第二实施例中的优化装置的构成。在该图中,对于与第一实施例的优化装置相同的构成元素所以相同的标号,而省略其说明,仅对不同之点进行描述。
操作数置换部6以表形式存储命令成本。图2 5表示出命令成本表的一例。在该表中,在例如MOV命令的源操作数、目标(デイストネ—シヨン)操作数都为寄存器时,表示为:码尺寸为1,执行时间为1。
首先,参照图11的流程图来说明操作数置换部6的处理过程。图11是表示图10所示的操作数置换部6的处理的流程图。该流程图用步骤f1-步骤f13的一对来构成对应于全部基本区段的循环处理。用位于步骤f1-步骤f13内侧的步骤f2-步骤f12的一对构成对应于基本区段内全部命令的循环处理。该流程图对于全部的基本区段和全部的命令是反复进行步骤f4-步骤f11的处理的二重循环构造。
步骤f4、步骤f5是用于判定置换可否的步骤,在这些判定中,凡是为No的命令都被从置换的对象中除去。
在步骤f4、步骤f5中被判定为可以的命令成为步骤f7中的命令成本比较的对象。该步骤f7通过步骤f6~步骤f8的循环处理而对具有同值关系的全部资源反复进行。在接着该步骤f6~步骤f8的步骤f9中,判定使命令成本进一步变小的资源存在与否,根据存在与否来切换是执行步骤f10中的操作数置换还是进行跳跃。
下面随着标号的顺序来说明本流程图的处理。在步骤f2中,操作数置换部6把通过由大范围同值关系解析部4进行的Out集合计算处理所得到的分支来源-分支对方间的同值集合设定为In集合,反复进行从步骤f3到步骤f12的循环处理。对于全部的基本区段,当处理结束时,终止操作数置换部6的处理。
在从步骤f3到步骤f12的循环处理中,从基本区段的开头的命令到最后的命令依次反复进行以下的处理。
在步骤f4中,判定在处理对象命令中是否具有所参照的资源(该所参照的资源是可以置换的资源(可置换资源))。在具有可以置换资源时,转换到步骤f5,在没有可以置换资源时,转换到步骤f11。
在步骤f5中,判定在由步骤f2所设定的In集合内是否存在同值关系的资源(同值关系资源)。当同值关系的资源存在时,转换到步骤f6,当不存在时转换到步骤f11。
在步骤f6、步骤f7、步骤f8中,根据命令成本表而对于各个同值关系资源求出置换时的命令。
在步骤f9中,通过在同值关系资源中置换可以置换的资源,来判定是否存在命令成本进一步变小的资源。在存在命令成本进一步变小的资源时,转换到步骤f10,在不存在时,转换到步骤f11。
在步骤f10中,把处理对象命令的操作数置换为命令成本进一步变小的资源。
在步骤f11中,通过执行该命令,为了再次计算产生的同值关系的变化,而进行流程图的同值关系消除处理、同值关系生成处理。
沿着对应于图24(a)所示的源程序的一例的处理过程来说明上述处理。图24(a)是第二实施例的处理对象的源程序,图24(b)是在(a)的程序例子中所使用的命令的示意图。图24(c)是被分割为基本区段之后的(a)的程序例子。
首先,由基本区段分割部2把相应的源程序分割为基本区段。在图24(c)中表示出了分割的结果。接着,通过控制流程解析部3来解析基本区段间的控制流程。在图26(a)中表示出了对应于所分割的程序来分析控制流程的结果。
接着,利用通过基本区段分割部2被分割为基本区段、通过控制流程解析部3被解析的基本区段间的控制流程,而通过大范围同值关系解析部4来解析跨在基本区段上的大范围同值关系。对应于图24(a)所示的源程序的一例的大范围同值关系解析部4中的处理结果、所计算的各基本区段中的In集合、Out集合为图26(b)那样。在以下的操作数置换部6中利用该集合来作为大范围同值关系。
接着,以操作数置换部6的处理一例为例来说明图24(c)中的基本区段B2所对应的处理。
最初,在步骤f2中,把基本区段内的同值集合初始化为基本区段B2的In集合栏,转换到步骤f3以后的循环2的处理。
首先,在步骤f4中,判定减法命令『sub,#1,D1...(66)』是否具有可以置换的资源。由于作为由减法命令『sub,#1,D1...(66)』所参照的资源的当前值1是可以置换的资源,则在步骤f4中判定为Yes而转换到步骤f5。
接着,在步骤f5中,判定是否存在与作为减法命令『sub,#1,D1...(66)』的可置换的资源的当前值1具有同值关系的资源。由于当前值1与寄存器D0具有同值关系,则在步骤f5中判定为Yes而转换到步骤f6。
在步骤f6、步骤f7、步骤f8中,对于与作为与作为减法命令『sub,#1,D1...(66)』的可置换的资源的当前值1具有同值关系的全部资源,从命令成本表求出把当前值1置换为该资源时的命令成本。
进而,在步骤f9中,判定是否存在命令成本进一步变小的资源。其中,由于减法命令『sub,#1,D1...(66)』的命令成本,其操作数为当前值1、目标(デイストネ—シヨン)操作数为寄存器D1的sub命令,在码尺寸为2,执行时间为1。另一方面,在把减法命令『sub,#1,D1...(66)』的当前值1置换为寄存器D0时,命令成本的码尺寸变为1,执行时间变为1,码尺寸变小。这样,在步骤f9中被判定为Yes,在步骤f10中减法命令『sub,#1,D1...(66)』的当前值1被置换为寄存器D0。
最后,在步骤f11中,转换到同值关系的更新,通过减法命令『sub,#1,D1...(66)』,寄存器D1的同值关系集合成为空集合。然后,转换到步骤f12,重复进行循环2。
接着,对传输命令『mov D1,(4,SP)...(67)』、加法命令『add#200,D0...(68)』,转换到同样的处理。
对于传输命令『mov D1,(4,SP)...(67)』,虽然可以置换的资源是寄存器D1,但是,由于通过之前的减法命令『sub,#1,D1...(66)』所产生的同值关系的更新同值关系集合成为空集合,则与寄存器D1具有同值关系的资源不存在。这样,在步骤f5中被判定为No,在步骤f11中转换到同值关系的更新,重复进行循环2。
对于加法命令『add#2 00,D0...(68)』,虽然可以置换的资源是当前值2,但是与当前值2具有同值关系的资源不存在。这样,在步骤f5中被判定为No,在步骤f11中转换到同值关系的更新。
由于基本区段B2通过加法命令『add#200,D0...(68)』而终结,则结束了循环2,转换到步骤f13,重复进行循环1的处理。
当对于基本区段B2以外的全部的基本区段反复进行以上处理时,在基本区段B1的比较命令『cmp#1,D1...(64)』中,比较命令『cmp#1,D1...(64)』的命令成本的码尺寸为2、执行时间为1,与此相对应,由于把当前值1置换为寄存器D0时的命令成本的码尺寸为2,执行时间为1,则把比较命令『cmp#1,D1...(64)』的当前值1置换为寄存器D0。进而,在基本区段B3的传输命令『mov(4,SP),A0...(69)』中,传输命令『mov(4,SP),A0...(69)』的命令成本的码尺寸为2,执行时间为1,与此相对应,由于把栈(4,SP)置换为寄存器D1时的命令成本码尺寸为1,执行时间为1,则把传输命令『mov(4,SP),A0...(69)』的栈(4,SP)置换为寄存器D1。
最终,对应于图24(a)所示的源程序的一例,通过大范围同值关系解析部4来解析跨在基本区段上的大范围同值关系,利用该同值关系来由操作数置换部6进行操作0数的置换处理,由此,就能把比较命令『cmp#1,D1...(64)』、减法命令『sub,#1,D1...(66)』、传输命令『mov(4,SP),A0...(69)』的操作数置换为命令成本更小的操作数,而缩小程序尺寸。
(第三实施例)
在第三实施例中,利用由大范围同值关系解析部4所解析的分支来源-分支对方间的同值关系来进行复制传送。在图27中表示出了复制传送的处理的样子。图27是表示复制传送的处理的样子的示意图。如图27那样,由传输命令『mov D0,D1...(81)』设定其值的寄存器D1在传输命令『mov D1,D2...(82)』之前,其值不变,当D1=D0时,传输命令『mov D0,D1...(81)』的寄存器D1仅由传输命令『mov D1,D2...(82)』使用,这样一来,通过把传输命令『movD1,D2...(82)』的寄存器D1置换为寄存器D0,则『mov D0,D1...(81)』就不需要了。因此,如图27(b)那样,就能消除传输命令『mov D0,D1...(81)』。把该处理称为复制传送。
图12表示第三实施例中的优化装置的构成。在该图中,对于与第一实施例的优化装置相同的构成元素使用相同的标号而省略其说明,仅描述不同点。
下面参照图13和图14的流程图来说明复制传送部7的处理过程。图13是表示图12所示的复制传送部7的处理的流程图,图14是表示图13所示的步骤g8的可消除命令的消除处理的处理的流程图。而且,这些流程图的分段是:步骤g1~步骤g12是主流程,步骤h1~步骤h9是可复制传送判定处理的流程图。同样,图14的流程图是可消除命令的消除处理的流程图。
而且,主流程中的步骤构成步骤g,可复制传送判定处理的流程图中的步骤构成步骤h,图14的流程图中的步骤构成步骤j,由此各流程图的各个步骤使用不同的字母的标号来相互区别。
由流程图中的步骤g1~步骤g12的一对构成对于全部基本区段的循环处理。由位于流程图中的步骤g1~步骤g12内侧的的步骤g3-步骤g11的一对构成对于基本区段内的全部命令的循环处理。即,本流程图对于全部基本区段和全部命令具有反复进行步骤g4~步骤g10的处理的双重循环构造。在步骤g3~步骤g11的循环处理之前,由步骤g2来设定各基本区段的In集合。在步骤g5~步骤g9的循环处理一度终结时,在步骤g10中进行由图7所示的同值关系消除处理和图8所示的同值关系生成处理组成的同值关系的更新。
步骤g4是用于判定可否置换的步骤,在这些判定中,从置换的对象中除去任何为No的命令。
在步骤g4中判定为可以的命令为步骤g6、步骤g7中的可复制传送判定处理的对象。步骤g6~步骤g7是用于判定复制传送可否的步骤,当在步骤g6-步骤g7中判定为No时,跳过步骤g8,当为Yes时,执行步骤g8。
若以标号的顺序来说明各步骤,反复进行步骤g1至步骤g12的循环处理。对于全部的基本区段,当处理结束时,结束复制传送部7的处理。在步骤g2中,通过大范围同值关系解析部4把基本区段内的同值集合初始化为所求出的分支来源-分支对方间的In集合栏。
在从步骤g3至步骤g11中,从基本区段的开头的命令至最后的命令依次反复进行以下的处理。
在步骤g4中,判定处理对象命令是传输命令还是运算命令。在是传输命令或运算命令的情况下,转换到步骤g5,否则转换到步骤g10。
在步骤g5、g6、g7、g8、g9中,对于在现在的命令中包含的全部的所参照的资源,反复进行循环3。
在步骤g6中,转换到下述的可复制传送判定处理。
在步骤g7中,判定是否可以进行复制传送。在可以进行复制传送时转换到步骤g8,在不可以进行复制传送时转换到步骤g9,重复进行循环3。
在步骤g8中,转换到下述的可以消除命令的消除处理,接着转换到步骤g9,重复进行循环3。
在步骤g10中,由于通过处理对象命令同值关系变化,则转换到处理对象命令进行的同值关系的更新,接着,转换到步骤g11,重复进行循环2。
可复制传送判定处理中的步骤h1根据定义命令的存在与否判定可否进行复制传送,根据可否来选择性地执行步骤h2~步骤h8。步骤h2~步骤h8为对于定义句子反复进行步骤h3~步骤h6的循环构造。若以图5的一例来说,所谓的传输命令『mov D0,A0...(17)』的定义句子相当于分支来源基本区段B2、基本区段B3、基本区段M1、基本区段M2内的传输命令『mov D0,A0...(10)』、传输命令『mov D0,A0...(15)』...,步骤h2~步骤h8的循环处理对这些的定义句子分别反复进行,判定定义句子-命令对是否满足步骤h3~步骤h6的条件。
用于可以进行复制传送的条件由下面这样给出:在步骤h3~步骤h6中,在定义句子-命令对中求出满足这些的基准。
(1)全部的定义句子是等效传输命令;
(2)由全部的定义句子所参照的资源相等;
(3)在处理对象命令之前,由定义句子所参照的资源和处理对象命令的所参照的资源具有同值关系。
首先,参照图13、图14的流程图来说明可复制传送判定处理部的处理过程。
在可复制传送判定处理的步骤h1中,判定由处理对象命令i所参照的资源s的定义句子是否存在。在定义句子存在时,转换到步骤h2,在不存在时,转换到步骤h9。
从步骤h2至h7,对由处理对象命令i所参照的资源s的全部的定义句子j,反复执行循环1。
在步骤h3中,判定定义句子j是否是等效传输命令。当定义句子j是等效传输命令时,转换到步骤h4,当不是等效传输命令时,转换到步骤h9。
在步骤h4中,判定由定义句子j所定义的资源与由命令i所参照的资源s是否相等。在相等的情况下,转换到步骤h5,在不相等的情况下,转换到步骤h9。
在步骤h5中,判定由全部的定义句子j所参照的资源是否相等。在由全部的定义句子j所参照的资源相等的情况下,转换到步骤h6;在不相等的情况下,转换到步骤h9。
在步骤h6中,判定在命令i之前由定义句子j所参照的资源与由命令i所参照的资源s是否具有同值关系。在具有同值关系的情况下,转换到步骤h7,重复进行循环1。在没有同值关系的情况下,转换到步骤h9。步骤h6的判定的主要意思是:确认在传输命令『mov D0,A0...(15)』~传输命令『mov D0,A0...(17)』之间、传输命令『mov D0,A0...(10)』~传输命令『mov D0,A0...(17)』之间作为源码的数据寄存器D0的保持值没有发生变化。其理由是:在传输命令『mov D0,A0...(15)1~传输命令『mov D0,A0...(17)』之间、传输命令『mov D0,A0...(10)』1~传输命令『mov D0,A0...(17)』之间的途中,如果数据寄存器D0变化,通过源码的重写,地址寄存器A0的保持值变得不合适。为了防止具有这样缺陷的重写,而在步骤h6中采取根据同值关系的确认。
在步骤h8中,判定为可以复制传送,结束处理。
在步骤h9中,判定为不可以复制传送,结束处理。
可消除命令的消除处理通过复制传送处理而转换到成为可以消除的传输命令的消除。图14表示出了仅在通过步骤g7的可否判定判定为可以的情况下所执行的可消除命令消除处理。图14是表示图13所示的步骤g8的可消除命令消除处理的处理的流程图。
在该流程图中,作为前处理而提供步骤j2~步骤j5的循环处理。步骤j4是用于把可以消除的定义句子进行集合的处理(其中把被进行集合的集合称为可以消除命令集合),其中,成为集合的成分的资源仅是清除了步骤j3中的判定的资源。
若按照标号的顺序来进行说明,从步骤j2~步骤j5,对由现在的命令所参照的资源的全部的定义句子j,反复进行循环1。
在步骤j3中,对于定义句子的全部的参照对方k,判定由定义句子j所参照的资源与由参照对方k所参照的资源是否具有同值关系。在具有同值关系的情况下,转换到步骤j4,在没有同值关系的情况下,转换到步骤j5,重复进行循环1。
在步骤j4中,在可消除命令集合栏中追加定义句子j。
接着步骤j5的步骤j6是在未得到可消除命令集合的情况下用于跳过步骤j7以后的处理的判定步骤,在步骤j8~步骤j13中,相对于通过步骤j12~步骤j15的反复处理而得到的可消除命令集合,进行复制传送。
在步骤j6中,判定可消除命令集合是否是空集合。在是空集合的情况下,结束处理,在不是空集合的情况下,转换到步骤j7。
在步骤j7中,当在包含在可消除命令集合栏中的命令中,组合哪个命令并进行消除时,从图25的命令成本表而求出命令成本是否变为最小,选择该组合。
由步骤j8-步骤j13的一对来构成对于所选择的可消除命令的全部的成分(可消除命令)的循环处理。由位于步骤j8-步骤j13内侧的步骤j9-步骤j12的一对来构成对于可消除命令的全部的参照对方的循环处理。即,流程图为对于所选择的全部的全部可消除命令和可消除命令的全部的参照对方而反复进行步骤j10的处理的二重循环构造。步骤j12中的可消除命令的消除处理执行一轮步骤j9~步骤j11的循环处理。
若按照标号的顺序来进行说明,首先,在步骤j8、步骤j13中,对于所选择的可消除命令反复执行循环2。
在步骤j9、步骤j10、步骤j11中,对于可消除命令的全部的参照对方,把由参照对方所参照的资源置换为由可消除命令所参照的资源。在置换后,在步骤j12中,消除可消除命令。如果根据这样的置换-消除的程序,就能集中消除位于图5的一例中的分支来源的基本区段中的传输命令『mov D0,A0...(10)』、传输命令『mov D0,A0...(15)』...这样的重复的传输命令。
下面沿着对应于图28(a)所示的源程序的一例的处理过程来说明以上处理。首先,通过基本区段分割部2把相应的源程序分割为基本区段。在图28(b)中表示出了分割的结果。接着通过控制流程解析部3来解析基本区段间的控制流程。在图29(a)中表示出了处理被分割成图28(b)所示的基本区段的程序的结果。进而,利用由基本区段分割部2分割为基本区段并由控制流程解析部3所解析的基本区段间的控制流程,大范围同值关系解析部4解析跨在基本区段上的大范围同值关系。图29(b)中表示出了对应于图28(a)所示的源程序的一例的大范围同值关系解析部4中的处理结果、在所计算的各基本区段中的In集合、Out集合。在以下的复制传送部7中利用该集合作为大范围同值关系。
接着,以复制传送部7的处理的一例为例来说明图28(a)中的基本区段B3所对应的处理。
最初,在步骤g2中,把基本区段内的同值集合初始化为基本区段B3的In集合栏,转换到步骤g3以后的循环2的处理。首先,在步骤g4中,判定传输命令『mov A0,D1...(51)』是传输命令还是运算命令。由于传输命令『movA0,D1...(51)』是传输命令,则在步骤g4中判定为Yes而转换到步骤g5。
在步骤g5中,由于由传输命令『mov A0,D1...(51)』所参照的资源仅是寄存器A0,则对寄存器A0转换到步骤g6以下的处理。
在步骤g6中,转换到可复制传送判定处理。
在可复制传送判定处理中,在步骤h中,由于由传输命令『mov A0,D1...(51)』所参照的资源寄存器A0的定义句子存在,则判定为Yes,转换到步骤h2。
在步骤h2中,对于由命令51所参照的资源寄存器A0的全部的定义句子,反复执行循环1。由于所谓寄存器A0的定义句子是指设定寄存器A0的值的命令,则在图28(a)的源程序中,传输命令『mov D0,A0...(42)』、传输命令『mov D0,A0...(50)』成为寄存器A0的定义句子。
首先,对应于传输命令『mov D0,A0...(42)』,转换到步骤h3。由于传输命令『mov D0,A0...(42)』是等效传输命令,则在步骤h3中判定为Yes,转换到步骤h4。
在步骤h4中,由于由传输命令『mov D0,A0...(42)』所定义的资源是寄存器A0,与由传输命令『mov A0,D1...(51)』所参照的资源寄存器A0相等,则判定为Yes,转换到步骤h5。
在步骤h5中,由于由传输命令『mov D0,A0...(42)』所参照的资源和由传输命令『mov D0,A0...(50)』所参照的资源相等,则判定为Yes,转换到步骤h6。
在步骤h6中,在命令51之前,由于由传输命令『mov D0,A0...(42)』所参照的资源寄存器D0与由传输命令『movA0,D1...(51)』所参照的资源寄存器A0具有同值关系(箭头e),则判定为Yes,进行步骤h7,重复循环1。
接着,对应于传输命令『mov D0,A0...(50)』,转换到步骤h3。由于传输命令『mov D0,A0...(50)』是等效传输命令,则在步骤h3中判定为Yes,转换到步骤h4。
在步骤h4中,由于由传输命令『mov D0,A0...(50)』所定义的资源是寄存器A0,与由传输命令『mov A0,D1...(51)』所参照的资源寄存器A0相等,则判定为Yes,转换到步骤h5。
在步骤h5中,由于由传输命令『mov D0,A0...(50)』所参照的资源和由传输命令『mov D0,A0...(42)』所参照的资源相等,则判定为Yes,转换到步骤h6。
在步骤h6中,在传输命令『mov A0,D1...(51)』之前,由于由传输命令『mov D0,A0...(50)』所参照的资源寄存器D0与由传输命令『movA0,D1...(51)』所参照的资源寄存器A0具有同值关系(箭头e),则判定为Yes,进行步骤h7,重复循环1。
在步骤h2中,对于全部的定义句子,由于反复执行,则转换到步骤h8,判定为可复制传送,结束处理。
可复制传送判定处理的结果,由于判定为可复制传送,则在步骤h7中,判定为Yes,转换到步骤g8的可消除命令的消除处理。
在可消除命令的消除处理中,在步骤j1中,把可消除命令集合初始化为空集合。在步骤j2中,对由传输命令『mov A0,D1...(51)』所参照的资源寄存器A0的全部的定义句子,即传输命令『mov D0,A0...(42)』、传输命令『mov D0,A0...(50)』,反复进行循环1。首先,对于传输命令『movD0,A0...(42)』,转换到步骤j3以后的处理。
在步骤j3中,把传输命令『mov D0,A0...(42)』的全部的参照对方即由传输命令『mov D0,A0...(42)』所定义的资源寄存器A0着眼于后面参照的命令,判定由传输命令『mov D0,A0...(42)』所参照的资源与由参照对方所参照的资源是否具有同值关系。在此情况下,传输命令『mov D0,A0...(42)』的参照对方是减法运算命令『sub A0,D1...(45)』、传输命令『movA0,D1...(51)』。由于由传输命令『mov D0,A0...(42)』所参照的资源寄存器D0与由减法运算命令『sub A0,D1...(45)』所参照的资源寄存器A0具有同值关系(箭头d),由传输命令『mov D0,A0...(42)』所参照的资源寄存器D0与传输命令『mov A0,D1...(51)』所参照的资源寄存器A0具有同值关系(箭头e),则在步骤j3中判定为Yes,转换到步骤j4。
在步骤j4中,在可消除命令集合栏中追加传输命令『mov D0,A0...(42)』,接着,进行步骤j5,反复进行循环1。接着,对于传输命令『movD0,A0...(50)』,转换到步骤j3。在步骤j3中,由于传输命令『mov D0,A0...(50)』的参照对方仅是传输命令『mov A0,D1...(51)』,由传输命令『mov D0,A0...(50)』所参照的资源寄存器D0与由传输命令『movA0,D1...(51)』所参照的资源寄存器A0具有同值关系(箭头e),则判定为Yes,转换到步骤j4。
在步骤j4中,在可消除命令集合栏中追加传输命令『mov D0,A0...(50)』,接着,进行步骤j5,反复进行循环1。在步骤j2中,对于全部的定义句子,由于反复执行,则转换到步骤j6。在步骤j6中,由于在可消除命令集合栏中包含有传输命令『mov D0,A0...(42)』和传输命令『mov D0,A0...(50)』,则判定为No,而转换到步骤j7。
在步骤j7中,如图30所示的那样,由于同时消除传输命令『mov D0,A0...(42)』和传输命令『mov D0,A0...(50)』时,命令成本为最小,则选择传输命令『mov D0,A0...(42)』和传输命令『mov D0,A0...(50)』作为组合。
在步骤j8中,对于由步骤j7所选择的命令即传输命令『mov D0,A0...(42)』和传输命令『mov D0,A0...(50)』,反复进行循环2。首先,对于传输命令『mov D0,A0...(42)』,转换到以下的步骤j9的循环3。
在步骤j9、步骤j10、步骤j11中,对于作为传输命令『mov D0,A0...(42)』的全部的参照对方的减法运算命令『sub A0,D1...(45)』和传输命令『mov A0,D1...(51)』,把由减法运算命令『sub A0,D1...(45)』和传输命令『mov A0,D1...(51)』所参照的资源寄存器A0置换为由传输命令『mov D0,A0...(42)』所参照的资源寄存器D0,转换到步骤j12。
在步骤j12中,把传输命令『mov D0,A0...(42)』作为可消除命令而转换到消除,转换到步骤j13,重复进行循环2。
进而,对于传输命令『mov D0,A0...(50)』,转换到步骤j9的循环3。在步骤j9、步骤j10、步骤j11中,对于作为传输命令『mov D0,A0...(50)』的唯一的参照对方的传输命令『mov A0,D1...(51)』,把由传输命令『mov A0,D1...(51)』所参照的资源置换为由传输命令『mov D0,A0...(50)』所参照的资源寄存器D0。此后,转换到步骤j12。
在步骤j12中,把传输命令『mov D0,A0...(50)』作为可消除命令而转换到消除,转换到步骤j13,重复进行循环2。
在步骤j8中,对于全部所选择的命令,由于重复执行,而结束处理。
在可消除命令的消除处理结束之后,在复制传送部7中,转换到步骤g9,反复进行循环3。
在步骤g5中,由于由传输命令『mov A0,D1...(51)』所参照的资源除了寄存器A0之外不存在,则退出循环3的处理,转换到步骤g10。通过步骤g10,转换到同值关系的更新处理,转换到步骤g11,重复进行循环2。
接着,对于加法运算命令『add #1,D1...(52)』,转换到同样的处理。由于加法运算命令『add #1,D1...(52)』是运算命令,则在步骤g4中,被判定为Yes,但是,由于由加法运算命令『add #1,D1...(52)』所参照的资源当前值1的定义句子不存在,则在步骤g10中,转换到同值关系的更新。由于加法运算命令『add #1,D1...(52)』是基本区段B3的最后的命令,则结束复制传送部7的循环2,重复进行循环1。
即使对于除基本区段B3之外的全部的基本区段反复进行以上处理。在其他的基本区段中,由于能够进行复制传送的命令不存在,则最终,对应于图28(a)所示的源程序的一例,通过大范围同值关系解析部4解析跨在基本区段上的大范围同值关系,利用该同值关系,而在复制传送部7中进行复制传送处理。由此,置换命令45和命令51,同时消除处于分支来源的基本区段中的传输命令『mov D0,A0...(42)』、传输命令『mov D0,A0...(50)』。其结果,成为图31所示的程序那样,就能缩小程序尺寸。
根据上述那样的本实施例,通过利用分支来源-分支对方间的同值关系来进行复制传送,就能集中消除处于图5中的一例所示的那样的分支来源的基本区段中的传输命令『mov D0,A0...(10)』、传输命令『mov D0,A0...(15)』,因而,就能从第一实施例的传输命令消除更多的传输命令。
虽然根据上述实施例进行了说明,但是,本发明能够以不脱离其目的的范围进行变更实施。例如,可以进行以下(a)~(c)所示的那样。
(a)在本实施例中,虽然把等效传输命令则mov等符号·尺寸相等的传输命令,但是,也可以按以下这样,把寄存器的值清零的命令看作是给寄存器的当前值0的传输命令。
·sub D0、D0(寄存器D0和寄存器D0的加法运算命令)
·and #0、D0(寄存器D0和当前值0的“与”命令)
·xor D0、D0(寄存器D0和寄存器D0的“或”命令)
·clr D0(寄存器D0的清零命令)
(b)在第二实施例中,虽然对命令的操作数仅由一个资源构成的例子进行了由操作数置换部6所进行的优化的说明,但是,在操作数由间接参照等那样的多个可置换的资源所构成的情况下((D1、A0)和(D0、A0)等),同样可以使用由操作数所进行的优化。
(c)在第一~第三实施例中,在成为对象的命令的定义侧的码是使用『mov 10,(disp,A0)』,『mov 10,(A1)』等地址寄存器的间接参照的情况下,由图7的流程图的步骤c4判定为No,由步骤c7判定为No。这样,当由步骤c7判定为No时,在步骤c9中,从全部的寄存器的同值关系集合中完全消除存储器。这样,之所以完全消除存储器,是因为间接参照可以表现外部存储器空间、栈存储器空间中的两方,而没有带有从间接参照的操作数是否表现哪个的区别。如果保证在外部存储器空间和栈存储器空间之间没有重叠,则在步骤c9中就没有存储器地址的完全消除的必然性,存储器地址的消除可以部分地进行。
即,如果间接参照代表外部存储器,就不需要通过该间接参照来定义栈存储器空间。这样,就可以仅消除与各同值关系集合的外部存储器地址相关的,而保存与栈存储器相关的。
反之,如果间接参照代表栈存储器,就不需要通过该间接参照来定义外部存储器空间。这样,就可以仅消除与各同值关系集合的栈存储器地址相关的,而保存与外部存储器相关的。
间接参照是定义栈存储器空间还是定义外部存储器空间的解析这样进行:第一,对于全部的寄存器,在所制作的同值关系集合内,参照地址寄存器之间的同值关系集合,研究这些地址寄存器是否与程序内的标记和栈指示字具有同值关系。
地址寄存器A0=_Label 1
地址寄存器A1=SP
地址寄存器A2=_Label 2
当这样来解析同值关系并作为对象命令来取出间接参照型的『mov5,(10,A0)』时,优化装置通过地址寄存器的同值关系集合就能得知优化装置的相应命令中的(10,A0)意味着『_Label+10』的地址。由于该『_Label』是外部存储器空间内的地址,则优化装置就能得知间接参照型的『mov5,(10,A0)』定义外部存储器空间。由此,从各寄存器的同值关系集合中擦除外部存储器空间的地址的码,而保存栈存储器空间的地址码。
当作为对象命令来取出间接参照型的『mov3,(10,A1)』时,通过地址寄存器的同值关系集合,优化装置就能得知相应命令中的(10,A1)意味着『SP+10』的地址。由此,优化装置就能得知间接参照型的『mov3,(10,A1)』定义栈存储器空间。由此,从各寄存器的同值关系集合中擦除栈存储器空间的地址的码,而保存外部存储器空间的地址码。
这样一来,通过区别为每个栈存储器空间、外部存储器空间而进行存储器地址的消除,就能使同值关系集合的信息量变多。
虽然以地址寄存器之间的同值关系为代表来进行了说明,但是,除此之外可以通过解析通用寄存器的寄存器间接参照之间的同值关系,来使同值关系集合的信息量变多。
Claims (28)
1.一种优化装置,从具有按条件分支的多个执行顺序的程序中,以其中任一个执行顺序来触析保持值为相同的硬件资源,使用解析结果来消除传输命令,其特征在于,包括:
·执行顺序信息生成装置,生成通过多个基本区段及这些的分支来源和分支对方的关系所表现的执行顺序信息,
其中,所述的基本区段是根据分支命令和分支对方标记所隔开的程序的小单位;
·后状态解析装置,在上述执行顺序信息中的分支来源基本区段中所包含的命令由处理器全部执行后的后状态下,解析哪个硬件资源和哪个硬件资源是否为相同的保持值,在后状态下对各分支来源基本区段制成由成为相同的保持值的资源名组成的同值集合;
·前状态解析装置,在以共同的基本区段作为分支对方的全部的分支来源基本区段之间选择同值集合的共同元素,由此,在分支对方基本区段的先头命令的执行前的前状态下,制成由成为相同的保持值的资源名组成的同值集合;
·区段内解析装置,当得到前状态中的同值关系集合时,在分支对方基本区段中所包含的各命令的执行步骤中,解析在前状态中的同值集合中所包含的共同元素是否增减,作为每个命令而得到命令的每个执行步骤的同值集合;
·资源名判定装置,当得到命令的每个执行步骤的同值集合时,判定位于这些命令之后的命令是否把在同值集合中所示的资源名指定给传输来源、传输对方;
·传输命令消除装置,当判定为指定给传输对方时,消除相应次序的命令
2.根据权利要求1所述优化装置,其特征在于,所述的前状态解析装置进一步包括:
·检出装置,检出以共同的基本区段为分支对方的多个基本区段;
·集合积装置,在所检出的基本区段之间通过提取由后状态解析装置所进行集合的同值集合的集合积来选择共同元素。
3.根据权利要求2所述的优化装置,其特征在于,包括:
·状态表存储装置,把多个资源名作为索引项目,在每个基本区段中存储包含对应于这些索引项目的写入字段的对应表;
·初始化装置,从程序检出指示传输来源资源的源码和指示传输对方资源的目标码的全部,通过把他们写入状态表中的分支对方基本区段的写入字段,进行写入字段的初始化;
所述后状态解析装置包括:
·第一取出装置,当进行由初始化装置所产生的写入时,从开头到末尾依次取出每个基区段内的命令;
·命令解读装置,每当取出一个命令,解读所取出的命令是哪个命令;
·第一擦除装置,当解读为传输命令或运算命令时,在状态表存储装置中,擦除已写入到以对应命令的目标码的资源名进行索引的写入字段中的全部的码;
·操作数识别装置,识别所解读的传输命令的目标码和源码表示哪个资源名;
·第一写入装置,当源码的资源名被识别时,把目标码写入由所识别的资源名所索引的写入字段,当目标码的资源名被识别时,把源码写入由所识别的资源名所索引的写入字段;
·指示装置,当完成写入到写入字段中时,指示给取出装置以取出次序的命令;
·决定装置,当通过反复进行由指示装置所产生的指示而取出至末尾的命令时,把在此之前施加的写入和擦除的状态表存储装置的存储内容决定为在每个基本区段的后状态下的同值集合。
4.根据权利要求3所述的优化装置,其特征在于,前状态解析装置包括:
·设定装置,把后状态中的同值集合设定在状态表存储装置的存储内容中对应于分支对方的基本区段的写入字段中;
上述优化装置进一步包括:
·备忘存储装置,当通过设定装置设定同值集合时,存储在状态表存储装置内所得到的同值集合作为备用;
·第一启动装置,当通过设定装置把同值集合设定到写入字段中时,再启动后状态解析装置;
·核对装置,当通过后状态解析装置而在状态表存储装置内得到新的同值集合时,把所得到的同值集合与存储在备忘存储装置中的备用进行核对,而判定同值集合中的变化的有无;
·第二启动装置,当判定了核对的结果同值集合的码数的变化时,再次启动后状态解析装置和集合积装置;
所述区段内解析装置,在核对的结果被判定为没有码数的变化时,把最后取得的集合积结果作为前状态中的同值关系集合而开始各命令的执行状态中的解析。
5.根据权利要求4所述优化装置,其特征在于,所述的后状态解析装置进一步包括:
·第二写入装置,当由操作数识别装置识别源码和目标码的任一个为寄存器名时,把已写入到由源码的寄存器名进行索引的写入字段中的全部码复制到由目标码的寄存器名进行索引的写入字段中,把已写入到由目标码的寄存器名进行索引的写入字段中的全部码复制到由源码的寄存器名进行索引的写入字段中,由此,把通过命令解读装置解读的传输命令而成为相同保持值的寄存器名或存储器地址反映到状态表存储装置中。
6.根据权利要求5所述优化装置,其特征在于,所述的第一写入装置包括:
·第一写入部,在通过操作数识别装置而识别寄存器名、存储器地址的组合时,把存储器地址写入由状态表存储装置中的寄存器名进行索引的写入字段中;
所述第二写入装置进一步包括:
·第二写入部,判定已写入到以由操作数识别装置所识别的寄存器名进行索引的写入字段中的寄存器名,在由判定的寄存器名进行索引的写入字段中写入所识别的存储器地址,由此,在状态表存储装置中反映出通过命令解读装置解读的传输命令而成为相同保持值的存储器地址。
7.根据权利要求6所述优化装置,其特征在于,所述的第二写入装置进一步包括:
·第一写入字段-寄存器检出部,当由操作数识别装置识别了寄存器名、存储器地址的组合时,检出在写入字段已写入的所识别的存储器地址的索引项目的寄存器名;
·第三写入部,把已写入到由通过第一写入字段-寄存器检出部所检出的寄存器名进行索引的写入字段中全部的码复制到由操作数识别装置所识别的寄存器名的写入字段中,把由第一写入字段-寄存器检出部所检出的寄存器名写入到由操作数识别装置所识别的寄存器名的写入字段中,把由操作数识别装置所识别的寄存器写入到由第一写入字段一寄存器检出部所检出的寄存器名进行索引的写入字段中,由此,在状态表存储装置中反映出通过命令解读装置解读的传输命令而成为相同保持值的寄存器名或存储器地址。
8.根据权利要求7所述优化装置,其特征在于,所述的第一写入装置包括:
·第四写入部,在由操作数识别装置识别寄存器名、当前值码的组合时,把当前值码写入到由寄存器名进行索引的写入字段中。
9.根据权利要求8所述优化装置,其特征在于,所述的第二写入装置包括:
·第二写入字段-寄存器检出部,在由操作数识别装置识别寄存器名、当前值码的组合时,如果存在把相对应的当前值码写入到写入字段中的寄存器名,就检出其;
·第五写入部,把已写入到以由第二写入字段-寄存器检出部所检出的寄存器名进行索引的写入字段中的全部的码复制到以由操作数识别装置所识别的寄存器名的写入字段中,写入由第二写入字段-寄存器检出部所检出的寄存器名,把所识别的寄存器名写入到以所检出的寄存器名进行索引的写入字段中。
10.根据权利要求9所述优化装置,其特征在于,所述的第二写入装置包括:
·第三写入字段-寄存器检出部,在由操作数识别装置识别存储器地址、当前值码的组合时,如果存在把所识别的当前值码或存储器地址写入到写入字段中的寄存器名,则检出其;
·第六写入部,把当前值码和存储器地址写入到以由第三写入字段-寄存器检出部所检出的寄存器名进行索引的写入字段中。
11.根据权利要求10所述优化装置,其特征在于,所述的第二写入装置包括:
·第四写入字段-寄存器检出部,在由操作数识别装置识别存储器地址、存储器地址的组合时,如果存在把所识别的存储器地址写入到写入字段中的寄存器名,则检出其;
·第七写入部,把所识别的存储器地址写入到以所检出的寄存器名进行索引的写入字段中。
12.根据权利要求5所述优化装置,其特征在于,所述的后状态解析装置进一步包括:
·第二擦除装置,完全进行擦除以成为:当由操作字识别装置识别为传输命令的目标码是寄存器名时,由于在已写入到由寄存器名进行索引的写入字段中的码被解读的传输命令,而成为没有相同的保持值;
·第三擦除装置,当由操作字识别装置识别为传输命令的目标码是寄存器名时,在已写入到由状态表存储装置中的目标码之外的寄存器名进行索引的写入字段中的码中,擦除所识别的寄存器名;
所述第一、第二写入装置,在第二、第三擦除装置所产生的擦除之后,进行向写入字段的写入。
13.根据权利要求12所述的优化装置,其特征在于,上述后状态解析装置进一步包括:
·第四擦除装置,当由操作字识别装置识别为传输命令的目标码是存储器地址时,在已写入到由状态表存储装置中的寄存器名进行索引的写入字段中的码中,擦除所识别的存储器地址;
所述第一、第二写入装置,在第四擦除装置所产生的擦除之后,进行向写入字段的写入。
14.根据权利要求13所述的优化装置,其特征在于,上述后状态解析装置进一步包括:
后状态解析装置进一步包括:
·存储器空间判定装置,当由操作字识别装置识别为传输命令的目标码是使用预定寄存器的间接参照的码时,通过解析该预定寄存器的保持值,来判定相应的传输命令的传输对方是栈存储器空间还是外部存储器空间;
·第五擦除装置,当存储器空间判定装置判定为是栈存储器空间时,擦除与写入到状态表存储装置的写入字段中的栈存储器空间相关的码;
·第六擦除装置,当存储器空间判定装置判定为是外部存储器空间时,擦除与写入到状态表存储装置的写入字段中的外部存储器空间相关的码。
15.根据权利要求14所述优化装置,其特征在于,所述的状态表存储装置中的状态表,包括写入字段,把预定寄存器的寄存器名作为索引项目而对应于这些索引项目;
上述第一写入装置,当通过识别装置识别为由第一取出装置所取出的命令的资源名是预定寄存器时,把源码写入到由所识别的预定寄存器名进行索引的写入字段中;
上述存储器空间判定装置,通过参照在作为索引项目的写入字段中写入的预定寄存器的寄存器名的码,来判定传输命令的传输对方是栈存储器空间还是外部存储器空间。
16.根据权利要求12所述的优化装置,其特征在于,上述寄存器的任一个是在子程序调用命令的开头和末尾不进行退避-恢复保持值的破坏寄存器,
上述第二擦除命令,完全进行擦除以成为:如果由第一取出装置所取出的命令是子程序调用命令,则在状态表存储装置的存储内容中,在已写入到对应于破坏寄存器的寄存器名的写入字段中的码因该命令而成为没有相同的保持值,
上述第三擦除装置,进行擦除以成为:在状态表存储装置的存储内容中,在已写入到以除破坏寄存器之外的寄存器名进行索引的写入字段中的全部的码中,破坏寄存器的寄存器名因该命令而成为没有相同的保持值。
17.一种优化装置,从具有由按件分支按怎样的执行顺序的程序中,以其中任一个执行顺序来解析保持值为相同的硬件资源,使用解析结果来消除传输命令,其特征在于,包括:
·执行顺序信息生成装置,生成通过多个基本区段名及这些的分支来源-分支对方的关系所表现的执行顺序信息,
其中,所述的基本区段是根据分支命令和分支对方标记所隔开的程序的小单位;
·后状态解析装置,在上述执行顺序信息中的分支来源基本区段中所包含的命令由处理器全部执行后的后状态下,解析哪个硬件资源和哪个硬件资源是否为相同的保持值,在后状态下对各分支来源基本区段制成由成为相同的保持值的资源名组成的同值集合;
·前状态解析装置,在以共同的基本区段作为分支对方的分支来源基本区段之间选择同值集合的共同元素,由此,在分支对方基本区段的先头命令的执行前的前状态下,制成由成为相同的保持值的资源名组成的同值集合;
·区段内解析装置,当得到前状态中的同值关系集合时,在分支对方基本区段中所包含的各命令的执行步骤中,解析在前状态中的同值集合中所包含的共同元素是否增减,作为每个命令的解析结果而得到命令的每个执行步骤的同值集合;
·资源名判定装置,当得到命令的每个执行步骤的同值集合时,判定这些次序的命令是否把在同值集合中所示的资源名指定给源码或目标码;
·预测装置,当被判定为是指定时,预测表示以相应的命令的执行步骤中的同值集合内的各资源名置换次序的命令的集合名时的次序的命令中的执行时间和/或存储器尺寸的命令成本;
·置换装置,置换对方,当命令成本变少时,用所预测的相同保持值的资源名置换次序的命令的资源名。
18.根据权利要求17所述优化装置,其特征在于,所述的前状态解析装置进一步包括:
·检出装置,检出以共同的基本区段为分支对方的多个基本区段;
·集合积装置,在所检出的基本区段之间通过提取由后状态解析装置所进行集合的同值集合的集合积来选择共同元素。
19.根据权利要求18所述的优化装置,其特征在于,包括:
·状态表存储装置,把多个资源名作为索引项目,在每个基本区段中存储包含对应于这些索引项目的写入字段的对应表;
·初始化装置,从程序检出指示传输来源资源的源码和指示传输对方资源的目标码的全部,通过把他们写入状态表中的分支对方基本区段的写入字段,进行写入字段的初始化;
所述后状态解析装置包括:
·第一取出装置,当进行由初始化装置所产生的写入时,从开头到末尾依次取出每个基本区段内的命令;
·命令解读装置,每当取出一个命令,解读所取出的命令是哪个命令;
·第一擦除装置,当解读为传输命令或运算命令时,在状态表存储装置中,擦除已写入到以对应命令的目标码的资源名进行索引的写入字段中的全部的码;
·操作数识别装置,识别所解读的传输命令的目标码和源码表示哪个资源名;
·第一写入装置,当源码的资源名被识别时,把目标码写入由所识别的资源名所索引的写入字段,当目标码的资源名被识别时,把源码写入由由所识别的资源名所索引的写入字段;
·指示装置,当完成写入到写入字段中时,指示给取出装置以取出次序的命令;
·决定装置,当通过反复进行由指示装置所产生的指示而取出至末尾的命令时,把在此之前施加的写入和擦除的状态表存储装置的存储内容决定为在每个基本区段的后状态下的同值集合。
20.根据权利要求18所述的优化装置,其特征在于,前状态解析装置包括:
·设定装置,把后状态中的同值集合设定在状态表存储装置的存储内容中对应于分支对方的基本区段的写入字段中;
上述优化装置进一步包括:
·备忘存储装置,当通过设定装置设定同值集合时,存储在状态表存储装置内所得到的同值集合作为备用;
·第一启动装置,当通过设定装置把同值集合设定到写入字段中时,再启动后状态解析装置;
·核对装置,当通过后状态解析装置而在状态表存储装置内得到新的同值集合时,把所得到的同值集合与存储在备忘存储置中的备用进行核对,而判定同值集合中的变化的有无;
·第二启动装置,当判定了核对的结果同值集合的码数的变化时,再次启动后状态解析装置和集合积装置;
所述区段内解析装置,在判定了核对的结果为没有码数的变化时,把最后取得的集合积结果作为前状态中的同值关系集合而开始各命令的执行状态中的解析。
21.根据权利要求20所述的优化装置,其特征在于,所述的后状态解析装置进一步包括:
·第二写入装置,当由操作数识别装置识别源码和目标码为哪个寄存器名时,把已写入到由源码的寄存器名进行索引的写入字段中的全部码复制到由目标码的寄存器名进行索引的写入字段中,把已写入到由目标码的寄存器名进行索引的写入字段中的全部码复制到由源码的寄存器名进行索引的写入字段中,由此,把通过命令解读装置解读的传输命令而成为相同保持值的寄存器名或存储器地址反映到状态表存储装置中。
22.一种优化装置,从具有按条件分支的多个执行顺序的程序中,以其中任一个执行顺序来解析保持值为相同的硬件资源,使用解析结果来消除传输命令,其特征在于,包括:
·执行顺序信息生成装置,生成通过多个基本区段名及这些的分支来源-分支对方的关系所表现的执行顺序信息,
其中,所述的基本区段是根据分支命令和分支对方标记所隔开的程序的小单位;
·后状态解析装置,在上述执行顺序信息中的分支来源基本区段中所包含的命令由处理器全部执行后的后状态下,解析哪个硬件资源和哪个硬件资源是否为相同的保持值,在后状态下对各分支来源基本区段制成由成为相同的保持值的资源名组成的同值集合;
·前状态解析装置,在以共同的基本区段作为分支对方的全部的分支来源基本区段之间选择同值集合的共同元素,由此,在分支对方基本区段的先头命令的执行前的前状态下,制成由成为相同的保持值的资源名组成的同值集合;
·区段内解析装置,当得到前状态中的同值关系集合时,在分支对方基本区段中所包含的各命令的执行步骤中,解析在前状态中的同值集合中所包含的共同元素是否增减,作为每个命令而得到命令的每个执行步骤的同值集合;
·资源名判定装置,当得到命令的每个执行步骤的同值集合时,判定位于这些命令之后的命令是否把在同值集合中所示的资源名指定给传输来源、传输对方;
·参照侧命令检出装置,当得到命令的每个执行步骤的同值集合时,从全部的分支对方的基本区段检出把在参照侧命令的执行步骤中的同值集合中包含的资源名作为传输来源、传输对方的传输命令或运算命令;
·定义侧传输命令检出装置,从全部的分支对方的基本区段的各个中检出把值设定在检出的命令的源码中的定义侧的传输命令;
·置换可否判定装置,根据在参照侧命令的执行步骤中的同值集合来判定是否可以把由参照侧命令检出装置所检出的命令的源码置换为所检出的定义侧传输命令的源码;
·传输命令消除装置,如果可以置换,则执行上述置换,消除处于执行后分支对方的基本区段中的所置换的传输命令所对应的全部的定义侧传输命令。
23.根据权利要求22所述的优化装置,其特征在于,所述的置换可否判定装置包括:
·同否判定部,判定由定义侧传输命令检出装置所检出的定义侧传输命令的源码是否全部是相同的;
·存否判定部,判定在作为分支对方的参照侧命令的执行步骤中的同值集合内是否含有包含了取出定义侧传输命令的源码和由第二取出装置所取出的命令的源码中的哪一个的命令的基本区段;
在同否判定部判定为相同、存否判定部判定为含有时,下达为可置换的判定结果。
24.根据权利要求23所述的优化装置,其特征在于,所述的传输命令消除装置进一步包括:
·成本存储装置,把多个命令与表示各命令的执行周期和/或码尺寸的成本进行对应并存储;
·预测装置,预测所取出的传输命令的源码的置换和定义侧传输命令的消除前后的执行时间和/或存储器尺寸的增减;
所述的传输命令消除装置,在预测为置换后的对方进一步减少了执行时间和/或存储器尺寸的情况下,进行目标码的置换和消除。
25.根据权利要求24所述优化装置,其特征在于,所述的前状态解析装置进一步包括:
·检出装置,检出以共同的基本区段为分支对方的多个基本区段;
·集合积装置,在所检出的基本区段之间通过提取由后状态解析装置所进行集合的同值集合的集合积来选择共同元素。
26.根据权利要求25所述的优化装置,其特征在于,包括:
·状态表存储装置,把多个资源名作为索引项目,在每个基本区段中存储包含对应于这些索引项目的写入字段的对应表;
·初始化装置,从程序检出指示传输来源资源的源码和指示传输对方资源的目标码的全部,通过把他们写入状态表中的分支对方基本区段的写入字段,进行写入字段的初始化;
所述的后状态解析装置包括:
·第一取出装置,当进行由初始化装置所产生的写入时,从开头到末尾依次取出每个基本区段内的命令;
·命令解读装置,每当取出一个命令,解读所取出的命令是哪个命令;
·第一擦除装置,当解读为传输命令或运算命令时,在状态表存储装置中,擦除已写入到以对应命令的目标码的资源名进行索引的写入字段中的全部的码;
·操作数识别装置,识别所解读的传输命令的目标码和源码表示哪个资源名;
·第一写入装置,当源码的资源名被识别时,把目标码写入由所识别的资源名所索引的写入字段,当目标码的资源名被识别时,把源码写入由由所识别的资源名所索引的写入字段;
·指示装置,当完成写入到写入字段中时,指示给取出装置以取出次序的命令;
·决定装置,当通过反复进行由指示装置所产生的指示而取出至末尾的命令时,把在此之前施加的写入和擦除的状态表存储装置的存储内容决定为在每个基本区段的后状态下的同值集合。
27.根据权利要求26所述的优化装置,其特征在于,前状态解析装置包括:
·设定装置,把后状态中的同值集合设定在状态表存储装置的存储内容中对应于分支对方的基本区段的写入字段中;
上述优化装置进一包括:
·备忘存储装置,当通过设定装置设定同值集合时,存储在状态表存储装置内所得到的同值集合作为备用;
·第一启动装置,当通过设定装置把同值集合设定到写入字段中时,再启动后状态解析装置;
·核对装置,当通过后状态解析装置而在状态表存储装置内得到新的同值集合时,把所得到的同值集合与存储在备忘存储装置中的备用进行核对,而判定同值集合中的变化的有无;
·第二启动装置,当判定了核对的结果同值集合的码数的变化时,再次启动后状态解析装置和集合积装置;
所述的区段内解析装置,在判定了核对的结果为没有码数的变化时,把最后取得的集合积结果作为前状态中的同值关系集合而开始各命令的执行状态中的解析。
28.根据权利要求27所述优化装置,其特征在于,所述的后状态解析装置进一步包括:
·第二写入装置,当由操作数识别装置识别源码和目标码为哪个寄存器名时,把已写入到由源码的寄存器名进行索引的写入字段中的全部码复制到由目标码的寄存器名进行索引的写入字段中,把已写入到由目标码的寄存器名进行索引的写入字段中的全部码复制到由源码的寄存器名进行索引的写入字段中,由此,把通过命令解读装置解读的传输命令而成为相同保持值的寄存器名或存储器地址反映到状态表存储装置中。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP54746/96 | 1996-03-12 | ||
JP54746/1996 | 1996-03-12 | ||
JP5474696 | 1996-03-12 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1167942A CN1167942A (zh) | 1997-12-17 |
CN1155884C true CN1155884C (zh) | 2004-06-30 |
Family
ID=12979347
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB971116121A Expired - Fee Related CN1155884C (zh) | 1996-03-12 | 1997-03-12 | 通过大范围的同值关系的解析来消除传输命令的优化装置 |
Country Status (6)
Country | Link |
---|---|
US (1) | US5923883A (zh) |
EP (1) | EP0795821B1 (zh) |
KR (1) | KR970066865A (zh) |
CN (1) | CN1155884C (zh) |
DE (1) | DE69705654T2 (zh) |
TW (1) | TW470915B (zh) |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6059840A (en) * | 1997-03-17 | 2000-05-09 | Motorola, Inc. | Automatic scheduling of instructions to reduce code size |
US5999739A (en) * | 1997-05-29 | 1999-12-07 | Hewlett-Packard Company | Method and apparatus for elimination of redundant branch instructions from a program |
US6170083B1 (en) * | 1997-11-12 | 2001-01-02 | Intel Corporation | Method for performing dynamic optimization of computer code |
JP3541669B2 (ja) * | 1998-03-30 | 2004-07-14 | 松下電器産業株式会社 | 演算処理装置 |
JPH11296381A (ja) * | 1998-04-08 | 1999-10-29 | Matsushita Electric Ind Co Ltd | 仮想マシン及びコンパイラ |
JP4158239B2 (ja) * | 1998-09-08 | 2008-10-01 | ソニー株式会社 | 情報処理装置および方法、並びに記録媒体 |
JP2000132404A (ja) * | 1998-10-22 | 2000-05-12 | Matsushita Electric Ind Co Ltd | 命令列最適化装置 |
IT1304792B1 (it) * | 1998-12-22 | 2001-03-29 | Agip Petroli | Composizione catalitica per l'upgrading di idrocarburi aventi puntidi ebollizione nell'intervallo della nafta. |
DE19983015B4 (de) * | 1999-01-25 | 2006-02-23 | Mitsubishi Denki K.K. | Peripherievorrichtung zum Überprüfen eines Ablaufprogramms für eine programmierbare Steuereinrichtung |
US6523168B1 (en) * | 1999-07-01 | 2003-02-18 | International Business Machines Corporation | Reduction of object creation during string concatenation and like operations that utilize temporary data storage |
FR2810423A1 (fr) * | 2000-06-16 | 2001-12-21 | Suntech | Systeme informatique modulaire et procede associe |
US6728870B1 (en) * | 2000-10-06 | 2004-04-27 | Intel Corporation | Register move operations |
CA2557343C (en) * | 2006-08-28 | 2015-09-22 | Ibm Canada Limited-Ibm Canada Limitee | Runtime code modification in a multi-threaded environment |
US9715376B2 (en) * | 2008-12-29 | 2017-07-25 | Intel Corporation | Energy/performance with optimal communication in dynamic parallelization of single threaded programs |
CN102667715A (zh) * | 2009-08-13 | 2012-09-12 | 索尼公司 | 数据处理设备、数据处理方法、程序转换处理设备和程序转换处理方法、程序转换处理设备、数据处理设备、程序转换处理方法和数据处理方法、数据处理设备、数据处理方法、程序分析处理设备和程序分析处理方法、数据处理设备、历史保存设备、数据处理方法和程序、以及编译处理设备 |
CA2675680C (en) * | 2009-08-27 | 2013-05-14 | Ibm Canada Limited - Ibm Canada Limitee | Generating object code that uses calculated contents for a variable determined from a predicate |
CA2691851A1 (en) * | 2010-02-04 | 2011-08-04 | Ibm Canada Limited - Ibm Canada Limitee | Control flow analysis using deductive reaching definitions |
US9411715B2 (en) * | 2012-12-12 | 2016-08-09 | Nvidia Corporation | System, method, and computer program product for optimizing the management of thread stack memory |
US11593080B1 (en) * | 2021-12-17 | 2023-02-28 | International Business Machines Corporation | Eliminating dead stores |
US20230409238A1 (en) * | 2022-06-21 | 2023-12-21 | Advanced Micro Devices, Inc. | Approach for processing near-memory processing commands using near-memory register definition data |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4656583A (en) * | 1984-08-13 | 1987-04-07 | International Business Machines Corporation | Method for improving global common subexpression elimination and code motion in an optimizing compiler |
JPH0795271B2 (ja) * | 1989-06-20 | 1995-10-11 | 富士通株式会社 | 分岐命令実行装置 |
US5303377A (en) * | 1990-03-27 | 1994-04-12 | North American Philips Corporation | Method for compiling computer instructions for increasing instruction cache efficiency |
US5452457A (en) * | 1993-01-29 | 1995-09-19 | International Business Machines Corporation | Program construct and methods/systems for optimizing assembled code for execution |
JP3606387B2 (ja) * | 1994-09-13 | 2005-01-05 | 松下電器産業株式会社 | コンパイル装置 |
US5805894A (en) * | 1995-02-13 | 1998-09-08 | Kuck & Associates, Inc. | Method inside an optimizing compiler for analyzing assertions and redirecting control flow in programs |
US5787285A (en) * | 1995-08-15 | 1998-07-28 | International Business Machines Corporation | Apparatus and method for optimizing applications for multiple operational environments or modes |
-
1997
- 1997-03-11 TW TW086103019A patent/TW470915B/zh active
- 1997-03-12 KR KR1019970008331A patent/KR970066865A/ko not_active Application Discontinuation
- 1997-03-12 US US08/815,723 patent/US5923883A/en not_active Expired - Fee Related
- 1997-03-12 EP EP97301642A patent/EP0795821B1/en not_active Expired - Lifetime
- 1997-03-12 CN CNB971116121A patent/CN1155884C/zh not_active Expired - Fee Related
- 1997-03-12 DE DE69705654T patent/DE69705654T2/de not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
EP0795821B1 (en) | 2001-07-18 |
CN1167942A (zh) | 1997-12-17 |
DE69705654T2 (de) | 2001-10-31 |
DE69705654D1 (de) | 2001-08-23 |
EP0795821A1 (en) | 1997-09-17 |
TW470915B (en) | 2002-01-01 |
US5923883A (en) | 1999-07-13 |
KR970066865A (ko) | 1997-10-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1155884C (zh) | 通过大范围的同值关系的解析来消除传输命令的优化装置 | |
CN1875345A (zh) | 在编译过程中表示和检查程序组件的一致性的可扩展类型系统 | |
CN1149476C (zh) | 资源分配装置 | |
CN1202470C (zh) | 处理器 | |
CN1469241A (zh) | 处理器、程序变换装置和变换方法以及计算机程序 | |
CN101040292A (zh) | 数据管理装置及其方法 | |
CN1073540A (zh) | 管理类方法名 | |
CN1073276A (zh) | 语言的中性对象 | |
CN1246772C (zh) | 处理器 | |
CN1624696A (zh) | 信息处理设备、方法及其程序、信息处理系统及其方法 | |
CN1977531A (zh) | 程序生成装置、程序测试装置、程序执行装置及信息处理系统 | |
CN1750003A (zh) | 信息处理装置,信息处理方法,和程序 | |
CN1584824A (zh) | 一种基于cisc结构的微处理器构架及指令实现方式 | |
CN1269052C (zh) | 支持缩小代码长度的常量还原型处理器 | |
CN1719454A (zh) | 几何代价和语义-识别代价融合的脱机手写汉字切分方法 | |
CN1763712A (zh) | 动态确定对网络主页gui环境中选定项执行的动作的方法 | |
CN1620659A (zh) | 多种语言的数据库创建系统和方法 | |
CN1505786A (zh) | 内容转换方法和装置 | |
CN1577291A (zh) | 程序调试装置、程序调试方法及程序 | |
CN101078994A (zh) | 编译器装置、编译器方法和编译器程序 | |
CN1993673A (zh) | 数据处理装置、数据处理程序及记录了数据处理程序的记录介质 | |
CN1788254A (zh) | 关于Lyee指向软件的静态分析方法 | |
CN1066517A (zh) | 说明用户接口的方法及运行多用户接口型计算机的编程系统 | |
CN1577266A (zh) | 程序变换方法、程序及存储媒体 | |
CN1784498A (zh) | 调控因子结合位点的基因组分布型绘制 |
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 | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20040630 Termination date: 20110312 |