CN105393217A - 用于编译器优化的方法和系统 - Google Patents

用于编译器优化的方法和系统 Download PDF

Info

Publication number
CN105393217A
CN105393217A CN201480041050.2A CN201480041050A CN105393217A CN 105393217 A CN105393217 A CN 105393217A CN 201480041050 A CN201480041050 A CN 201480041050A CN 105393217 A CN105393217 A CN 105393217A
Authority
CN
China
Prior art keywords
instruction
code
register
loop
compiling
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201480041050.2A
Other languages
English (en)
Other versions
CN105393217B (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.)
Kaiwei International Co
Marvell International Ltd
Marvell Asia Pte Ltd
Original Assignee
Mawier International Trade 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 Mawier International Trade Co Ltd filed Critical Mawier International Trade Co Ltd
Publication of CN105393217A publication Critical patent/CN105393217A/zh
Application granted granted Critical
Publication of CN105393217B publication Critical patent/CN105393217B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/441Register allocation; Assignment of physical memory space to logical memory space
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • G06F9/4552Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM

Landscapes

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

Abstract

本公开的多个方面提供了一种用于代码编译的方法。该方法包括接收用于编译的循环代码的指令,在将指令编译为针对循环代码的循环体之前向变量分配一个或多个寄存器,并且基于分配的寄存器将指令编译为循环体。

Description

用于编译器优化的方法和系统
引用并入
本公开要求2013年7月24日递交的第61/857,952号美国临时申请“Type-basedEarlyStageRegisterAllocationOptimizationTechnologyAppliedtoMultiRegisterVirtualMachine”的权益,该临时申请的全部内容通过引用被并入于此。
背景技术
这里所提供的背景技术描述是为了总地给出本公开的上下文的目的。目前所提名的发明人的工作(就该背景技术部分中所描述的工作的程度)以及不可作为递交申请时的现有技术的本描述的多个方面既不明确地也不隐含地被承认为本公开的现有技术。
一般来说,诸如Dalvik之类的Java虚拟机将经常使用的Java字节码(bytecode)编译为本机代码(nativecode)以提高运行时的性能。在示例中,Java虚拟机包括逐个编译字节码并且同时进行寄存器分配的即时(just-in-time)编译器。
发明内容
本公开的多个方面提供了一种用于代码编译的方法。该方法包括接收用于编译的循环代码的指令,在将指令编译为针对循环代码的循环体之前向变量分配一个或多个寄存器,并且基于分配的寄存器将指令编译为循环体。
在实施例中,循环代码为字节码形式,并且被编译为本机代码。该方法包括接收用于编译的字节码形式的循环代码的指令,在将指令编译为针对字节码形式的循环代码的本机代码形式的循环体之前向虚拟寄存器分配一个或多个物理寄存器,并且基于分配的物理寄存器将指令编译为本机代码形式的循环体。在示例中,该方法包括在循环体之前的循环入口块中添加载入指令以将虚拟寄存器中的值载入到分配的物理寄存器中。在另一示例中,该方法包括在循环体之后的循环出口块中添加卸载指令以将分配的物理寄存器中的值卸载到虚拟寄存器中。
此外,根据本公开的一方面,该方法包括确定可用物理寄存器是否满足循环代码的指令的编译要求。在示例中,该方法包括将可用物理寄存器的数目与预定限值进行比较,并且当可用物理寄存器的数目大于预定限值时在要在循环体之前被执行的本机代码的循环入口块中添加分配指令。
本公开的多个方面提供了一种存储用于使处理器执行用于代码编译的操作的程序指令的非瞬态计算机可读介质。该操作包括接收用于编译的循环代码的指令,在将指令编译为针对循环代码的循环体之前向变量分配一个或多个寄存器,并且基于分配的寄存器将指令编译为循环体。
本公开的多个方面提供了一种包括处理器和存储器的装置。处理器被配置为执行指令代码。存储器被配置为存储用于使处理器执行以下操作的指令:接收用于编译的循环代码的指令,在将指令编译为针对循环代码的循环体之前向变量分配一个或多个寄存器;并且基于分配的寄存器将指令编译为循环体。
附图说明
作为示例被提出的本公开的各个实施例将参考以下附图被详细描述,其中相似的标号指代相似的元件,并且其中:
图1示出了根据本公开的实施例的系统示例100的框图;
图2示出了概述根据本公开的实施例的编译过程200的流程图;以及
图3A和3B示出了根据本公开的实施例的代码示例。
具体实施方式
图1示出了根据本公开的实施例的系统示例100的框图。系统100包括诸如处理模块110、存储器模块120等之类的硬件组件以及诸如被存储在存储器模块120中的各种代码指令之类的软件组件。硬件组件根据软件组件进行操作以执行各种任务。系统100使用即时(JIT)编译器135,该编译器被配置为在编译循环中的一个接一个的指令之前针对循环执行循环范围的寄存器分配。
系统100可以是任何合适的系统,例如台式计算机、膝上型计算机、平板计算机、智能电话等。系统100可以包括其它合适的组件(未被示出),例如显示器、触摸屏、麦克风、通信组件等。在实施例中,系统100包括将诸如处理模块110、存储器模块120之类的各种电路集成到单个集成电路(IC)芯片上的单个IC芯片。在另一实施例中,系统100包括被适当地耦合在一起的多个IC芯片,例如处理器芯片、存储器芯片等。
处理模块110包括诸如中央处理单元(CPU)111之类的一个或多个处理器来执行各种代码指令以执行各种任务。代码指令可以是可被CPU111直接执行的低级代码,例如机器代码(本机代码),或者可以是高级代码,例如用Java语言、用C语言等写成的代码,其可被转译成机器代码并且然后被执行。
CPU111可以利用任何合适的体系结构来实现,例如x86、ARM等。在示例中,当CPU111具有x86体系结构时,CPU111能够执行专用于x86体系结构的x86指令集中的机器代码。在另一示例中,当CPU111具有ARM体系结构时,CPU111能够执行专用于ARM体系结构的ARM指令集中的机器代码。
一般来说,CPU111包括可以快速被访问的多个寄存器115(物理寄存器)。每个指令对寄存器和/或存储器模块120中的数据执行特定任务,例如加载、跳转、算术运算、逻辑运算等。在实施例中,CPU111被配置为具有流水线体系结构,并且基于寄存器的指令通常是时间上高效的。
存储器模块120包括针对各种存储需要提供存储器空间的一个或多个存储介质。在示例中,存储器模块120存储要被处理模块110执行的代码指令并且存储要被处理模块110处理的数据。在另一示例中,存储器模块120包括被分配用于系统存储的存储器空间,并且包括被分配用于用户存储的存储器空间。
存储介质包括但不限于硬盘驱动、光盘、固态驱动、只读存储器(ROM)、动态随机访问存储器(DRAM)、静态随机访问存储器(SRAM)、闪存等。
根据本公开的一方面,存储器模块120存储各种计算机程序,例如系统程序、用户应用程序等。每个计算机程序包括要被执行以执行任务的代码指令。
在图1的示例中,存储器空间130在存储器模块120中被分配用于存储适合于系统100的Java软件程序。该Java软件程序被安装在系统100中以提供Java运行时环境(JRE),例如可以在系统100中被执行的Java字节码。在示例中,Java软件程序被执行以启动系统100中的Java虚拟机用于执行Java字节码。在示例中,系统100是Android系统,并且存储器空间130存储用于Android系统的Dalvik软件程序。
在实施例中,用户应用程序的源代码用Java语言来生成。源代码被编译以生成用于用户应用的Java字节码。Java字节码可被各种Java虚拟机执行。在图1的示例中,存储器空间150被分配以存储用于用户应用的Java字节码。为了执行Java字节码,系统100启动Java虚拟机。在示例中,CPU111执行存储器空间130处的Java软件以启动Java虚拟机。Java虚拟机提供用于Java字节码的Java运行时环境。在示例中,在Java字节码的执行之后,Java虚拟机被终止。
根据本发明的一方面,Java虚拟机利用解析和即时(JIT)编译用于Java字节码执行。在示例中,Java虚拟机检测Java字节码中经常被执行的轨迹,例如路径、循环等,并且按照与比较不常被执行的轨迹不同的方式执行经常被执行的轨迹。Java虚拟机跟踪针对轨迹的执行次数。当针对轨迹的执行次数少于阈值(例如2)时,Java虚拟机通过解析(interpretation)执行轨迹;并且当针对轨迹的执行次数等于或大于阈值时,JIT编译器135将Java字节码的轨迹编译为本机代码的轨迹,并且在存储器模块120中高速缓存本机代码的轨迹。一般来说,循环中的指令经常被执行,并且JIT编译器135将循环中的指令编译为本机代码,并且高速缓存本机代码。
在图1的示例中,存储器空间170被分配作为JIT缓存以缓存经编译的本机代码。然后,对于轨迹的其它执行,Java虚拟机执行被存储在存储器空间170处的被高速缓存的本机代码。
根据本公开的一方面,JIT编译器135包括循环编译模块140,该模块被配置为将循环编译为本机代码以加速虚拟机执行。在图1的示例中,Java字节码包括循环,例如循环代码160等。循环编译模块140使循环代码160被转译为本机代码形式的循环代码180。循环代码180以加快的速度被Java虚拟机执行。
一般来说,Java字节码使用不被链接到物理寄存器的虚拟寄存器。因而,Java字节码可以由各种Java虚拟机在各种系统中被执行。在系统100执行Java字节码之时,物理寄存器115被分配给虚拟寄存器,并且基于虚拟寄存器操作的字节码指令被转译为基于物理寄存器115操作的本机代码指令。在示例中,字节码形式的算术指令可以被转译为本机代码形式的寄存器分配/加载指令、算术指令和寄存器卸载指令的组合。
在实施例中,循环编译模块140被配置为在编译循环代码160中的代码指令之前导致针对循环代码160中的一个或多个特定寄存器的循环范围寄存器分配。因而,针对特定寄存器的寄存器分配在循环代码160之中是一致的。在示例中,循环编译模块140被配置为在循环代码180中的循环体之前针对特定寄存器中的每个寄存器添加循环代码180中的单个分配/加载指令。该单个分配/加载指令在循环代码180的执行期间被执行一次。此外,在示例中,循环编译模块140被配置为在循环代码180中的循环体之后针对特定寄存器中的每个寄存器添加单个卸载指令。因而,在示例中,该卸载指令在循环代码180的执行期间被执行一次。
具体而言,在图1的示例中,循环代码180具有循环入口块182、循环体块184、循环控制块186和循环出口块188。循环入口块182在循环代码180的开始处。在示例中,循环编译模块140使得针对循环代码180的一个或多个寄存器分配/加载指令被置于循环入口块182中。
循环出口块188在循环代码180的末尾处。在示例中,循环编译模块140使得针对循环代码180的一个或多个寄存器卸载指令被置于循环出口块188中。
循环体块186包括基于分配的寄存器来操作的代码指令。在示例中,循环编译模块140基于循环入口块182中的分配的寄存器逐个转译循环代码160中的指令,并且循环编译模块140不需要在每次代码指令转移时分别添加寄存器分配/加载指令和卸载指令。
循环控制块186包括确定是否重复循环体块186或者通过循环出口块188退出循环代码180的条件。
注意存储器模块120可以具有被分配用于其它适当的模块的存储器空间。在示例中,在存储器模块120中分配存储器空间(未示出)以存储用于内核(kernel)的程序。内核是将用户应用程序与系统100的硬件组件相对接的用于系统100的操作系统的一部分。例如,内核管理来自软件组件(例如用户应用程序等)的输入/输出请求,并将它们转译成用于硬件组件(例如处理模块110、存储器模块120等)的数据处理指令。
图2示出了概述根据本公开的实施例的处理过程示例200的流程图。在示例中,用Java语言编写的应用程序被转译为Java字节码,并且该Java字节码被存储在图1的示例中的存储器模块120中的存储器空间150处。在实施例中,为了执行Java字节码,CPU111执行被存储在存储器空间130处的Java软件程序以启动Java虚拟机。Java虚拟机提供用于执行Java字节码的Java运行时环境。在示例中,Java虚拟机利用JIT编译器135来将Java字节码形式的循环编译为本机代码,并且Java虚拟机执行经编译的本机代码以提高性能。在该示例中,CPU111根据处理过程200执行循环编译模块140以将Java字节码形式的循环代码160编译为本机代码形式的循环代码180。处理过程开始于S201并进行到S210。
在S210处,接收字节码形式的循环代码。在图1的示例中,Java虚拟机接收用于执行的循环代码160。循环代码160包括字节码形式的多个指令。
在S220处,扫描循环代码以收集虚拟寄存器的列表和虚拟寄存器的信息。在图1的示例中,扫描循环代码160以收集循环代码160中所使用的虚拟寄存器的列表以及虚拟寄存器的信息,例如每个虚拟寄存器的类型、虚拟寄存器的类型一致性等。在示例中,该类型信息可以根据循环代码160中的寄存器使用和/或寄存器定义而被得到。
在S230处,该处理过程基于可用物理寄存器是否满足循环代码的虚拟寄存器分配要求的确定而继续进行。在示例中,物理寄存器的限值数目被预先确定,或者根据经验公式基于对循环代码的扫描而在S220处被确定。限值数目指示编译成功的要求。循环编译模块140将可用物理寄存器(例如尚未分配的物理寄存器)与限值数目比较。在示例中,当系统100中的可用物理寄存器的数目大于限值数目时,循环编译模块140确定可用物理寄存器满足虚拟寄存器分配要求。当可用物理寄存器满足虚拟寄存器分配要求时,处理过程进行到S240;否则,处理过程进行到S280。
在S240处,从列表获取虚拟寄存器。在示例中,标识出虚拟寄存器列表中的未分配的虚拟寄存器。
在250处,处理过程基于在循环代码中虚拟寄存器是否具有一致的类型的确定而继续进行。在图1的示例中,循环编译模块140基于在S220处所收集的寄存器的信息来确定在循环代码160中虚拟寄存器是否具有一致的类型。当在循环代码160中虚拟寄存器具有一致的类型时,处理过程进行到S260;否则,处理过程进行到S270。
在S260处,在本机代码的循环入口块中添加用于虚拟寄存器的寄存器分配/加载指令。在图1的示例中,循环编译模块140在循环入口块182中添加寄存器分配/加载指令来向虚拟寄存器分配物理寄存器并将虚拟寄存器中的数据加载到分配的物理寄存器中。此外,在实施例中,循环编译模块140在循环出口块188中添加卸载指令以将数据从分配的物理寄存器卸载到虚拟寄存器中。
在S270处,处理过程基于是否所有虚拟寄存器是否已被检查的确定而继续进行。在图1的示例中,循环编译模块140确定列表中的虚拟寄存器是否都已被检查以用于预分配。当所有虚拟寄存器都已被检查以进行预分配时,处理过程进行到S280;否则,处理过程进行到S230来确定余下的可用物理寄存器是否满足循环代码的虚拟寄存器分配要求。
在S280处,基于寄存器分配来编译循环代码中的指令以生成本机代码。在图1的示例中,循环编译模块140随后基于分配的寄存器逐个编译循环代码160中的字节码。例如,当指令中的虚拟寄存器已经通过循环入口块182中的指令被分配和加载时,循环编译模块140不会针对虚拟寄存器而在循环体184中添加单独的寄存器分配/加载指令和卸载指令。然而,当指令中的虚拟寄存器尚未被分配时,例如这是由于循环代码160中的虚拟寄存器的类型不一致,则循环编译模块140可以在循环体184中添加用于虚拟寄存器的寄存器分配/加载和卸载指令。处理过程随后进行到S280并结束。
根据本公开的实施例,图3A示出了用于编译的字节码形式的循环代码360并且图3B示出了本机代码形式的经编译的循环代码380。
在图3A的示例中,A1-A8是用于循环代码360中的指令的地址。在循环代码360中,A1-A4处的指令是算术指令。A6处的指令是比较指令并且A7处的指令是条件跳转指令。
在循环代码360中,虚拟寄存器V0、V2和V7是浮点类型的并且在循环代码之中是一致的。虚拟寄存器V6在A1、A2和A3处是浮点类型的,并且在A6处变为整数类型。
在图3B的示例中,B1-B17是用于循环代码380中的指令的地址。循环代码380包括循环入口块、循环体块和循环出口块。在循环入口块中,B1-B3处的指令相应地向虚拟寄存器V0、V2和V7分配物理寄存器,并将虚拟寄存器V0、V2和V7中的值加载到分配的物理寄存器中。在循环出口块中,B14-B16处的指令相应地将分配的物理寄存器中的值卸载到虚拟寄存器V0、V2和V7中。
因为虚拟寄存器V6的类型在循环代码360中有变化,所以针对虚拟寄存器V6的分配/加载指令和卸载指令留在循环体块中。
根据本公开的一方面,因为用于虚拟寄存器V0、V2和V7的分配/加载指令和卸载指令在循环体块之外,所以针对虚拟寄存器V0、V2和V7的卸载指令在循环代码380的执行期间被执行一次。
在对比示例中,用于虚拟寄存器V0、V2和V7的分配/加载指令和卸载指令在循环体块内,并且在每个循环迭代中被重复执行。因而,在运行期间,该对比示例需要比循环代码380更多的时钟周期。
虽然本公开的多个方面已结合作为示例被提出的特定实施例被描述过,但是可以做出对这些示例的替换、修改和改变。因此,这里所提出的实施例意在说明本发明而不是限制性的。可以在不脱离下面所给出的权利要求的范围的情况下做出改变。

Claims (24)

1.一种用于代码编译的方法,包括:
接收用于编译的循环代码的指令;
在将所述指令编译为针对所述循环代码的循环体之前向变量分配一个或多个寄存器;并且
基于分配的所述寄存器将所述指令编译为所述循环体。
2.根据权利要求1所述的方法,其中:
接收用于编译的字节码形式的所述循环代码的所述指令;
在将所述指令编译为针对所述字节码形式的所述循环代码的本机代码形式的所述循环体之前向虚拟寄存器分配一个或多个物理寄存器;并且
基于分配的所述物理寄存器将所述指令编译为所述本机代码形式的所述循环体。
3.根据权利要求1所述的方法,还包括:
扫描所述循环代码的所述指令以收集所述变量的信息。
4.根据权利要求2所述的方法,还包括:
在所述循环体之前的循环入口块中添加载入指令以将所述虚拟寄存器中的值载入到分配的所述物理寄存器。
5.根据权利要求2所述的方法,还包括:
在所述循环体之后的循环出口块中添加卸载指令以将分配的所述物理寄存器中的值卸载到所述虚拟寄存器。
6.根据权利要求2所述的方法,还包括:
确定可用物理寄存器是否满足所述循环代码的所述指令的编译要求。
7.根据权利要求6所述的方法,其中在每次分配之前确定所述可用物理寄存器是否满足所述循环代码的所述指令的所述编译要求还包括:
将可用物理寄存器的数目与预定限值进行比较。
8.根据权利要求7所述的方法,还包括:
当可用物理寄存器的所述数目大于所述预定限值时在要在所述循环体之前被执行的所述本机代码的循环入口块中添加分配指令。
9.一种存储用于使处理器执行用于代码编译的操作的程序指令的非瞬态计算机可读介质,所述操作包括:
接收用于编译的循环代码的指令;
在将所述指令编译为针对所述循环代码的循环体之前向变量分配一个或多个寄存器;并且
基于分配的所述寄存器将所述指令编译为所述循环体。
10.根据权利要求9所述的非瞬态计算机可读介质,其中所述操作包括:
接收用于编译的字节码形式的所述循环代码的所述指令;
在将所述指令编译为针对所述字节码形式的所述循环代码的本机代码形式的所述循环体之前向虚拟寄存器分配一个或多个物理寄存器;并且
基于分配的所述物理寄存器将所述指令编译为所述本机代码形式的所述循环体。
11.根据权利要求9所述的非瞬态计算机可读介质,其中所述操作还包括:
扫描所述循环代码的所述指令以收集所述变量的信息。
12.根据权利要求10所述的非瞬态计算机可读介质,其中所述操作还包括:
在所述循环体之前的循环入口块中添加载入指令以将所述虚拟寄存器中的值载入到分配的所述物理寄存器。
13.根据权利要求10所述的非瞬态计算机可读介质,其中所述操作还包括:
在所述循环体之后的循环出口块中添加卸载指令以将分配的所述物理寄存器中的值卸载到所述虚拟寄存器。
14.根据权利要求10所述的非瞬态计算机可读介质,其中所述操作还包括:
确定可用物理寄存器是否满足所述循环代码的所述指令的编译要求。
15.根据权利要求14所述的非瞬态计算机可读介质,其中所述操作还包括:
将可用物理寄存器的数目与预定限值进行比较。
16.根据权利要求15所述的非瞬态计算机可读介质,其中所述操作还包括:
当可用物理寄存器的所述数目大于所述预定限值时在要在所述循环体之前被执行的所述本机代码的循环入口块中添加分配指令。
17.一种装置,包括:
被配置为执行指令代码的处理器;以及
被配置为存储用于使所述处理器执行以下各项的指令的存储器:
接收用于编译的循环代码的指令;
在将所述指令编译为针对所述循环代码的循环体之前向变量分配一个或多个寄存器;并且
基于分配的所述寄存器将所述指令编译为所述循环体。
18.根据权利要求17所述的装置,其中所述存储器被配置为存储用于使所述处理器执行以下各项的指令:
接收用于编译的字节码形式的所述循环代码的所述指令;
在将所述指令编译为针对所述字节码形式的所述循环代码的本机代码形式的所述循环体之前向虚拟寄存器分配一个或多个物理寄存器;并且
基于分配的所述物理寄存器将所述指令编译为所述本机代码形式的所述循环体。
19.根据权利要求17所述的装置,其中所述存储器被配置为存储用于使所述处理器执行以下各项的指令:
扫描所述循环代码的所述指令以收集所述变量的信息。
20.根据权利要求18所述的装置,其中所述存储器被配置为存储用于使所述处理器执行以下各项的指令:
在所述循环体之前的循环入口块中添加载入指令以将所述虚拟寄存器中的值载入到分配的所述物理寄存器。
21.根据权利要求18所述的装置,其中所述存储器被配置为存储用于使所述处理器执行以下各项的指令:
在所述循环体之后的循环出口块中添加卸载指令以将分配的所述物理寄存器中的值卸载到所述虚拟寄存器。
22.根据权利要求18所述的装置,其中所述存储器被配置为存储用于使所述处理器执行以下各项的指令:
确定可用物理寄存器是否满足所述循环代码的所述指令的编译要求。
23.根据权利要求22所述的装置,其中所述存储器被配置为存储用于使所述处理器执行以下各项的指令:
将可用物理寄存器的数目与预定限值进行比较。
24.根据权利要求23所述的装置,其中所述存储器被配置为存储用于使所述处理器执行以下各项的指令:
当可用物理寄存器的所述数目大于所述预定限值时在要在所述循环体之前被执行的所述本机代码的循环入口块中添加分配指令。
CN201480041050.2A 2013-07-24 2014-07-23 用于编译器优化的方法和系统 Expired - Fee Related CN105393217B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201361857952P 2013-07-24 2013-07-24
US61/857,952 2013-07-24
PCT/IB2014/002374 WO2015011567A2 (en) 2013-07-24 2014-07-23 Method and system for compiler optimization

Publications (2)

Publication Number Publication Date
CN105393217A true CN105393217A (zh) 2016-03-09
CN105393217B CN105393217B (zh) 2019-04-19

Family

ID=51945939

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201480041050.2A Expired - Fee Related CN105393217B (zh) 2013-07-24 2014-07-23 用于编译器优化的方法和系统

Country Status (4)

Country Link
US (1) US9323508B2 (zh)
EP (1) EP3025228A2 (zh)
CN (1) CN105393217B (zh)
WO (1) WO2015011567A2 (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108153530A (zh) * 2017-12-26 2018-06-12 网易(杭州)网络有限公司 字节码的优化方法、装置、存储介质、处理器及终端
CN109086049A (zh) * 2018-07-25 2018-12-25 北京金和网络股份有限公司 遍历用户在线状态数据的方法
CN109240699A (zh) * 2018-04-13 2019-01-18 广州中国科学院软件应用技术研究所 一种减少细粒度随机化安全优化带来的寄存器溢出方法

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9323508B2 (en) * 2013-07-24 2016-04-26 Marvell World Trade Ltd. Method and system for compiler optimization
US11061575B2 (en) * 2017-09-19 2021-07-13 International Business Machines Corporation Read-only table of contents register
US10705973B2 (en) 2017-09-19 2020-07-07 International Business Machines Corporation Initializing a data structure for use in predicting table of contents pointer values
US10620955B2 (en) 2017-09-19 2020-04-14 International Business Machines Corporation Predicting a table of contents pointer value responsive to branching to a subroutine
US10896030B2 (en) 2017-09-19 2021-01-19 International Business Machines Corporation Code generation relating to providing table of contents pointer values
US10713050B2 (en) 2017-09-19 2020-07-14 International Business Machines Corporation Replacing Table of Contents (TOC)-setting instructions in code with TOC predicting instructions
US10884929B2 (en) 2017-09-19 2021-01-05 International Business Machines Corporation Set table of contents (TOC) register instruction
US10725918B2 (en) 2017-09-19 2020-07-28 International Business Machines Corporation Table of contents cache entry having a pointer for a range of addresses
CN115577017B (zh) * 2022-11-21 2023-02-28 四川蜀天信息技术有限公司 一种基于序列化和反序列化检索数据的方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5854933A (en) * 1996-08-20 1998-12-29 Intel Corporation Method for optimizing a computer program by moving certain load and store instructions out of a loop
CN102231118A (zh) * 2011-07-25 2011-11-02 中国科学技术大学 一种基于龙芯3a向量访存的编译优化方法
CN102236575A (zh) * 2011-07-20 2011-11-09 复旦大学 一种基于寄存器映射的动态编译方法
US20130111453A1 (en) * 2011-10-31 2013-05-02 Oracle International Corporation Throughput-aware software pipelining for highly multi-threaded systems

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5367684A (en) * 1992-11-30 1994-11-22 Intel Corporation Register allocation using an improved register candidate usage matrix
US6009272A (en) * 1997-06-30 1999-12-28 Sun Microsystems, Inc. Register allocation via selective spilling
US6374403B1 (en) * 1999-08-20 2002-04-16 Hewlett-Packard Company Programmatic method for reducing cost of control in parallel processes
US7725885B1 (en) * 2000-05-09 2010-05-25 Hewlett-Packard Development Company, L.P. Method and apparatus for trace based adaptive run time compiler
US6907601B1 (en) * 2000-06-30 2005-06-14 Intel Corporation Method and apparatus for inserting more than one allocation instruction within a routine
US20030079210A1 (en) * 2001-10-19 2003-04-24 Peter Markstein Integrated register allocator in a compiler
US7308682B2 (en) * 2003-04-25 2007-12-11 Intel Corporation Method and apparatus for recovering data values in dynamic runtime systems
WO2005106682A1 (en) * 2004-04-30 2005-11-10 Intel Corporation Caching run-time variables in optimized code
US8516465B2 (en) * 2009-12-04 2013-08-20 Oracle America, Inc. Register prespill phase in a compiler
US9323508B2 (en) * 2013-07-24 2016-04-26 Marvell World Trade Ltd. Method and system for compiler optimization

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5854933A (en) * 1996-08-20 1998-12-29 Intel Corporation Method for optimizing a computer program by moving certain load and store instructions out of a loop
CN102236575A (zh) * 2011-07-20 2011-11-09 复旦大学 一种基于寄存器映射的动态编译方法
CN102231118A (zh) * 2011-07-25 2011-11-02 中国科学技术大学 一种基于龙芯3a向量访存的编译优化方法
US20130111453A1 (en) * 2011-10-31 2013-05-02 Oracle International Corporation Throughput-aware software pipelining for highly multi-threaded systems

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
YUAN ZHANG 等: "Swift: A Register-based JIT Compiler for Embedded JVMs", 《2012 ACM VEE"12》 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108153530A (zh) * 2017-12-26 2018-06-12 网易(杭州)网络有限公司 字节码的优化方法、装置、存储介质、处理器及终端
CN109240699A (zh) * 2018-04-13 2019-01-18 广州中国科学院软件应用技术研究所 一种减少细粒度随机化安全优化带来的寄存器溢出方法
CN109240699B (zh) * 2018-04-13 2022-01-04 广州中国科学院软件应用技术研究所 一种减少细粒度随机化安全优化带来的寄存器溢出方法
CN109086049A (zh) * 2018-07-25 2018-12-25 北京金和网络股份有限公司 遍历用户在线状态数据的方法

Also Published As

Publication number Publication date
CN105393217B (zh) 2019-04-19
WO2015011567A2 (en) 2015-01-29
WO2015011567A3 (en) 2015-04-23
US9323508B2 (en) 2016-04-26
US20150033214A1 (en) 2015-01-29
EP3025228A2 (en) 2016-06-01

Similar Documents

Publication Publication Date Title
CN105393217A (zh) 用于编译器优化的方法和系统
KR101381274B1 (ko) 효율적인 동적 이진 변환을 위한 레지스터 매핑 방법, 시스템 및 컴퓨터 판독가능 저장 매체
US10705972B2 (en) Dynamic adaptation of memory page management policy
US9329867B2 (en) Register allocation for vectors
US9304749B2 (en) Method and system for instruction scheduling
US10740152B2 (en) Technologies for dynamic acceleration of general-purpose code using binary translation targeted to hardware accelerators with runtime execution offload
US8621443B2 (en) Processor emulation using speculative forward translation
US20040073894A1 (en) Optimization of n-base typed arithmetic expressions
US8887127B2 (en) Web browsing apparatus and method through storing and optimizing JAVASCRIPT® code
US9971703B2 (en) Technologies for position-independent persistent memory pointers
US9569234B2 (en) Dynamic bit-width modification of internal pointers of a virtual machine
US20170228315A1 (en) Execution using multiple page tables
US8984231B2 (en) Methods and apparatus to perform adaptive pre-fetch operations in managed runtime environments
CN114610394B (zh) 指令调度的方法、处理电路和电子设备
WO2018125408A1 (en) Automatic identification and generation of non-temporal store and load operations in a dynamic optimization environment
CN114218152B (zh) 流处理方法、处理电路和电子设备
US10176112B2 (en) Information processing device, method, and non-transitory computer-readable recording medium storing information processing program for loading code into reconfigurable integrated circuit
CN112783823A (zh) 共享代码的系统与代码共享方法
US9747146B2 (en) Method and system for memory access protection
Ramanan JIT through the ages Evolution of just-in-time compilation from theoretical performance improvements to smartphone runtime and browser optimizations

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20200515

Address after: Singapore City

Patentee after: Marvell Asia Pte. Ltd.

Address before: Ford street, Grand Cayman, Cayman Islands

Patentee before: Kaiwei international Co.

Effective date of registration: 20200515

Address after: Ford street, Grand Cayman, Cayman Islands

Patentee after: Kaiwei international Co.

Address before: Hamilton, Bermuda

Patentee before: Marvell International Ltd.

Effective date of registration: 20200515

Address after: Hamilton, Bermuda

Patentee after: Marvell International Ltd.

Address before: Babado J San Mega Le

Patentee before: MARVELL WORLD TRADE Ltd.

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

Granted publication date: 20190419

Termination date: 20200723

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