基于LLVM的编译优化方法、装置、设备及介质制造方法及图纸

技术编号:35705326 阅读:17 留言:0更新日期:2022-11-23 15:01
本发明专利技术公开了一种基于LLVM的编译优化方法、装置、设备及介质,涉及LLVM的技术领域,本发明专利技术在不修改LLVM开源库源码的基础上,通过将非标准对齐方式的内存地址替换成标准对齐方式的目标内存地址的方式,适配目标平台非标准内存对齐的变量。并且通过将编译耗时的编译接口替换为编译函数,再调用编译函数参照目标内存地址进行编译的方式,将部分LLVM的编译效率慢、编译效率低下的API指令进行函数封装与对应的接口替换。从而解决LLVM在对目标平台非标准对齐方式数据进行编译优化时,编译速度慢,编译效率低的技术问题,提升LLVM的实时编译速度和效率。度和效率。度和效率。

【技术实现步骤摘要】
基于LLVM的编译优化方法、装置、设备及介质


[0001]本专利技术涉及LLVM的
,尤其涉及一种基于LLVM的编译优化方法、基于LLVM的编译优化装置、基于LLVM的编译优化设备及计算机存储介质。

技术介绍

[0002]目前,在LLVM(low level virtual machine,底层虚拟机)的编译优化过程中,由于部分目标平台不是标准内存对齐方式,从而需要修改LLVM的源码去进行适配。具体的,在表达式运算过程中,需要将低精度数据提升到高精度数据类型,但是部分32位LLVM的API(Application Programming Interface,应用程序编程接口)对64/128位等目标平台的高精度数据类型运算编译速度较慢,影响编译效率,从而需要对LLVM底层生成汇编代码的机制进行更改。而LLVM开源库代码庞大,模块复杂,文档少且全英文,不易理解,维护工作量非常巨大,修改底层代码的影响不确定,极易带来不稳定的因素和后果。

技术实现思路

[0003]本专利技术的主要目的在于提供一种基于LLVM的编译优化方法、基于LLVM的编译优化装置、基于LLVM的编译优化设备及计算机存储介质,旨在解决现有技术中LLVM在对目标平台非标准对齐方式数据进行编译优化时,编译速度慢,编译效率低的技术问题。
[0004]为实现上述目的,本专利技术提供一种基于LLVM的编译优化方法,所述基于LLVM的编译优化方法,包括以下步骤:
[0005]确定抽象语法树对应的第一变量内存地址信息,其中,所述抽象语法树为LLVM前端对目标平台的源代码进行转化得到;
[0006]将所述第一变量内存地址信息中的第一类型地址调整为第二类型地址,得到第二变量内存地址信息,所述第一类型地址为非标准对齐方式的内存地址,所述第二类型地址为标准对齐方式的内存地址;
[0007]确定所述抽象语法树对应的编译组件集合,将所述编译组件集合中的目标编译接口替换为对应的编译函数,得到目标编译组件集合,其中,所述目标编译接口为表达式运算过程对应的编译接口;
[0008]调用所述目标编译组件集合并参照所述第二变量内存地址信息进行编译,生成所述源代码对应的LLVM中间代码。
[0009]进一步地,所述将所述第一变量内存地址信息中的第一类型地址调整为第二类型地址,得到第二变量内存地址信息的步骤之前,还包括:
[0010]构建预设局部变量池,所述预设局部变量池中包括临时变量,所述临时变量与所述第一类型地址数据类型的标准对齐方式对应;
[0011]所述将所述第一变量内存地址信息中的第一类型地址调整为第二类型地址,得到第二变量内存地址信息的步骤,包括:
[0012]通过所述临时变量将所述第一变量内存地址信息中的第一类型地址调整为第二
类型地址,得到第二变量内存地址信息。
[0013]进一步地,所述通过所述临时变量将所述第一变量内存地址信息中的第一类型地址调整为第二类型地址的步骤,包括:
[0014]确定所述预设局部变量池中是否存在目标临时变量,其中,所述目标临时变量的数据类型与所述第一类型地址的对应的变量相同;
[0015]若存在,则将所述第一类型地址的变量替换为所述目标临时变量;
[0016]若不存在,则将所述第一类型地址的变量替换为数组类型的所述临时变量。
[0017]进一步地,所述将所述第一类型地址的变量替换为数组类型的所述临时变量的步骤,包括:
[0018]确定所述第一类型地址的变量的第一存储空间位数;
[0019]确定预设局部变量池中数组类型的所述临时变量的第二存储空间位数;
[0020]基于所述第一存储空间位数和所述第二存储空间位数,将所述第一类型地址的变量替换为数组类型的所述临时变量;
[0021]其中,所述临时变量的数组大小为所述第一存储空间位数相较于所述第二存储空间位数的倍数。
[0022]进一步地,所述将所述编译组件集合中的目标编译接口替换为对应的编译函数的步骤之前,还包括:
[0023]确定所述目标编译接口对应的编译指令;
[0024]将所述编译指令编译为所述目标平台的可执行文件;
[0025]将所述可执行文件封装为所述编译函数。
[0026]进一步地,所述将所述可执行文件封装为所述编译函数的步骤之后,还包括:
[0027]生成所述目标编译接口和所述编译函数之间的对应关系;
[0028]所述将所述编译组件集合中的目标编译接口替换为对应的编译函数的步骤之前,还包括:
[0029]基于表达式运算过程对应的标识信息在所述编译组件集合中确定目标编译接口;
[0030]所述将所述编译组件集合中的目标编译接口替换为对应的编译函数的步骤,包括:
[0031]基于所述对应关系确定所述目标编译接口对应的目标编译函数,将所述目标编译接口替换为所述目标编译函数。
[0032]进一步地,所述调用所述目标编译组件集合并参照所述第二变量内存地址信息进行编译的步骤,包括:
[0033]调用所述目标编译组件集合中的编译接口对非表达式运算过程参照所述第二变量内存地址信息进行编译;
[0034]调用所述目标编译组件集合中的编译函数对表达式运算过程参照所述第二变量内存地址信息进行编译。
[0035]此外,为实现上述目的,本专利技术还提供一种基于LLVM的编译优化装置,所述装置包括:
[0036]确定模块,用于确定抽象语法树对应的第一变量内存地址信息,其中,所述抽象语法树为LLVM前端对目标平台的源代码进行转化得到;
[0037]调整模块,用于将所述第一变量内存地址信息中的第一类型地址调整为第二类型地址,得到第二变量内存地址信息,所述第一类型地址为非标准对齐方式的内存地址,所述第二类型地址为标准对齐方式的内存地址;
[0038]替换模块,用于确定所述抽象语法树对应的编译组件集合,将所述编译组件集合中的目标编译接口替换为对应的编译函数,得到目标编译组件集合,其中,所述目标编译接口为表达式运算过程对应的编译接口;
[0039]生成模块,用于调用所述目标编译组件集合并参照所述第二变量内存地址信息进行编译,生成所述源代码对应的LLVM中间代码。
[0040]此外,为实现上述目的,本专利技术还提供一种基于LLVM的编译优化设备,所述基于LLVM的编译优化包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序配置为实现如上任一项所述的基于LLVM的编译优化方法的步骤。
[0041]此外,为实现上述目的,本专利技术还提供一种计算机存储介质,所述计算机存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上任一项所述的基于LLVM的编译优化方法的步骤。
[0042]本专利技术提出的基于LLVM的编译优化方法、基于LLVM的编译优化装置、基于LLVM的编译优化设备及计算机存储介质,所述方法包括:确定抽象语本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于LLVM的编译优化方法,其特征在于,所述基于LLVM的编译优化方法,包括以下步骤:确定抽象语法树对应的第一变量内存地址信息,其中,所述抽象语法树为LLVM前端对目标平台的源代码进行转化得到;将所述第一变量内存地址信息中的第一类型地址调整为第二类型地址,得到第二变量内存地址信息,所述第一类型地址为非标准对齐方式的内存地址,所述第二类型地址为标准对齐方式的内存地址;确定所述抽象语法树对应的编译组件集合,将所述编译组件集合中的目标编译接口替换为对应的编译函数,得到目标编译组件集合,其中,所述目标编译接口为表达式运算过程对应的编译接口;调用所述目标编译组件集合并参照所述第二变量内存地址信息进行编译,生成所述源代码对应的LLVM中间代码。2.如权利要求1所述的基于LLVM的编译优化方法,其特征在于,所述将所述第一变量内存地址信息中的第一类型地址调整为第二类型地址,得到第二变量内存地址信息的步骤之前,还包括:构建预设局部变量池,所述预设局部变量池中包括临时变量,所述临时变量与所述第一类型地址数据类型的标准对齐方式对应;所述将所述第一变量内存地址信息中的第一类型地址调整为第二类型地址,得到第二变量内存地址信息的步骤,包括:通过所述临时变量将所述第一变量内存地址信息中的第一类型地址调整为第二类型地址,得到第二变量内存地址信息。3.如权利要求2所述的基于LLVM的编译优化方法,其特征在于,所述通过所述临时变量将所述第一变量内存地址信息中的第一类型地址调整为第二类型地址的步骤,包括:确定所述预设局部变量池中是否存在目标临时变量,其中,所述目标临时变量的数据类型与所述第一类型地址的对应的变量相同;若存在,则将所述第一类型地址的变量替换为所述目标临时变量;若不存在,则将所述第一类型地址的变量替换为数组类型的所述临时变量。4.如权利要求3所述的基于LLVM的编译优化方法,其特征在于,所述将所述第一类型地址的变量替换为数组类型的所述临时变量的步骤,包括:确定所述第一类型地址的变量的第一存储空间位数;确定预设局部变量池中数组类型的所述临时变量的第二存储空间位数;基于所述第一存储空间位数和所述第二存储空间位数,将所述第一类型地址的变量替换为数组类型的所述临时变量;其中,所述临时变量的数组大小为所述第一存储空间位数相较于所述第二存储空间位数的倍数。5.如权利要求1所述的基于LLVM的编译优化方法,其特征在于,所述将所述编译组件集合中的目标编译接口替换为对应...

【专利技术属性】
技术研发人员:戴正国林奕健
申请(专利权)人:深圳市汇川技术股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1