CN108733410B - 一种指令优化方法 - Google Patents
一种指令优化方法 Download PDFInfo
- Publication number
- CN108733410B CN108733410B CN201810328972.1A CN201810328972A CN108733410B CN 108733410 B CN108733410 B CN 108733410B CN 201810328972 A CN201810328972 A CN 201810328972A CN 108733410 B CN108733410 B CN 108733410B
- Authority
- CN
- China
- Prior art keywords
- instruction
- assignment
- modifying
- optimization
- variable
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开一种指令优化方法,包括如下步骤:步骤1,获取结构化文本程序编译后的指令文件,获取数据区、指令区内容;步骤2,分析数据区,提取变量信息;步骤3,分三次遍历指令区,依次采用赋值优化、代数简化、引用点处理的优化方法,对指令进行合并、删除、调整操作;步骤4,将优化后的数据、指令信息存储为文件。此种优化方法可在ST程序编译后,通过分析既定格式的指令文件,进行指令的可靠快速优化,提高程序运行效率。
Description
技术领域
本发明属于工业控制编程领域,具体涉及结构化文本编译后指令优化处理方法。
背景技术
IEC61131是国际电工委员会(IEC)颁布的可编程控制器(PLC)国际标准,规范可编程控制器编程工具和应用控制程序的开发。IEC61131-3定义了结构化文本(ST)语言,ST是一种是类似于Pascal的高级编程语言,特别适合复杂的算法技术,程序结构清晰,便于编程人员和操作维护人员进行算法沟通。结构化文本需要转换为装置可运行的指令文件才能运行。在嵌入式装置解释执行二进制指令时,对实时性要求很高。常用的编译器通常是在编译阶段进行优化,但由于局限于局部函数的优化,欠缺整体的考虑,而且采用的优化方法是个黑盒子,存在漏洞且无法验证对比分析。因此,需要一种快速、安全、可靠、高效、独立的指令优化方法,本案由此产生。
发明内容
本发明的目的,在于提供一种指令优化方法,其可在ST程序编译后,通过分析既定格式的指令文件,进行指令的可靠快速优化,提高程序运行效率。
为了达成上述目的,本发明的解决方案是:
一种指令优化方法,包括如下步骤:
步骤1,获取结构化文本程序编译后的指令文件,获取数据区、指令区内容;
步骤2,分析数据区,提取变量信息;
步骤3,分三次遍历指令区,依次采用赋值优化、代数简化、引用点处理的优化方法,对指令进行合并、删除、调整操作;
步骤4,将优化后的数据、指令信息存储为文件。
上述步骤1中,编译后的指令文件包括文件头、数据区和指令区,数据区中包括引用的外部变量、ST程序定义的变量、编译产生的临时变量,指令区采用三地址码表达式。
上述指令区三地址码表达式的格式是:指令类型、左操作数在数据区地址、右操作数在数据区地址。
上述步骤3中,赋值优化的具体内容是:对于右值变量都为常量类型的指令,直接计算常量表达式,并将运算指令修改为赋值指令;对于赋值指令,若赋值的右值变量为临时变量,并且该临时变量为前一条指令的左值变量,则删除该条赋值语句,将前一条指令的左值变量修改为被删除的赋值指令的左值变量。
上述步骤3中,代数简化的具体内容是:若加法指令的加数为0,则修改为赋值指令;若减法指令的减数为0,则修改为赋值指令;若乘法指令的乘数为0,则修改为赋值为0的指令;若乘法指令的乘数为1,则删除该指令;若除法指令的除数为1,则删除该指令;若或运算的1个右值形参为FALSE,则修改为赋值指令;若或运算的1个右值形参为TRUE,则修改为赋值为TRUE的指令;若与运算的1个右值形参为FALSE,则修改为赋值为FALSE的指令;若与运算的1个右值形参为TRUE,则修改为赋值指令。
上述步骤3中,引用点处理的具体内容是:统计各条指令的左值变量在后续指令中被作为右值变量的计数,若引用计数为0,则删除该条指令。
上述步骤4后,还包括:反汇编优化前后的指令文件,进行伪指令的文本对比,实现优化前后的白盒验证。
采用上述方案后,本发明具有如下有益效果:通过对编译后的指令进行快速扫描和优化,通过多个实测样本数据统计,可提升20%的运行速度,提高了嵌入式装置程序运行时的效率,满足了工控实时性要求。
附图说明
图1是本发明的流程图。
具体实施方式
以下将结合附图,对本发明的技术方案及有益效果进行详细说明。
如图1所示,本发明提供一种指令优化方法,包括如下步骤:
(1)获取结构化文本(ST)程序编译后的指令文件;读取文件头,获取数据区、指令区内容。优选地,指令文件划分为文件头、数据区、指令区。数据区中存储变量索引、变量类型、变量属性、初始值等信息,包括引用的外部变量、ST程序定义的变量、编译产生的临时变量。指令区中按照三地址码的格式,即指令类型、左操作数(左值变量)在数据区地址、右操作数(右值变量、形参)在数据区地址。部分指令只有1个右值变量,则省略第3个形参。优选地,可定义表1所示的三地址码:
表1三地址码指令示例
指令序号 | 三地址码格式 | 备注 |
1 | asgn rd,rs | 赋值语句rd=rs |
2 | add rd,rs1,rs2 | 加法运算rd=rs1+rs2 |
3 | sub rd,rs1,rs2 | 减法运算rd=rs1-rs2 |
4 | mul rd,rs1,rs2 | 乘法运算rd=rs1*rs2 |
5 | div rd,rs1,rs2 | 除法运算rd=rs1/rs2 |
6 | and rd,rs1,rs2 | 逻辑与rd=rs1&rs2 |
7 | or rd,rs1,rs2 | 逻辑或rd=rs1|rs2 |
… | … |
(2)分析数据区,获取变量序号、变量类型、是否为常量、临时变量等标志属性。其中临时变量可进行增加、删除操作,常量变量可以直接运算。
(3)第1次遍历指令区,处理常量运算,并优化临时变量赋值指令。其中对于右值变量都为常量类型的指令,则直接计算常量表达式,并将运算指令修改为赋值指令。对于赋值指令,若赋值的右值变量为临时变量,并且该临时变量为前一条指令的左值变量,则删除该条赋值语句,将前一条指令的左值变量修改为被删除的赋值指令的左值变量。
例如:
a)对于add var,10,5的加法指令,可直接替换为asgn var,15的赋值指令。
b)对于add tmp1,var2,var3
asgn var1,tmp1的指令,可优化为add var1,var2,var3
(4)第2次遍历指令区,进行代数简化。
a)若加法指令的被加数为0,则修改为赋值指令;
例如add var1,var2,0优化为asgn var1,var2
例如add var1,0,var3优化为asgn var1,var3
b)若减法指令的被减数为0,则修改为赋值指令;
例如sub var1,var2,0优化为asgn var1,var2
c)若乘法指令的被乘数为0,则修改为赋值为0的指令;
例如mul var1,var2,0优化为asgn var1,0
d)若乘法指令的被乘数为1,则删除该指令;
例如mul var1,var2,1的指令var1=var2*1可直接删除。
e)若除法指令的被除数为1,则删除该指令;
例如div var1,var2,1的指令var1=var2/1可直接删除;
f)若或运算的1个右值形参为FALSE,则修改为赋值指令;
例如or var1,var2,FALSE优化为asgn var1,var2
g)若或运算的1个右值形参为TRUE,则修改为赋值为TRUE的指令;
例如or var1,var2,TRUE优化为asgn var1,TRUE
h)若与运算的1个右值形参为FALSE,则修改为赋值为FALSE的指令;例如
and var1,var2,FALSE优化为asgn var1,FALSE
i)若与运算的1个右值形参为TRUE,则修改为赋值指令。例如
and var1,var2,TRUE优化为asgn var1,var2
(5)第3次遍历指令区,进行变量引用点分析,去除未使用变量和无效指令。
统计各条指令的左值变量在后续指令中被作为右值变量的计数,若引用计数为0,则删除该条指令。例如下述指令:add var1,var2,var3,若var1在后续指令中被引用的次数为0,则该条指令为无效指令,可删除。若优化后临时变量未被引用,则可从数据区删除。
按照前述赋值优化、代数简化、引用点处理的优化顺序,可有效去除冗余无用指令。
(6)将优化后的数据、指令信息存储为文件。进一步地,可以反汇编优化前后的指令文件,进行伪指令的文本对比,可直观查看被修改的指令、被删除的指令,并通过优化工具分析出处理过的指令数。
综合上述,本发明一种指令优化方法:获取IEC61131-3的结构化文本语言编译器形成的指令文本,解析文件头,分析数据区、指令区,对常量型变量的算术逻辑运算的三地址码进行直接计算替换为赋值语句;分析赋值指令上下文,有条件合并赋值和计算指令;对三地址码进行代数简化处理;确定每个变量的定值点和引用点,去除未引用赋值和计算指令。通过上述可控高效的优化方法,提升ST语言编译后指令的执行效率。
以上实施例仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明保护范围之内。
Claims (3)
1.一种指令优化方法,其特征在于包括如下步骤:
步骤1,获取结构化文本程序编译后的指令文件,获取数据区、指令区内容;
步骤2,分析数据区,提取变量信息;
步骤3,分三次遍历指令区,依次采用赋值优化、代数简化、引用点处理的优化方法,对指令进行合并、删除、调整操作;
赋值优化的具体内容是:对于右值变量都为常量类型的指令,直接计算常量表达式,并将运算指令修改为赋值指令;对于赋值指令,若赋值的右值变量为临时变量,并且该临时变量为前一条指令的左值变量,则删除该条赋值指令,将前一条指令的左值变量修改为被删除的赋值指令的左值变量;
代数简化的具体内容是:若加法指令的加数为0,则修改为赋值指令;若减法指令的减数为0,则修改为赋值指令;若乘法指令的乘数为0,则修改为赋值为0的指令;若乘法指令的乘数为1,则删除该指令;若除法指令的除数为1,则删除该指令;若或运算的1个右值形参为FALSE,则修改为赋值指令;若或运算的1个右值形参为TRUE,则修改为赋值为TRUE的指令;若与运算的1个右值形参为FALSE,则修改为赋值为FALSE的指令;若与运算的1个右值形参为TRUE,则修改为赋值指令;
引用点处理的具体内容是:统计各条指令的左值变量在后续指令中被作为右值变量的计数,若引用计数为0,则删除该条指令;
步骤4,将优化后的数据、指令信息存储为文件;
步骤5,反汇编优化前后的指令文件,进行伪指令的文本对比,实现优化前后的白盒验证。
2.如权利要求1所述的一种指令优化方法,其特征在于:所述步骤1中,编译后的指令文件包括文件头、数据区和指令区,数据区中包括引用的外部变量、ST程序定义的变量、编译产生的临时变量,指令区采用三地址码表达式。
3.如权利要求2所述的一种指令优化方法,其特征在于:所述指令区三地址码表达式的格式是:指令类型、左操作数在数据区地址、右操作数在数据区地址。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810328972.1A CN108733410B (zh) | 2018-04-13 | 2018-04-13 | 一种指令优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810328972.1A CN108733410B (zh) | 2018-04-13 | 2018-04-13 | 一种指令优化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108733410A CN108733410A (zh) | 2018-11-02 |
CN108733410B true CN108733410B (zh) | 2021-10-01 |
Family
ID=63940804
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810328972.1A Active CN108733410B (zh) | 2018-04-13 | 2018-04-13 | 一种指令优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108733410B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110058884B (zh) * | 2019-03-15 | 2021-06-01 | 佛山市顺德区中山大学研究院 | 用于计算型存储指令集运算的优化方法、系统及存储介质 |
CN113741411B (zh) * | 2021-11-08 | 2022-02-01 | 西安热工研究院有限公司 | 一种分散控制系统全局变量点产物文件生成方法和系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8086832B2 (en) * | 2006-05-19 | 2011-12-27 | International Business Machines Corporation | Structure for dynamically adjusting pipelined data paths for improved power management |
CN102520665A (zh) * | 2011-12-23 | 2012-06-27 | 中国科学院自动化研究所 | 开放式机器人示教装置和机器人控制系统 |
CN102929214A (zh) * | 2011-08-11 | 2013-02-13 | 西门子公司 | 一种嵌入式多处理单元并行处理系统及其运行方法 |
CN103559069A (zh) * | 2013-11-18 | 2014-02-05 | 中国科学院声学研究所 | 一种基于代数系统的跨文件过程间优化方法 |
CN107015840A (zh) * | 2017-03-17 | 2017-08-04 | 南京南瑞继保电气有限公司 | 一种解析器的快速执行方法及快速执行系统 |
CN107193745A (zh) * | 2017-05-26 | 2017-09-22 | 中国人民解放军信息工程大学 | PLC程序到NuSMV输入模型的自动化构建方法 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1002267A4 (en) * | 1997-08-05 | 2001-02-07 | Lutris Technologies Inc | METHOD AND DEVICE FOR GENERATING INFORMATION ON A USER INTERFACE |
US20080313282A1 (en) * | 2002-09-10 | 2008-12-18 | Warila Bruce W | User interface, operating system and architecture |
JP3896087B2 (ja) * | 2003-01-28 | 2007-03-22 | 松下電器産業株式会社 | コンパイラ装置およびコンパイル方法 |
US20050193378A1 (en) * | 2004-03-01 | 2005-09-01 | Breault Richard E. | System and method for building an executable program with a low probability of failure on demand |
WO2010028395A1 (en) * | 2008-09-08 | 2010-03-11 | Credit Suisse Securities (Usa) Llc | Apparatuses, methods and systems for providing a virtual development and deployment environment including real and synthetic data |
CN107122163A (zh) * | 2017-04-26 | 2017-09-01 | 郑州云海信息技术有限公司 | 一种SmartRack‑ARM服务器系统性能优化的方法 |
CN107168761B (zh) * | 2017-05-19 | 2019-10-29 | 南京南瑞继保电气有限公司 | 一种选择语句优化编译方法 |
-
2018
- 2018-04-13 CN CN201810328972.1A patent/CN108733410B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8086832B2 (en) * | 2006-05-19 | 2011-12-27 | International Business Machines Corporation | Structure for dynamically adjusting pipelined data paths for improved power management |
CN102929214A (zh) * | 2011-08-11 | 2013-02-13 | 西门子公司 | 一种嵌入式多处理单元并行处理系统及其运行方法 |
CN102520665A (zh) * | 2011-12-23 | 2012-06-27 | 中国科学院自动化研究所 | 开放式机器人示教装置和机器人控制系统 |
CN103559069A (zh) * | 2013-11-18 | 2014-02-05 | 中国科学院声学研究所 | 一种基于代数系统的跨文件过程间优化方法 |
CN107015840A (zh) * | 2017-03-17 | 2017-08-04 | 南京南瑞继保电气有限公司 | 一种解析器的快速执行方法及快速执行系统 |
CN107193745A (zh) * | 2017-05-26 | 2017-09-22 | 中国人民解放军信息工程大学 | PLC程序到NuSMV输入模型的自动化构建方法 |
Non-Patent Citations (1)
Title |
---|
结构化文本语言编译器的虚拟机指令设计与优化;陈宏君,张磊;《单片机与嵌入式系统应用》;20180501(第5期);第23-28页 * |
Also Published As
Publication number | Publication date |
---|---|
CN108733410A (zh) | 2018-11-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109254776B (zh) | 多语言代码编译方法及编译器 | |
US7725883B1 (en) | Program interpreter | |
US7966610B2 (en) | Application of optimization techniques to intermediate representations for code generation | |
Ismail et al. | Quantitative overhead analysis for python | |
CN109918081B (zh) | 一种编译方法及编译器 | |
CN108733410B (zh) | 一种指令优化方法 | |
Darvas et al. | Formal verification of complex properties on PLC programs | |
CN109062152B (zh) | 一种基于逻辑组态产生的Local变量在线监控方法 | |
CN101714098A (zh) | 通过修改跟踪操作减少跟踪开销 | |
JP3813087B2 (ja) | プログラム変換方法、コンピュータ装置及びプログラム | |
Yan et al. | Compiling ladder diagram into instruction list to comply with IEC 61131-3 | |
CN117573142B (zh) | 基于模拟执行的java代码反混淆器 | |
CN118092936A (zh) | 一种生成可视化数据流的方法及系统 | |
CN112114817B (zh) | 基于cobol语言的数据字典字段信息获取方法及装置 | |
JP5038760B2 (ja) | ソースコード変換装置及びソースコード変換方法 | |
CN113835688B (zh) | 一种科学计算语言解释器的对象封装方法 | |
CN114816436A (zh) | 一种基于反汇编的源码解析装置 | |
CN112799724B (zh) | 一种稳定控制装置策略表解析计算方法及装置 | |
Flynn et al. | On Instruction Sets and Their Fornmts | |
CN114780105A (zh) | 一种基于值流分析的Golang程序高效过程间逃逸分析方法 | |
US20090112568A1 (en) | Method for Generating a Simulation Program Which Can Be Executed On a Host Computer | |
Hanson | Simple code optimizations | |
CN113326048B (zh) | 浮点数计算精度处理方法、系统、介质及设备 | |
CN118509159B (zh) | 一种基于即时编译的智能合约加速执行方法和装置 | |
Sun et al. | Dynamic branch resolution based on combined static analyses |
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 |