CN1097226C - 编译程序器 - Google Patents

编译程序器 Download PDF

Info

Publication number
CN1097226C
CN1097226C CN95106164A CN95106164A CN1097226C CN 1097226 C CN1097226 C CN 1097226C CN 95106164 A CN95106164 A CN 95106164A CN 95106164 A CN95106164 A CN 95106164A CN 1097226 C CN1097226 C CN 1097226C
Authority
CN
China
Prior art keywords
variable
instruction
existence
interval
basic block
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
Application number
CN95106164A
Other languages
English (en)
Other versions
CN1118899A (zh
Inventor
田中旭
佐山旬子
汤川博司
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Panasonic Holdings Corp
Original Assignee
Matsushita Electric Industrial Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Publication of CN1118899A publication Critical patent/CN1118899A/zh
Application granted granted Critical
Publication of CN1097226C publication Critical patent/CN1097226C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Debugging And Monitoring (AREA)

Abstract

一种编译程序器,它由语句解析装置、最佳化装置、资源分配装置和编码生成装置构成。最佳化装置包含控制部,控制流解析部,数据流解析部,最佳化处理部和单纯块生成部。资源分配装置包含控制部,生存区间重叠判定部和变量资源分配部。上述生存区间重叠判定部包含控制部,单纯块内、基本块内、基本块间各生存变量集合保持部,生存区间保护部,生存区间生成部和生存区间重叠检查部。该编译程序器可大大减少生存区间重叠检查时间。

Description

编译程序器
本发明涉及将用高级编程序语言书写的源程序编译成机器语言程序的编译程序器。
近年来,正出现用C语言等高级编程序语言记述程序提高程序开发效率的盛况。
若用高级编程序语言,则程序员可用将变量作为操作数的运算(步骤)来表示程序中数值的保持、运算、传送等的处理。该变量可由程序员任意定义,且只需用必要的几个,所以,程序员可自由地记述程序。这种记述的程序(称为源程序)通过编译就成为计算机可理解的机器语言程序。该机器语言程序中的运算是用机器语言指令表示的,而该机器语言指令是取寄存器或存贮器作为操作数的,所以必须将寄存器或存贮器分配给上述变量。这种分配处理称为资源分配处理。如果这种资源分配处理最佳,则上述机器语言指令的代码长度最小,执行时间最短。
另一方面,寄存器与存贮器相比,寄存器作为操作数可谋求机器语言指令长度的最小化和执行时间的最短化。
但由于寄存器可使用的个数少,所以在上述资源分配前,要根据生存区间检查可分配同一寄存器的变量究竞有哪些,通常根据该检查结果进行资源分配。所谓生存区间就是有效存贮各变量值的区间。程序和该程序中使用的变量的生存区间示于图23(a)中。
在该图中,因变量x4和t3的生存区间重叠,可知不能分配于同一寄存器。而变量t1和t3生存区间不重叠,可知能分配于同一寄存器。
下面,用中间语言步骤的集合来表示程序中各变量的生存区间。中间语言步骤,在图23(a)的示例中用S1、S2、S3、S4、S5……表示。而图23(b)的示例表示了中间语言步骤集合中的生存区间。图23(b)的示例表明:变量t1的生存区间仅为中间语言步骤S2,变量X的生存区间却为中间语言步骤S8、S9、S10、S11。
下面,程序中任意2个变量构成中间语言步骤集合的集合积。若该集合积为空,则判定为这2个变量的生存区间不重叠,若不空则判定为重叠。在图23(b)的示例中,变量x和变量x4由于生存区间的集合中没有共同的元素,其集合积为空,判定为非重叠。而变量x4和t3由于生存区间的集合中存在共同元素S4,其集合积的结果不为空。因此,判定为变量x4和t3的生存区间为重叠。
这样,反复算出集合积,如图23(c)所示可判定各变量生存区间的重叠、非重叠。该图表示变量t1与变量P1、P2、P3的生存区间重叠。变量x4也与变量P1、P2、P3生存区间重叠。
如果进行上述重叠检查,就能给寄存器分配更多的变量数目。
但是,按照上述已有技术,存在着检查生存区间重叠所需处理时间较大的问题。
如上所述,变量可由程序员安排作成。因此,多个程序员作成的软件中的变量总数通常为百个左右。加之,中间语言程序生成时,由编译程序器自动生成变量,其结果,成为重叠检查对象的变量总数可达数百个。
变量生存区间的重叠检查是通过算出集合积进行的,n个变量时,这种集合积的计算次数是nC2=n(n-1)/2次,当个数n为数百个时,集合积的计算次数变得非常大。例如,变量个数n为100时,则nC2=4950,编译程序器对上述集合积要计算4950次。个数n为300时,nC2=44850,则编译程序要进行44850次的集合积的计算。
本发明解决上述问题,其目的在于提供一种能够大大减少生存区间重叠检查所需处理时间的编译程序器。
为实现上述目的,本发明第一方面的编译程序器是一种将多个指令构成的程序翻译成机器语言程序的编译程序器,其特征在于,它备有:
检测上述程序中转移指令和该转移指令的转移目的处指令的转移检测装置;
根据转移检测装置已检测的指令将上述程序分割成基本块的分割装置;
就程序中各变量检测作为其设定值有效的程序中区间的生存区间、并用表示包含在生存区间内的指令位置的位置信息的集合来表示检测结果的生存区间检测装置;
检测生存区间检测装置检测的生存区间收容于一个基本块内的全部变量、并用对应于该基本块的基本块内生存变量集合表示检测结果的基本块内生存变量检测装置;
检测生存区间检测装置检测的生存区间存在于多个基本块间的全部变量、并用基本块间生存变量集合表示检测结果的基本块间生存变量检测装置;
从基本块间生存变量集合每次各取2个变量、算出对应于该2个变量的生存区间的指令位置信息集合的集合积、用以判断生存区间的重叠的第1生存区间重叠判定装置;
从对应于同一基本块的基本块内生存变量集合每次各取2个变量、算出对应于该2变量的生存区间的指令位置信息集合的集合积、用以判断生存区间的重叠的第2生存区间重叠判定装置;
从对应于上述基本块的基本块内生存变量集合和基本块间生存变量每次各取出一个变量、算出对应于该2变量的生存区间的指令位置信息集合的集合积、用以判断生存区间的重叠的第3生存区间重叠判定装置;
用上述第1、2、3的生存区间重叠判定装置的判定结果进行资源分配。
本发明第二方面的编译程序器,其特征在于,进一步备有:
将设定变量值的指令的定义指令和使用该定义指令所设定的变量值的指令的参照指令至少排列成一组组依序的指令列的单纯块形成于基本块内的单纯块形成装置;
从上述基本块内生存变量集合检测生存区间收容于一个单纯块内的全部变量、并用对应于该单纯块的单纯块内生存变量集合表示检测结果的单纯块内生存变量检测装置;
从上述基本块内生存变量集合检测生存区间存在于多个单纯块间的变量、并用单纯块间生存变量集合表示检测结果的单纯块间生存变量检测装置;
上述第2生存区间重叠判定装置备有:
从上述单纯块间生存变量集合每次取出2个变量、并计算出对应于该2个变量的生存区间的指令位置信息集合的集合积、用以判断生存区间的重叠的第1生存区间重叠判定部;
从对应于同一单纯块的单纯块内变量集合每次取出2个变量、计算出对应于该2个变量的生存区间的指令位置信息集合的集合积、用以判定生存区间重叠的第2生存区间重叠判定部;
从对应于上述单纯块的单纯块内变量集合和单纯块间生存变量集合每次各取出一个变量、计算出对应于该2个变量的生存区间的指令位置信息集合的集合积、用以判断生存区间重叠的第3生存区间重叠判定部。
本发明第三方面的编译程序器,其特征在于,所述第3生存区间重叠判定装置备有:
从基本块间生存变量集合和对应于所述单纯块的单纯块内生存变量集合每次各取出一个变量、算出对应于该2个变量的指令位置集合的集合积、以此判断生存区间重叠的第4生存区间重叠判定部;
从基本块间生存变量集合和单纯块间生存变量集合每次各取出一个变量、算出对应于该2个变量生存区间的指令位置集合的集合积、用以判断生存区间重叠的第5生存区间重叠判定部。
本发明第四方面的编译程序器,其特征在于,所述单纯块形成装置备有:
从基本块中每次取出1个定义指令的定义指令取出装置;
从包含有定义指令取出装置取出的定义指令的基本块,检测对应于该定义指令的参照指令的对应参照指令检测装置;
判定对应于参照指令的定义指令能否移动到对应参照指令检测装置检测的该参照指令的位置上的定义指令移动可否判定装置;
定义指令移动可否判定装置判定可移动时、将定义指令移动可否判定装置判定为可移动的定义指令移动至对应该定义指令的参照指令前、并将该定义指令及参照指令归入一个单纯块的定义指令移动装置;
移动前若定义指令移动装置移动的定义指令是单纯块内的最后指令时,将移动前的单纯块的全部剩余指令移动到该定义指令移动前的前面,并将所移动的剩余指令归入移动前的单纯块的单纯块剩余指令移动装置;
本发明第五方面的编译程序器,其特征在于,上述定义指令移动可否判定装置包含:
判定上述定义指令取出装置取出的定义指令确定的值所设定的变量是否为一个的变量单复数判定部;
在上述变量单复数判定部判定为一个变量情况下、判定上述对应参照指令检测装置检测的参照指令是否为一个的参照指令单复数判定部;
在上述参照指令单复数判定部判定为一个参照指令情况下,用对应于该参照指令的定义指令判定设定值的变量在从该定义指令至该参照指令区间是否被再设定的第1再设定有无判定部;
在上述第1再设定有无判定部判定没有再设定情况下、检测该定义指令中使用的变量的定义指令内使用变量检测部;
判定上述定义指令内使用变量检测部检测出的变量在该定义指令至该参照指令间不被再设定的第2再设定有无判定部;
上述第2再设定有无判定部判定为没有再设定时,判定该定义指令可否移动到该参照指令位置上的移动可否判定部。
本发明第六方面的编译程序器,其特征在于,可进一步备有:对应上述程序中的各基本块和该基本块入口中有效的变量及出口中有效变量进行存贮的有效变量信息存贮装置,
上述生存区间检测装置备有:
从上述程序每次取一个定义指令的定义指令取出部;
检测包含上述定义指令取出部取出的定义指令的基本块和由该定义指令设定的变量、根据上述有效变量信息存贮装置的存贮内容判定所检测变量的设定值在该基本块出口处是否无效的出口无效判定部;
在上述出口无效判定部判定设定值无效情况下,从该基本块检测作为对应于该定义指令的参照指令且最靠近该基本块出口的出口最近参照指令检测部;
检测从该定义指令的下一个指令开始至出口最近参照指令检测部检测到的参照指令为止的全部指令位置信息的基本块内指令位置检测部;
用基本块内指令位置检测部检测出的指令位置信息的集合表示检测指令位置信息的变量的生存区间的基本块内生存区间表示部,
所述基本块内生存变量检测装置把上述基本块内生存区间表示部表示生存区间的变量作为对应于包含该变量的基本块的基本块内生存变量集合的元素。
本发明第七方面的编译程序器,其特征在于,进一步包含相对应地存贮基本块和该基本块中设定的变量的基本块内定义信息存贮装置,
所述生存区间检测装置备有:
在上述出口无效判定部判定有效情况下,根据上述基本块内定义信息存贮装置的存贮内容,判定由上述出口无效判定部判定为有效的定义指令中所设定的变量在从该定义命令至包含该定义命令的基本块的出口之间是否被再设定的再设定有无判定部;
在上述再设定值有无判定部判定无再设定情况下,检测从该定义指令的下一个指令至该基本块的出口的指令位置信息的出口有效时位置信息检测部;
在上述再设定有无判定部判定无再设定情况下,根据上述有效变量信息存贮装置和基本块内定义信息存贮装置的存贮内容,在包含该定义指令的基本块的下一个基本块内检测该变量在其入口和出口有效且在其内部该变量没被再设定的全部情况的生存基本块检测部;
根据上述基本块定义信息存贮装置的存贮内容、检测包含在上述生存基本块检测部所检测的基本块内的全部指令位置信息的基本块间位置信息检测部;
上述再设定有无判定部判定无再设定情况下,检测包含该定义指令的基本块的下一个基本块内该变量在其入口有效,在其出口无效的基本块的末尾基本块检测部;
从上述末尾基本块检测部检测的基本块检测对应于该定义指令的最后的参照指令的末尾参照指令检测部;
检测从上述末尾基本块检测部检测的基本块的入口至上述末尾参照指令检测部检测的参照指令的全部位置信息的入口有效时位置信息检测部;
用出口有效时位置信息检测装置的检测结果、入口有效时位置信息检测装置的检测结果、和基本块间位置信息检测装置的检测结果组合在一起的集合表示对应于上述再设定有无判定部判定为无再设定的变量的生存区间的集合的基本块间生存区间表示部,
上述基本块间生存变量检测装置将上述再设定有无判定部判定为无再设定的变量作为基本块间生存变量集合的元素。
本发明第八方面的编译程序器,其特征在于,它进一步备有对应地存贮程序中各指令位置、该指令位置的指令中使用的变量和设定该变量指令的指令位置信息的参照—定义信息存贮装置,
所述生存区间检测装置备有:
对上述定义指令取出部取出的定义指令的位置标以识别信息的标记部;
检测对应于上述定义指令取出部取出的定义指令的参照指令所使用的变量的参照变量检测部;
根据参照—定义信息存贮装置的存贮内容、检测对上述参照变量检测部所检测出的变量进行设定设定值的全部定义指令的定义指令检测部;
在上述定义指令检测部检测出的定义指令内检测没有上述标记部所标识的识别信息的无标记定义指令检测部;
检测从上述无标记定义指令检测部检测出的定义指令的下面指令至包含该定义指令的基本块的出口为止的全部指令位置信息的第1分支块内位置信息检测部;
将上述第1分支块内位置信息检测部检测出的指令位置信息添加给上述基本块间生存区间表示部表示的指令位置信息的集合的第1指令位置信息添加部。
本发明第九方面的编译程序器,其特征在于,它进一步备有对应地存贮程序中各指令位置、在该指令位置的指令中设定的变量和使用该变量的指令的指令位置信息的定义—参照信息存贮装置,
所述生存区间检测装置备有:
根据上述定义—参照信息存贮装置的存贮内容、检测对应于上述无标记定义指令检测部检测出的定义指令的参照指令的分支块内参照指令检测部;
检测包含由上述分支块内参照指令检测部检测出的参照指令的基本块的分支块检测部;
检测从上述分支块检测部检测出的基本块入口至上述分支块内参照指令检测部检测出的参照指令为止的全部指令位置信息的第2分支块内位置信息检测部;
将上述第2分支块内位置信息检测部检测出的指令位置信息添加给上述基本块间生存区间表示部表示的指令位置信息的集合的第2指令位置信息添加部。
按照本发明第一方面的编译程序器,它借助于转移检测装置检测上述程序中的转移指令和该转移指令的转移目的处的指令。若转移检测装置进行检测时,则根据转移检测装置检测出的指令,由分割装置将上述程序分割成基本块。分割后,就程序中各变量,用生存区间检测装置检测,作为变量设定值有效的程序中区间的生存区间,并用表示包含在生成区间内的指令位置的指令位置信息的集合表示该检测结果。检测后,借助于基本块内生存变量检测装置,检测由生存区间检测装置所检测的生存区间收容于一个基本块内的全部变量,并用对应于该基本块的基本块内生存变量集合表示这种检测结果。再有用基本块间生存变量检测装置检测上述生存区间存在于多个基本块间的全部变量,并用基本块间生存变量集合表示该检测结果。
检测后,借助于第1生存区间重叠判定装置从基本块间生存变量集合中每次取出两个变量,并计算对应于该2个变量的生存区间的指令位置信息集合的集合积,以判定生存区间的重叠。又借助于对应于同一基本块的基本块内生存变量集合和第2生存区间重叠判定装置每次取2个变量,并算出对应于该2个变量的生存区间的指令位置信息集合的集合积,用以判定生存区间的重叠。进而借助于第3生存区间重叠判定装置,从对应于上述基本块的基本块内生存变量集合和基本块间生存变量每次各取1个变量,并算出对应于该2变量的生存区间的指令位置信息集合的集合积,用以判定生存区间的重叠。程序中的变量的生存区间的重叠判定通过以上判定处理就全部完成。在以上判定处理中,对于仅收容于基本块内的生存区间的变量,可省去属于不同基本块内的相互间的重叠判定处理。上述判定处理结束后,用第1、2、3的生存区间重叠判定装置的判定结果进行资源分配。
按照本发明第二方面的编译程序器,
通过单纯块形成装置,将设定变量值指令的定义指令和应用该定义指令所设定的变量值的参照指令至少依序排列成一组指令列的单纯块形成在基本块内。由于单纯块是依序排列的定义指令和参照指令的指令列,所以用该定义指令定义的变量生存区间最短。因为在程序员所作的源程序和中间语言程序中限于一次设定和使用的变量占大多数,所以程序中大多数变量被纳入上述单纯块内。
单纯块形成后,用检测单纯块内生存变量检测装置,从上述基本块内生存变量集合,检测生存区间收容于一个单纯块内的全部变量,用对应于该单纯块的单纯块内生存变量集合表示检测结果。又,通过单纯块间生存变量检测装置,从上述基本块内生存变量集合检测生存区间到达多个单纯块间的全部变量,并用单纯块间生存变量集合表示检测结果。
生成单纯块内和单纯块间生存变量集合后,用第1生存区间重叠判定部从上述单纯块间生存变量集合每次取2个变量,算出对应于该2变量的指令位置信息集合的集合积,用以判定生存区间的重叠。又,用第2生存区间重叠判定部从对应于同一单纯块的单纯块内变量集合每次各取2个变量,算出对应于该2变量的生存区间的指令位置信息集合的集合积,用以判定生存区间的重叠。变量的生存区间,在单纯块中最短,所以上述集合积的计算变得简单。进而用第3生存区间重叠判定部从对应于上述单纯块的单纯块内变量集合和单纯块间生存变量集合,每次各取出一个变量,计算对应于该2变量的生存区间的指令位置信息集合的集合积,用以判定生存区间的重叠。
按照本发明第三方面的编译程序器,
用第4生存区间重叠判定部从基本块间生存变量集合和对应于上述单纯块的单纯块内生存变量集合,每次各取一个变量,计算对应于该2变量的生存区间的指令位置集合的集合积,用以判定生存区间的重叠。又,用第5生存区间重叠判定部从基本块间生存变量集合和单纯块间生存变量集合,每次各取出1个变量,算出对应于该2变量的生存区间的指令位置集合的集合积,用以判定生存区间的重叠。
按照本发明第四方面的编译程序器,
上述单纯块形成装置是用定义指令取出装置从基本块每次各取1个定义指令。再通过对应参照指令检测装置,从包含定义指令取出装置所取出的定义指令的基本块中检测对应于定义指令取出装置已取出的定义指令的参照指令。检测后,用定义指令移动可否判定装置判定对应参照指令检测装置进行检测的定义指令是否可移至对应参照指令检测装置检测到的参照指令的位置上。定义指令移动可否判定装置在该判定中判定为可以时,则定义指令移动装置将定义指令移动可否判定装置判定为可以的定义指令移动到紧靠对应于该定义指令的参照指令之前,并且该定义指令及参照指令归入一个单纯块中。移动前,若定义指令移动装置所移动的定义指令是单纯块内最后的指令情况下,则用单纯块剩余指令移动装置将移动前的单纯块的剩余指令全部移至紧靠该定义指令移动目的处之前,再将移动后的剩余指令归入移动目的处的单纯块中。
按照本发明第五方面的编译程序器,
用变量单复数判定部判定由上述定义指令取出装置取出的定义指令确定的值所设定的变量是否为一个。上述变量单复数判定部判定为一个情况下,第1再设定有无判定部判定用对应于该参照指令的定义指令设定其值的变量,在从该定义指令至该参照指令的区间中是否再被设定。若上述第1再设定有无判定部判定为没有再设定,则由定义指令内使用变量检测部检测该定义指令内所使用的变量。由第2再设定有无判定部判定从该定义指令到该参照指令之间上述定义指令内使用变量检测部检测出的变量没有再设定的情况。当上述第2再设定有无判定部判定为没有再设定时,用移动可否判定部判定该定义指令能移至该参照指令位置上的情况。
按照本发明第六方面的编译程序器,
上述定义指令取出部每次从上述程序各取出一个定义指令。出口无效判定部检测包含所取出的定义指令的基本块和该定义指令设定的变量,并根据上述有效变量信息存贮装置的存贮内容判定被检测变量的设定值在该基本块的出口是否无效。上述出口无效判定部判定为设定值无效情况下,出口最近参照指令检测部从该基本块检测对应于该定义指令的参照指令,且最靠近该基本块出口的情况。参照指令检测后,用基本块内指令位置检测部检测从该定义指令的下一个指令至出口最近参照指令检测部所检测到的参照指令为止的全部指令位置信息。指令位置信息检测后,基本块内生存区间表示部用基本块内指令位置检测部所检测出的指令位置信息的集合来表示检测出指令位置信息变量的生存区间。另一方面,上述基本块内生存变量检测装置将上述基本块内生存区间表示部表示的生存区间的变量加给对应于包含该变量的基本块的基本块内生存变量集合的元素中。
按照本发明第七方面的编译程序器,
在上述出口无效判定部判定为有效情况下,再设定有无判定部根据上述基本块内定义信息存贮装置的存贮内容,判定上述出口无效判定部判定为有效的定义指令中所设定的变量,从该定义指令至包含该定义指令的基本块的出口之间是否再被设定。上述再设定有无判定部判定为没有再设定时,出口有效时位置信息检测部检测从该定义指令的下一个指令至该基本块出口的指令位置信息,上述再设定有无判定部判定为没有再设定情况下,生存基本块检测部根据上述有效变量信息存贮装置和基本块内定义信息存贮装置的存贮内容,检测包含该定义指令的基本块下面顺次的基本块内,该变量在其入口及出口为有效、且在其内部该变量没有再设定的全部情况。基本块间位置信息检测部根据上述基本块内定义信息存贮装置的存贮内容检测包含在上述生存基本块检测部检测出的基本块内的全部指令位置信息。
上述再设定有无判定部判定为无再设定情况下,末尾基本块检测部检测包含该定义指令的基本块下面顺次的基本块内,该变量的值在其入口有效、在其出口无效的基本块。基本块检测后,末尾参照指令检测部从上述末尾基本块检测部所检测出的基本块检测对应于该定义指令的参照指令。参照指令检测后,入口有效时位置信息检测部检测从上述末尾基本块检测部检测出的基本块的入口至上述末尾参照指令检测部检测出的参照指令为止的全部指令位置信息。指令位置信息检测后,基本块间生存区间表示部,用组合出口有效时位置信息检测装置的检测结果、入口有效时位置信息检测装置的检测结果、和基本块间位置信息检测装置的检测结果的集合,表示对应于指令位置信息检测出的变量的生存区间。
另一方面,上述基本块间生存变量检测装置将再设定有无判定部判定为无再设定的变量加入至基本块间生存变量集合的元素中。
按照本发明第八方面的编译程序器,
标记部将识别信息加给上述定义指令取出部取出的定义指令的位置上。标记部加标记后,参照变量检测部检测对应于该定义指令的参照指令所用的变量。变量检测后,根据参照—定义信息存贮装置的存贮内容,定义指令检测部检测在上述参照变量检测部检测出的变量上设定设定值的全部定义指令。定义指令检测后,无标记定义指令检测部检测上述定义指令检测部检测出的定义指令中上述标记部未加识别信息的所有定义指令。无识别信息的定义指令检测后,第1分支块内位置信息检测部检测从上述无标记定义指令检测部检测出的定义指令的下—个指令至包含该定义指令的基本块的出口为止的所有指令位置信息。指令位置信息检测后,第1指令位置信息附加部将上述第1分支块内位置信息检测部检测出的指令位置信息附加到基本块间生存区间表示部表示的指令位置信息的集合中。
按照本发明第九方面的编译程序器,
分支块内参照指令检测部根据上述定义—参照信息存贮装置存贮的内容检测对应于上述无标记定义指令检测部检测出的定义指令的参照指令。参照指令检测后,分支块检测部检测包含上述分支块内参照指令检测部检测出的参照指令的基本块。参照指令检测后,第2分支块内位置信息检测部检测从上述分支块检测部检测出的基本块的入口至上述分支块内参照指令检测部检测出的参照指令为止的全部指令位置信息。指令位置信息检测后,第2指令位置信息附加部将上述第2分支块内位置信息检测部检测出的指令位置信息附加到上述基本块间生存区间表示部表示的指令位置信息的集合中。
下面结合附图说明本发明编译程序器的一实施例。
图1为本发明编译程序器的结构图;
图2为最佳化装置2的结构图;
图3为单纯块生成处理的流程图;
图4为单纯块生成过程图;
图5为资源分配装置3的结构图;
图6为生存区间重叠判定部9的结构图;
图7为生存区间生成处理的流程图;
图8为每个定义的生存区间检测处理的流程图;
图9为后续块检索处理的流程图;
图10为后续块生存区间检测处理的流程图;
图11为生存区间重叠检查处理的流程图;
图12为生存区间重叠检查处理的处理过程图;
图13为用于说明基本块的说明图;
图14为源程序的一例;
图15为中间语言程序的一例;
图16为被基本块化的中间语言程序的一例;
图17为数据流信息、定义一参照信息、参照—定义信息的一例;
图18为中间语言程序中的、各变量的生存区间的图示;
图19为单纯块生成的过程图;
图20为单纯块生存后各变量的生存区间图;
图21为图示说明生存区间保持部11、单纯块内生存变量集合保持部12、基本块内生存变量保持部13、基本块间生存变量集合保持部14的保持内容的一例;
图22表示生存区间重叠检查的检查结果;
图23为生存区间及生存区间的重叠检查的检查结果图。
先说明该说明书中引用的如下用语。
·基本块
是程序中的连续指令列,是指列中无转移也无转移至该列中的指令列。图16表示了这种基本块的一例。该实施例中处理对象为中间语言程序,所以上述指令列给出中间语言部分。
再有,参照图13说明判断处理或多方向分支处理内的基本块。
如图13(a)所示,基本块是指列中无转移且无转移至列中的指令列,所以,在C语言风格的if(p)语句表达的判断处理中,选择执行的处理S1、S2各自形成一个基本块B1、B2。这样,把相当于处理S1、S2的基本块B1、B2称为分支基本块。
再有如图13(b)所示,在C语言用Switch(p)语句表达的多方向分支处理中,选择执行的处理S1、S2、S3、S4……各自形成一个基本块B1、B2、B3、B4……。
又,程序中的一个语句或中间代码指令等的中间语言程序的一个执行单位称为中间语言步骤。
·变量的定义、参照
给某个变量设定值的中间语言步骤称为该变量的定义,使用所定义值的中间语言步骤称为变量的参照。反之,将给变量设定值称为定义变量。而把使用变量值称为参照变量。
·关于生存变量的信息
不管是源程序、中间语言程序,都把程序中的步骤的间隙称为点,当该点中存贮变量的值有效时,则在该点中生成该变量。再有在基本块B的入口点上生成的变量集合表示为LiveIn〔B〕,在基本块B的出口点上生成的变量集合表示为Live Out〔B〕。而用Def〔B〕表示基本块B内有定义的变量集合。且在求取与生存变量有关信息的过程中获得该变量集合Def〔B〕。图16所示程序例中的集合LiveIn〔B〕、集合Live Out〔B〕示于图17(a)中。在该图中,基本块B1的入口中生成的变量判定为“P1、P2、P3”,出口中生成的变量表示为“Z1,a,b”。
·定义—参照信息,参照—定义信息
所谓定义—参照信息是表示何处使用由定义所设定的设定值的信息,图17(b)表示其一例(通过参照使用定义所设定的设定值认为是定义到达参照)。在图17(b)的一例中,中间语言步骤S1定义的变量t1认为是在中间语言步骤S2中被参照。
所谓参照—定义信息,是表示参照使用的设定值在何处被定义的信息,图17(c)表示其一例。该图中,中间语言步骤S2中被参照的变量是变量t1、t3,它们中的一个在中间语言步骤S1中被定义。
·关于变量的注意
变量中,有些变量具有多个生存区间。这种情况下,每个生存区间可分配不同的寄存器,且这样做使目标程序更好。因此在具有多个生存区间的情况下,设定每个生存区间存在一个变量。参照图13(c)说明这种情况。在图13(c)中,用:“x=10”定义的变量x,在“y=x+5”中被参照,用“x=10”定义的变量x的生存区间为图中的L5。另一方面,用“x=20”定义的变量x,在“y=x+30”中被参照,所以用“x=20”定义的变量x的生存区间为图中的L6。
另一方面,在图13(d)中,用“x=40”定义的变量x一直未参照,用“x=30”再定义,所以用“x=40”定义的变量x的生存区间不存在。即判定为“x=40”定义的变量x未生存。由于用“x=30”定义的变量x在“y=x+50”中被参照,所以“x=30”定义的变量x的生存区间为图中的L7。
·关于生存区间的注意
生存区间,用基本块的集合、中间语言步骤的集合来表示。在本实施例中,由于需要详细信息,所以用后者来表示。为了用集合积判定生存区间的重叠、非重叠,所以在生存区间始终一致的中间语言步骤中,设定生存区间不重叠。因此,在用步骤集合表示变量生存区间的情况下,定义步骤不包含在该集合中。
以上关于变量及生存区间的信息、定义—参照信息、参照—定义信息在下面文献中有详细记载。
Addison Wesley,1988年出版的由A.Aho,R.Sethi,J.Ulman等人著“编译原理,技术和工具”。
下面结合附图说明本发明生存区间重叠检查装置的一实施例。图1为本发明第1实施例中的编译程序器的结构图。编译程序器由语句解析装置1、最佳化装置2、资源分配装置3、编码生成装置4构成。
语句解析装置1对作为文件而存贮的源程序进行词句、语法和含义解析。解析结果作为中间语言程序输出。图14表示源程序的一例,对应于该源程序的中间语言程序的一例示于图15。
最佳化装置2对中间语言程序进行最佳化以达到缩小最终生成的机器语言程序的程序长度、缩短执行时间的目的。
资源分配装置3,求得程序变量的生存区间,并将作为资源的寄存器或存贮器分配给每个生成区间的变量。
编码生成装置4,根据资源分配装置3的分配结果,将最佳化的中间语言程序变换成目标机的机器语言指令,作为目标程序输出。
图2为图1所示最佳化装置2的结构图。该最佳化装置2的详细结构不是本发明的主要点,所以省略其说明。这里仅说明其与本发明编译程序器特别有关的部分。最佳化装置2由控制流解析部5、数据流解析部6、最佳化处理部7、和单纯块生成部8构成。
在控制流解析部5及数据流解析部6中进行基本块化、控制流分析、数据流分析等作业。所谓基本块化就是将处理对象的程序分配给作为以后处理单位的基本块。关于图15所示的中间语言程序的基本块示于图16。所谓控制流分析就是对各基本块间的控制流进行分析。而数据流分析是指检查各基本块内部,分析各个变量在何处定义、是否要在什么地方被参照。通过上述这些处理,获得数据信息、定义—参照信息、和参照—定义信息。作为以上3个信息的例子图示于图17(a)(b)(c)中。该例对应于图16所示的中间语言程序。图17(a)所示数据流信息中,表示在基本块B1的入口处生成变量P1、P2和P3,而在基本块B1的出口处生成变量z、a和b。图17(b)表示中间语言步骤S1所定义的变量t1在中间语言步骤S2中被参照。图17(c)的参照—定义信息表示中间语言步骤S2中被参照的变量t1、t3是在中间语言步骤S1中被定义的。
最佳化处理部7用控制流解析部5及数据流解析部8的处理结果对中间语言程序进行最佳化。这部分并非本发明的要点,所以省略其说明。
单纯块生成部8将基本块分割成多个小块,分割后判定小块们能否综合,并对该判定中判定为能综合的那些小块进行综合形成至少一组依序排列的定义和参照的步骤列。单纯块生成部8借助于这种综合处理使基本块内的生存区间的重叠进一步单纯化。经过上述综合处理,最终形成的小块称为单纯块。单纯块生成前的生存区间的重叠图示于图18中,而生成后的生存区间的重叠图示于图20中。图20和图18比较生成区间的重叠情况,图20更单纯,生存区间的重叠数下降,其结果是在资源分配部中也可少用必要的寄存器数量。
下面结合图3的流程图、图4的说明图来说明单纯块生成部8的处理过程。图3是表示生成单纯块过程的流程图,图4是图示表示图3流程图各步骤中处理的说明图。
在步骤A1中,单纯块生成部8将基本块内各中间语言步骤作成一个小块。对于图18所示的程序的基本块B1,一旦进行上述处理则形成图19(a)所示情况。在图19(a)中,中间语言步骤S1构成小块PB1。中间语言步骤S2构成小块PB2。同样,中间语言步骤S3、S4、S5……构成小块PB3、PB4、PB5……。
在步骤A2中,单纯块生成部8如图4(a)箭符b11、12、13表示小块那样,依次执行逐个取出小块。
步骤A3中,单纯块生成部8判定所取出的小块b1是不是基本块内的最后一块,若是则结束处理。否则进行步骤A4。
在步骤A4中,单纯块生成部8取出小块b1最后的中间语言步骤S1。
步骤A5中,单纯块生成部8如图4(b)所示,对所取的中间语言步骤S1定义的变量V是一个还是多个进行判定,若多个进行步骤A2。否则进行步骤A6。
步骤A6中,单纯块生成部8如图4(c)所示,判定变量V的参照是否存在于基本块内,也即判定变量生存区间的长度是否涉及到其它基本块。若达到则进行步骤A2,未达到则进行步骤A7。
在步骤A7中,如图4(d)所示,判定该变量V的参照是否限于一次。该判定在根据定义—参照信息检查变量V的参照次数时进行。若为多次,进行步骤A2,若一次则进行步骤A8。
步骤A8中,单纯块生成部8如图4(e)所示,判定变量V从定义S1至其参照为止是否再被定义。若再定义进行步骤A2,否则进行步骤A9。
步骤A9中,单纯块生成部8如图4(f)所示,判定变量V依存的变量VX,即小块b1内被参照的变量,从定义S1至变量V参照为止是否再被定义。再定义时进行步骤A2,否则进行步骤A10。这里所谓依存变量是指会影响到该变量设定值的所有变量。如上所述,由于参照和定义依序排列的步骤列构成小块b1,所以小块b1包含着变量V依存的全部变量。例如,图19(d)的小块PB7中所示变量X的设定值由于受变量X4、t1、P3、P1、P2设定值的影响,所以变量X依存于变量X4、t1、P3、P1、P2。若依存变量的定义,即变X4、t1、P3、P1、P2的定义存在于从变量X的定义至参照的区间,则将变量X的定义指令移动到参照指令的位置会损害上述依存关系。考虑到这种依存关系的损失,单纯块生成部8对可移动、不可移动进行判定。
在步骤A10、A11、A12中,单纯块生成部8提取小块b1,并将提取的小块b1插入变量V参照(中间语言步骤S2)所属的小块b2的前面。或将小块b1插入步骤S2的前面也可以。用这种提取和插入处理将小块b1和b2综合到一个小块中。这样的综合处理后,单纯块生成部8删除小块b1。在图19(a)所示的一例中,小块PB1被提取后插入小块PB2的前面,图19(a)所示的小块PB1、PB2被综合于小块PB2(参照箭头线g12)。其结果如图19(b)所示,小块PB2使中间语言步骤S1、S2作为元素被包含。进而提取小块PB2并插入到小块PB7的前面,这样图19(b)所示的小块PB2、PB7被综合于小块PB7中(参看箭头线g27),其结果,如图19(c)所示,小块PB7将中间语言步骤S1、S2、S7包含到组成中。同样,如箭头线g38所示,小块PB3和PB4被综合于PB8,再有如箭头线g59所示,小块PB5和PB6被综合于PB9,因此,中间语言步骤S3、S4、S8作为元素包含于小块PB8;中间语言步骤S5、S6、S9作为元素包含于小块PB9。通过上述综合,小块PB7、PB8、PB9成为单纯块。
如图4(a)的箭符b11、b12所示,单纯块生成部8对剩余小块反复进行以上步骤A1、A12的过程。在这些单纯块中,其内部中间语言步骤从开始至结束步骤前为止,变量的参照仅构成一次。且该变量进行参照的中间语言步骤与变量进行定义的中间语言步骤在同一单纯块中。
图5是图1所示资源分配装置3的结构框图。
生存区间重叠判定部9生成生存区间并检测该生存区间的重叠。
变量资源分配部10使用生存区间重叠判定部9求得的生存区间的信息,将作为资源的寄存器或存贮器分配给变量。此时,对于生存区间重叠的变量将不同的寄存器分配给变量。
图6是图5中的生成区间重叠判定部9的结构图。生存区间重叠判定部9由生存区间保持部11、单纯块内生存变量集合保持部12、基本块内生存变量集合保持部13、基本块间生存变量集合保持部14、生存区间生成部15、和生存区间重叠检查部16构成。
生存区间保持部11对应于变量,保持中间语言步骤表示的生存区间。图21(a)表示生存区间保持部11的对应于各变量是在哪个单纯块内进而是在哪个基本块内的保持内容的一例。它对应于图20所示的程序例。参见该图,很明显,变量t1的生存区间仅在中间语言步骤S2中,且变量t1属于单纯块PB7和基本块B1。
单纯块内生存变量集合保持部12对应于该单纯块保持生存区间仅存在于该单纯块内的变量。这样,将生存区间仅存在于该单纯块内的变量称为单纯块内变量集合。图21(b)表示单纯块内生存变量集合保持部12的保持内容的一例。该图也对应于图20所示的程序例。参见该图可知,单纯块PB7包含变量t1和X4。
基本块内生存变量集合保持部13对应于该基本块,并保持生存区间仅存在于基本块内的变量且其生存区间涉及多个单纯块间的变量。该基本块内生存变量集合保持部13保持的变量的集合称之为基本块内变量集合。图21(c)表示基本块内生存变量集合保持部13的保持内容的一例。该图也对应于图20中所示程序例。参看本图,可见单纯块B1的基本块内变量集合包含变量X和变量y。
基本块间生存变量集合保持部14保持变量中生存区间涉及多个基本块间的变量的集合。基本块间生存变量集合保持部14保持的变量的集合称之为基本块间变量集合。图21(d)表示基本块间生存变量集合保持部14的保持内容的一例。该图也对应于图20所示程序例。参照该图,可见变量z、a、b其生存区间跨越多个基本块间。
生存区间生成部15用中间语言步骤的集合表示变量的生存区间,按照该生存区间的范围将变量分成3种集合。生存区间生成部15的处理大致分为生存区间生成处理、定义每个生存区间检测处理、及后续块生存区间检测处理,且上述3种集合为先前所述的单纯块内变量集合、基本块内变量集合、和基本块间生存变量集合。这种分类是将变量的存贮目的处转换为单纯块内生存变量集合保持部12、基本块内生存变量集合保持部13、和基本块间生存变量集合保持部14而进行的。
参照图7、8、9和10的流程图说明生存区间生成部15的处理过程。
图7为生存区间生成处理的流程图;图8为定义每个生存区间检测处理的流程图;图9为后续块搜索处理的流程图;图10为后续块生存区间检测处理的流程图。
在图7的步骤B1中,生存区间生成部15判定是否存在未处理的定义。借助加给定义的标记判别处理结束还是未处理。当存在未处理的定义时进行步骤B2,否则结束处理。
在步骤B2、B3、B4、B5中,生存区间生成部15首先将全部基本块作为未探索,取出未标记的定义S1,对定义S1加上标记,进行定义每个生存区间检测处理。
重复以上的步骤B1、B2、B3、B4、B5的处理,直至所有中间语言步骤被标记为止。
在图8所示步骤C2中,生存区间生成部15判定由中间语言步骤S所定义的变量V在基本块B的出口处是否生存,即变量V是否属于Live Out〔B〕,若生存则进行步骤C18,不生存进行步骤C3-C7。
在步骤C18中,生存区间生成部15判定从定义S的下一个的中间语言步骤至B的最后的中间语言步骤是否存在定义S以外的变量V的定义。若不存在则进行步骤C8-C16,若存在则进行步骤C3-C7。
在步骤C3、C4中,生存区间生存部15从基本块B的出口向入口的方向进行搜索,寻找变量V的参照S1。该搜索工作参照定义S的定义—参照信息进行。一旦找到参照S1,则生存区间生存部15将把从定义S的下一个的中间语步骤至参照S1为止的中间语言步骤作为变量V的生存区间存贮在生存区间保持部11中。
在步骤C5、C6、C7中,生存区间生成部15判定定义S所属的单纯块Pb和参照S1所属的单纯块是否相同,若相同(步骤C5),则生存区间生成部15将定义S存入单纯块内生存变量集合保持部12中(步骤C6),若不同,即定义S所属单纯块Pb和参照S1所属单纯块不同情况下(步骤C5),则变量V存入基本块内生存变量集合保持部13中(步骤C7),然后进入步骤C17。
在步骤C8、C9中,生存区间生成部15将变量V存入基本块间生存变量集合保持部14中(步骤C8),并将从定义S的下一个的中间语言步骤至基本块B的最后的中间语言步骤作为变量V的生存区间存入生存区间保持部11(步骤C9)。但是,定义S自身为基本块B的最后的中间语言步骤时,则什么也不存入生存区间保持部11中。
步骤C10中,生存区间生成部15依次执行取出基本块B下面的块(后续基本块),参照该后续基本块B1的Live In〔B1〕,并确认:后续基本块B1未搜索,且在其入口生存变量V。确认后,将定义S及基本块B1作为处理对象,进行后续搜索处理。
图9是后续块搜索处理的流程图。
在步骤F1、F2、F3、F4、F5中,生存区间生成部15判定变量V是否属于Live In〔B1〕(步骤F2),若属于,则判定基本块B1是否未搜索(步骤F3)。若是未搜索则进行后续块生存区间检测处理(步骤F4)。若不是未搜索,则重复上述处理(步骤F1、F5)直至找到基本块B的后续基本块B1为止(步骤F3)。
图10是表示后续块生存区间检测处理程序的流程图。
在步骤D1中,生存区间生成部15设定基本块B搜索结束。
步骤D2中,生存区间生成部15判定由中间语言步骤S所定义的变量V在基本块B的出口是否还生存(即是否还活着),若生存(活着),进行步骤D8,否则进行步骤D5-D6。上述判定,具体说来,就是生存区间生存部15对变量V进行V是否属于Live Out〔B〕的确认。
在步骤D8中,生存区间生成部15判定变量V的定义是否存在于基本块B。若不存在,进行步骤D3-D4,否则进行步骤D5-D6。这种判定,具体说就是确认变量V不属于Def〔B〕的情形。
在步骤D3中,生存区间生成部15取从基本块B1的入口至出口的中间语言步骤作为变量V的生存区间(步骤D3)。
步骤D4中,生存区间生成部15进行后续块搜索处理。
步骤D5中,生存区间生成部15根据定义S的定义—参照信息从基本块B的出口向着入口进行搜索,寻找变量V的参照S1。
在步骤D6中,将从B的起始中间语言步骤至参照S1作为V的生存区间存贮在生存区间保持部11中,并结束图10所示的后续块生存区间检测处理。
在步骤C12、C13、C14的循环处理中,生存区间生成部15对到达参照S2的全部剩余定义的定义S3递归进行生存区间生成处理,并将该定义S3的生存区间的信息加给变量V的生存区间信息。参照参照S2的参照—定义信息搜索出该定义S3的位置。上述定义S3在上述分支基本块内,为了将它们全部搜索出,重复步骤C12、C13、C14的处理。
在步骤C11、C15、C16中,生存区间生成部15进行程序中的判断分支处理或多方向分支处理,进而当上述参照S2在一个分支尽头处基本块内情况下,生存区间生存部15求取存在于剩余分支基本块内的全部剩余参照。对每个参照S2反复进行步骤C12、C13、C14的循环处理。
用步骤C17结束定义每个生存区间检测处理。
通过以上过程,变量存贮在单纯块内生存变量集合保持部12、或基本块内生存变量集合保持部13、或基本块间生存变量集合保持部14的某一个中,这些保持部的保持内容如图21(b)、(c)、(d)所示。
生存区间重叠检查部16检查变量生存区间的重叠。并使用单纯块内生存变量集合保持部12、基本块内生存变量集合保持部13、基本块间生存变量集合保持部14、生存区间保持部11的信息进行这种检查。参照图11的流程图说明这种重叠检查。
在步骤E2中,对属于每个单纯块的变量集合PS1的变量间检查生存区间的重叠(生存区间仅在单纯块内的变量间的生存区间重叠检查)。
在步骤E3、E4、E5的循环处理中,如图12(c)所示,生存区间重叠检查部16判定基本块pb1是否属于基本块bs1,并判定属于基本块bb1的基本块内变量集合bs1的变量V1的生存区间是否存在于单纯块pb1中(步骤E4),进而如图12(d)所示,检查属于单纯块内变量集合ps1的变量和变量V1之间生存区间的重叠(步骤E5,它构成仅在单纯块内有生存区间的变量、和仅在基本块内有生存区间的变量中的生存区间重叠检查)。生存区间重叠检查部16对属于基本块bb1的每个基本块的变量集合bs1的全部变量反复进行(步骤E3)上述步骤E4、E5的处理。
在步骤E6、E7的循环处理中,生存区间重叠检查部16,在属于单纯块内变量集合PS1的变量和保持在基本块间生存变量集合保持部14中的变量V2中检查生存区间的重叠(步骤E7)。对保持在整个基本块间生存变量集合保持部14中的所有剩余变量V2反复进行上述步骤E7的处理(步骤E6)。
步骤E1中,生存区间重叠检查部16对存在于单纯块内生存变量集合保持部12中的单纯块pb1的每个单纯块的变量集合ps1的全部变量判定是否已进行了步骤E2至E7的处理,若处理完成,则进行步骤E8至E12的处理。
在步骤E8中,生存区间重叠检查部16对存在于基本块内生存变量集合保持部13中的全部基本块bb2的基本块内变量集合bs2执行步骤E9至E11。
在步骤E9中,生存区间重叠检查部16检查属于基本块内变量集合bs2的变量的生存区间重叠。
在步骤E10、E11中,检查属于基本块内变量集合bs2的变量V和属于基本块间变量集合的变量V3之间的生存区间的重叠(步骤E11),对保持在基本块间生存变量集合保持部14中的变量V3中的生存区间存在于基本块bb2中的变量反复执行步骤E11(步骤E10)。
步骤E12中,检查存在于基本块间生存变量集合保持部14中的变量间的生存区间的重叠。
如上所述,若生存区间重叠检查部16执行检查处理,则对生存区间的重叠情况进行检查。图22表示了对于图20程序例的检查结果。
使用图14至图20说明如上构成的本实施例资源分配装置的具体动作。
图14为C语言描述的源程序的一部分的例子。该图中,变量P1、P2、P3的定义在该程序例中设定为是在第一行以前进行的,并在第4行以下不再使用。又,变量S的参照假定在该例之后。
图15是作为图14的源程序的语句解析装置1的输出的中间语言程序。该中间语言程序以2号地址形式给出。图中符号:“=”为代入运算;“+”为加法运算;“*”为乘法运算;“/”为除法运算;“<”大于运算;“IF A GOTO标号”为A成立转移到“标号”处;“Sn”中间语言步骤。
控制流解析部5对图15的中间语言程序进行基本块化,生成图16所示的基本块。图16中,中间语言步骤S1至S11为基本块B1;中间语言步骤S12至S15为基本块B2;中间语言步骤S16至S18为基本块B3。
数据流解析部6对图16所示的基本块化后的中间语言程序进行数据流解析时,求得有关图17所示的生存变量的信息、定义—参照信息、和参照—定义信息。
单纯块生成部8用单纯块生成处理程序将图16中的基本块B1分割成单纯块的过程示于图19。
首先,单纯块生成部8,如图19(a)所示,将基本块B1分割成仅包含一个中间语言步骤的单纯块(单纯块生成处理的步骤A1)。
单纯块生成部8进行图3所示流程图的步骤A2至步骤A12的处理,将包含小块PB1的中间语言步骤S1移动到小块PB2的前面。
详细说来,单纯块生成部8取出小块PB1(单纯块生成处理步骤A2),检测小块PB1不是基本块B1的最后的小块的情况(单纯块生成处理步骤A3),检测出小块PB1的最后的中间语言步骤S1(单纯块生成处理的步骤A4),接着再检测由中间语言步骤S1所定义的变量只是变量t1中的唯一一个的情况(单纯块生成处理步骤A5),由定义—参照信息检测变量t1的参照为一次、且存在于基本块B1中的情况(单纯块生成处理步骤A6、A7)。下面从定义S1下一个的中间语言步骤至变量t1的参照,检测无变量t1的定义,检测定义S1所参照的变量P1、P2的定义不在从定义S1的下一个中间语言步骤至变量t1的参照中的情况,检测变量t1的参照所属的小块PB2(单纯块生成处理步骤A10)。然后,将作为小块PB1的元素的定义S1插入小块PB2的前面(单纯块生成处理步骤A11)。
同样,将属于图19(a)的小块PB2的中间语言步骤S1、S2移到小块PB7的前面的过程示于图19(c)。按照小块PB3、PB4、PB5、PB6的顺序反复进行上述处理,则基本块B1的内部从图19(c)所示情况变为图19(d)所示情况。
继而,单纯块生成部8虽要移动小块PB7最后的中间语言步骤S7所定义的变量X和小块PB8最后的中间语言步骤S8所定义的变量y,但因参照次数为两次而判定为小块PB7、PB8不移动(单纯块生成处理步骤A7)。同样,想要移动小块PB9,但由于最后的定义S9定义的变量z的参照存在于基本块B2中,所述也判定为不移动(单纯块生成处理步骤A6)。小块PB10,由于最后中间语言步骤S10所定义的变量a在基本块B2中被参照,所以也判定为不移动(单纯块生成处理步骤A6),小块PB11由于是基本块B1的最后的小块,所以也判定为不移动(单纯块生成处理步骤A3)。结果,基本块B1单纯块化后停留在图19(d)所示的状态。
单纯块生成部8对基本块B2、B3也进行单纯块化,此情况示于图20。
由单纯块生成部8形成单纯块后,生存区间生成部15进行生存区间的表示,并将各变量分为3种集合。
将代表性的变量t1、y、a、b作为一例说明上述情况。
首先说明变量t1。
1)用生存区间生成部15选择未完成标记的中间语言步骤S1。生存区间生成部15标记中间语言步骤S1,并移至定义每个生存区间检测处理(生成存区间生成处理步骤B1-B5)。
2)全部基本块作为未搜索(生存区间生成处理步骤B4)。
3)接着检查变量t1是否包含在Live Out〔B1〕中。由于变量t1未被包含,所以移至每个定义的生存区间检测处理的步骤C3(每个定义的生存区间检测处理的步骤C2、C18)。
4)按照定义S1的定义—参照信息从基本块B1的出口向着入口进行搜索,寻找最先找到的变量t1的参照S2(每个定义的生存区间检测处理步骤C3)。
5)生存区间生成部15取出中间语言步骤S2,对应于变量t1将它作为变量t1的生存区间的一部分(每个定义的生存区间检测处理步骤C4)。
6)由于中间语言步骤S1和S2属于同一单纯块PB7中,所以生存区间生成部15将变量t1存贮在单纯块内生存变量集合保持部12的单纯块PB7的每个单纯块的变量集合中(每个定义的生存区间检测处理步骤C5)。
通过以上处理,求得变量t1的生存区间,并将变量t1存贮在单纯块内生存变量集合保持部12中。
下面说明变量y。
1)生存区间生存部15选择未标记的中间语言步骤S8。生存区间生成部15标记中间语言步骤S8,进行生存区间生成处理(生存区间生成处理步骤B1-B5)。
2)全部基本块作为未搜索(生成区间生成处理步骤B4)。
3)接着检查变量y是否包含在Live Out〔B1〕中。由于变量y未包含,所以生存区间生成部15执行每个定义的生存区间检测处理的步骤C3(每个定义的生存区间检测处理的步骤C2、C18)。
4)生存区间生成部15根据中间语言步骤S8的定义—参照信息,从基本块B1的出口向着入口执行搜索,寻找作为变量y参照的中间语言步骤10(每个定义的生存区间检测处理的步骤C3)。
5)生存区间生成部15设定变量y的生存区间为到中间语言步骤S5、S6、S9、S10为止(每个定义的生存区间检测处理步骤C4)。
6)生存区间生成部15判定中间语言步骤S8和S10属于不同的单纯块,并将变量y存贮在基本块内生存变量集合保持部13的保持集合中对应于基本块B1的部分中(每定义的生存区间检测处理步骤C5)。
通过上述处理求得变量y的生存区间,生存区间生成部15将变量y存入基本块内生存变量集合保持部13中。
下面说明变量a。
1)首先通过生存区间生成部15选择未标记的中间语言步骤10。生存区间生成部15对中间语言步骤S10进行标记,再移至每个定义的生存区间检测处理(生存区间生成处理步骤B1-B5)。
2)生存区间生成部15将全部基本块作为未搜索(生存区间生成处理步骤B4)。
3)接着,生存区间生成部15判定变量a包含在Live Out〔B1〕中而在中间语言步骤S11中无变量a的定义的情况,并将变量a存入基本块间生存变量集合保持部14中,再移至每个定义的生存区间检测处理步骤C9(每个定义的生存区间检测处理步骤C2、C18、C8)。
4)生存区间生成部15将中间语言步骤S11作为变量a的生存区间(每个定义的生存区间检测处理步骤C9)。
5)生存区间生成部15判定基本块B2未搜索而变量a属于LiveIn〔B2〕的情况,并对基本块B2和中间语言步骤S10进行后续块生存区间检测处理(每个定义的生存区间搜索处理步骤C10)。
6)生存区间生成部15将基本块B2作为已搜索(后续块生存区间检测处理步骤D1)。
7)生存区间生成部15判定变量a属于live Out〔B2〕,又判定变量a不属于Def〔B2〕,再进行后续块生存区间检测处理步骤D3的处理(后续块生存区间检测处理步骤D2、D8)。
8)生存区间生成部15将中间语言步骤S13、S12、S14、S15作为变量a的生存区间(后续块生存区间检测处理步骤D3)。
9)判定基本块B2的后续基本块B3未搜索完且变量a属于LiveIn〔B3〕进行关于基本块B3和定义S10的后续块生存区间检测处理(后续块生存区间检测处理步骤D4)。
10)生存区间生成部15将基本块B3作为已搜索(后续块生存区间检测处理步骤D1)。
11)生存区间生成部15判定变量a不属于Live Out〔B3〕,进行后续块生存区间检测处理步骤D5(后续块生存区间检测处理步骤D2)。
12)生存区间生成部15从基本块B3的出口向着入口进行搜索,找出变量a的参照S16(后续块生存区间检测处理步骤D5)。
13)将参照S16取作变量a的生存区间(后续块生成区间检测处理步骤D6)。
14)结束后续块生存区间检测处理,回到前面9)的状态(后续块生存区间检测处理步骤D7)。
15)结束涉及基本块B2的后续块生存区间检测处理,回到先前的5)状态(后续块生存区间检测处理步骤D7)。
16)生存区间生成部15参照中间语言步骤S10的定义—参照信息,取出存在于该信息内的变量a的参照S12。进而参照参照S12的参照—定义信息,取出到达参照S12的变量a的定义S10。但由于参照S10完成标记,所以生存区间生成部15不进行后续块生存区间检测处理步骤C10、C11。
17)结束每个定义的生存区间检测处理,回到1)状态。通过上述处理求得变量a的生存区间,并将变量a存入基本块间生存变量集合保持部14。
下面说明变量b.
1)生存区间生成部15选择未标记的中间语言步骤S11并对其进行标记,再进行生存区间生成处理(生存区间生成处理步骤B1-B5)。
2)生存区间生成部15将全部基本块作为未搜索(生存区间生成处理步骤B4)。
3)生存区间生成部15判定变量b包含在Live Out〔B1〕中而定义S11自身为B1的最后的中间语言步骤的情况,将变量b存入基本块间生存变量集合保持部14中。存贮后,进行每个定义的生存区间检测处理步骤C6(每个定义的生存区间检测处理步骤C2、C18、C8)。
4)生存区间生成部15判定中间语言步骤S11为基本块B1的最后的中间语言步骤,变量b的生存区间中什么也不存贮(每个定义的生存区间检测处理步骤C9)。
5)生存区间生成部15判定变量b属于Live In〔B2〕,进行涉及基本块B2和中间语言步骤S11的后续块生存区间检测处理(每个定义的生存区间检测处理步骤C7)。
6)生存区间生成部15将基本块B2作为已搜索(后续块生存区间检测处理步骤D1)。
7)生存区间生成部15判定变量b属于Def〔B2〕,进行后续块生存区间检测处理步骤D5(后续块生成区间检测处理步骤D2)。
8)生存区间生成部15参照中间语言步骤S11的定义—参照信息从基本块B2的出口向入口进行搜索,寻找最先找到的变量b的参照S13(后续块生存区间检测处理步骤D5)。
9)生存区间生成部15取中间语言步骤S13作为变量b的生存区间(后续块生存区间检测处理步骤D6)。
10)结束后续块生存区间检测处理,回到前面5)的状态。
11)生存区间生成部15对变量b的参照S13进行步骤C11-C16(每个定义的生存区间检测处理步骤C11)。
12)生存区间生成部15寻找在参照S13的参照—定义信息中的变量b的定义内的未加标记的定义S13(每个定义的生存区间检测处理步骤C12)。
13)生存区间生成部15对参照S13进行标记,然后转移到每个定义的生存区间检测处理(每个定义的生存区间检测处理步骤C13、C14)。
15)生存区间生成部15判定变量b包含在Live Out〔B2〕中但至基本块B2的最后为止无变量b的定义,转移到每个定义的生存区间检测处理步骤C9(每个定义的生存区间检测处理步骤C2、C18、C8)。
16)生存区间生成部15将中间语言步骤S12、S14、S15作为变量b的生存区间(每个定义的生存区间检测处理步骤C9)。
17)生存区间生成部15判定变量b属于Live In〔B3〕,基本块B3为未搜索,再进行涉及基本块B3和中间语言步骤S13的后续块生存区间检测处理(每个定义的生存区间检测处理步骤C10)。
18)生存区间生成部15取基本块B3作为已搜索(后续块生存区域检测处理步骤D1)。
19)生存区间生成部15判定变量b不属于Live Out〔B3〕,转移到后续块生存区间检测处理步骤D5(后续块生存区间检测处理步骤D2)。
20)生存区间生成部15从基本块B3的出口向入口进行搜索,寻找存在于定义S13的定义—参照信息中的变量b的参照S17(后续块生存区间检测处理步骤D5)。
21)生存区间生成部15将中间语言步骤S16、S17作为变量b的生存区间(后续块生成区间检测处理步骤D6)。
22)结束后续块生存区间检测处理,回到前面的17)状态(后续块生存区间检测处理步骤D7)。
23)生存区间生成部15取出存在于定义S13的定义—参照信息的参照S13、S14、S17。正因为是存在于参照S14、S17的参照—定义信息中的变量b的定义S13,所以,该定义S13已标记。又,由于存在于参照S13的参照—定义信息的变量b的定义S11、S13都标记,所以结束每个定义的生存区间检测处理并回到前面13)的状态(每个定义的生存区间检测处理步骤C11-C16)。
24)生存区间生成部15,进而由于定义S11存在于参照S13的参照—定义信息中且已标记,所以结束每个定义的生存区间检测处理,并回到前面1)的状态。通过以上处理求得变量b的生存区间,并将变量b存贮在基本块间生成变量集合保持部14中。
同样,若对其它变量进行生存区间生成部15的生存区间检测处理就会构成图21的状况。
下面,用图9的生存区间重叠检查处理来表示检查重叠的过程。
首先,生存区间重叠检查部16对生存区间仅存在于单纯块内的变量进行重叠检查。例如对仅存在于同一单纯块PB8中的变量t3和y4进行生存区间的重叠检查,就会得出变量t3和y4生存区间不重叠的检查结果(生存区间重叠检查处理步骤E2)。
下面,生存区间重叠检查部16对生存区间仅存在于单纯块内的变量和生存区间仅存在于基本块内的变量进行生存区间的重叠检查。例如,对生存区间仅存在于基本块B1内的变量y和生存区间仅存在于单纯块PB9、PB10内的变量进行重叠检查,从而获得变量t5、z4生存区间重叠的检查结果(生存区间重叠检查处理步骤E3-E5)。
接着,生存区间重叠检查部16对生存区间仅存在于单纯块内的变量和生存区间跨越基本块间的变量进行重叠检查。例如,对生存区间存在于基本块B2中的变量a和生存区间仅存在于单纯块PB15内的变量c进行重叠检查,就会得出重叠的检查结果(生存区间重叠检查处理步骤E6、E7)。
下面,生存区间重叠检查部16在生存区间仅存在于基本块内的变量之间进行重叠检查。例如,生存区间重叠检查部16对生存区间仅存在于基本块B1内的变量x、y进行重叠检查,则检查出变量x、y生存区间重叠(生存区间重叠检查处理步骤E9)。
下面,生存区间重叠检查部16对生存区间仅存在于基本块内的变量和生存区间跨越基本块间而存在的变量进行重叠检查。例如,生存区间重叠检查部16对生存区间存在于基本块B1中的变量a、和生存区间仅存在于B1内的变量x、y进行重叠检查,从而检查出变量x、y,与x重叠,与y不重叠(生存区间重叠检查处理步骤E10、E11)。
下面,生存区间重叠检查部16通过生存区间重叠检查处理步骤E12,在生存区间跨越基本块间而存在的变量之间进行生存区间的重叠检查。例如,生存区间重叠检查部16对变量a和变量b进行重叠检查,从而得出生存区间重叠的检查结果。
综上所述,按照本发明第一方面的编译程序器,在生存区间仅在基本块内的变量中,其结果省略了属于不同基本块内的相互间的重叠判定处理,所以不会有多余的无用的生存区间的重叠判定处理,因此能缩短编译时间。
按照本发明第二方面的编译程序器,程序中大多数变量存贮在单纯块内。由于生存区间重叠判定处理是在存贮在同一单纯块中的变量间进行,所以使生存区间的重叠判定处理更有效,没有多余的处理,能大大缩短重叠判定所需处理时间。
具体举例,对于几个变量,按照上述简化,nc2次的生存区间重叠判定处理的处理时间约缩短为1/10。
根据本发明第三方面的编译程序器,按照生存区间属不属于单纯块内来分别作生存区间重叠判定处理的,所以彻底省略了多余的重叠判定处理。
按照本发明第四方面的编译程序器,由于判定基本块中各定义指令能否综合,所以能在不损害原程序的数据依存关系条件下在程序中形成单纯块。
按照本发明第五方面的编译程序器,能用单纯的算法检测出生存区间仅存在于基本块内的变量的生存区间,所以不会由于形成单纯块而增加处理量,也不会降低编译程序处理的速度。
按照本发明第六方面的编译程序器,能够用单纯算法表达生存区间仅存在于基本块内的变量的生存区间。
按照本发明第七方面的编译程序器,能用单纯算法表达生存区间存在于基本块间的变量的生存区间。
按照本发明第八方面的编译程序器,能用单纯算法表达其值设定在分支处理内的变量的生存区间。
按照本发明第九方面的编译程序器,能用单纯算法表达其值在分支处理内使用的变量的生存区间。

Claims (9)

1.一种将多个指令构成的程序翻译成机器语言程序的编译程序器,其特征在于,它备有:
检测上述程序中转移指令和该转移指令的转移目的处指令的转移检测装置;
根据转移检测装置已检测的指令将上述程序分割成基本块的分割装置;
就程序中各变量检测作为其设定值有效的程序中区间的生存区间、并用表示包含在生存区间内的指令位置的位置信息的集合来表示检测结果的生存区间检测装置;
检测生存区间检测装置检测的生存区间收容于一个基本块内的全部变量、并用对应于该基本块的基本块内生存变量集合表示检测结果的基本块内生存变量检测装置;
检测生存区间检测装置检测的生存区间存在于多个基本块间的全部变量、并用基本块间生存变量集合表示检测结果的基本块间生存变量检测装置;
从基本块间生存变量集合每次各取2个变量、算出对应于该2个变量的生存区间的指令位置信息集合的集合积、用以判断生存区间的重叠的第1生存区间重叠判定装置;
从对应于同一基本块的基本块内生存变量集合每次各取2个变量、算出对应于该2变量的生存区间的指令位置信息集合的集合积、用以判断生存区间的重叠的第2生存区间重叠判定装置;
从对应于上述基本块的基本块内生存变量集合和基本块间生存变量每次各取出一个变量、算出对应于该2变量的生存区间的指令位置信息集合的集合积、用以判断生存区间的重叠的第3生存区间重叠判定装置;
用上述第1、2、3的生存区间重叠判定装置的判定结果进行资源分配。
2.如权利要求1所述的编译程序器,其特征在于,进一步备有:
将设定变量值的指令的定义指令和使用该定义指令所设定的变量值的指令的参照指令至少排列成一组依序的指令列的单纯块形成于基本块内的单纯块形成装置;
从上述基本块内生存变量集合检测生存区间收容于一个单纯块内的全部变量、并用对应于该单纯块的单纯块内生存变量集合表示检测结果的单纯块内生存变量检测装置;
从上述基本块内生存变量集合检测生存区间存在于多个单纯块间的变量、并用单纯块间生存变量集合表示检测结果的单纯块间生存变量检测装置;
上述第2生存区间重叠判定装置备有:
从上述单纯块间生存变量集合每次取出2个变量、并计算出对应于该2个变量的生存区间的指令位置信息集合的集合积、用以判断生存区间的重叠的第1生存区间重叠判定部;
从对应于同一单纯块的单纯块内变量集合每次取出2个变量、计算出对应于该2个变量的生存区间的指令位置信息集合的集合积、用以判定生存区间重叠的第2生存区间重叠判定部;
从对应于上述单纯块的单纯块内变量集合和单纯块间生存变量集合每次各取出一个变量、计算出对应于该2个变量的生存区间的指令位置信息集合的集合积、用以判断生存区间重叠的第3生存区间重叠判定部。
3.如权利要求2所述的编译程序器,其特征在于,所述第3生存区间重叠判定装置备有:
从基本块间生存变量集合和对应于所述单纯块的单纯块内生存变量集合每次各取出一个变量、算出对应于该2个变量的指令位置集合的集合积、以此判断生存区间重叠的第4生存区间重叠判定部;
从基本块间生存变量集合和单纯块间生存变量集合每次各取出一个变量、算出对应于该2个变量生存区间的指令位置集合的集合积、用以判断生存区间重叠的第5生存区间重叠判定部。
4.如权利要求2所述的编译程序器,其特征在于,所述单纯块形成装置备有:
从基本块中每次取出1个定义指令的定义指令取出装置;
从包含有定义指令取出装置取出的定义指令的基本块,检测对应于该定义指令的参照指令的对应参照指令检测装置;
判定对应于参照指令的定义指令能否移动到对应参照指令检测装置检测的该参照指令的位置上的定义指令移动可否判定装置;
定义指令移动可否判定装置判定可移动时、将定义指令移动可否判定装置判定为可移动的定义指令移动至对应该定义的参照指令前、并将该定义指令及参照指令归入一个单纯块的定义指令移动装置;
移动前若定义指令移动装置移动的定义指令是单纯块内的最后指令时,将移动前的单纯块的全部剩余指令移动到该定义指令移动前的前面,并将所移动的剩余指令归入移动前的单纯块的单纯块剩余指令移动装置;
5.如权利要求4所述的编译程序器,其特征在于,上述定义指令移动可否判定装置包含:
判定上述定义指令取出装置取出的定义指令确定的值所设定的变量是否为一个的变量单复数判定部;
在上述变量单复数判定部判定为一个变量情况下、判定上述对应参照指令检测装置检测的参照指令是否为一个的参照指令单复数判定部;
在上述参照指令单复数判定部判定为一个参照指令情况下,用对应于该参照指令的定义指令判定设定值的变量在从该定义指令至该参照指令区间是否被再设定的第1再设定有无判定部;
在上述第1再设定有无判定部判定没有再设定情况下、检测该定义指令中使用的变量的定义指令内使用变量检测部;
判定上述定义指令内使用变量检测部检测出的变量在该定义指令至该参照指令间不被再设定的第2再设定有无判定部;
上述第2再设定有无判定部判定为没有再设定时,判定该定义指令可否移动到该参照指令位置上的移动可否判定部。
6.如权利要求1至5任一权利要求所述的编译程序器,其特征在于,可进一步备有:对应上述程序中的各基本块和该基本块入口中有效的变量及出口中有效变量进行存贮的有效变量信息存贮装置,
上述生存区间检测装置备有:
从上述程序每次取一个定义指令的定义指令取出部;
检测包含上述定义指令取出部取出的定义指令的基本块和由该定义指令设定的变量、根据上述有效变量信息存贮装置的存贮内容判定所检测变量的设定值在该基本块出口处是否无效的出口无效判定部;
在上述出口无效判定部判定设定值无效情况下,从该基本块检测作为对应于该定义指令的参照指令且最靠近该基本块出口的出口最近参照指令检测部;
检测从该定义指令的下一个指令开始至出口最近参照指令检测部检测到的参照指令为止的全部指令位置信息的基本块内指令位置检测部;
用基本块内指令位置检测部检测出的指令位置信息的集合表示检测指令位置信息的变量的生存区间的基本块内生存区间表示部,
所述基本块内生存变量检测装置把上述基本块内生存区间表示部表示生存区间的变量作为对应于包含该变量的基本块的基本块内生存变量集合的元素。
7.如权利要求6所述的编译程序器,其特征在于,可进一步包含相对应地存贮基本块和该基本块中设定的变量的基本块内定义信息存贮装置,
所述生存区间检测装置备有:
在上述出口无效判定部判定有效情况下,根据上述基本块内定义信息存贮装置的存贮内容,判定由上述出口无效判定部判定为有效的定义指令中所设定的变量在从该定义指令至包含该定义指令的基本块的出口之间是否被再设定的再设定有无判定部;
在上述再设定值有无判定部判定无再设定情况下,检测从该定义指令的下一个指令至该基本块的出口的指令位置信息的出口有效时位置信息检测部;
在上述再设定有无判定部判定无再设定情况下,根据上述有效变量信息存贮装置和基本块内定义信息存贮装置的存贮内容,在包含该定义指令的基本块的下一个基本块内检测该变量在其入口和出口有效且在其内部该变量没被再设定的全部情况的生存基本块检测部;
根据上述基本块定义信息存贮装置的存贮内容、检测包含在上述生存基本块检测部所检测的基本块内的全部指令位置信息的基本块间位置信息检测部;
上述再设定有无判定部判定无再设定情况下,检测包含该定义指令的基本块的下一个基本块内该变量在其入口有效,在其出口无效的基本块的末尾基本块检测部;
从上述末尾基本块检测部检测的基本块检测对应于该定义指令的最后的参照指令的末尾参照指令检测部;
检测从上述末尾基本块检测部检测的基本块的入口至上述末尾参照指令检测部检测的参照指令的全部位置信息的入口有效时位置信息检测部;
用出口有效时位置信息检测装置的检测结果,入口有效时位置信息检测装置的检测结果、和基本块间位置信息检测装置的检测结果组合在一起的集合表示对应于上述再设定有无判定部判定为无再设定的变量的生存区间的集合的基本块间生存区间表示部,
上述基本块间生存变量检测装置将上述再设定有无判定部判定为无再设定的变量作为基本块间生存变量集合的元素。
8.如权利要求7所述的编译程序器,其特征在于,它可进一步备有对应地存贮程序中各指令位置,该指令位置的指令中使用的变量和设定该变量指令的指令位置信息的参照—定义信息存贮装置,
所述生存区间检测装置备有:
对上述定义指令取出部取出的定义指令的位置标以识别信息的标记部;
检测对应于上述定义指令取出部取出的定义指令的参照指令所使用的变量的参照变量检测部;
根据参照—定义信息存贮装置的存贮内容,检测对上述参照变量检测部所检测出的变量进行设定设定值的全部定义指令的定义指令检测部;
在上述定义指令检测部检测出的定义指令内检测没有上述标记部所标识的识别信息的无标记定义指令检测部;
检测从上述无标记定义指令检测部检测出的定义指令的下面指令至包含该定义指令的基本块的出口为止的全部指令位置信息的第1分支块内位置信息检测部;
将上述第1分支块内位置信息检测部检测出的指令位置信息添加给上述基本块间生存区间表示部表示的指令位置信息的集合的第1指令位置信息添加部。
9.如权利要求8所述的编译程序器,其特征在于,可它进一步备有对应地存贮程序中各指令位置、在该指令位置的指令中设定的变量和使用该变量的指令的指令位置信息的定义—参照信息存贮装置,
所述生存区间检测装置备有:
根据上述定义—参照信息存贮装置的存贮内容、检测对应于上述无标记定义指令检测部检测出的定义指令的参照指令的分支块内参照指令检测部;
检测包含由上述分支块内参照指令检测部检测出的参照指令的基本块的分支块检测部;
检测从上述分支块检测部检测出的基本块入口至上述分支块内参照指令检测部检测出的参照指令为止的全部指令位置信息的第2分支块内位置信息检测部;
将上述第2分支块内位置信息检测部检测出的指令位置信息添加给上述基本块间生存区间表示部表示的指令位置信息的集合的第2指令位置信息添加部。
CN95106164A 1994-09-13 1995-05-30 编译程序器 Expired - Fee Related CN1097226C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP21881194A JP3606387B2 (ja) 1994-09-13 1994-09-13 コンパイル装置
JP218811/94 1994-09-13

Publications (2)

Publication Number Publication Date
CN1118899A CN1118899A (zh) 1996-03-20
CN1097226C true CN1097226C (zh) 2002-12-25

Family

ID=16725719

Family Applications (1)

Application Number Title Priority Date Filing Date
CN95106164A Expired - Fee Related CN1097226C (zh) 1994-09-13 1995-05-30 编译程序器

Country Status (6)

Country Link
US (1) US5642512A (zh)
EP (1) EP0702293B1 (zh)
JP (1) JP3606387B2 (zh)
KR (1) KR100226233B1 (zh)
CN (1) CN1097226C (zh)
DE (1) DE69524511T2 (zh)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1149476C (zh) * 1995-03-16 2004-05-12 松下电器产业株式会社 资源分配装置
JP3060907B2 (ja) * 1995-07-28 2000-07-10 日本電気株式会社 言語処理プログラムの処理方式
US5787287A (en) * 1995-12-27 1998-07-28 Intel Corporation Representation of control flow and data dependence for machine
TW470915B (en) * 1996-03-12 2002-01-01 Matsushita Electric Ind Co Ltd Optimization apparatus which removes transfer instructions by a global analysis of equivalence relations
US5778233A (en) * 1996-10-11 1998-07-07 International Business Machines Corporation Method and apparatus for enabling global compiler optimizations in the presence of exception handlers within a computer program
US5946492A (en) * 1997-02-19 1999-08-31 International Business Machines Corporation Compiler that reduces call stack size through identification of stackless variables
JPH11327879A (ja) * 1998-05-15 1999-11-30 Fujitsu Ltd 変数検索装置及び方法並びに変数検索プログラムを記録したコンピュータ読取り可能な記録媒体
US6421824B1 (en) * 1999-04-23 2002-07-16 Sun Microsystems, Inc. Method and apparatus for producing a sparse interference graph
JP4041248B2 (ja) * 1999-07-09 2008-01-30 松下電器産業株式会社 コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法
US6381691B1 (en) * 1999-08-13 2002-04-30 International Business Machines Corporation Method and apparatus for reordering memory operations along multiple execution paths in a processor
CN100430896C (zh) * 2002-10-29 2008-11-05 洛克希德马丁公司 硬件解析器加速器
CN100380323C (zh) * 2003-02-28 2008-04-09 Bea系统公司 用于确定何时需要运行ejb编译器的系统和方法
US7210135B2 (en) * 2003-08-26 2007-04-24 Microsoft Corporation Data flow analysis of transactional processes
US7784039B2 (en) * 2004-09-22 2010-08-24 Panasonic Corporation Compiler, compilation method, and compilation program
US7539983B2 (en) * 2005-01-14 2009-05-26 Microsoft Corporation Tool for processing software programs using modified live-ness definition
JP4778286B2 (ja) * 2005-09-28 2011-09-21 パナソニック株式会社 コンパイラ装置
US8543992B2 (en) * 2005-12-17 2013-09-24 Intel Corporation Method and apparatus for partitioning programs to balance memory latency
JP4607958B2 (ja) * 2006-01-20 2011-01-05 パナソニック株式会社 プロセッサおよびプログラム変換装置
JP2008305337A (ja) * 2007-06-11 2008-12-18 Panasonic Corp プログラム変換装置、プログラム変換方法、プログラム、記憶媒体、デバッグ装置、デバッグ方法及びプログラム開発システム
EP2022601B1 (de) 2007-08-03 2013-03-20 TRUMPF Werkzeugmaschinen GmbH + Co. KG Laserbearbeitungsmaschine zum Bearbeiten von Werkstücken sowie maschinelles Verfahren zum Bearbeiten von Werkstücken mittels eines Laserstrahls
JP5058063B2 (ja) * 2008-04-30 2012-10-24 三菱電機株式会社 制御システム開発支援装置
EP3106982B1 (en) * 2015-06-18 2021-03-10 ARM Limited Determination of branch convergence in a sequence of program instructions

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4571678A (en) * 1982-11-05 1986-02-18 International Business Machines Corporation Register allocation and spilling via graph coloring
US4782444A (en) * 1985-12-17 1988-11-01 International Business Machine Corporation Compilation using two-colored pebbling register allocation method such that spill code amount is invariant with basic block's textual ordering
US5428793A (en) * 1989-11-13 1995-06-27 Hewlett-Packard Company Method and apparatus for compiling computer programs with interproceduural register allocation
US5107418A (en) * 1990-06-11 1992-04-21 Supercomputer Systems Limited Partnership Method for representing scalar data dependences for an optimizing compiler
US5249295A (en) * 1990-06-20 1993-09-28 Rice University Digital computer register allocation and code spilling using interference graph coloring
US5530866A (en) * 1991-07-30 1996-06-25 Tera Computer Company Register allocation methods having upward pass for determining and propagating variable usage information and downward pass for binding; both passes utilizing interference graphs via coloring
US5355494A (en) * 1991-12-12 1994-10-11 Thinking Machines Corporation Compiler for performing incremental live variable analysis for data-parallel programs
US5418958A (en) * 1992-07-15 1995-05-23 Sun Microsystems, Inc. Register allocation by decomposing, re-connecting and coloring hierarchical program regions
US5367684A (en) * 1992-11-30 1994-11-22 Intel Corporation Register allocation using an improved register candidate usage matrix
JPH06250837A (ja) * 1993-02-25 1994-09-09 Ricoh Co Ltd スケジューリング処理方式

Also Published As

Publication number Publication date
JP3606387B2 (ja) 2005-01-05
DE69524511T2 (de) 2002-05-08
EP0702293A3 (en) 1997-05-02
CN1118899A (zh) 1996-03-20
JPH0883185A (ja) 1996-03-26
EP0702293B1 (en) 2001-12-12
US5642512A (en) 1997-06-24
KR100226233B1 (ko) 1999-10-15
EP0702293A2 (en) 1996-03-20
KR960011768A (ko) 1996-04-20
DE69524511D1 (de) 2002-01-24

Similar Documents

Publication Publication Date Title
CN1097226C (zh) 编译程序器
CN1253790C (zh) 指令调度方法和指令调度设备
CN1130626C (zh) 支援并行程序的装置以及支持程序编制的方法
CN1783012A (zh) 程序转换器件及方法、程序转换执行器件及转换执行方法
CN1908892A (zh) 测试用例设计方法和系统
CN1202470C (zh) 处理器
CN1122216C (zh) 优化器
CN1264089C (zh) 编译设备和编译方法
CN1331449A (zh) 用于将粘着法构成的文本或文档分段成词的字符串划分或区分的方法及相关系统
CN1517869A (zh) 处理器、运算处理方法和优先度决定方法
CN1809812A (zh) 用于源代码检测源代码中弱点的方法和装置
CN1918546A (zh) 程序转换装置及程序转换方法
CN1656455A (zh) 管理文件的方法、操作对象显示限制程序和记录介质
CN1758221A (zh) 程序处理装置
CN1271545C (zh) 语言翻译系统
CN1707431A (zh) 信号处理装置及其方法
CN1977531A (zh) 程序生成装置、程序测试装置、程序执行装置及信息处理系统
CN1795434A (zh) 程序执行控制设备,程序执行控制方法,控制程序和记录介质
CN1758222A (zh) 程序处理装置
CN1194295C (zh) 程序变换装置及程序变换方法
CN101055566A (zh) 一种电子数据表的函数收集方法和装置
CN1776621A (zh) 程序变换方法
CN1991819A (zh) 语言形态分析器
CN1138175A (zh) 高速处理循环的编译器和处理器
CN1649274A (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
C19 Lapse of patent right due to non-payment of the annual fee
CF01 Termination of patent right due to non-payment of annual fee