CN112540750B - 自适应内建函数与指令操作选择翻译方法 - Google Patents
自适应内建函数与指令操作选择翻译方法 Download PDFInfo
- Publication number
- CN112540750B CN112540750B CN201910897633.XA CN201910897633A CN112540750B CN 112540750 B CN112540750 B CN 112540750B CN 201910897633 A CN201910897633 A CN 201910897633A CN 112540750 B CN112540750 B CN 112540750B
- Authority
- CN
- China
- Prior art keywords
- instruction
- function
- built
- pseudo
- assembly
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/37—Compiler construction; Parser generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30134—Register stacks; shift registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
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
本发明公开一种自适应内建函数与指令操作选择翻译方法,基于编译器实现,包括以下步骤:S1、编译器使用最高优化等级编译该内建函数,当汇编指令少于或等于3条时,将SDNode一对一的降级为汇编指令;S2、当汇编指令大于3条时,判断该内建函数预设的使用频率,若使用频率不高,则以内建函数可拆分的伪指令节点和定义的虚拟寄存器为参数,通过BuildMI函数将内建函数降级为汇编指令;S3、若使用频率较高,则以内建函数的输入和输出作为源寄存器和目的寄存器,使用BuildMI函数创建一条伪指令,使用BuildMI函数扩展上述伪指令,并将扩展后的伪指令降级为汇编指令。本发明可以根据内建函数实现的复杂度选择内建函数节点降级的途径,以使程序的编译运行达到最优化的效果。
Description
技术领域
本发明涉及一种自适应内建函数与指令操作选择翻译方法,属于计算机技术领域。
背景技术
内建函数是用于在编译阶段进行替换的机器指令块,可以起到性能优化的作用。因为执行这些函数调用会在编译时变为直接指令块的执行,而不会产生指令跳转、堆栈等相关操作而引起的函数调用开销,例如有一些函数直接就有一条对应的机器指令来实现,如果改用普通函数调用势必性能大打折扣。
在进行编译器向量模块支持的开发过程中,其中大部分接口的实现都是通过内建函数的形式来完成的,这样就避免了因指令跳转、堆栈等相关操作而引起的函数调用开销,这样有利于减少程序的编译运行时间,便于进行程序的优化,可以起到性能优化的作用。而内建函数降级成与目标相关的代码与常规操作逐步降级转化为目标相关代码过程不同。内建函数是直接从前端发射到后端的,然后在后端进行指令的降级选择匹配操作。
内建函数的节点降低为机器指令的过程,实际上就是一个节点拆分为多个指令相关节点,然后与机器指令匹配的过程。当前内建函数节点降级转为机器指令的过程主要是通过转化为机器指令节点,然后通过指令匹配完成到机器指令的转换,该方法对于一条内建函数要转换为多条机器指令的情况来说,不是很容易实现的,当需要替换的机器指令节点很多时,构建节点之间的关系就会显得很复杂,不易实现,而且容易出错。因此,如何实现将一条内建函数要转换为多条机器指令,成为本领域技术人员努力的方向。
发明内容
本发明的目的是提供一种自适应内建函数与指令操作选择翻译方法,该自适应内建函数与指令操作选择翻译方法在实现内建函数降级时可以根据内建函数实现的复杂度选择内建函数节点降级的途径,能减少开发的时间,以使程序的编译运行达到最优化的效果,降低编译器开发的难度。
为达到上述目的,本发明采用的技术方案是:一种自适应内建函数与指令操作选择翻译方法,基于编译器实现,包括以下步骤:
S1、当需要将某一内建函数转换为汇编指令时,编译器使用最高优化等级编译该内建函数,由此确定该内建函数所需转换的汇编指令,当汇编指令少于或等于3条时,将该内建函数节点拆分为与汇编指令相对应的伪指令节点,这些伪指令节点在后端描述中与汇编指令一一对应,可使用上述伪指令节点创建SDNode,并将SDNode一对一的降级为汇编指令,具体步骤如下:
S11、编译器使用最高优化等级编译需要转换为汇编指令的内建函数,生成对应的汇编指令,并由此确定要实现该内建函数需要的汇编指令;
S12、在后端描述中寻找表示步骤S11中生成汇编指令的伪指令节点,若没有找到,则按照LLVM后端对汇编指令描述的语法规则,定义新的伪指令节点,以描述S11中生成的汇编指令;
S13、当步骤S11中需要的汇编指令少于或等于3条时,参照步骤S11中汇编指令之间的指令顺序和寄存器关系,使用步骤S12中定义的伪指令节点创建SDNode,并将SDNode一对一的降级为汇编指令;
S2、对于步骤S1中生成的汇编指令,当汇编指令条数大于3条时,将该内建函数节点拆分为与汇编指令相对应的伪指令节点,此伪指令节点在后端描述中与汇编指令一一对应,编译器判断该内建函数预设的使用频率,若使用频率不高,即该内建函数在用户程序中出现次数小于或等于3,则以内建函数可拆分的伪指令节点和定义的虚拟寄存器为参数,通过BuildMI函数,以创建伪指令的方式,将内建函数降级为汇编指令,具体步骤如下:
S21、编译器使用最高优化等级编译需要转换为汇编指令的内建函数,生成对应的汇编指令,并由此确定要实现该内建函数需要的汇编指令;
S22、在后端描述中寻找表示步骤S21中生成汇编指令的伪指令节点,若没有找到,则按照LLVM后端对汇编指令描述的语法规则,定义新的伪指令节点,以描述S21中生成的汇编指令;
S23、使用BuildMI函数,以步骤S22中定义的伪指令节点以及虚拟寄存器为参数,参照步骤S21中生成的汇编指令之间的指令顺序、寄存器关系,创建伪指令,并将上述伪指令直接匹配到汇编指令;
S3、在步骤S2中,编译器判断该内建函数预设的使用频率,若使用频率较高,即该内建函数在用户程序中出现次数大于3,则以内建函数的输入和输出作为源寄存器和目的寄存器,使用BuildMI函数创建一条伪指令,然后以步骤S2中定义的伪指令节点以及物理寄存器为参数,使用BuildMI函数扩展上述伪指令,并将扩展后的伪指令降级为汇编指令,具体步骤如下:
S31、编译器使用最高优化等级编译需要转换为汇编指令的内建函数,生成对应的汇编指令,并由此确定要实现该内建函数需要的汇编指令;
S32、在后端描述中寻找表示步骤S31中生成汇编指令的伪指令节点,若没有找到,则按照LLVM后端对汇编指令描述的语法规则,定义新的伪指令节点,以描述步骤S31中生成的汇编指令;
S33、使用BuildMI函数,在该函数中以内建函数中的输入与输出作为源寄存器和目的寄存器,创建一条伪指令;
S34、在伪指令扩展阶段,使用BuildMI函数,在该函数中以步骤S32中定义的伪指令节点以及分配的物理寄存器为参数,参照步骤S31中生成的汇编指令之间的指令顺序、寄存器关系,创建伪指令,并将上述伪指令直接匹配到汇编指令。
由于上述技术方案的运用,本发明与现有技术相比具有下列优点:
本发明自适应内建函数与指令操作选择翻译方法,其在内建函数降级为目标相关代码的过程中,提供三种途径实现内建函数的指令降级过程,给内建函数的降级提供多种选择,使开发人员在实现内建函数降级时可以根据内建函数实现的复杂度选择内建函数节点降级的途径,能减少开发的时间,以使程序的编译运行达到最优化的效果,降低编译器开发的难度,还有利于开发人员更方便的添加实现新的内建函数。
附图说明
附图1为本发明自适应内建函数与指令操作选择翻译方法流程示意图;
附图2为本发明自适应内建函数与指令操作选择翻译方法流程图。
具体实施方式
实施例:一种自适应内建函数与指令操作选择翻译方法,基于编译器实现,包括以下步骤:
S1、当需要将某一内建函数转换为汇编指令时,编译器使用最高优化等级编译该内建函数,由此确定该内建函数所需转换的汇编指令,当汇编指令少于或等于3条时,将该内建函数节点拆分为与汇编指令相对应的伪指令节点,这些伪指令节点在后端描述中与汇编指令一一对应,可使用上述伪指令节点创建SDNode,并将SDNode一对一的降级为汇编指令,具体步骤如下:
S11、编译器使用最高优化等级编译需要转换为汇编指令的内建函数,生成对应的汇编指令,并由此确定要实现该内建函数需要的汇编指令;
S12、在后端描述中寻找表示步骤S11中生成汇编指令的伪指令节点,若没有找到,则按照LLVM后端对汇编指令描述的语法规则,定义新的伪指令节点,以描述S11中生成的汇编指令;
S13、当步骤S11中需要的汇编指令少于或等于3条时,参照步骤S11中汇编指令之间的指令顺序和寄存器关系,使用步骤S12中定义的伪指令节点创建SDNode,并将SDNode一对一的降级为汇编指令;
S2、对于步骤S1中生成的汇编指令,当汇编指令条数大于3条时,将该内建函数节点拆分为与汇编指令相对应的伪指令节点,此伪指令节点在后端描述中与汇编指令一一对应,编译器判断该内建函数预设的使用频率,若使用频率不高,即该内建函数在用户程序中出现次数小于或等于3,则以内建函数可拆分的伪指令节点和定义的虚拟寄存器为参数,通过BuildMI函数,以创建伪指令的方式,将内建函数降级为汇编指令,具体步骤如下:
S21、编译器使用最高优化等级编译需要转换为汇编指令的内建函数,生成对应的汇编指令,并由此确定要实现该内建函数需要的汇编指令;
S22、在后端描述中寻找表示步骤S21中生成汇编指令的伪指令节点,若没有找到,则按照LLVM后端对汇编指令描述的语法规则,定义新的伪指令节点,以描述S21中生成的汇编指令;
S23、使用BuildMI函数,以步骤S22中定义的伪指令节点以及虚拟寄存器为参数,参照步骤S21中生成的汇编指令之间的指令顺序、寄存器关系,创建伪指令,并将上述伪指令直接匹配到汇编指令;
S3、在步骤S2中,编译器判断该内建函数预设的使用频率,若使用频率较高,即该内建函数在用户程序中出现次数大于3,则以内建函数的输入和输出作为源寄存器和目的寄存器,使用BuildMI函数创建一条伪指令,然后以步骤S2中定义的伪指令节点以及物理寄存器为参数,使用BuildMI函数扩展上述伪指令,并将扩展后的伪指令降级为汇编指令,具体步骤如下:
S31、编译器使用最高优化等级编译需要转换为汇编指令的内建函数,生成对应的汇编指令,并由此确定要实现该内建函数需要的汇编指令;
S32、在后端描述中寻找表示步骤S31中生成汇编指令的伪指令节点,若没有找到,则按照LLVM后端对汇编指令描述的语法规则,定义新的伪指令节点,以描述步骤S31中生成的汇编指令;
S33、使用BuildMI函数,在该函数中以内建函数中的输入与输出作为源寄存器和目的寄存器,创建一条伪指令;
S34、在伪指令扩展阶段,使用BuildMI函数,在该函数中以步骤S32中定义的伪指令节点以及分配的物理寄存器为参数,参照步骤S31中生成的汇编指令之间的指令顺序、寄存器关系,创建伪指令,并将上述伪指令直接匹配到汇编指令。
实施例进一步解释如下:
本发明可以通过三种途径,使内建函数的节点降级为机器指令的节点,最后与机器指令匹配。
将内建函数节点转化为机器指令相关节点,然后与相关机器指令进行选择匹配的方式实现内建函数到机器指令的降级,将内建函数节点转换为伪指令节点,然后通过相应函数直接创建伪指令的方式实现内建函数到机器指令的降级,将内建函数节点转化为伪指令节点后,再进行伪指令扩展的方式实现内建函数到机器指令的降级;根据内建函数实现复杂度和指令支持的实际情况,可以选择一种最佳情况来实现内建函数到机器指令的降级过程。
具体实现流程图如图1所示。
从前端发射到后端的内建函数,在后端进行降级并与机器指令进行匹配,其主要做的就是将一个内建函数节点拆分为几个机器指令节点,然后与相关机器指令进行匹配,实现一个内建函数转换为多条机器指令的过程。本发明主要分为三步:
第一步,对于转换后机器指令较少的情况,直接将内建函数节点转化为指令相关节点,通过这些机器指令相关节点,完成到机器指令的降级。具体的:
1、确定要实现该内建函数需要的机器指令以及该内建函数会生成的汇编代码;
2、在后端描述中找到表示所需指令的节点,若没有则按照语法规则创建表示这些机器指令所需的节点;
3、按照会生成的汇编代码,使用这些节点按照一定的逻辑关系创建SDNode。
以上方法在机器指令较多时,构建节点之间的关系就会显得很复杂,不容易实现,而且还容易出错,但该方法在后期可以进行优化。
第二步,对于转换后要生成多条指令的情况,可以将内建函数节点转化为伪指令节点,若是该内建函数的使用频率不高,可以直接创建伪指令。具体的:
1、确定要实现该内建函数需要的机器指令以及该内建函数会生成的汇编代码;
2、在后端描述中找到表示所需指令的节点,若没有则按照语法规则创建表示这些机器指令所需的节点;
3、通过BuildMI函数直接创建伪指令,这些伪指令创建时,使用的都是表示汇编指令的节点,所以后面能直接匹配转换为汇编代码,因此创建这些伪指令时,一定要注意其创建顺序,以及这些节点之后所跟的寄存器之间的关系。
以上方法比较简单直观,缺点是使用这种方法就相当于直接将指令的实现写死,后期不能进行优化。
第三步,对于使用频率较高的内建函数来说,对于将内建函数转化为的伪指令节点,可以首先注册所需的寄存器,然后再进行伪指令扩展。具体的:
1、确定要实现该内建函数需要的机器指令以及该内建函数会生成的汇编代码;
2、在后端描述中找到表示所需指令的节点,若没有则按照语法规则创建表示这些机器指令所需的节点;
3、使用BuildMI函数创建一条伪指令节点,在其后注册好所需的寄存器,并设置好这些寄存器的状态;
4、在伪指令扩展阶段,在通过BuildMI使用表示汇编指令的节点创建伪指令,然后匹配转换为汇编代码。
以上方法在扩展伪指令时,寄存器分配已经完成,此时扩展伪指令操作是直接对物理寄存器操作的,不需要进行寄存器与内存之间的交互;该方法比较适用于使用频率较高的内建函数,这样就能省去一些寄存器与内存之间交互而花销的时间。
采用上述自适应内建函数与指令操作选择翻译方法时,其在内建函数降级为目标相关代码的过程中,提供三种途径实现内建函数的指令降级过程,给内建函数的降级提供多种选择,使开发人员在实现内建函数降级时可以根据内建函数实现的复杂度选择内建函数节点降级的途径,能减少开发的时间,以使程序的编译运行达到最优化的效果,降低编译器开发的难度,还有利于开发人员更方便的添加实现新的内建函数。
上述实施例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人士能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所作的等效变化或修饰,都应涵盖在本发明的保护范围之内。
Claims (1)
1.一种自适应内建函数与指令操作选择翻译方法,其特征在于:基于编译器实现,包括以下步骤:
S1、当需要将某一内建函数转换为汇编指令时,编译器使用最高优化等级编译该内建函数,由此确定该内建函数所需转换的汇编指令,当汇编指令少于或等于3条时,将该内建函数节点拆分为与汇编指令相对应的伪指令节点,这些伪指令节点在后端描述中与汇编指令一一对应,使用上述伪指令节点创建SDNode,并将SDNode一对一的降级为汇编指令,具体步骤如下:
S11、编译器使用最高优化等级编译需要转换为汇编指令的内建函数,生成对应的汇编指令,并由此确定要实现该内建函数需要的汇编指令;
S12、在后端描述中寻找表示步骤S11中生成汇编指令的伪指令节点,若没有找到,则按照LLVM后端对汇编指令描述的语法规则,定义新的伪指令节点,以描述S11中生成的汇编指令;
S13、当步骤S11中需要的汇编指令少于或等于3条时,参照步骤S11中汇编指令之间的指令顺序和寄存器关系,使用步骤S12中定义的伪指令节点创建SDNode,并将SDNode一对一的降级为汇编指令;
S2、对于步骤S1中生成的汇编指令,当汇编指令条数大于3条时,将该内建函数节点拆分为与汇编指令相对应的伪指令节点,此伪指令节点在后端描述中与汇编指令一一对应,编译器判断该内建函数预设的使用频率,若使用频率不高,即该内建函数在用户程序中出现次数小于或等于3,则以内建函数可拆分的伪指令节点和定义的虚拟寄存器为参数,通过BuildMI函数,以创建伪指令的方式,将内建函数降级为汇编指令,具体步骤如下:
S21、编译器使用最高优化等级编译需要转换为汇编指令的内建函数,生成对应的汇编指令,并由此确定要实现该内建函数需要的汇编指令;
S22、在后端描述中寻找表示步骤S21中生成汇编指令的伪指令节点,若没有找到,则按照LLVM后端对汇编指令描述的语法规则,定义新的伪指令节点,以描述S21中生成的汇编指令;
S23、使用BuildMI函数,以步骤S22中定义的伪指令节点以及虚拟寄存器为参数,参照步骤S21中生成的汇编指令之间的指令顺序、寄存器关系,创建伪指令,并将上述伪指令直接匹配到汇编指令;
S3、在步骤S2中,编译器判断该内建函数预设的使用频率,若使用频率较高,即该内建函数在用户程序中出现次数大于3,则以内建函数的输入和输出作为源寄存器和目的寄存器,使用BuildMI函数创建一条伪指令,然后以步骤S2中定义的伪指令节点以及物理寄存器为参数,使用BuildMI函数扩展上述伪指令,并将扩展后的伪指令降级为汇编指令,具体步骤如下:
S31、编译器使用最高优化等级编译需要转换为汇编指令的内建函数,生成对应的汇编指令,并由此确定要实现该内建函数需要的汇编指令;
S32、在后端描述中寻找表示步骤S31中生成汇编指令的伪指令节点,若没有找到,则按照LLVM后端对汇编指令描述的语法规则,定义新的伪指令节点,以描述步骤S31中生成的汇编指令;
S33、使用BuildMI函数,在该函数中以内建函数中的输入与输出作为源寄存器和目的寄存器,创建一条伪指令;
S34、在伪指令扩展阶段,使用BuildMI函数,在该函数中以步骤S32中定义的伪指令节点以及分配的物理寄存器为参数,参照步骤S31中生成的汇编指令之间的指令顺序、寄存器关系,创建伪指令,并将上述伪指令直接匹配到汇编指令。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910897633.XA CN112540750B (zh) | 2019-09-23 | 2019-09-23 | 自适应内建函数与指令操作选择翻译方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910897633.XA CN112540750B (zh) | 2019-09-23 | 2019-09-23 | 自适应内建函数与指令操作选择翻译方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112540750A CN112540750A (zh) | 2021-03-23 |
CN112540750B true CN112540750B (zh) | 2022-11-15 |
Family
ID=75012913
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910897633.XA Active CN112540750B (zh) | 2019-09-23 | 2019-09-23 | 自适应内建函数与指令操作选择翻译方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112540750B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113050952B (zh) * | 2021-04-19 | 2024-07-05 | 杭州至千哩科技有限公司 | 伪指令编译方法、装置、计算机设备及存储介质 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102830975B (zh) * | 2012-08-15 | 2015-11-18 | 深圳市翌日科技有限公司 | 一种汇编语言到高级语言的代码转换方法和装置 |
CN102830954B (zh) * | 2012-08-24 | 2014-10-29 | 北京中科信芯科技有限责任公司 | 指令调度方法及装置 |
CN103645930B (zh) * | 2013-12-18 | 2017-03-08 | 中国科学院声学研究所 | 汇编级跨文件调度框架的构建方法 |
-
2019
- 2019-09-23 CN CN201910897633.XA patent/CN112540750B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN112540750A (zh) | 2021-03-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10732943B2 (en) | Programming model of neural network-oriented heterogeneous computing platform | |
CN110149800B (zh) | 一种用于处理与源程序的源代码相关联的抽象语法树的装置 | |
JP4778286B2 (ja) | コンパイラ装置 | |
NZ241693A (en) | Compiling computer code: elements of intermediate language flow graph include indications of effects and dependencies on other elements | |
JPH07105012A (ja) | 言語処理プログラムのコンパイル処理方式 | |
JP2001166947A (ja) | コンパイル処理方式 | |
CN117075909B (zh) | 用于实现并行编程的编译方法、电子设备和介质 | |
US8341613B2 (en) | Reducing stack space consumption via head-call optimization | |
CN103235724A (zh) | 基于原子操作语义描述的多源二进制代码一体化翻译方法 | |
CN112540750B (zh) | 自适应内建函数与指令操作选择翻译方法 | |
CN116088861A (zh) | 面向可编程交换芯片的p4后端编译方法及系统 | |
US20110231830A1 (en) | Loop Transformation for Computer Compiler Optimization | |
CN112416313B (zh) | 支持大整数数据类型和运算符的编译方法 | |
CN112527393A (zh) | 面向主从融合架构处理器的指令调度优化装置和方法 | |
CN105117269B (zh) | 基于向量中断的编译器的优化方法 | |
US20010039653A1 (en) | Program conversion method, program conversion apparatus, storage medium for storing program conversion program and program conversion program | |
CN111596970A (zh) | 动态库延迟加载方法、装置、设备和存储介质 | |
CN118401931A (zh) | 处理用户查询 | |
CN111596923B (zh) | Haxe静态链接库构建方法、装置和电子设备 | |
CN114217771A (zh) | 一种基于国产异构平台的c++向量编程方法 | |
CN112579059B (zh) | 支持有限域数据类型和运算符的编译方法 | |
US20040194073A1 (en) | Optimization based on simulated linking | |
Povazan et al. | A retargetable C compiler for embedded systems | |
CN112506613A (zh) | Gitlab-ci自动识别Maven变更子模块并推送docker镜像的方法 | |
CN113260976A (zh) | 用于在编译源代码中调度指令技术 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |