CN108427558A - 一种c编译器的窥孔优化方法 - Google Patents
一种c编译器的窥孔优化方法 Download PDFInfo
- Publication number
- CN108427558A CN108427558A CN201810132178.XA CN201810132178A CN108427558A CN 108427558 A CN108427558 A CN 108427558A CN 201810132178 A CN201810132178 A CN 201810132178A CN 108427558 A CN108427558 A CN 108427558A
- Authority
- CN
- China
- Prior art keywords
- peephole
- rule
- file
- optimization
- module
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4434—Reducing the memory space required by the program code
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种C编译器的窥孔优化方法,该方法通过解析窥孔优化规则模块依次遍历窥孔规则文件并进行保存,然后通过解析汇编文件模块直接遍历C编译器生成的目标汇编文件并进行保存;最后通过窥孔优化执行模块把解析汇编文件模块中保存的文件和解析窥孔优化规则模块中保存的文件进行依次遍历,如果二者匹配,那么就使用该窥孔规则中的目标指令系列替换汇编文件中相应的指令代码,最后把优化后的代码重新写回到汇编文件中,从而达到优化的效果。
Description
技术领域
本发明属于C编译器技术领域,特别涉及嵌入式C编译器的窥孔优化方法。
背景技术
目前应用程序五花八门,这些应用程序基本上都是使用一种或者多种开发语言和一套优秀的编译工具链来进行开发,但是对于嵌入式领域的开发者来说,C语言可以说是嵌入式领域的王者语言,因为C语言不管从开发效率、移植性、代码可读性来说都是汇编语言无法比拟的,而使用C语言就必须使用C编译器把C语言编译成低阶的汇编语言,目前市面上的C编译器有很多,且市场上的很多C编译器效率都是非常高的,比如GCC、PIC C、Keil C等编译器编译效率是极高的,这些著名的C编译器的优化一般都是基于数据流、控制流上对代码进行优化的,很少会涉及到在对最后生成的汇编代码再进行一次优化,不管C编译器的效率有多高,最后生成的汇编代码可能会有部分冗余代码的产生,这严重影响了C编译器的效率。
如专利申请201610158850.3公开了一种嵌入式C编译器的实现方法及系统,其方法包括:步骤A:创建解释型语言脚本将用户在PC端编写C语言源代码编译成指定执行地址的目标代码;步骤B:将目标代码写入嵌入式下位机指定编译地址;步骤C:下位机创建现场保护机制,然后执行目标代码;步骤D:下位机执行完目标代码执行以后,跳转到现场保护位置,恢复现场,继续执行下位机其他代码。其系统包括PC端及上位机,本发明将客户的编译型代码转成工业控制器能够识别的目标语言即机器代码,同时执行效率快,大大提高了用户在组态软件领域研发的便利性,具有良好的经济和社会效益。
因此,如何实现对C编译器所生成的汇编代码文件优化是迫切需要解决的问题。
发明内容
基于此,因此本发明的首要目地是提供一种C编译器的窥孔优化方法,该方法可对生成的汇编代码文件进行优化,提高C编译器的优化效率,减少C编译器所生成的汇编代码,进而提高嵌入式应用程序的运行速度并能够节省ROMSizes来增加更丰富的功能。
本发明的另一个目地在于提供一种C编译器的窥孔优化方法,该方法通过建立一系列窥孔优化替换规则,然后对C编译器产生的汇编文件进行扫描,如果符合窥孔优化的规则那么就使用效率高的代码替换之前产生的代码,从而提高代码生成效率。
为实现上述目的,本发明的技术方案为:
一种C编译器的窥孔优化方法,其特征在于该方法通过解析窥孔优化规则模块依次遍历窥孔规则文件并进行保存,然后通过解析汇编文件模块直接遍历C编译器生成的目标汇编文件并进行保存;最后通过窥孔优化执行模块把解析汇编文件模块中保存的文件和解析窥孔优化规则模块中保存的文件进行依次遍历,如果二者匹配,那么就使用该窥孔规则中的目标指令系列替换汇编文件中相应的指令代码,最后把优化后的代码重新写回到汇编文件中,从而达到优化的效果。
进一步,所述解析窥孔优化规则模块对于窥孔规则文件,使用一个双向链表来保存窥孔源指令系列和目的指令系列。
进一步,所述解析汇编文件模块对每一行汇编文件使用双向链表来保存,以便后续进行窥孔优化的实施。
进一步,所述窥孔优化执行模块的功能:它把解析汇编文件模块中保存的指令系列链表和解析窥孔优化规则模块中保存的规则链表进行依次遍历,如果汇编指令系列和窥孔规则中的一条规则中的源指令系列匹配,那么就使用该窥孔规则中的目标指令系列替换汇编文件中相应的指令代码,最后把优化后的代码重新写回到汇编文件中,从而达到优化的效果。
本发明窥孔优化执行模块依次遍历解析汇编文件模块中保存的指令系列,遍历的过程中不断的去试探解析窥孔规则模块中保存的窥孔规则,最后把指令系列容器中的指令重新写回到汇编文件中,成而达到优化的目的,由此提高了C编译器的优化效率,减少C编译器所生成的汇编代码,进而提高嵌入式应用程序的运行速度并能够节省ROM Sizes来增加更丰富的功能。
同时,该方法通过建立一系列窥孔优化替换规则,然后对C编译器产生的汇编文件进行扫描,如果符合窥孔优化的规则那么就使用效率高的代码替换之前产生的代码,从而提高代码生成效率。
附图说明
图1是本发明所实施的解析窥孔规则模块流程图。
图2是本发明所实施解析汇编文件模块流程图。
图3是本发明所实施窥孔优化执行模块流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
图1所示,为本发明所实现的解析窥孔规则模块流程图,图中所示,解析窥孔规则模块初始化后,打开窥孔规则文件,获取第一条窥孔规则文件,然后解析窥孔规则获取源、目的指令系列;解析成功后,保存源、目的指令系列到容器中,再获取下一条窥孔规则文件,按照上述方式依次遍历窥孔规则文件,使用一个双向链表来保存窥孔源指令系列和目的指令系列。
解析窥孔规则模块是依次遍历窥孔规则文件,使用一个双向链表来保存窥孔源指令系列和目的指令系列,一般的规则文件中每条规则大概如下:
replace restart{
movlw 0
iorwf%1,0
}by{
movfw%1
}
意思是使用movfw%1替换movlw 0和iorwf%1,0,movlw 0和iorwf%1,0就是源指令系列,movfw%1就是目的指令系列,其中%1是通配符,可以是任意symbol。
图2所示,为解析汇编文件模块流程图。图中所示,首先,解析汇编文件模块初始化,然后打开目标汇编文件,获取第一条有意义的汇编指令,并保存汇编指令到容器中,然后再获取下一条有意义的汇编指令,由此遍历C编译器生成的目标汇编文件,对每一行汇编文件使用双向链表来保存,以便后续进行窥孔优化的实施。
图3所示,为窥孔优化执行模块流程图。图中所示,首先,初始化窥孔优化执行模块,然后窥孔优化执行模块遍历解析汇编文件模块中保存的指令系列;再遍历解析窥孔规则模块中保存的源指令系列,判断解析汇编文件模块中保存的指令系列是否与解析窥孔规则模块中保存的窥孔规则源指令系列匹配;
把解析汇编文件模块中保存的指令系列链表和解析窥孔优化规则模块中保存的规则链表进行依次遍历,如果汇编指令系列和窥孔规则中的一条规则中的源指令系列匹配,那么就使用该窥孔规则中的目标指令系列替换汇编文件中相应的指令代码,最后把优化后的代码重新写回到汇编文件中,从而达到优化的效果。
如果不匹配,则把解析汇编文件模块中保存指令系列作为最新指令系列输出到汇编文件中。
因此,本发明窥孔优化执行模块依次遍历解析汇编文件模块中保存的指令系列容器,遍历的过程中不断的去试探解析窥孔规则模块中保存的窥孔规则,如果符合窥孔优化规则使用规则中的目的规则指令系列替换指令容器中对应的指令系列,不断地进行试探和替换,直到没有符合窥孔规则为止,最后把指令系列容器中的指令重新写回到汇编文件中,成而达到优化的目的;由此提高了C编译器的优化效率,减少C编译器所生成的汇编代码,进而提高嵌入式应用程序的运行速度并能够节省ROM Sizes来增加更丰富的功能。
同时,该方法通过建立一系列窥孔优化替换规则,然后对C编译器产生的汇编文件进行扫描,如果符合窥孔优化的规则那么就使用效率高的代码替换之前产生的代码,从而提高代码生成效率。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (4)
1.一种C编译器的窥孔优化方法,其特征在于该方法通过解析窥孔优化规则模块依次遍历窥孔规则文件并进行保存,然后通过解析汇编文件模块直接遍历C编译器生成的目标汇编文件并进行保存;最后通过窥孔优化执行模块把解析汇编文件模块中保存的文件和解析窥孔优化规则模块中保存的文件进行依次遍历,如果二者匹配,那么就使用该窥孔规则中的目标指令系列替换汇编文件中相应的指令代码,最后把优化后的代码重新写回到汇编文件中,从而达到优化的效果。
2.如权利要求1所述的C编译器的窥孔优化方法,其特征在于所述解析窥孔优化规则模块对于窥孔规则文件,使用一个双向链表来保存窥孔源指令系列和目的指令系列。
3.如权利要求2所述的C编译器的窥孔优化方法,其特征在于所述解析汇编文件模块对每一行汇编文件使用双向链表来保存,以便后续进行窥孔优化的实施。
4.如权利要求3所述的C编译器的窥孔优化方法,其特征在于所述窥孔优化执行模块的功能:它把解析汇编文件模块中保存的指令系列链表和解析窥孔优化规则模块中保存的规则链表进行依次遍历,如果汇编指令系列和窥孔规则中的一条规则中的源指令系列匹配,那么就使用该窥孔规则中的目标指令系列替换汇编文件中相应的指令代码,最后把优化后的代码重新写回到汇编文件中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810132178.XA CN108427558A (zh) | 2018-02-09 | 2018-02-09 | 一种c编译器的窥孔优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810132178.XA CN108427558A (zh) | 2018-02-09 | 2018-02-09 | 一种c编译器的窥孔优化方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108427558A true CN108427558A (zh) | 2018-08-21 |
Family
ID=63156678
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810132178.XA Pending CN108427558A (zh) | 2018-02-09 | 2018-02-09 | 一种c编译器的窥孔优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108427558A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109491667A (zh) * | 2018-12-21 | 2019-03-19 | 芯海科技(深圳)股份有限公司 | 一种c语言编译效率优化的方法 |
CN110874643A (zh) * | 2019-11-08 | 2020-03-10 | 中科寒武纪科技股份有限公司 | 机器学习指令的转换方法及装置、板卡、主板、电子设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3220055B2 (ja) * | 1997-07-17 | 2001-10-22 | 松下電器産業株式会社 | 機械語命令列またはアセンブリ言語命令列を最適化する最適化装置、及び、高級言語で記載されたソースプログラムを機械語またはアセンブリ言語の命令列に変換するコンパイラ装置。 |
CN104049949A (zh) * | 2014-05-30 | 2014-09-17 | 南阳理工学院 | 一种面向bswap指令的窥孔优化方法 |
-
2018
- 2018-02-09 CN CN201810132178.XA patent/CN108427558A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3220055B2 (ja) * | 1997-07-17 | 2001-10-22 | 松下電器産業株式会社 | 機械語命令列またはアセンブリ言語命令列を最適化する最適化装置、及び、高級言語で記載されたソースプログラムを機械語またはアセンブリ言語の命令列に変換するコンパイラ装置。 |
CN104049949A (zh) * | 2014-05-30 | 2014-09-17 | 南阳理工学院 | 一种面向bswap指令的窥孔优化方法 |
Non-Patent Citations (1)
Title |
---|
李海丰: ""嵌入式C编译器优化技术的研究与实现"", 《中国优秀硕士学位论文全文数据库信息科技辑》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109491667A (zh) * | 2018-12-21 | 2019-03-19 | 芯海科技(深圳)股份有限公司 | 一种c语言编译效率优化的方法 |
CN110874643A (zh) * | 2019-11-08 | 2020-03-10 | 中科寒武纪科技股份有限公司 | 机器学习指令的转换方法及装置、板卡、主板、电子设备 |
CN110874643B (zh) * | 2019-11-08 | 2021-01-12 | 安徽寒武纪信息科技有限公司 | 机器学习指令的转换方法及装置、板卡、主板、电子设备 |
CN112667241A (zh) * | 2019-11-08 | 2021-04-16 | 安徽寒武纪信息科技有限公司 | 机器学习指令的转换方法及装置、板卡、主板、电子设备 |
CN112667241B (zh) * | 2019-11-08 | 2023-09-29 | 安徽寒武纪信息科技有限公司 | 机器学习指令的转换方法及装置、板卡、主板、电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11868745B2 (en) | System and method for compiling high-level language code into a script executable on a blockchain platform | |
Yakdan et al. | No More Gotos: Decompilation Using Pattern-Independent Control-Flow Structuring and Semantic-Preserving Transformations. | |
KR100334995B1 (ko) | 방향성 비사이클 그래프 내의 트리 패턴을 정합함으로써최적화 코드를 리타겟팅하는 프로그래밍 방법 및 장치 | |
US8418155B2 (en) | Generating parallel SIMD code for an arbitrary target architecture | |
EP3465428B1 (en) | Sample driven profile guided optimization with precise correlation | |
US7917899B2 (en) | Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus | |
US9619215B2 (en) | Pre-compiler | |
CN107203535B (zh) | 信息查询方法及装置 | |
US9152400B2 (en) | Eliminating redundant reference count operations in intermediate representation of script code | |
Blickstein et al. | The GEM optimizing compiler system | |
JP2001022591A (ja) | コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法 | |
Blindell | Instruction Selection | |
CN108427558A (zh) | 一种c编译器的窥孔优化方法 | |
Lano et al. | Code Generation by Example. | |
CN103077066A (zh) | 一种编译时嵌入产品关键信息的方法和系统 | |
Rothamel et al. | Generating optimized code from SCR specifications | |
Engel et al. | Enhanced structural analysis for c code reconstruction from ir code | |
Hnat et al. | A modular and extensible macroprogramming compiler | |
EP1943589A2 (en) | Method for generating a simulation program which can be executed on a host computer | |
Stanier | Removing and restoring control flow with the value state dependence graph | |
JP2007114934A (ja) | コンパイラシステム | |
Lossing et al. | From data to effects dependence graphs: source-to-source transformations for C | |
Breslav | Grammatical Aspects: Coping with Duplication and Tangling in Language Specifications | |
Barzdins et al. | Grammatical Aspects: Coping with Duplication and Tangling in Language Specifications1 | |
CN117369867A (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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20180821 |