一种基于代数演算的中间代码优化方法与流程

文档序号:11864468阅读:231来源:国知局

本发明涉及形式化语义领域,尤其涉及基于代数演算的中间代码优化方法。



背景技术:

嵌入式方法的硬件往往根据具体应用而定制,为了获得更多的软件支持,通常需要编写专用的编译器以完成高级语言到具体的目标平台代码的转换,并同时满足嵌入式方法对高性能、高可靠性、低功耗等要求。不同目标平台拥有不同的特性,开发目标平台专用的编译器往往成本太高。本发明提出了基于代数演算的中间代码方法,根据可由用户定制的优化策略,对中间代码进行优化,生成高效的目标平台机器码。



技术实现要素:

本发明提出了基于代数演算的中间代码优化方法,所述方法包括:

高级语言转换步骤,将输入的源代码、其他形式的中间语言程序转换成为所述优化方法使用的中间语言程序,所述其他形式的中间语言指与所述优化方法所使用的中间语言不同的中间语言;

优化步骤,向用户提供优化策略定制,允许用户提供目标平台硬件特性,定制特别的优化策略,使用优化策略对所述高级语言转换步骤的中间语言进行优化,得到经过优化的中间代码;

目标代码生成步骤,将经过优化的中间代码生成目标平台的可执行机器码。

其中,所述优化步骤中向用户提供优化策略定制包括:

对优化后的中间语言程序进行控制流和数据流分析,总结出优化目标并转换为代数规则。

其中,所述优化目标包括消除复杂算子或消除循环冗余。

其中,对优化后的中间语言程序进行控制流分析得到该程序的循环结构,通过把所述循环转换为有限条件选择来消除循环。

其中,所述代数规则为代数等式的形式,等式左边是优化前的结构,等式右边是优化后的结构。

其中,对所述中间语言程序进行到达定值数据流分析,得到该程序中每个点处的变量值,从而对所述程序进行合并已知量的优化操作。

其中,此时代数规则表现为代数等式的形式,等式左侧位变量组成的表达式,而等式右侧为左侧表达式当前的值,此优化规则减少公共表达式计算的次数。

其中,所述优化步骤中向用户提供优化策略定制包括:

对优化后中间语言程序进行大量的仿真实验,分析实验结果得出优化目标并转换为代数规则。

其中,不同程序的应用场景不同,利用程序仿真模拟运行场景,收集程序运行时信息,制定优化方向,使得优化更符合当前待优化程序的特点。

本发明的有益效果包括:

本发明基于形式化代数语义,所有的输入代码都可以在代数规则的支持下进行等价变化。代数规则的合理性,保证了转换的正确性。

本发明根据不同的优化策略,可以对中间语言进行不同程度的优化,保证本方法广泛的应用范围。

本发明提供半自动化、半自动化的程序中间代码优化。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1是本发明基于代数演算的中间代码优化方法流程图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施方式。虽然附图中显示了本公开的示例性实施方式,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

根据本发明的实施方式,提出一种基于代数演算的中间代码优化方法,所述方法包括:高级语言转换步骤,将输入的源代码、其他形式的中间语言程序转换成为所述优化方法使用的中间语言程序,所述其他形式的中间语言指与所述优化方法所使用的中间语言不同的中间语言;

优化步骤,向用户提供优化策略定制,允许用户提供目标平台硬件特性,定制特别的优化策略,使用优化策略对所述高级语言转换步骤的中间语言进行优化,得到经过优化的中间代码;

目标代码生成步骤,将经过优化的中间代码生成目标平台的可执行机器码。

其中,所述优化步骤中向用户提供优化策略定制包括:

对优化后的中间语言程序进行控制流和数据流分析,总结出优化目标并转换为代数规则。

其中,所述优化目标包括消除复杂算子或消除循环冗余。

其中,对优化后的中间语言程序进行控制流分析得到该程序的循环结构,通过把所述循环转换为有限条件选择来消除循环。

其中,所述代数规则为代数等式的形式,等式左边是优化前的结构,等式右边是优化后的结构。

其中,对所述中间语言程序进行到达定值数据流分析,得到该程序中每个点处的变量值,从而对所述程序进行合并已知量的优化操作。

其中,此时代数规则表现为代数等式的形式,等式左侧位变量组成的表达式,而等式右侧为左侧表达式当前的值,此优化规则减少公共表达式计算的次数。

其中,所述优化步骤中向用户提供优化策略定制包括:

对优化后中间语言程序进行大量的仿真实验,分析实验结果得出优化目标并转换为代数规则。

其中,不同程序的应用场景不同,利用程序仿真模拟运行场景,收集程序运行时信息,制定优化方向,使得优化更符合当前待优化程序的特点。

下面具体讲述本发明所述基于代数演算的中间代码优化方法。

实施例1

本实施例以应用本发明基于代数演算的中间代码优化方法对LLVM中间语言的优化为例。

LLVM是一个支持多种高级语言、多种目标平台,多阶段优化的编译器架构,遵循了标准的编译器流程准则,分为高级语言前端、中间代码优化器与后端目标代码生成器三个部分。LLVM前端首先将源程序转换为LLVMIR程序,经过一系列的控制流、数据流分析后对LLVM IR程序进行优化,再根据具体的目标处理器平台生成对应的目标代码。

LLVM IR有三种形式:编译器IR、写入文件的字节码IR,以及作为汇编语言的IR。这三种表现形式是等价的,它是LLVM中间代码优化段的不同表现形式。将LLVM IR作为高级语言转换模块的输入,将其转换为本发明所述的基于代数演算的中间代码优化方法使用的中间语言程序,作为代数系统模块的输入。

通过对控制流与数据流的分析,目标处理平台的特征等信息收集,我们将提出程序转化的定向规则,称为程序转换规则,从而有效地支撑LLVM IR程序的优化,提高程序质量,最终形成一套针对LLVM IR程序优化的代数演算方法,然后利用策略定制器将代数演算方法存入优化策略库。

优化器可以利用优化策略对中间代码进行标准的标量优化、循环优化以及进程间优化等。

目标代码生成模块可以根据代数系统模块优化过的中间代码,来生成可在目标平台上高效运行的机器码。

下面详细介绍使用本发明所述系统对LLVM IR程序进行优化。

首先,对LLVM IR程序应用本发明的方法,将其转换为一种中间语言表示形式。

然后,使用本发明为LLVM IR制定优化策略,优化策略通过以下两种方式得到:

1)对LLVM IR程序进行控制流和数据流分析,总结出优化目标(如消除复杂算子、消除循环冗余等)并转换为代数规则。对程序进行控制流分析可以得到程序的控制流结构,得到循环结构后可以通过把循环转换为有限条件选择来消除循环。此处得到的优化规则可以为代数等式的形式,等式左边是优化前的结构,等式右边是优化后的结构。对程序进行到达定值数据流分析,可以得到程序中每个点处的变量值,因此可以对程序进行合并已知量的优化操作。此时优化规则表现为代数等式的形式,等式左侧位变量组成的表达式,而等式右侧为左侧表达式当前的值,此优化规则可减少公共表达式计算的次数。

2)对LLVM IR程序进行大量的仿真实验,分析实验结果得出优化目标并转换为代数规则。不同程序的应用场景不同,利用程序仿真可以模拟一些运行场景,收集程序运行时信息(CUP使用率、I/O次数、是否可并行执行等),制定优化方向,使得优化更符合当前待优化程序的特点。

得到优化策略以后,优化器会自动的应用优化策略到中间语言表示的程序上,最终达到优化的目的。

最后,可以根据优化过的中间代码,来生成可在目标平台上高效运行的机器码。

以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1