通过指令的排列变换以求得消除危险的最佳装置的制作方法

文档序号:6410362阅读:171来源:国知局
专利名称:通过指令的排列变换以求得消除危险的最佳装置的制作方法
技术领域
本发明是有关排列变换机械语言程序中的指令以决定最佳执行顺序的最优化装置。
近年来,人们热衷于研究通过流水线处理导入以求得高速执行机械语言程序的微机系统。该流水线处理在执行机械语言程序时,以并行执行机械语言程序各指令的各段,求得处理的高速化。
下面说明通过流水线处理并行执行机械语言程序中的各指令的状态。图1为表示流水线处理是如何进行的图。
在本图中,虽然「mov mem,D0」、「mov 10,D1」、「add D0,D0」纵向排列,但这些指令表示出是依次执行的。在本图中,从「mov mem,D0」来看,在横向上排列着5个四边形,各四边形之间虽然用向右的空心箭头被划分成段,但这「mov mem,D0」有称为「IF」、「DEC」、「EX」、「MEM」、「WB」的5段,这些段表示依次执行。
上述「IF」是指令取出段,「DEC」是指令译码段;并且「EX」为指令执行段;「MEM」是给存储器的数据读写段;「WB」是对寄存器的数据写入段。
与「mov mem」一样,从「mov 10,D1」看去也是在横向上排列着表示「IF」、「DEC」、「EX」、「MEM」、「WB」的5段的五个四边形。在本图中,「mov mem,D0」的「DEC」以下有「mov 10,D1」的「IF」,在「mov mem,D0」的「EX」下面有「mov 10,D1」的「DEC」,这是清楚的。这表示「mov 10,D1」的各段仅比「movmem,D0」的各段滞后一段来执行。
与「mov 10,D1」一样,从「add D0,D0」看横向也并列着表示「IF」、「DEC」、「EX」、「MEM」、「WB」5段的5个四边形。在本图中,在「mov 10,D1」的「DEC」之下有「addD0,D0」的「IF」,在「mov 10,D1」的「EX」之下有「add D0,D0」的「DEC」,这也是清楚的。这表示在流流水线处理中,「add D0,D0」段比「mov 10,D1」的各段滞后一段来执行。根据如上所述那样执行流水各指令段,来完成流水线处理中的并行执行。
在上述例子的「mov mem,D0」-「mov 10,D1」之间、「mov10,D1」-「add D0 D0」之间,由于使用了与其前后指令中所用的资源不同的资源,所以指令间无依存关系。但是,具有依存关系的2个指令执行顺序是连续的,在ALU运算、地址运算中下一个指令需参照前一个指令的执行结果时,在上述指令并行执行中产生了故障(在此,所谓资源(resource),就是用于存储数值的硬件要素,相当于寄存器、存储器。并且由于具有零标记、进位标记等、处理器的各种标记都能存储数值,所以称之为资源。在该资源中存储数值称之为资源定义,在指令中,利用资源中所存储的值称为资源参照)。
其次由于具有依存关系的2个指令相连续,所以下面说明在流水线处理中引起故障的情况。图2表示对由危险所产生的流水线处理的故障的图。
在该图中,从「mov mem,D0」看,横向上并列着称之为「IF」、「DEC」、「EX」、「MEM」、「WB」的5个段,在「add D0,D0」的横向上也并列着称之为「IF」、「DEC」、「EX」、「MEM」、「WB」的5个段。在本图中,达到「IF」、「DEC」滞后1段,「add D0,D0」的各段虽然被执行,但下一个「add D0,D0」的「EX」与「mov mem,D0」的「MEM」段一样不以循环进行。显然与「mov mem,D0」的「WB」段一样而循环进行。这里由于在「addD0,D0」的执行中,需要「mov mem,D0」的执行结果,其执行结果是由于在「EX」段中「mov mem,D0」未确定而「mov mem,D0」成为「MEM」段来开始确定。
象该例那样,在依次排列负载指令及利用其指令执行结果的ALU计算之指令中,存在妨碍流水线处理的情况。象这样,在流水线处理中,由于前一指令的执行结果是必要的,所以把后续指令的执行发生了滞后的情况称之为危险。上述例子把ADD运算作为一例,此外,在MUL运算、SUB运算、DIV运算等的ALU运算使用前一指令的执行结果情况下,该前一指令和ALU运算指令成为危险的主要因素。并且即使在通过地址寄存器的地址运算使用前一指令的执行结果的情况下,前一指令和地址计算指令也成为危险的主要因素(而且,哪种排列的指令串是否产生危险依赖于处理器的流水线结构。图1表示流水线为5段情况下的危险发生例)。
为了适应由危险产生的执行滞后和执行速度下降,过去一直进行称之为指令调度的处理。所谓指令调度就是,把机械语言程序的指令顺序作排列变换,并在成为危险主要因素的指令间夹插机械语言程序内的其他指令的危险消除法。
通过进行这样的指令调度虽然能消除危险,但这种排列变换必须以机械语言程序的意义不变来进行。因此,在已有的指令调度中利用定向非循环图形(Directed Acyclic Graph以下简称DAG。)保持好指令间的依存关系,在原来的程序意义不变的范围内作基本程序块内指令变换排列(所谓基本程序块即是说作为程序中连续指令串,在串中途无跳跃,并且也无到中途的跳跃)。
下面说明该DAG。已有的DAG是,机械语言程序中各指令成为节点(指令节点),在各指令节点之间通过定义-参照间的连接指令、参照-定义之间的连接指令、定义-定义间的连接指令进行结合。
定义-参照间的连接指令所谓定义-参照间的连接指令表示是以哪个指令参照由某个指令定义的资源。
(1)「mov 100,D0」(2)「add D0,D1」比如在(1)、(2)指令串中,存在通过寄存器D0的数据流。由于存在通过该寄存器D0的数据流,所以改换指令(1)、(2)的顺序,就会搞乱数据流。因此指令调度根据定义-参照间的连接指令内容来进行,以使不改换由其定义-参照间的连接指令规定的执行顺序。
参照-定义间的连接指令所谓参照-定义间的连接指令表示用哪个指令来定义由某个指令参照的资源。在作指令排列变换时,加到定义-参照间连接指令中,使用下面(1)-(4)的指令串来说明参照-定义间的连接指令为什么是必要的。
(1)「mov 100,D0」(2)「add D0,D1」(3)「mov 200,D0」
(4)「add D0,D2」在该指令中,在(1)-(2)的指令串中,存在通过寄存器D0的数据流。在(3)-(4)的指令串中也存在通过寄存器D0的数据流。使寄存器D1、D2的寄存值之初始值为0。并且使该(1)-(4)的指令串进行排列变换,使之成为(1)-(3)-(2)-(4)的顺序(这满足(a)的主要条件)。该顺序虽然维持了前面所述的定义-参照的排列,但因通过执行该机械语言程序在寄存器D1中加200,在寄存器D2中加200,所以机械语言程序的意义发生了变化。因此,用DAG在(2)-(3)之间将有关寄存器D0的依存关系在参照-定义之间的连接指令中,防止存在缺陷的排列变换。
定义-定义间的连接指令所谓定义-定义间的连接指令是指、用其他的哪个指令来定义由某个指令所定义的资源。在进行指令的排列变换时,使用以下(1)(2)(3)的指令串说明定义-定义间的连接指令为什么是必要的。
(1)「mov 100,D0」(2)「mov 200,D0」(3)「add D0,D2」例如,在(2)-(3)的指令串中存在对寄存器D0的数据流。因此,(2)(3)的指令通过定义-参照的连接指令被结合起来。而且(1)的指令串是对寄存器D0的定义。排列变换该(1)-(3)的指令串,若顺序为(2)-(1)-(3),则由于利用该机械语言程序的执行使寄存器D2加100,所以机械语言程序的意义发生变化。为了防止存在象这样缺陷的排列变换,所以在DAG中,在(1)-(2)间有关寄存器D0,将称之为定义-定义的依存关系保存在定义-定义间的连接指令中,防止存在缺陷的排列变换(并且,如上述的(1)(2)那样,同一资源定义依次排列的指令串,虽然在用汇编语言记述的程序中未被看到,但编译程序在由高级语言译成机械语言时,往往在输出汇编语言之际被输出。并且常见到标记用定义-定义顺序排列的主体。
参照上述DAG,参照


最优化装置一边保障机械语言程序的意义一边进行指令调度的情况。图3是由已有的最优化装置进行排列变换情况的说明图。
在该图中,其中空心圆圈表示机械语言中各个指令,圆圈中的数值表示各指令的原来顺序。图中的4-5-6-7向的实线箭头表示这些指令间的连接指令,1-2-3间的虚线箭头表示这些指令间的连接指令。在该图中,表示指令5、6的圆圈中画着斜线。这些指令5、6间的DAG中,存在「X」,而这表示在指令5、6间产生了危险。
最优化装置检测程序中跳越指令,根据检测结果,将机械语言程序分割成基本程序块。在该例中,在指令1-7中无跳跃指令,基本程序块由从指令1至指令7的指令组成。分割之后把机械程序中各指令作为指令节点,检测其基本程序块内的定义-参照关系、参照-定义关系、定义-定义关系,根据检测结果,产生定义-参照间连接指令、参照-定义间连接指令、定义-定义间连接指令。通过产生其间的连接指令、在图中的指令内、将1-2-3指令连锁成一个,4-5-6-7指令结合成一个DAG。若根据产生的连接指令作指令连锁,则最优化装置进行指令串的排列变换、以使得不破坏它们之间的连接指令的执行顺序。在该图的一例中,最优化装置将指令串1-2-3的指令1插进指令串4-5-6-7的5-6间,在7的指令后面插入2-3的指令,进行排列变换。象这样的最优化装置,利用在危险指令串间夹插其他指令来应付危险,以消除执行滞后和执行速度降低。
并且所述4-5-1-6-7-2-3的顺序是一个例子,如所说4-1-5-2-6-7-3和1-4-5-2-6-7-3,只要不破坏DAG中所示的依存关系,可按任何顺序进行排列变换。
然而在已有技术中,如图4一例所示,由于使用3个依存关系,交点之间易于结合,实际上即使留有作排列变换余地时,也不能作指令的排列变换,往往不能够清除危险,这就是问题所在。
图4是表示基本程序块内指令结合成一个的DAG图。在该图中,在「mov(Ao),D1」「add D1,D1」中,由于用「add D1,D1」参照由「mov(Ao),D1」定义的寄存器D1之值,所以产生危险,这是显而易见的。在此,为了消除危险,虽然有必要插入位于连续的前方的指令,即「mov 10,D0」「mov D0,A0」 「mov A0,mem」…的任一个但如探索达到「mov(A0),D1」的DAG,则这些指令的全部与「mov(A0),D1」有依存关系。所以在危险主要因素间移动这些指令而搞乱依存关系,不可能消除危险。
本发明的第1个目的是提供这样的一种最优化装置,通过排列变换指令能对付因处理器流水线构成会产生的危险。
本发明的第2个目的是提供这样的一种最优化装置,鉴于上述问题,即使在图形上没有表示参照-定义间依存关系、定义-定义间依存关系,也能可靠地消除危险。
本发明的第3个目的是提供这样的一种最优化装置,通过排列变换程序内指令来对付由于参照根据负载指令定义了的资源,在其之后指令中作为ALU运算或地址运算的操作次数所产生的流水线处理滞后。
本发明的第1、第2目的通过下述构成实现,其中包括定向非循环图形生成装置(定向非循环图形是表示将在资源上定义值的指令作为母、将参照其资源值的指令作为子的母子关系的家谱);标记设定装置,在各定向非循环图形中存在危险的母子之间设定标记;排列变换装置,在定向非循环图形中作为标记的指令之间,插入作为在其指令间使用中的资源值不被坏的其他定向非循环图形指令,以此改排所述程序部分的指令。
根据第一发明,由于利用仅根据定义-参照间连接指令结合了的DAG保持依存关系,确定执行顺序,使成为使用中的资源值不被破坏,所以可提高排列变换的自由度。因此,可更可靠地作危险消除,可产生在流水线处理中适合的机械语言程序。
在此,可作成第一发明中,最优化装置备有给予优先度装置,在定向非循环图形的打头指令之中,根据在子孙中包含危险的指令授予高的优先度,在子孙中不包含危险的指令则授予低的优先度,排列变换设备备有切出装置,当指示在定向非循环图形打头指令中成为对象的指令时,从定向非循环图形中切出指示了的指令;指令寄存装置,根据切出了的顺序位置将切出了的指令寄存在串行中;破坏指令检测装置,从各定向非循环图形的打头检测破坏在后面参照的资源值的指令;带标记的指令检测装置,主指令是存在于指令寄存装置的串的最末尾的指令,通过各定向非循环图形的开头检测在与其主要指令之间设定标记的指令;禁止切出装置,禁止通过破坏指令检测装置检测的指令以及通过带标记指令检测装置检测了的指令的切出;指令指示装置,由禁止切出装置的切出是禁止了的指令以外的打头指令,授予的优先度作为对象指示最高指令。
并且根据第二发明,当连续地切出设定危险信息的母子,通过禁止装置禁止切出对在后参照的资源作定义的指令,由于根据这一点在设定危险信息的母子间插入其他指令,所以决定象危险可靠地消除的执行顺序。并在以后使设定危险信息的DAG指令优先,由于没有设定的DAG指令在这上是连续的,所以使消除危险的可能性更加提高了。
在此,加上第二发明的结构,可以形成这样构成,其中备有资源标记存储装置(将对应成为使用中的资源的资源标记设定成开启,将对应成为未使用中的资源的资源标记设定成关闭。在成为对象的程部分的入口中,反映先行的程序部分出口状态),存储对应各个资源的资源标记;更新装置,在指令寄存装置中寄存指令情况下,使对应用该指令值定义的资源的资源标记倒置成打开,在指令寄存装置中寄存使资源值作为参照的指令中,使对应成为最后的资源的资源标记倒置成关闭;破坏指令检测装置参照成为开启的资源标记,通过判定是否破坏对应其资源标记的资源值,检测指令。
并且根据第三发明,因通过标记表示各寄存器是在使用中还是在未使用中,所以各寄存器的参照状况变得明确,可更可靠地消除危险。
其中,在第四发明中,破坏指令检测装置备有破坏候补选择部,将位于各定向非循环图形打头的各个指令作为破坏候补选择;定义资源检测部,若用作为破坏候补选择的的指令定义的定义资源为单数,则判定是否把对应定义资源的资源标记设定为表示未使用的关闭,若定义的资源为复数,则判定是否把对应那些定义资源的资源标记设定为全部关闭;第一除外部,当对应检测了的全部定义资源的资源标记为关闭时,则把作为其破坏候补选择的指令变更为非破坏指令;第二母指令检测部,在对应于若干资源的资源标记设定成打开时,则全部检测定义那些资源的母指令;第二子指令检测部,若再在若干子指令中参照用由第二母指令部检测了的各个母指令定义的资源,则全部检测那些子指令;第二切出终结指令判定部,若用第二子指令检测部检测与破坏候补不同的子指令时,那些子指令判定全部切出是否终结;第二除外部,当设有对全部定义资源用第二子指令检测部检测破坏候补以外子指令时,或者虽然检测与破坏候补不同的子指令,但在用第二切出终结指令判定部判定全部切出终结时,将作为其破坏候补选择了的指令变更为非破坏指令;输出部,将作为破坏候补选择,且没有变更成非破坏指令的指令作为破坏指令输出。
并且根据第五发明,由于若是最后参照判定的指令优先度为最高时确定其指令,所以可对待机械语言指令、象「add D1,D1」那样,在源(ソ-ス)、目的(デストネシヨン)中使用相同的寄存器的机械语言指令,能更可靠地消除危险。
这里可作成这样的构成,在第五发明中,排列变换设备备有第一复原装置,对一个程序部分破坏指令检测装置仅检测破坏指令时,将其定向非循环图形复原到切出寄存在指令寄存装置最末尾的指令之前状态;第二复原装置,通过在以前切出其指令将对应值受到变更的资源的资源标记复原成切出相应指令的以前状态;指令指示装置当进一步使指令返回到定向非循环图形时,将在返回的指令上再授予高的优先度的定向非循环图形的打头指令作为对象来指示。
根据第六发明,
在给予优先度的指令都使使用中的寄存器定义的情况下,使紧接着前面存储的指令返回DAG,因切出别的DAG指令,所以重作顺序决定。因此,可对付执行顺序决定的停顿。
而且可对付在指令无先读中的停顿。借此,无需复杂的防止停顿判定,用简单的结构可作高速指令挑选。
即使作防止停顿判断的情况下,但由于最终利用返回途径可使停顿回避得到保障,所以用任意比例可设定防止判定和由返回途径产生的空载时间,能最佳地形成整体处理时间。
这里可作成这样的构成,为消除流水线处理的危险,作为这样的一种最优化装置,使不含程序中分路的程序部分的指令作排列变换,有关不含所述程序中分路的程序部分,其特征是备有,定向非循环图形生成装置,生成多个定向非循环图形;标记设定装置,在各定向循环图形中,设定危险存在的母子间的标记;给予优先度装置,在定向非循环图形的打头指令中,通过子孙中包含危险的指令给予高的优先度;通过子孙中不包含危险的指令给予低的优先度;切出装置,在定向非循环图形的打头指令内,一指示成为对象的指令,则从定向非循环图形中切出指示了的指令;指令寄存装置,将切出了的指令根据切出的顺序寄存在串行中;破坏命令检测装置,从各定向非循环图形打头检测破坏在后面参照值的资源的指令;带标记指令检测装置,母指令作为存在指令寄存装置的串的最后末尾中的指令,并且从各定向非循环图形的打头检测设定在其母的之间的标记的指令;切出禁止装置,禁止由破坏命令检测装置检测的指令,及由带标记指令检测装置检测的指令的切出;指令指示装置,作为禁止切出了的指令以外的打头指令,将给予的优先度最高指令作为对象指示;第一置换候补选择装置,当由破坏命令检测装置检测某个指令时,在相当指令,及具有相当指令及有关相当资源的数据流的全部指令所占据的区间中挑选作为未使用的资源;识别装置,识别挑选了的资源的种类;解码装置,对由破坏指令检测装置检测的指令及具有有关用该指令定义的资源的数据流的全部指令作解码;第二置换候补选择装置,试着将识别装置的识别结果和解码装置的解码结果组合,利用使该组合与处理器的指令组对照,从挑选剩余的资源中进一步选择置换候补;涂改装置,在判定的置换候补中涂改检测的指令中使值定义的资源和用有数据流的指令使用的资源,上述检测是当定义作为使用中的资源值时用破坏指令检测装置进行的,上述数据流是有关包括其指令的定向非循环图形的相当资源;禁止切出装置,在由带标记指令检测装置检测的指令,和由破坏指令检测的指令内,禁止未由涂改装置涂改资源之外部分切出;指令指示装置,在禁止切出的打头指令内,以优先度最高的图形作为对象进行指示;启动装置,当由切出装置切出指令时,将切出的剩余指令串作为新的定向非循环图形,使给予优先度装置、破坏指令检测装置、带标记指令检测装置、禁止切出装置、指令指示装置依次启动。
根据第十九发明,在优先度在最高指令中被定义了的寄存器为使用中的情况下,因将其优先度在最高指令中被定义了的寄存器,和包括其指令的DAG的相当寄存器和在有数据流的指令中使用的相当寄存器,在相当指令,以及具有相当指令和有关相当资源的数据流的全部指令中改写在作为未使用的资源中,所以可对付执行顺序决定的停顿,并提高危险消除率。
本发明的第3个目的通过以下构成实现。由负载指令使值定义的资源,在其后的指令中作为ALU运算或地址运算的操作次数被参照,所以是利用程序内的指令的排列变换来对付所产生的流水线处理延时的最佳装置,其中包括定向非循环图形生成装置,有关不包括所述程序中分路和程序部分,在资源中将定义值的指令作为母,将参照其资源值的指令作为子的指令间母子关系家谱表示的定向非循环图形被生成多个;危险信息设定装置,通过各定向循环图形检测由母指令使值定义的资源在子指令中,作为ALU运算或地址运算的操作次数被参照的排列,在各定向非循环图形的其排列母子间设定标记;排列变换装置,在作定向非循环图形中标记的指令间,通过作为其他定向非循环图形指令在其指令之间插入不破坏使用着的资源值的其他定向非循环图形指令,排列变换所述程序部分的指令。
当由负载定义的资源在其后的指令中,作为ALU运算或地址运算的操作次数被使用,则由于在其指令间插入不破坏作为有效资源值的其他定向非循环图形指令,所以借助指令的排列变换可使流水线滞后得到消除。
图1是表示如何作流水线处理的图;图2是表示由于危险而产生对流水线处理故障的图;图3是表示作已有指令调度的状况图;图4是表示基本程序块内指令结合成一个的DAG图;图5是表示最优化装置内部结构方框图;图6A是表示该DAG数据结构格式图;图6B、图6c是分别表示本实施例的DAG一例子图;图7是表示DAG生成部14产生DAG情况的流程方框图8A-图8C是表示资源状态信息的一例子图;图9是调度部18处理过程的流程方框图;图10是表示图9的流程方框图中步骤S1的处理过程的流程方框图;图11是表示图9的流程方框图中步骤S3的处理过程的流程方框图;图12是表示图9的流程方框图中步骤S7的处理过程的流程方框图;图13是表示由调度部18决定指令串顺序状况的图;图14是表示由调度部18作返回途径的情况图;图15是表示在第2实施例中,在图9的流程方框图上追加的一系列步骤图;图16是表示是在一个资源一直使用中,不作排列变换的DAG的图;图17是表示在图16所示的DAG指令中,使定义了的资源置换的情况图。
下面参照

本发明实施例。
图5是表示最优化装置内部构成的方框图。如图5所示,最优化装置由指令输入部11、代码分离部12、数据流解析部13、DAG保持部14、DAG生成部15、资源状态保持部16、输出清单缓冲器17、调度部18、指令输出部19组成。
指令输入部11读入以文件形态保存的汇编源代码,将此变换成内部表示(以下称中间语言)。
代码分离部12检测机械语言程序中跳跃指令,根据跳跃指令把中间语言的汇编源代码分离成基本程序块。
数据流解析部13检查在基本程序块的出入口中产生的资源。在此,所谓在基本程序块入口中产生的资源,是用基本程序块定义的资源,称之为由基本程序块内部或其基本程序块接着后面的基本程序块参照其设定值的资源;所谓在出口中生成的资源称之为用基本程序块接着后面的基本程序块参照其设定值的资源。
DAG保持部14保持DAG。本实施例的DAG用表示数据流的方向的连接指令使具有1个数据流的指令串结合。在图6A、B、C中表示本实施例的DAG一例子和该DAG数据构造的格式。如图6A所示,DAG通过基本程序块中各指令中附加的连接次序、其连续次序指令内容、用于成为其指令的母指令节点的指令的指示器、用于成为其指令的子指令节点的指令的指示器、在与相当母指令的连接指令中表示危险是否存在的存否标记,表示各指令节点之间的连接指令。
在此所谓母指令节点是指使用某指令参照的资源定义的指令节点;所谓子指令交点是指参照用某指令节点定义的资源的指令节点。而且,在利用以一个指令节点定义了的资源值接续的多个指令参照值的情况下,定义其资源值的指令节点成为参照其资源值的多个指令节点的母指令节点。所谓子孙指令是指沿定向非循环图形内从母至子单向地,通过打头指令可探索定义-参照的直接或间接的母子关系的全部指令。
对此在一个指令中参照用先行的多个指令节点定义的值的情况下,定义其资源值的多个指令节点成为参照其资源值的指令节点的母指令节点。
象指令「add D0,D1」那样,参照数据寄存器D0,D1,使数据寄存器D1定义时,指令「add,D0,D1」的母节点是使其数据寄存器D0定义的指令和使数据寄存器D1定义的指令的两者;指令「add D0,D1」的子节点成为参照数据寄存器D1的指令。
图6B表示由DAG保持部14保持的DAG的一个例子。该图与图4所示的一个例子一样,表示称之为「mov 10,D0」「mov D0,A0」「mov A0,mem」「mov 20,A0」「mov (A0),D1」「add D1,D1」的指令串的DAG。
在本图中,虚线表示资源间数据流。本图的DAG和图4的DAG中的区别在于,仅用定义-参照间的连接指令结合DAG保持部14中保持的DAG,不用参照-定义间的连接指令结合「mov A0,mem」~「mov 20,A0」之间。象这样,用DAG保持部14保持的DAG由于没有用参照-定义间的连接指令进行结合,所以指令的排列变换自由度提高,这是显而易见的。
图6C中表示一个其他DAG的例子。本图表示在基本程序块的入口处寄存器A0产生的DAG。
DAG生成部15通过内部表示状态的机械语言程序检测定义-参照关系,根据检测结果,生成仅用定义-参照间的连接指令结合了的DAG,使生成的DAG保持在DAG保持部14中。
图7是表示DAG生成部15产生DAG的情况的流程方框图。在图7的流程方框图中,在步骤g1判定指令节点是否资源参照。若是资源参照,则在步骤g2将连接指令从资源定义的指令节点扩展到参照指令节点。
在步骤g1为NO情况下,或在步骤g1为yes时,在步骤g2使连接指令扩展情况下,在步骤g3中判定其指令是否资源定义。步骤g3若是yes则跃到步骤g4,使其资源定义位置反映在定义位置信息中。若对于基本程序块中的全部指令重复步骤g1-g4,则机械语言程序中的指令节点由定义-参照间的连接指令被结合,生成DAG(有关定义位置信息因并非本发明主旨,所以说明从略)。
通过该流程方框图可明了,即使在某资源中设定值的情况下,在不参照其值写上时,在不设定定义-参照间的连接指令。
在利用以一个指令定义的资源值接续的多个指令使值参照时,在一个定义的指令上连接多个参照指令。即所谓生成表示一对多连接关系的DAG。在参照接续用多个指令定义的资源值的一个指令时,在多个定义指令上连接一个参照指令,即所谓生成表示多对一的连接关系的DAG。
而且DAG生成部15生成上述DAG连接指令之后,检测作ALU运算、地址运算的指令节点,用检测了的指令节点参照的资源判断是否用其母指令通过存储器读入的值被定义。在定义的情况下,DAG生成部15其指令节点的存否标记作成ON,留下连接指令中存在危险的意思。
在本实施例,DAG生成部15虽然检测了作ALU运算、地址运算的指令节点和用存储器读入定义了的指令节点的组合,但这是由于将其有已有技术中介绍的5个步骤的流水线处理作为对象的缘故,DAG生成部15检测象哪个指令节点的组合,这要根据流水线的结构决定。
资源状态保持部16保持资料状态信息。资源状态信息的一个例子由图8所示。在资源状态信息中,在由调度部18寄存在输出清单缓冲器17内的指令串末尾指令中,反映各资源是在使用中还是在未使用中。在此所谓「使用中」就是说因在后续指令中参照用某指令定义了的资源值是有效的;所谓「未使用中」就是说因在后续指令中没有参照是无效的。比如用后续的几个指令参照以某个指令定义了的资源值时(参照指令有n个时),在输出1、2、3……n-1个参照指令期间、其资源是「使用中」,若输出第n个参照指令,则其资源成为「未使用」。
在图8A,在横向项目中排列着叫作寄存器D0、D1、D2、地址寄存器A0、进位标记的文字串,在寄存器D0的下栏有表示通过其前段的基本程序块,寄存器D0为使用中的「S」;在寄存器D1的子栏有表示在基本程序块中用指令串4定义相当寄存器D1的「4」;并且在寄存器D2下面有「未使用」。
寄存器D0之所以设定为「S」,是由于即使输出清单缓冲器17是未寄存状态,也能在基本程序块入口产生其资源。并且,寄存器D1之所以设定为「4」,是由于输出清单缓冲器17中寄存顺序号4的指令节点,用以后的指令参照作用顺序号4的指令节点定义的资源的数据寄存器D1,与其对应的项目变成使用中。
图8B表示输出清单缓冲器中进入1及2指令时刻的资源状态与图6B所示的指令节点1-2-3间DAG的对应。在该图,在指令节点1-2间,因指令节点1中使寄存器D0定义,所以资源状态信息寄存器D0的项目被设定为有称之为用指令节点1定义的资源是在使用中意义的「1」。在指令交点2-3间,因在指令节点2寄存器A0被定义,所以资源状态信息的寄存器A0的项目被设定成有称之为用指令节点2定义的资源是在使用中意义的「2」。由于在寄存器D0中,通过指令节点2使用结束,所以使寄存器D0的项目回到未使用。
图8C表示在指令5进入输出清单缓冲器17时刻的资源状态,和图6B所示指令节点4-5-6间DAG的对应。该图在指令节点5-6间,因在指令5使寄存器D1被定义,所以资源状态信息的寄存器D1项目被设定成有称之为用指令节点5定义的资源是在使用中意义的「5」。象这样,资源状态在指令间表达哪个资源是使用中或未使用中。
输出清单缓冲器17作为寄存由调度部18输出的指令的缓冲器,通过输出清单缓冲器17按其输出顺序将由调度部18输出的指令寄存,机械语言程序中指令成为新的顺序。
调度部18通过DAG生成部产生的DAG和资源状态保持部16保持的资源状态信息实施机械语言程序指令调度、逐个选择指令,再把选择的指令节点依次输出给输出清单缓冲器17。
指令输出部19依据调度部18所作的指令目录的执行结果,产生汇编源代码再输出。
下面参照图9-12的流程方框图详细说明调度部18所作的指令调度。
按{1-0}资源状态的指令输出图9是调度部18处理过程的主要流程方框图。
图9的S(步骤)1,调度部18从各个DAG指令的节点指定(ノシネ-ト)输出候补,把指定的各DAG指令作为输出候补送到S2。S2控制重复处理,使有关输出候补的各指令节点反复S3-S10。在该重复处理的S3,调度部18通过指定了的输出候补指令节点决定为消除危险判断为最佳的指令节点。
在S4,参照资源状态信息,在用选择的指令节点定义的资源不存在时,在S5把选择的指令节点输出到输出清单缓冲器17。
在S4,即便有用该指令节点定义的资源,在不是这定义使用中资源的情况下,在S5也把选择了的指令节点输出至输出清单缓冲器17。
在S4的判定中,当用选择的指令节点定义的资源是在使用中,则在S11其选择的指令节点作是否最后参照的判定。在S11的判定若为yes,则在S5把指令节点输出至输出清单缓冲器17,将其指令节点追加给输出清单缓器17指令串的末尾。而且,在S11的判定处理具体来说,除去一个已经输出关于定义作为使用中资源的指令节点的其资源之子指令节点,确认剩下的一个指令节点是目前选择的指令节点,用上述方式进行。在进一步用选择的节点定义的资源为多个情况下,对各个定义资源作该确认。
在S5输出后,调度部18在S6判定利用输出其选择的指令节点是否输出基本程序块的所有指令节点,如果不是那样,则在S7更新资源状态信息。
另一方面,在S11若为NO,由于其指令节点的输出不可能,所以在S12除去其指令节点。
在S6通过输出适当指令节点,判定输出基本程序块的全部指令是否结束。在S6若为yes,则在恢复值上设定OK返回。
若在S6为No,则对于在输出清单缓冲器17末尾上追加的指令节点在S7作资源状态更新。具体来说,判定用选择了的指令节点定义的资源,在资源状态之中,把其资源的项目由未使用变更为使用中。在选择的指令为某个资源的最后参照时,将其资源项目变更成未使用。
由{1-1}图9流程方框图中表示的S8的循环呼叫而产生的指令输出。
当如上所述进行S7中资料状态更新,则在S8调度部18实施循环呼叫。并且在该S8作循环呼叫情况下,调度部18作S1-S8的处理。在S1-S8中若S4为OK,则将选择的指令节点追加在输出清单缓冲器17的指令串末尾上。换言之,通过循环呼叫重复S1-S8,使相应于资源状态的指令逐步寄存在输出清单缓冲器17上。
象这样,通过在S8的循环呼叫,在输出清单缓冲器17中逐步形成指令串。
在{1-2}图9的流程方框图中展示的S2中的重复控制。
在图9流程方框图中所示的S12中,若除去由候补选择的指令节点,则跃到S2。S2控制有关输出候补的各指令的S3-S10的反复处理。利用该重复在S1,对探索的输出候补剩余全部作S3-S10的处理。而且在重复当中,S4、S11的某一个为yes时,则该重复处理在中途终止。即在S2作反复控制,达到通过输出候补探索出相应于资源状态的指令节点。
{1-3,候补指定}图9流程方框图中所示的S1中的探索,逐步指定成为输出候补的指令节点,使得依存关系不被破坏。因此该S1由图10的辅助流程方框图构成。图10是表示图9流程方框图的S1处理过程的流程方框图。在本流程方框图中t1(步骤)判定给母的连接指令是否存在。在DAG合成部15产生的DAG中,选择在开头定位的指令节点时,在开头的指令节点中由于没有给母的连接指令,所以为n0,DAG中的开头指令节点成为输出候补。在t2,判定母指令节点是否全部输出结束。若在该t2的判定为yes,则指令节点为输出候补。这是由于在DAG中,只要母指令节点不全部输出,其子孙指令节点也不输出。象这样t1、t2依次进行,指令节点通过各DAG依次作为输出候补逐步指定。
比如指令串的排列为「mov 50,D0」 「mov 20,D1」「add D0、D1」时,「add D0,D1」输出当不是「mov 20,D1」、「mov 50,D0」输出之后,则依存关系被破坏了。因此,在本流程方框图的t2,在「add D0,D1」输出时,确认输出「mov 20,D1」、「mov 50,D0」,在输出「mov 50,D0」之后再作「add D0,D1」输出。
{1-4,各指令节点的优先顺序设定}图9所示的流程方框图的S3,每当危险的连接指令一存在,则要优先选择DAG指令的节点。图11是表示图9的流程方框图S3处理过程的辅助流程方框图。在该辅助流程方框图中的P1(步骤)、就各输出候补指令节点而言,在与其母节点之间存在危险,并且判定在之前是否将其母节点寄存在输出清单缓冲器17中,该P1若为yes,则将优先位次3给予其指令节点。在P1中若为NO,则判定在与指令节点的下行指令节点(所谓下行指令节点是适合指令节点子指令节点以后的指令节点)的连接指令中是否存在危险。当在该P2中为NO时,则在其指令节点上授予优选位次2。并且当在该P2中为yes时,则在其指令节点中授予优先位次1。对于所有输出候补重复以上P1-P5,按序添加各输出候补。在P1-P5回路处理结束之后,跃至P6,但在P6中,优先顺序选择最高的指令节点。对于象这样选择的指令节点,作上述的S4-S10处理。
{1-5,更新资源状态}图12是表示图9的流程方框图的S7处理过程的流程方框图。
在图12所示的流程方框图中的γ1(步骤)中,指令节点中判定是否有资源参照。在γ1为yes情况下,参照DAG,判定其资源参照是否为最后参照。具体来说该判定所作的是,作给该指令节点的DAG探索,参照母节点,确认已经输出关于给母节点的其资源的子指令节点。如果已经输出,因选择了的指令节点或最后参照,所以γ2成为yes,转移至γ3。用选择的指令节点参照的资源若为多个,则检测使其同某一个资源定义的母指令。然后,若用若干子指令进一步参照用检测的各个母指令定义的资源,则全部检测那些子指令。检测结果确认这些为输出结束。对于用选择的指令节点参照的剩余资源,重复以上程序,只是在确认就全都参照而言输出为终止时,成为γ2的yes。
象指令「add D0,D1」那样,在参照数据寄存器D0,D1时,首先就有关数据寄存器D0,检测其母指令,并且,若用若干子指令进一步参照用检测的各个母指令定义的资源、则全部检测那些子指令。检测结果确认那些为输出结束。接着,有关数据寄存器D1,检测其母指令,然后,若用若干子指令再参照用检测的各个母指令定义的资源,则全部检测到那些子指令。检测结果确认那些是输出结束。
在γ3,于资源状态信息内,将判定为最后参照的资源项目变更成未使用。变更之后,从γ3向γ4转移。在γ4,作在选择的指令节点中资源定义是否存在的判定。在该γ4中若为yes,则转移至γ5,在选择的指令节点的子指令节点中,判定是否存在参照定义的资源值的指令节点。在γ5中若判定为yes,则将资源状态的其资源项目变更为使用中。若γ5被判定为NO,则用其定义设定的值作为无意义的内容使资源状态的其资源项目变更为未使用。
{1-6,返回途径}在图9流程方框图中所表示的S2的反复处理中,虽然有关所有候补作资源状态判定,但在哪个候补都不能向输出清单缓冲器17输出情况下,则从S2转移至S13,在返回值中设定NG,作返回处理。当在S13返回,则处理转移至S8的下一个步骤,即S9。在S9虽然作返回值判定,但当在S13返回值被设定为NG,则在S9的判定结果成为NG,处理转移至S10。在S10作输出候补内容的消除,进行状态恢复。根据该恢复,利用前一个循环呼叫,就有关在S1指定了的输出候补,进行S2的回路控制。
{工作例1,将图6B的DAG作为处理对象时}图13是表示由调度部18确定指令串顺序情况的图。本图表示排列变换在图6B中所展示的DAG中的指令节点。本图的横排表示资源状态。本图的横向排列上登录了称之为「D0,D1,A0」的寄存器,存储器、标记等未作登录,这是由于为说明方便,只将寄存器当作说明对象的缘故。
本图的「候补探索」栏在把图6B的DAG作为处理对象时,在S1的处理中展示探索的指令节点的号码。并且,「指令挑选」栏表示在S3处理中选择的指令节点号码。「资源判定」表示在象哪个资源状态中作S4的判定。「输出缓冲器」表示寄存在输出清单缓冲器17中的指令节点顺序。「资源更新」表示通过向输出清单缓冲器17的指令节点输出,如何更新资源状态。其下的「循环呼叫」表示在S8中作第几次循环呼叫。下面参照本图和图9-12的流程方框图说明上述工作例子。并且以后说明以附加在图13左端的(a-1)(a-2)(a-3)(a-4)(b-1)情况下分开进行。
(a-1候补探索)对在由DAG生成部15产生的DAG保持部14中保持着的图6B所示的DAG,使调度部18启动。图6B所示的指令节点1、4由于作为开头指令节点设有对母的连接指令(图10的流程方框图中所示的S1),根据调度部18,DAG中的开头指令节点成为输出候补(t3)(a-2指令挑选)在指令交点4的下行指令节点中由于存在危险,所以利用调度部18给予优先顺序1(图11流程方框图中所示的P5)。在指令节点1的下行指令节点中因无危险,所以给予优先顺序2(P4)。其结果在输出候补中选择优先顺序最高的优先顺序1的指令节点4(P6)。
(a-3、a-4资源状态判定、给缓冲器的输出、资源状态更新)调度部18作资源状态判定(图9的流程方框图中所示的S4)。在该状态中,不存在于基本程序块的入口所产生的资源,因资源状态全部为未使用,所以调度部18对输出清单缓冲器17输出指令节点4(S5)。输出之后,因对全部指令节点的输出没有终止(S6)所以把由指令节点4定义的寄存器A0设定成使用中(S7),其后进行循环呼叫(S8)。
(b-1候补探索)指令节点1作为开头指令节点,因没有给母的连接指令(图10的流程方框图中所示的t1),通过调度部18成为输出候补(t1、t3)。由于母指令节点4输出结束(t2),所以指令节点5成为输出候补(t3)。
(b-2指令挑选)在指令节点5的下行指令节点中,由于存在危险,所以利用调度部18给予优先顺序1(图11流程方框图中所示的P5)。在指令节点1(的下行指令节点中,因不存在危险,所以给予优先顺序2(P4)。其结果,在输出候补中选择优先顺序最高的指令节点5(P6)。
(b-3、b-4资源状态判定、对缓冲器的输出、资源状态更新)调度部18作资源状态判定(图9流程方框图中所示的S4)。根据资源状态的判定,由指令节点5定义的寄存器D1因为未使用,所以把指令5给出给输出清单缓冲器17(S5)。之后,由于没有使全部指令节点输出终止(S6),所以使作为最后参照的寄存器A0回到未使用,将由指令节点5定义的寄存器D1设定成使用中(S7),之后作循环呼叫(S8)。
(C-1候补探索)指令节点1作为开头指令节点,因没有给母的连接指令,所以成为n0,DAG中开头指令节点成为输出候补(图10的流程方框图中所示的t1、t3)。由于母指令节点5输出结束,所以指令节点6成为输出候补(t2、t3)。
(C-2指令挑选)以前输出给输出清单缓器17的指令节点5,作为指令节点6的母指令节点,由于存在与母指令节点之间的危险,所以在指令节点6中通过调度部18给予优先位次3(图11流程方框图中所示的P3)。在指令节点1中不存在危险,因在其下行指令节点中也不存在危险,所以利用调度部18给予优先位次2(P4)。选择其结果优先顺序最高的指令节点1(P6)。
(C-3,C-4资源状态判定,对缓冲器的输出,资源状态更新)作资源状态判定(图9的流程方框图中所示的S4)。根据资源状态判定,用指令节点1定义的寄存器D0因资源状态为未使用,所以调度部18将指令节点1输出到输出清单缓冲器17(S5)。由于设有使全部指令节点输出终止(S6),所以将由指令节点1定义的寄存器D0设定成使用中(S7),之后,作循环呼叫(S8)。
(d-1候补探索)因母指令节点1,5输出结束,所以利用调度部18,指令节点2,6成为输出候补(图10的流程方框图所示的t2、t3)。
(d-2指令挑选)在指令节点2中在与以前输出的指令节点之间不存在危险,因利用调度部18,其下行的指令节点中也不存在危险,所以给予优先位次2(P4)。另一方面,在指令节点6中于与以前输出的指令间也不存在危险,在其下行指令节点中由于也无危险,所以通过调度部18给予优先位次2(P4)。其结果,选择优先位次最高的指令节点的某一个,这里是指令节点6(P6)。
(d-3,d-4资源状态判定、给缓冲器的输出、资源状态更新)实施资源状态判定(图9的流程方框图中所示的S4)。根据资源状态判定,用指令节点6定义的寄存器D1,虽然用指令节点5定义是使用中,但由于指令节点6是用指令节点5定义的寄存器D1的最后参照(参照S11),所以调度部18把指令节点6输出至输出清单缓冲器17(S5)。因没有使全部指令节点输出终止(S6),所以把用指令节点6定义的寄存器D1设定成使用中(S7),调度部18作循环呼叫(S8)。
(e-1候补探索)由于母指令节点1为输出结束,所以经调度部18,指令节点2成为输出候补(图10的流程方框图中所示的t2,t3)。
(e-2指令挑选)在指令节点2中无危险,因在其下行指令节点中也无危险,所以根据调度部18给予优先位次2(P4)。其他中无输出候补,所以挑选指令节点2。
(e-3 e-4资源状态判定,给缓冲器的输出,资源状态更新)调度部18作资源状态判定(图9的流程方框图中所示的S4)。根据资源状态判定,由于用指令节点2定义的寄存器A0是无使用,所以调度部18将指令节点2输出给输出清单缓冲器17(S5)。因没有使全部指令节点输出终止(S6),所以调度部18使作为最后参照的寄存器D0返回到使用中,把用指令节点2定义的寄存器A0设定成使用中(S7),之后作循环呼叫(S8)。
(f-1候补探索)用母指令节点2是输出结束、所以指令节点3成为输出候补(t2、t3)。
(f-2指令挑选)在指令节点3中无危险,因在其下行指令节点中也无危险,所以经调度部18给予优先位次2(图11的流程方框图中所示的P4)。在其他因无输出候补,所以经调度部18挑选指令节点3。
(f-3,f-4资源状态判定,对缓冲器的输出,资源状态更新)作资源状态的判定(图9流程方框图中所示的S4)。根据资源状态判定,因由指令节点3定义的资源mem为未使用,所以调度部18把指令节点3输出至输出清单缓冲器17(S5)(在情况说明方面,mem从略)。借助输出指令节点3,因输出了基本程序块的全部指令节点,所以返回(S6,S20)。
通过进行上述处理,输出清单缓冲器17内的指令串成为4-5-1-6-2-3的顺序,指令串由「mov 10,D0」「mov D0,A0」「mov A0,mem」「mov 20,A0」{mov(A0),D1}{add D1,D1}的顺序换排为「mov 20,A0」{mov (A0) D1」「mov 10 D0」{add D1,D1}「mov D0,A0」「mov A0,mem」({}间的指令连续排列是作为危险主要原因的指令。显然根据本实施例的排列变换,变得不连续)。
{工作例2,以图6C的DAG作为处理对象的情况}图14是表示由调度部18实施返回途径(后返回)情况图。
该图表示排列变换图6C中所示的DAG中指令节点的情况。
在本图,在横排中表示资源状态。本图中在横排上登录着称之为「D0 D1 D2 A0」的数据寄存器,地址寄存器,虽然没有登录存储器标记等,这是由于为便于说明,只将数据寄存器、地址寄存器作为说明对象的缘故。
本图的「候补探索」栏在把图6C的DAG作为处理对象时,表示在S1的处理中探索的指令节点号码。并且「指令挑选」栏表示在S3的处理中选择的指令节点号码。「资源判定」表示S4的判定是在怎样的资源状态下进行。「输出缓冲器」表示在输出清单缓器17中寄存的指命节点顺序。「资源更新」表示通过对输出清单缓冲器17的指令节点之输出,如何使资源状态更新。其下面的「循环呼叫」用level数表示在S8中作哪一次循环呼叫。并且在图6C的一例中,由于寄存器A0的设定值在基本程序块的入口处产生,所以设定表示在最初资源状态的寄存器A0项目上的使用中的「S」。
(S-1,候补探索)由DAG生成部15产生,对于在DAG保持部14保持着的图6C中表示的DAG,使调度部18启动。图6C所示的指令节点4因作为开头指令节点无对于母的连接指令(图10的流程方框图中表示的t1)、所以经调度部18,指令节点4成为候补输出(t3)。另一方面,指令节点1虽然有对母(基本程序块的开始)的连接指令,但调度部18将此已经看作输出结束地作为输出候补(t2、t3)。
(S-2指令挑选)在指令节点4的下行指令节点中,因存在危险,所以通过调度18给予优先位次1(图11的流程方框图中所示的P5)。在指令节点1的下行指令节点中,因不存在危险,所以根据调度部18给予优先位次2(P4)。其结果,在输出候补中选择优先位次最高的指令节点4(P6)。
(S-4资源状态判定,对缓冲器的输出,资源状态更新)调度部18作资源状态判定(图9的流程方框中所示的S4)。根据资源状态判定,由于用指令节点4定义的资源为未使用,所以将指令节点4输出至输出清单缓冲器17(S5)。之后,因指令节点4没有使最后指令节点输出结束(S6),所以将用指令节点4定义的寄存器D0设定成使用中(S7),调度部18进行循环呼叫(S8)。
(t-1候补探索)指令交点1是开头的指令节点,其母指令点看作输出结束,所以成为输出候补(图10的流程方框图中所示的t2、t3)。另一方面,因母指令节点4为输出结束(t2),所以指令节点5成为输出候补(t2、t5)。
(t-2指令挑选)在指令节点5下行指令节点中,因存在危险,所以利用调度部18给予优先位次1(图11的流程方框图中所示的P5)。在指令节点1的下行指令节点中,根据调度部18、因危险不存在,所以给予优先位次2(P4)。其结果选择优先位次最高指令节点5(P6)。
(t-3 t-4资源状态判定,对缓冲器的输出,资源状态更新)
资源状态的判定由调度部18进行(图9的流程方框图中所示的S4)。根据资源状态的判定,由指令节点5定义的寄存器A0为使用中,并且,因不是用「S」定义了的寄存器A0的最后参照,所以不可能输出(S4、S11、S12)。在S1,除了指令节点5,指定指令节点1作为输出候补,通过S2虽然选择指令节点1,但用指令节点1定义的寄存器D0为使用中「S」,并且因也无最后参照(S4、S11、S12)所以从输出候补除去指令节点1,转移到S13,用返回值NG返回(S13)。若返回,则在输出清单缓冲器17中寄存器指令节点4,指令节点1作为输出候补返回剩余状态。这以后,在S10取消输出清单缓冲器17的内容,利用调度部18消去指令节点4,返回S2。
(U-2指令挑选)在指令节点1中不存在危险,其下行指令节点中也无危险,所以根据调度部18给予优先位次2(图11的流程方框图中所示的P4)。此外,因无候补,所以选择指令节点1(P6)。
(U-3资源状态判定,对缓冲器的输出资源状态更新)作资源状态判定(图9的流程方框图中所示的S4)。根据资源状态的判定,因用指令节点1定义的寄存器D0为未使用,所以调度部18将指令节点1输出至清单缓冲器17(S5)。输出后指令节点1因没有终止全部指令节点的输出(S6),所以调度部18把用指令节点1定义的定义寄存器D0设定为使用中(S7),使作为最后参照的寄存器A0返回未使用,作设定循环呼叫(S8)。
(V-1候补探索)因母指令节点1为输出结束,所以通过调度部18,指令节点2、4成为输出候补(图10的流程方框图中所示的t1、t2、t3)。
(V-2指令挑选)在指令节点2中无危险,因其下行的指令节点也无危险,所以通过调度部18给予优先位次2(图11的流程方框图中所示的P4)。另一方面,因在指令节点4中危险存在,所以利用调度部18给予优先位次1(P5)。其结果,选择优先位次最高的指令节点4(P6)。
(V-3、V-4资源状态判定、向缓冲器的输出、资源状态更新)进行资源状态判定(图9流程图中所示的S4)。根据资源状态判定,由于用指令节点4定义寄存器D0,所以不能输出。因指令节点4不是用指令节点1定义的寄存器D0的最后参照(S11),所以调度部18把指令节点4从输出候补中除掉(S12),返回S2。
除指令节点4外,留下指令节点2作为输出候补。在该状态中调度部18作资源状态判定(图9的流程图中所示的S4)。根据资源状态的判定,因用指令节点2定义寄存器D2,所以可作资源状态判定。调度部18把指令节点2向输出清单缓冲器17输出(S5)。由指令节点2没有使全部指令节点输出结束(S6),所以使作为最后参照的寄存器D0返回未使用,将用指令节点2定义的寄存器D2设定成使用中(S7),其后作循环呼叫(S8)。
(W-2指令挑选)在指令节点3的连接指令中,不存在危险,因其下行的指令节点上也无危险,所以根据调度部18授予优先位次2(图11的流程图中所示的P4)。另一方面,在指令节点4的下行指令节点中,因存在危险,所以给予优先位次1(P5)。
反复作上述处理,图6C所示的指令按1-2-4-5-6-3-7顺序寄存在输出清单缓冲器17中。根据上述实施例,使用只是根据定义-参照间的连接指令结合的DAG和用缓冲器的末尾指令的各资源的参照状态保持依存关系,由于作排列变换而使这不受损害,所以提高排列变换的自由度。以此,可更可靠地消除危险,能在流水线处理中产生适合的机械语言程序。
第2实施例在第2实施例中,在图9流程图中所示的S11的判定中,利用资源状态不可能输出候补指令节点,并且在判定为不是最后参照情况下,通过置换其输出候补内的资源,使之进行其指令节点的输出。图15是在第2实施例中,表示图9流程图上追加的与1相连的步骤图。
在第2实施例中,如图15所示,在S11、12的步骤之间,设置S14的判定步骤。当在该S14的判定为yes时,将指令节点资源置换成别的资源,使之输出其指令节点。
在图15流程图中所示的S14中,判定是否有可能将指令中的资源(称之为置换对象资源)置换成其他资源。在S15,当在S14的置换判定成可能时,可将其指令节点资源置换成判定成可能的其他资源。
在S16,就指令节点而言参照DAG,将有关对于用其指令节点定义的置换对象资源的数据流,在存在子孙关系的指令节点中使用着的置换对象资源,置换成判定为可置换的其他的资源。
接着说明有关在S14判定的「置换可能的资源」的要件。在「置换可能的资源」中需以下要件①②③。
①在置换判定时必须是未使用的资源。
②关于资源在具有数据流的区间中,必须是作为未使用的资源。这是所谓具有数据流的区间,是在对资源定义值的指令和参照定义的资源值的全部指令所占的区间上,加上再定义其资源值的指令和参照再定义的资源值的全部指令所占的区间,为组合区间。所谓再定义的指令是以根据已定义的资源值,使其资源定义的指令。
(4)mov memory 2,D0(5)add D0,D0(6)mov 1,D1(7)add D1,D0(8)mov D0,D2例如在以上(4)-(8)的指令串中,要使用「(4)mov memory2,D0」定义的数据寄存器D0置换情况下,最好置换成作为同样数据寄存器之间的数据寄存器D1、D2。但是,该数据寄存器D0在「(7)add D1,D0」中,具有数据寄存器D1和数据流,数据寄存器D2具有「(8)mov D0,D2」和数据流。象该数据寄存器D1、D2那样,在DAG以后的指令节点中存在数据流情况下,必须避免对此置换。
③置换后的指令必须是可执行的。
在欲将「(9)mov(A0),D0」的地址寄存器A0置换成其他情况下,要使判定成数据寄存器D1、地址寄存器A1为未使用。在这种状况中,要在数据寄存器A0的置换候补中选择数据寄存器D1。这里应注意的是「(9)mov(A0),D0」作为间接参照指令,其功能是把用地址寄存器A0的保持值指示的存储地址内容传送给数据寄存器D0。在地址寄存器中,为了分配用其保持值可指示存储器存取端的功能,在「(9)mov(A0),D0」中进行间接参照。对此,由于作为置换候补的数据寄存器D1是通用寄存器,所以即便采用该置换候补产生称之为间接参照指令「(9)mov(D1),D0」的代码,处理器也不可能对此执行。
在欲将「(10)mu1 D1,D0」的数据寄存器D0置换成其他的情况下,要判定成地址寄存器A0为未使用。在该状况下,要在数据寄存器D0的置换候补中选择地址寄存器A0。在此应注意的是,「(10)mu1 D1,D0」作为乘法指令,其功能是乘数据寄存器D1,D0的保持值,将结果转送至数据寄存器D0。在数据寄存器中,为分配用其保持值可作ALU运算的功能,在「mu1 D1,D0」中进行乘法运算。对此,因在存储寄存使用中设置作为置换候补选择的地址寄存器A0,所以即便采用该置换候补,产生称为间接参照指令「(9)mu1 A0,D0」的代码,处理器也不能对此实施。
为了予先防止产生象这样处理器不能执行的指令,对于①②挑选留下的未使用资源,适用以下程序。
首先第1,识别①②挑选剩下未使用资源的种类。即识别其资源是数据寄存器?还是地址寄存器?还是存储器?象这样识别之后,第2,解读选择了的指令节点,以及该指令节点和具有关于该置换对象资源的数据流的全部指令节点,判定那些指令节点是间接参照指令?还是乘法指令?还是除法指令?通过使上述识别结果和读解结果的组合与专用目的计算机的处理器的设置指令对照,检证上述置换的可否。在上述例子中,置换判定为否的组合,未使用资源的种类是数据寄存器,并且是解读间接参照指令的情况。未使用资源的种类是地址寄存器,而且是解读乘法运算指令的情况。
对于①②挑选剩余的全部资源,重复象这样的检证,将挑选剩余的指令作为置换候补。
根据第2实施例,参照

消除危险的情况。
图16表示1个资源始终在使用中,不能实行排列变换的DAG。
在图16,由于在下一个「add 10,D0」参照在「mov mem-a,D0 」根据从存储器读出的值定义了的寄存器D0,所以显然在(1)-(2)之间形成危险。并且由于在下一个「add 20,D0 」参照在「mov mem-b,D0」根据从存储器读出的值定义的寄存器D0,所以在(4)-(5)之间形成危险,这是显然的。
对于该一例,当只是通过定义-参照间的连接指令产生DAG,则(10-(2)-(3)之间与一个DAG连锁,在(4)-(5)-(6)间产生DAG。然而,因寄存器D0在该基本程序块中始终被参照,所以在第1实施例的流程图中,不能把在(4)-(5)-(6)间的任一个指令向(1)-(2)之间输出;并且也不能把在(1)-(2)-(3)间的任一个指令向(4)-(5)间输出。
下面说明根据第2实施例的流程图排列变换上述基本程序块的指令串。图17是表示在图16中所示的DAG指令中置换定义的资源的情况图。
这里输出图16的(1)的指令节点,接着虽然作为候补选择(4)的指令节点,但在资源状态中,由于寄存器D0是使用中,所以成为NG,因也不是最后参照,所以转移到S14。在S14,判定是否可能将指令资源置换成其他资源。在此,寄存器D0以外的寄存器在该基本程序块中,都为未使用,要满足上述①②③要件。这种情况下,资源的置换是可能的,S14成为yes,转移至S15。在S15,当判定在S14的置换是可能的时,将其指令节点的资源(置换对象资源寄存器D0)置换成该资源。这里,由于寄存器D1为未使用,所以在指令(4)的寄存器D0的定义被置换成寄存器D1的定义。其结果,(4)的指令节点「movmem-b,D0」被改写成「mov mem-b,D1」(S16)。
接着在S16,参照有关指令节点的DAG,置换其指令节点和关于寄存器D0的数据流,存在子孙关系的指令节点的置换对象资源。在DAG中,(4)与(5)、(6)的指令涉及寄存器D0的数据流处于子孙关系。于是把「add 20,D0」换写成「add 20,D1」,把「mov D0,mem-b」换写成「moc D1,mem-b」。根据以上换写,指令串(4)(5)(6)仅使用寄存器D1,成为不用寄存器D0的指令串。根据象这样的换写,在S4的资源状态判定全部成为yes,适于进行用于消除危险的排列变换。
在如上所述的实施例中,要输出的指令根据资源状态不能输出时,通过置换用其指令定义的资源,因不损害依存关系,所以可作更富弹性的排列变换,更可靠地消除危险。
并且,在上述实施例中,虽然以用汇编程序语言记述的源程序为对象展开说明,但将本最优化装置排入编译程序,在编译程序通过生成代码输出汇编程序语言状态的程序的阶段也适用本最优化装置。
权利要求
1.一种用于消除流水线处理危险的最优化装置,排列变换不包括程序中分路的程序部分指令,其特征是包括以下部分定向非循环图形生成装置,对于不含所述程序中分路的程序部分,生成多个定向非循环图形,定向非循环图形表示以在资源中使值定义的指令为母,使参照其资源值的指令为子的母子关系家谱;标记设定装置,在各定向非循环图形中,在存在危险的母子间设定标记;排列变换装置,排列变换所述程序部分的指令;按以下方式作该排列变换,在定向非循环图形中被作了标记的指令间,插入没有破坏在其指令间作为使用中的资源值的其他定向非循环图形指令。
2.如权利要求1的装置,其特征是还包括以下部分授予优先度装置,在定向非循环图形打头的指令内,通过在子孙中包括危险的指令授予高优先度,利用在子孙中不包括危险的指令授予低优先度,所谓子孙指令是这样的指令,沿定向非循环图形内从母到子单向地,通过打头指令可探索定义-参照的直接或间接的母子关系的全部指令;排列变换装置包括以下部分切出装置,当指示在定向非循环图形的打头指令内成为对象的指令时,通过定向非循环图形切出指示了的指令;指令寄存装置,根据切出了的位次将切出的指令寄存器在串行中;破坏指令检测装置,从各定向非循环图形的打头检出,破坏在后参照的资源值的指令;带标记的指令检测装置,母指令作为存在于指令寄存装置的串的最后尾的指令,且通过各定向非循环图形的打头检出在与其母间设定标记的指令;禁止切出装置,禁止由破坏指令检测装置检出的指令、及由带标记指令检测装置检出的指令的切出;指令指示装置,作为禁止由切出禁止装置切出的指令以外的打头指令,授予的优先度将最高指令作为对象指示。
3.如权利要求2的装置,其特征是还包括以下部分资源标记存储装置,存储对应各个资源的资源标记,将对应成为使用中的资源的资源标记设定成开启,将对应成为未使用的资源标记设定成关闭,在成为对象的程序部分入口处,反映先行的程序部分的出口状态;更新装置,在将指令寄存在指令寄存装置中情况下,使对应用其指令定义值的资源的资源标记转换成开启,参照资源值在指令寄存装置中寄存的指令中使对应成为最后的资源的资源标记转换成关闭;破坏指令检测装置参照成为打开的资源标记,利用判定是否破坏对应其资源标记的资源值,检出指令。
4.如权利要求3的装置,其特征是,在成为对象的程序部分,在利用以一个指令定义的资源值后续的多个指令使值参照的情况下,定向非循环图形表示将其资源值定义的指令为母,将参照其资源值的多个指令作为子的多对母子关系;在成为对象的程序部分中,在一个指令中参照以先行的多个指令定义了的值情况下,定向非循环图形表示以参照其资源值的指令为子,以定义其资源值的多个指令为母的多对母子关系;更新装置进一步包括以下部分有关参照判定部,当根据切出装置切出指令时,判定是否在以后参照用切出的指令定义的资源值;第1转换部,在判定为以后被参照时,使对应其定义资源的资源标记由关闭转换成开启;第1母指令检测部,若用由切出装置切出的指令参照的资源成为单数,则检出有关其资源的母指令,若参照的资源为多个,则检出使每个资源定义的母指令;第1子指令检测部,若用多个子指令进一步参照用由第1母指令检测部检出了的各个母指令定义的资源,则全部检出那些子指令(检出的子指令有复数、单数2种);第1切出终止指令判定部,若用第1子指令检测部检测与由切出装置切出的指令不同的子指令,则判定那些子指令是否全部切出终止;第2转换部,在没有检出切出的指令以外的子指令时,或虽然检出了与切出的指令不同的子指令,但那些由第1切出终止指令判定部判定为切出终止时,通过切出的指令对应参照值的资源标记从开启转换成关闭。
5.如权利要求4的装置,其特征是,破坏指令检测装置进一步包括以下部分破坏候补选择部,将处于各定向非循环图形的打头的各个指令作为破坏候补选择;定义资源检测部,以作为破坏候补选择的指令定义的定义资源若成为单数,则判定对应定义资源的资源标记是否设定成表示未使用的关闭,若定义的资源为多个,则判定对应那些定义资源的资源标记是否设定成全关闭;第1除外部,若对应于检出的全部定义资源的资源标记为关闭,则使作为其破坏候补选择的指令变更成非破坏指令;第2母指令检测部,对应多个资源的资源标记被设定成开启的情况下,全部检出定义那些资源的母指令;第2子指令检测部,若在多个子指令中进一步参照由通过第2母指令部检出了的各个母指令定义的资源,则全部检出那些子指令;第2切出终止指令判定部,若利用第2子指令检测部检出与破坏候补不同的子指令,则判定那些子指令是否全部切出终止;第2除外部,就有关全部定义资源利用第2子指令检测部设有检出破坏候补以外的子指令时,或虽然检出与破坏候补不同的子指令,但那些利用第2切出终止指令判定部判定为切出终止时,将作为其破坏候补选择的指令变更为非破坏指令;输出部,作为破坏候补被选择,并且将没有变更成非破坏指令的指令作为破坏指令,输出到禁止切出装置。
6.如权利要求5的装置,其特征是排列变换装置还包括以下部分第1复原装置,就一个程序部分破坏指令检测装置仅检测破坏指令时,使其定向非循环图形复原至切出寄存在指令寄存装置最后尾的指令的以前状态;第2复原装置,使通过以前切出其指令,对应值受到变更的资源的资源标记复原到切出该指令的以前状态;指令指示装置还若使指令返回定向非循环图形,将在返回的指令上接着给予高优先度的定向非循环图形的打头指令作为对象指示。
7.如权利要求3的装置,其特征是,在程序部分通过用一个指令使值定义的资源后续的多个指令,使值参照时,定向非循环图形表示把使其资源值定义的指令作为母,把参照其资源值的多个指令作为子的多对母子关系;在一个指令中参照在成为对象的程序部分中用先行的多个指令定义的值的情况下,定向非循环图形表示以参照其资源值的指令为子,以定义其资源值的多个指令为母的多对母子关系;破坏指令检测装置还包括以下部分破坏候补选择部,位于各定向非循环图形的打头的各个指令作为破坏候补选择;定义资源检测部,用作为破坏候补选择的指令定义的定义资源若为单数,则判定对应定义资源的资源标记是否被设定成表示未使用的关闭,若定义的资源成为复数,则判定对应那些定义资源的资源标记是否全部设定为关闭;第1除外部,当对应于检出的全部定义资源的资源标记为关闭,则使作为其破坏候补选择的指令变更为非破坏指令;第2母指令检测部,当对应多个资源的资源标记被设定成开启情况下,则全部检出使那些资源定义的母指令;第2子指令检测部,若进一步在多个子指令中参照用根据第2母指令部检出了的各个母指令定义的资源,则全部检出那些子指令;第2切出终止指令判定部,若用第2子指令检测部检出与破坏候补不同的子指令,则那些子指令判定是否全部切出结束;第2除外部,若关于所有定义资源用第2子指令没有检出破坏候补以外子指令时,或虽然检出与破坏候补不同的子指令,但那些利用第2切出终止指令判定部判定为全部切出终止时,将使作为其破坏候补选择了的指令变更为非破坏指令;输出部,作为破坏候补被选择,并将没有变更成非破坏指令的指令作为破坏指令向禁止切出装置输出。
8.如权利要求7的装置,其特征是排列变换装置还包括以下部分第1复原装置,对于一个程序部分,在破坏指令检测装置仅检出破坏指令时,使其定向非循环图形复原到切出寄存在指令寄存装置最后尾中的指令的以前状态;第2复原装置,使对应以前由切出其指令使值受到变更的资源的资源标记复原至切出该指令前的状态;指令指示装置进一步当指令返回定向非循环图形,把对返回的指令接着给予高优先度的定向非循环,图形的打头指令作为对象指示。
9.如权利要求1的装置,其特征是还包括以下部分授予第1优先度装置,在定向非循环图形的打头指令内,在子孙中包括危险的指令上授予第1优先度,在子孙中不包括危险的指令上授予比第1优先度低的第2优先度;排列变换装置包括以下部分切出装置,当指示在定向非循环图形的打头指令内成为对象的指令,则通过定向非循环图形切出指示了的指令;指令寄存装置,根据切出了的位次将切出了的指令寄存在串行中;破坏指令检测装置,从各定向非循环图形的打头检出破坏在后参照的资源值的指令;带标记指令检测装置,母指令是存在于指令寄存装置的串的最后尾的指令,并且从各定向非循环图形的打头检出与其母之间设定标记的指令;授予第2优先度装置,在定向非循环图形的打头指令内,于由带标记检测装置检出的指令上,授于比由授予第1优先度装置授予的第2优先度还要低的第3优先度;禁止切出装置,禁止由破坏指令检测装置检出了的指令的切出;指令指示装置,作为由禁止切出装置禁止切出的指令以外的打头指令,所授予了的优先度以最高指令作为对象指示。
10.如权利要求9的装置,其特征是还包括以下部分资源标记存储装置,存储对应于各个资源的资源标记,将对应于成为使用中的资源的资源标记设定成开启,将对应于成为未使用的资源的资源标记设定成关闭。在成为对象的程序部分的入口中,反映先行的程序部分出口状态;更新装置,在指令寄存装置中寄存指令情况下,使对应用其指令定义值的资源的资源标记转换成开启,参照资源值使在寄存于指令寄存装置中的指令中对应于成为最后的资源的资源标记转换成关闭;破坏指令检测装置,参照成为开启的资源标记,通过判定是否破坏对应于其资源标记的资源值,检出指令。
11.如权利要求10的装置,其特征是,在成为对象的程序部分,通过以一个指令定义了的资源值后续的多个指令参照值时,定向非循环图形表示使其资源值定义的指令作为母,以参照其资源值的多个指令为子的多对母子关系;在成为对象的程序部分,在一个指令中参照以先行的多个指令定义了的值时,定向非循环图形表示以参照其资源值的指令为子,以定义其资源值的多个指令为母的多对母子关系。更新装置还包括以下部分参照有无判定部,当用切出装置切出指令,则判定是否以后参照用切出的指令定义的资源值;第1转换部,当判定为后来参照时,则使对应其定义资源的资源标记从关闭转换成开启;第1母指令检测部,若用由切出装置切出的指令参照的资源为单数,则检出有关其资源的母指令,若参照的资源为复数,则检出使各个资源定义的母指令;第1子指令检测部,若用多个子指令进一步参照用由第1母指令检测部检出的各个母指令定义的资源,则全部检出那些子指令(检出的子指令有复数、单数2种);第1切出终止指令判定部,若用第1子指令检测部检出与用切出装置切出的指令不同的子指令,则判定那些子指令是否全部切出终止;第2转换部,当没有检出切出的指令以外的子指令时,或虽然检出与切出的指令不同的子指令,但上述情况在由第1切出终止指令判定部判定为切出终止时,则使对应于通过切出的指令参照值的资源的资源标记从开启转换成关闭。
12.如权利要求11的装置,其特征是破坏指令检测装置还包括以下部分破坏候补选择部,把处于各定向非循环图形的打头的各个指令作为破坏候补选择,定义资源检测部,若用作为破坏候补选择的了的指令定义的定义资源为单数,则判定对应于定义资源的资源标记是否被设定成表示未使用的关闭,若定义的资源为复数,则判定对应那些定义资源的资源标记是否被设定成全部关闭;第1除外部,当对应检出的所有定义资源的资源标记为关闭时,则使作为其破坏候补选择了的指令变更为非破坏指令;第2母指令检测部,当对应多个资源的资源标记被设定成开启时,则全部检出定义那些资源的母指令;第2子指令检测部,若进一步在多个子指令中参照用由第2母指令部检出的各个母指定义的资源,则全部检出那些子指令;第2切出终止指令判定部,当由第2子指令检测部检出与破坏候补不同的子指令,则那些子指令判定全部切出是否终止;第2除外部,若对全部定义资源由第二子指令检测部没有检出破坏候补以外的子指令时,或虽然检出与破坏候补不同的子指令;但上述那些情况,当由第2切出终止指令判定部判定为全部切出为结束时,则将作为其破坏候补选择了的指令变更成非破坏指令;输出部,作为破坏候补被选择,并且将设有变更为非破坏候补的指令作为破坏指令向切出禁止装置输出。
13.如权利要求12的装置,其特征是排列变换装置还包括以下部分第1复原装置,对于1个程序部分当破坏指令检测装置仅检出破坏指令时,把其定向非循环图形复原至切出寄存在指令寄存装置最后尾中的指令之前状态;第2复原装置,将对应通过以前切出其指令使值受到变更的资源的资源标记复原到切出前的状态;指令指示装置还当使指令返回定向非循环图形时,把在返回的指令上进一步给予高优先度的定向非循环图形的打头指令作为对象指示。
14.一种用于消除流水线处理危险的最优化装置,排列变换不包括程序中分路的程序部分指令,其特征是包括以下部分定向非循环图形生成装置,对于不包括所述程序中分路的程序部分,生成多个定向非循环图形,定向非循环图形表示以在资源上使值定义的指令为母,以参照其资源值的指令为子的母子关系的家谱;标记设定装置,在各定向非循环图形中,在存在危险的母子间设定标记;授予优先度装置,在定向非循环图形的打头指令之中,使用在子孙中含危险的指令授予高的优先度,使用在子孙中不含危险的指令,授予低的优先度,所谓子孙指令,是在沿定向非循环图形内从母到子单方向上,从打头指令可探索定义-参照的直接或间接的母子关系的全部指令;切出装置,在定向非循环图形的打头指令内,若指示成为对象的指令,则把指示了的指令从定向非循环图形中切出;指令寄存装置,根据位次把切出的指令寄存在串行中;破坏指令检测装置,从定向非循环图形的打头检出破坏在后使值参照的资源的指令;带标记指令检测装置,母指令是存在于指令寄存装置的串的最后尾的指令,并且从各定向非循环图形的打头检测在与其母之间设定标记的指令;切出终止装置,禁止由破坏指令检测装置检出的指令以及由带标记指令检测装置检出的指令的切出;指令指示装置,作为禁止切出的指令以外的打头指令,把授予的优先度最高的指令作为对象指示,启动装置,当利用切出装置使指令切出时,把切出的剩余指令串作为新的定向非循环图形,依次启动授予优先度装置、破坏指令检测装置、带标记指令检测装置、禁止切出装置、指令指示装置。
15.如权利要求14的装置,其特征还包括以下部分资源标记存储装置,存储对应各个资源的资源标记,使对应成为使用中的资源的资源标记设定成开启,使对应于成未使用的资源的资源标记设定成关闭,在成为对象的程序部分的入口中,反映先行的程序部分的出口状态;更新装置,在指令寄存装置中寄存指令情况下,使对应用其指令定义值的资源的资源标记转换成开启,对资源值的参照使对应在指令寄存装置寄存的指令中成为最后的资源的资源标记转换成关闭;破坏指令检测装置,参照成为开启的资源标记,通过判定是否破坏对应于其资源标记的资源值,检出指令。
16.如权利要求15的装置,其特征是,在成为对象的程序部分中,在利用以一个指令定义了的资源值后续的多个指令使值参照时,定向非循环图形表示以定义其资源值的指令为母,以参照其资源的值的多个指令为子的多对母子关系;在成为对象的程序部分中,在一个指令中参照以先行的多个指令定义了的值的情况下,定向非循环图形表示以参照其资源值的指令为子,以定义其资源值的多个指令为母的多对母子关系;更新装置还包括以下部分参照有无判定部,若用切出装置切出指令,则断定是否以后参照用切出的指令定义的资源值;第1转换部,若判定为以后参照时,则使对应其定义资源的资源标记从关闭转换成开启;第1母指令检测部,若由切出装置切出的指令参照的资源成单数,则检出有关其资源的母指令,若参照的资源成多个,则检出使各个资源定义的母指令;第1子指令检测部,若用多个子指令再参照通过用第1母指令检测部检出的各个母指令定义的资源,则全部检出那些子指令(检出的子指令有复数、单数2种);第1切出终止指合判定部,当利用第1子指令检测部检出与通过切出装置切出的指令不同的子指令时,则判定那些子指令是否全部切出终止;第2转换部,当没有检出切出的指令以外的子指令时,或虽然检出与切出的指令不同的子指令,但上述情况在由第1切出终止指令判定部判定为切出终止时,则使对应于通过切出的指令参照值的资源的资源标记从开启转换成关闭。
17.如权利要求16的装置,其特征是破坏指令检测装置还包括以下部分破坏候补选择部,把位于各定向非循环图形打头的各个指令作为破坏候补选择;定义资源检测部,用作为破坏候补选择的指令定义的定义资源若为单数,则判定对应定义资源的资源标记是否被设定成表示未使用的关门,若定义的资源成为复数,则判定对应那些定义资源的资源标记是否全部设定为关闭;第1除外部,当对应于检出的全部定义资源的资源标记为关闭,则使作为其破坏候补选择的指令变更为非破坏指令;第2母指令检测部,当对应多个资源的资源标记被设定成开启情况下,则全部检出使那些资源定义的母指令;第2子指令检测部,若进一步在多个子指令中参照用根据第2母指令部检出了的各个母指令定义的资源,则全部检出那些子指令;第2切出终止指令判定部,若利用第2子指令检测部检出与破坏候补不同的子指令,则判定那些子指令是否全部切出终止;第2除外部,就有关全部定义资源利用第2子指令检测部没有检出破坏候补以外的子指令时,或虽然检出与破坏候补不同的子指令,但那些利用第2切出终止指令判定部判定为切出终止时,将作为其破坏候补选择的指令变更为非破坏指令;输出部,作为破坏候补被选择,并且将没有变更成非破坏指令的指令作为破坏指令,输出到禁止切出装置。
18.如权利要求17的装置,其特征是排列变换装置还包括以下部分第1复原装置,对于1个程序部分当破坏指令检测装置仅检出破坏指令时,把其定向非循环图形复原至切出寄存在指令寄存装置最后尾中的指令之前状态;第2复原装置,将对应通过以前切出其指令使值受到变更的资源的资源标记复原到切出前的状态;指令指示装置还当使指令返回定向非循环图形时,把在返回的指令上进一步给予高优先度的定向非循环图形的打头指令作为对象指示。
19.一种用于消除流水线处理危险的最优化装置,排列替换不包括程序中分路的程序部分指令,其特征是包括以下部分定向非循环图形生成装置,对于不含所述程序中分路的程序部分,生成多个定向非循环图形,定向非循环图形表示以在资源中使值定义的指令为母,使参照其资源值的指令为子的母子关系家谱;标记设定装置,在各定向非循环图形中,在存在危险的母子间设定标记;授予优先度装置,在定向非循环图形的打头指令内,使用在子孙中含危险的指令授予高的优先度,利用在子孙中不含危险的指令,授予低的优先度,所谓子孙指令,是在沿定向非循环图形内从母到子单方向上,从打头指令可探索定义-参照的直接或间接的母子关系的全部指令;切出装置,在定向非循环图形的打头指令内,若指示成为对象的指令,则把指示了的指令从定向非循环图形中切出;指令寄存装置,根据位次把切出的指令寄存在串行中;破坏指令检测装置,从定向非循环图形的打头检出破坏在后使值参照的资源的指令;带标记指令检测装置,母指令是存在于指令寄存装置的串的最后尾的指令,并且从各定向非循环图形的打头检测在与其母之间设定标记的指令;第1置换候补挑选装置,当用破坏指令检测装置检出某个指令时,该指令以及该指令和具有关该资源的数据流的全部指令所占的区间中,挑选作为无使用的资源;所谓具有有关资源的数据流的指令所占区间,是在资源中定义值的指令和参照定义的资源值的全部指令所占区间上,加上再使其资源值定义的指令和参照再定义的资源值的全部指令所占的区间的区间;所谓再定义指令是用依据已经定义的资源值定义其资源的指令;认别装置,识别挑选的资源种类;读解装置,读解用破坏指令检测装置检出的指令,以及具有有关用其指令定义的资源的数据流的全部指令;第2置换候补挑选装置,试组合识别装置的识别结果和读解装置的读解结果,通过使该组合与处理器的指令组对照,从挑选剩下的资源中进一步选择置换候补;涂改装置,在判定的置换候补中,涂改二种资源,其一是当定义作为使用中的资源值时,在用破坏指令检测装置检出的指令中定义值的资源;其二是在具有关于包括其指令的定向非循环图形的该资源之数据流的指令中使用的资源;禁止切出装置,在由带标记指令检测装置检出的指令以及由破坏指令检测装置检出的指令内,禁止未由涂改装置涂改资源以外部分的切出;指令指示装置,在禁止切出的打头指令中,指示优先度最高的图形作为对象;启动装置,当利用切出装置使指令切出时,把切出的剩余指令串作为新的定向非循环图形,依次启动授予优先度装置、破坏指令检测装置、带标记指令检测装置、禁止切出装置、指令指示装置。
20.如权利要求19的装置,其特征是还包括以下部分资源标记存储装置,存储对应各个资源的资源标记,将对应成为使用中的资源的资源标记设定成开启,将对应成为未使用的资源标记设定成关闭,在成为对象的程序部分入口处,反映先行的程序部分的出口状态;更新装置,在将指令寄存在指令寄存装置中情况下,使对应用其指令定义值的资源的资源标记转换成开启,参照资源值在指令寄存装置中寄存的指令中使对应成为最后的资源的资源标记转换成关闭;破坏指令检测装置参照成为打开的资源标记,利用判定是否破坏对应其资源标记资源值,检出指令。
21.如权利要求20的装置,其特征是,在成为对象的程序部分,在利用以一个指令定义的资源值后续的多个指令使值参照的情况下,定向非循环图形表示将其资源值定义的指令为母,将参照其资源值的多个指令作为子的多对母子关系;在成为对象的程序部分中,在一个指令中参照以先行的多个指令定义了的值情况下,定向非循环图形表示以参照其资源值的指令为子,以定义其资源值的多个指令为母的多对母子关系;更新装置进一步包括以下部分有无参照判定部,当根据切出装置切出指令时,判定是否在以后参照用切出的指令定义的资源值;第1转换部,在判定为以后被参照时,使对应其定义资源的资源标记由关闭转换成开启;第1母指令检测部,若用由切出装置切出的指令参照的资源成为单数,则检出有关其资源的母指令,若参照的资源为多个,则检出使每个资源定义的母指令;第1子指令检测部,若用多个子指令进一步参照用由第1母指令检测部检出了的各个母指令定义的资源,则全部检出那些子指令(检出的子指令有复数、单数2种);第1切出终止指令判定部,若用第1子指令检测部检测与由切出装置切出的指令不同的子指令,则判定那些子指令是否全部切出终止;第2转换部,在没有检出切出的指令以外的子指令时,或虽然检出了与切出的指令不同的子指令,但那些由第1切出终止指令判定部判定为切出终止时,通过切出的指令对应参照值的资源标记从开启转换成闭关。
22.如权利要求21的装置,其特征是破坏指令检测装置还包括以下部分破坏候补选择部,把处于各定向非循环图形的打头的各个指令作为破坏候补选择,定义资源检测部,若用作为破坏候补选择的了指令定义的定义资源为单数,则判定对应子定义资源的资源标记是否被设定成表示未使用的关闭,若定义的资源为复数,则判定对应那些定义资源的资源标记是否被设定成全部关闭;第1除外部,当对应检出的所有定义资源的资源标记为关闭时,则使作为其破坏候补选择了的指令变更为非破坏指令;第2母指令检测部,当对应多个资源的资源标记被设定成开启时,则全部检示定义那些资源的母指令;第2子指令检测部,若进一步在多个子指令中参照用由第二母指令部检出的各个母指定义的资源,则全部检出那些子指令;第2切出终止指令判定部,当由第2子指定检测部检出与破坏候补不同的子指令,则那些子指令判定全部切出是否终止;第2除外部,若对全部定义资源由第2子指令检测部没有检出破坏候补以外的子指令时,或虽然检出与破坏候补不同的子指令;但上述那些情况,当由第2切出终止上指令判定部判定为全部切出为结束时,则将作为其破坏候补选择了的指令变更成非破坏指令;输出部,作为破坏候补被选择,并且将设有变更为非破坏候补的指令作为破坏指令向切出禁止装置输出。
23.如权利要求22的装置,其特征是排列变换装置还包括以下部分第1复原装置,对于1个程序部分当破坏指令检测装置仅检出破坏指令时,把其定向非循环图形复原至切出寄存在指令寄存装置最后尾中的指令之前状态;第2复原装置,将对应通过以前切出其指令使值受到变更的资源的资源标记复原到切出前的状态;指令指示装置进一步当指令返回定向非循环图形,把对返回的指令接着给予高优先度的定向非循环图形的打头指令作为对象指示。
24.一种用于消除流水线处理危险的最优化装置,排列变换不包括程序中分路的程序部分指令,其特征是包括以下部分定向非循环图形生成装置,对于不包括所述程序中分路的程序部分,生成多个定向非循环图形,定向非循环图形表示以在资源上使值定义的指令为母,以参照其资源值的指令为子的母子关系的家谱。标记设定装置,在各定向非循环图形中,在存在危险的母子间设定标记;授予优先度装置,在定向非循环图形的打头指令之中,使用在子孙中含危险的指令授予高的优先度,使用在子孙中不含危险的指令,授予低的优先度,所谓子孙指令,是在沿定向非循环图形内从母到子单方向上,从打头指令可探索定义-参照的直接或间接母子关系的全部指令;切出装置,在定向非循环图形的打头指令内,若指示成为对象的指令,则把指示了的指令从定向非循环图形中切出;指令寄存装置,根据位次把切出的指令寄存在串行中;破坏指令检测装置,从定向非循环图形的打头检出破坏在后使值参照的资源的指令;带标记指令检测装置,母指令是存在于指令寄存装置的串的最后尾的指令,并且从各定向非循环图形的打头检测在与其母之间设定标记的指令;第1置换候补挑选装置,在用破坏指令检测装置检出某个指令时,在将该指令置于打头的定向非循环图形中,挑选作为未使用的资源;识别装置,识别挑选的资源的种类;读解装置,读解用破坏指令检测装置检出的指令,以及具有有关用其指令定义了的资源的数据流的全部指令;第2置换候补挑选装置,试组合识别装置的识别结果和读解装置的读解结果,通过使该组合与处理器的指令组对照,从挑选剩下的资源中进一步选择置换候补;涂改装置,在判定的置换候补中,涂改二种资源,其一是当定义作为使用中的资源值时,在用破坏指令检测装置检出的指令中定义值的资源;其二是在具有关于包括其指令的定向非循环图形的该资源之数据流的指令中使用的资源;禁止切出装置,在由带标记指令检测装置检出的指令以及由破坏指令检测装置检出的指令内,禁止未由涂改装置涂改资源以外部分的切出;指令指示装置,在禁止切出的打头指令中,指示优先度最高的图形作为对象;启动装置,当利用切出装置使指令切出时,把切出的剩余指令串作为新的定向非循环图形,依次启动授予优先度装置、破坏指令检测装置、带标记指令检测装置、禁止切出装置、指令指示装置。
25.如权利要求24的装置,其特征还包括以下部分资源标记存储装置,存储对应各个资源的资源标记,将对应成为使用中的资源的资源标记设定成开启,将对应成为未使用的资源标记设定成关闭,在成为对象的程序部分入口处,反映先行的程序部分的出口状态;更新装置,在将指令寄存在指令寄存装置中情况下,使对应用其指令定义值的资源的资源标记转换成开启,参照资源值在指令寄存装置中寄存的指令中使对应成为最后的资源的资源标记转换成关闭;破坏指令检测装置参照成为打开的资源标记,利用判定是否破坏对应其资源标记的资源值,检出指令。
26.如权利要求25的装置,其特征是,在成为对象的程序部分,通过以一个指令定义了的资源值后续的多个指令参照值时,定向非循环图形表示使其资源值定义的指令作为母,以参照其资源值的多个指令为子的多对母子关系;在成为对象的程序部分,在一个指令中参照以先行的多个指令定义了的值时,定向非循环图形表示以参照其资源值的指令为子,以定义其资源值的多个指令为母的多对母子关系。更新装置还包括以下部分参照有无判定部,当用切出装置切出指令,则判定是否以后参照用切出的指令定义的资源值;第1转换部,当判定为后来参照时,则使对应其定义资源的资源标记从关闭转换成开启;第1母指令检测部,若用由切出装置切出的指令参照的资源为单数,则检出有关其资源的母指令,若参照的资源为复数,则检出使各个资源定义的母指令;第1子指令检测部,若用多个子指令进一步参照用由第1母指令检测部检出的各个母指令定义的资源,则全部检出那些子指令(检出的子指令有复数、单数2种);第1切出终止指令判定部,若用第1子指令检测部检出与用切出装置切出的指令不同的子指令,则判定那些子指令是否全部切出终止;第2转换部,当没有检出切出的指令以外的子指令时,或虽然检出与切出的指令不同的子指令,但上述情况在由第1切出终止指令判定部判定为切出终止时,则使对应于通过切出的指令参照值的资源的资源标记从开启转换成关闭。
27.如权利要求26的装置,其特征是,破坏指令检测装置进一步饭后以下部分破坏候补选择部,将处于各定向非循环图形的打头的各个指令作为破坏候补选择;定义资源检测部,以作为破坏候补选择的指令定义的定义资源若成为单数,则判定对应定义资源的资源标记是否设定成表示未使用的关闭,若定义的资源为多个,则判定对应那些定义资源的资源标记是否设定成全关闭;第1除外部,若对应于检出的全部定义资源的资源标记为关闭,则使作为其破坏候补选择的指令变更成非破坏指令;第2母指令检测部,对应多个资源的资源标记被设定成开启的情况下,全部检出定义那些资源的母指令;第2子指令检测部,若在多个子指令中进一步参照由通过第2母指令部检出了的各个母指令定义的资源,则全部检出那些子指令;第2切出终止指令判定部,若利用第2子指令检测部检出与破坏候补不同的子指令,则判定那些指令是否全部切出终止;第2除外部,就有关全部定义资源利用第2子指令检测部没有检出破坏候补以外的子指令时,或虽然检出与破坏候补不同的子指令,但那些利用第2切出终止指令判定部判定为切出终止时,将作为其破坏候补选择的指令变更为非破坏指令;输出部,作为破坏候补被选择,并且将没有变更成非破坏指令的指令作为破坏指令,输出至禁止切出装置。
28.如权利要求27的装置,其特征是排列变换装置还包括以下部分第1复原装置,就一个程序部分破坏指令检测装置仅检测破坏指令时,使其定向非循环图形复原至切出寄存在指令寄存装置最后尾的指令的以前状态;第2复原装置,使通过以前切出其指令,对应值受到变更的资源的资源标记复原到切出该指令的以前状态;指令指示装置还若使指令返回定向非循环图形,将在返回的指令上接着给予高优先度的定向非循环图形的打头指令作为对象指示。
29.一种最佳装置,用负载指令定义的值在其之后的指令中作为ALU运算或地址运算的操作次数被参照,因此所产生的流水线处理的延时通过排列变换程序内的指令来应付,其特征在于所述装置包括以下部分定向非循环图形生成装置,对于不包括所述程序中分路的程序部分,生成多个定向非循环图形,定向非循环图形表示以在资源上使值定义的指令为母,以参照其资源值的指令为子的指令间母子关系的家谱;危险信息设定装置,从各定向非循环图形中检出在子指令中作为ALU运算或地址运算的操作数参照由母指令定义值的资源的排列,在各定向非循环图形的其排列母子间设定标记;排列变换装置,排列变换所述程序部分的指令;按以下方式作该排列变换,在定向非循环图形中被作了标记的指令间,插入没有破坏在其指令间作为使用中的资源值的其他定向非循环图形指令.
30.如权利要求29的装置,其特征还包括以下部分授予优先度装置,在定向非循环图形打头的指令内,通过在子孙中包括危险的指令授予高优先度,利用在子孙中不包括危险的指令授予低优先度,所谓子孙指令是这样的指令,沿定向非循环图形内从母到子单向地,通过打头指令可探索定义-参照的直接或间接的母子头系的全部指令;排列变换装置包括以下部分切出装置,当指示在定向非循环图形的打头指令内成为对象的指令时,通过定向非循环图形切出指示了的指令;指令寄存装置,根据切出了的位次将切出的指令寄存在串行中;破坏指令检测装置,从各定向非循环图形的打头检出,破坏在后参照的资源值的指令;带标记的指令检测装置,母指令作为存在于指令寄存装置的串的最后尾的指令,且通过各定向非循环图形的打头检出在与其母间设定标记的指令;禁止切出装置,禁止由破坏指令检测装置检出的指令和由带标记指令检测装置检出的指令的切出;指令指示装置,作为禁止由切出禁止装置,切出的指令以外的打头指令,授予的优先度将最高指令作为对象指示。
31.如权利要求30的装置,其特征是还包括以下部分资源标记存储装置,存储对应各个资源的资源标记,将对应成为使用中的资源的资源标记设定成开启,将对应成为未使用的资源标记设定成关闭,在成为对象的程序部分入口处,反映先行的程序部分的出口状态;更新装置,在将指令寄存在指令寄存装置中情况下,使对应用其指令定义值的资源的资源标记转换成开启,参照资源值在指令寄存装置中寄存的指令中使对应成为最后的资源的资源标记转换成关闭;破坏指令检测装置参照成为打开的资源标记,利用判定是否破坏对应其资源标记的资源值,检出指令。
32.如权利要求31的装置,其特征是,在成为对象的程序部分,在利用以一个指令定义的资源值后续的多个指令使值参照的情况下,定向非循环图形表示将其资源值定义的指令为母,将参照其资源值的多个指令作为子的多对母子关系;在成为对象的程序部分中,,在一个指令中参照以先行的多个指令定义了的值情况下,定向非循环图形表示以参照其资源值的指令为子、以定义其资源值的多个指令为母的多对母子关系;更新装置进一步包括以下部分有无参照判定部,当根据切出装置切出指令时,判定是否在以后参照用切出的指令定义的资源值;第1转换部,在判定为以后被参照时,使对应其定义资源的资源标记由关闭转换成开启;第1母指令检测部,若用由切出装置切出的指令参照的资源成为单数,则检出有关其资源的母指令,若参照的资源为多个,则检出使每个资源定义的母指令;第1子指令检测部若用多个子指令进一步参照用由第1母指令检测部检出了的各个母指令定义的资源,则全部检出那些子指令(检出的子指令有复数、单数2种);第1切出终止指令判定部,若用第1子指令检测部检测与由切出装置切出的指令不同的子指令,则判定那些子指令是否全部切出终止;第2转换部,在没有检出切出的指令以外的子指令时,或虽然检出了与切出的指令不同的子指令,但那些由第1切出终止指令判定部判定为切出终止时,通过切出的指令对应参照值的资源标记从开启转换成关闭。
33.如权利要求32的装置,其特征是,破坏指令检测装置进一步包括以下部分破坏候补选择部,将处于各定向非循环图形的打头的各个指令作为破坏候补选择;定义资源检测部,以作为破坏候补选择的指令定义的定义资源若成为单数,则判定对应定义资源的资源标记是否设定成表示未使用的关闭,若定义的资源为多个,则判定对应那些定义资源的资源标记是否设定成全关闭;第1除外部,若对应于检出的全部定义资源的资源标记为关闭,则使作为其破坏候补选择的指令变更成非破坏指令;第2母指令检测部,对应多个资源的资源标记被设定成开启的情况下,全部检出定义那些资源的母指令;第2子指令检测部,若在多个子指令中进一步参照由通过第2母指令部检出了的各个母指令定义的资源,则全部检出那些子指令;第2切出终止指令判定部,若利用第2子指令检测部检出与破坏候补不同的子指令,则判定那些子指令是否全部切出终止;第2除外部,就有关全部定义资源利用第2子指令检测部没有检出破坏候补以外的子指令时,或虽然检出与破坏候补不同的子指令,但那些利用第2切出终止指令判定部判定为切出终止时,将作为其破坏候补选择的指令变更的非破坏指令;输出部,作为破坏候补被选择,并且将没有变更成非破坏指令的指令作为破坏指令,输出至禁止切出装置。
34.如权利要求33的装置,其特征是排列变换装置还包括以下部分第1复原装置,就一个程序部分破坏指令检测装置仅检测破坏指令时,使其定向非循环图形复原至切出寄存在指令寄存装置最后尾的指令的以前状态;第2复原装置,使通过以前切出其指令,对应值受到变更的资源的资源标记复原到切出该指令的以前状态;指令指示装置还若使指令返回定向非循环图形,将在返回的指令上接着给予高优先度的定向非循环图形的打头指令作为对象指示。
全文摘要
本发明提供一种最优化装置,在图9的步骤S1中,通过由定义参照依存关系DAG的指令节点指定输出候补,将指定了的各DAG指令节点作为输出候补授予步骤S3。在步骤S3,决定哪个应当优先。在步骤S4,确认是否用选择的指令没有定义资源或定义的资源不是使用中,若是那样,则在步骤S5将选择的指令向输出表格缓冲器17输出。在步骤S5输出后,判定其选择的指令节点是否为最后指令节点,若不是那样,则在步骤S7使资源状态信息更新。
文档编号G06F9/45GK1146577SQ9610845
公开日1997年4月2日 申请日期1996年4月27日 优先权日1995年4月27日
发明者小谷谦介, 佐山旬子, 田中旭 申请人:松下电器产业株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1