当前位置: 首页 > 专利查询>武汉大学专利>正文

自动化代码尺寸缩减方法、装置、设备及可读存储介质制造方法及图纸

技术编号:38078670 阅读:7 留言:0更新日期:2023-07-06 08:46
本发明专利技术提供一种自动化代码尺寸缩减方法、装置、设备及可读存储介质,该方法包括:将中间表示线性化为总指令序列IS;将总指令序列IS转化为无符号整数序列V;根据无符号整数序列V构造后缀树;从后缀树中获取冗余总数组RVV;生成冗余子数组RV的多序列对齐结构;根据多序列对齐结构,创建语义等价的抽象函数MF;创建对抽象函数MF的函数调用。本发明专利技术利用了后缀树的特性实现了跨基本块的重复指令序列的查找,并进一步利用程序控制流图中单入口单出口区域的特性,实现了对相似的单入口单出口区域的过程抽象,在生成的抽象函数中通过重用一部分原本重复出现的指令序列,消除了这些重复指令序列造成的冗余,从而进一步地减少了指令数目,缩减了代码尺寸。减了代码尺寸。减了代码尺寸。

【技术实现步骤摘要】
自动化代码尺寸缩减方法、装置、设备及可读存储介质


[0001]本专利技术涉及编译优化
,尤其涉及一种自动化代码尺寸缩减方法、装置、设备及可读存储介质。

技术介绍

[0002]随着移动系统以及嵌入式系统中的应用程序的功能不断扩展、完善,代码尺寸的迅速膨胀。业界通常在编译过程中进行针对性的优化以实现自动化的代码尺寸缩减,区别于传统的编译优化,近年来的面向代码尺寸缩减的编译优化技术主要通过找到并消除代码中的冗余成分,即重复或相似的代码序列,来实现代码尺寸的缩减。查找代码中的冗余成分依赖于对程序代码的整体分析,而要消除所查找到的冗余成分,需要通过特定算法来修改程序代码在编译过程中的中间表示(IR),以保证消除冗余后,代码的语义不发生变化,即保证程序的功能仍保持不变。
[0003]根据查找冗余成分以及消除冗余成分所使用的算法的不同,目前代码尺寸缩减的编译优化技术主要可以被划分为两类:函数合并(FunctionMerging)方法以及过程抽象(ProceduralAbstraction)方法。然而,无论是函数合并方法还是过程抽象方法在查找和消除代码冗余方面都显示出明显的局限性,无法找到并处理一些代码中具有特定特征的冗余成分。

技术实现思路

[0004]本专利技术的主要目的在于提供一种自动化代码尺寸缩减方法、装置、设备及可读存储介质,旨在解决现有技术中的代码尺寸缩减方法在查找和消除代码冗余方面具有明显局限性,无法找到并处理一些代码中具有特定特征的冗余成分的技术问题。
[0005]第一方面,本专利技术提供一种自动化代码尺寸缩减方法,所述自动化代码尺寸缩减方法包括:
[0006]步骤1,获取中间表示中可以执行优化的原始函数,遍历所述原始函数中的每一原始指令,将所有所述原始函数线性化为总指令序列IS,其中,总指令序列IS包括来自所述原始函数中的所有所述原始指令和额外插入的多个空指令,所述空指令位于所有所述原始函数末尾以及所有没有后继结点的基本块的最后一条指令末尾;
[0007]步骤2,根据指令类型选择对应的哈希映射方式,将总指令序列IS转化为无符号整数序列V,并建立总指令序列IS与无符号整数序列V的第一映射关系,其中,由任一所述空指令映射得到的无符号整数与无符号整数序列V中的所有其他无符号整数均不相同;
[0008]步骤3,根据无符号整数序列V构造后缀树;
[0009]步骤4,基于所述第一映射关系,从所述后缀树中获取冗余总数组RVV,其中,冗余总数组RVV包括多个冗余子数组RV,每一冗余子数组RV包括多个长度相等的指令序列ISS,指令序列ISS是总指令序列IS的子序列,且各指令序列ISS对应的无符号整数序列相同,冗余总数组RVV中,任一指令序列ISS的长度大于等于预设长度阈值,任意两个指令序列ISS在
总指令序列IS中不存在交叠情况;
[0010]步骤5,从冗余总数组RVV中取出一冗余子数组RV,生成冗余子数组RV的多序列对齐结构,其中,所述多序列对齐结构包括对齐段和不对齐段,所述对齐段包括多个指令序列ISS,每一指令序列ISS对应程序控制流图上的一单入口单出口区域R,单入口单出口区域R包含指令序列ISS,所述不对齐段包括线性化后的各单入口单出口区域R中除指令序列ISS之外的指令;
[0011]步骤6,根据所述多序列对齐结构,创建语义等价的抽象函数MF,其中,抽象函数MF包括第一类指令、第二类指令和第三类指令,所述第一类指令是根据所述对齐段中的指令生成的指令,所述第二类指令是根据所述非对齐段中的指令生成的指令,所述第三类指令是为所述第一类指令填充操作数时额外生成的指令,所述第三类指令的数量小于等于预设数量阈值;
[0012]步骤7,在所述多序列对齐结构对应的各单入口单出口区域R的入口处创建对抽象函数MF的函数调用,删除各单入口单出口区域R中的所有指令;
[0013]步骤8,若当前的冗余总数组RVV不为空,则返回执行步骤5。
[0014]可选地,步骤4具体包括:
[0015]步骤4.1,从所述后缀树中取出节点N,统计节点N的子孙叶节点数;
[0016]步骤4.2,若所述子孙叶节点数大于等于2,则基于所述第一映射关系,统计节点N对应的所有指令序列ISS以及指令序列ISS的长度,并生成用于储存指令序列ISS的冗余子数组RV,其中,节点N对应的指令序列ISS是由根节点至节点N的路径中所经过的无符号整数序列基于所述第一映射关系对应的指令序列,冗余子数组RV的原始长度等于所述子孙叶节点数;
[0017]步骤4.3,若指令序列ISS的长度大于等于预设长度阈值,则消除冗余子数组RV中各指令序列ISS在总指令序列IS中的交叠情况,其中,若两个指令序列ISS存在交叠情况,则从冗余子数组RV中删除索引较大的指令序列ISS;
[0018]步骤4.4,若消除交叠情况后的冗余子数组RV的长度大于等于2,则将冗余子数组RV插入冗余总数组RVV中;
[0019]步骤4.5,若所述后缀树的所有节点均已访问,则评估冗余总数组RVV中各冗余子数组RV消除后能够带来的指令数缩减的预测收益,将各冗余子数组RV按照所述预测收益从大到小排序,否则,返回执行步骤4.1;
[0020]步骤4.6,遍历冗余总数组RVV中的每一冗余子数组RV,采用贪心策略消除冗余总数组RVV中各指令序列ISS在总指令序列IS中的交叠情况,其中,若排序靠后的一冗余子数组RV中的一指令序列ISS与排序靠前的另一冗余子数组RV中的另一指令序列ISS存在交叠情况,则删除排序靠后的冗余子数组RV中的指令序列ISS;
[0021]步骤4.7,若消除交叠情况后的一冗余子数组RV的长度小于2,则从冗余总数组RVV中删除该冗余子数组RV。
[0022]可选地,步骤5具体包括:
[0023]步骤5.1,从冗余总数组RVV中取出一冗余子数组RV,遍历冗余子数组RV中的每一指令序列ISS,采用启发式算法从程序控制流图上寻找包含各指令序列ISS的最小的单入口单出口区域;
[0024]步骤5.2,若找到一指令序列ISS对应的一单入口单出口区域R,则将单入口单出口区域R中除指令序列ISS之外的指令线性化并插入多序列对齐结构的不对齐段,继续遍历,否则,从冗余子数组RV中删除该指令序列ISS,继续遍历;
[0025]步骤5.3,遍历结束后,若冗余子数组RV的长度大于等于2,则将冗余子数组RV中的各指令序列ISS插入所述多序列对齐结构的对齐段,并进入步骤6,否则,返回执行步骤5.1。
[0026]可选地,步骤5.2中,在所述将单入口单出口区域R中除指令序列ISS之外的指令线性化并插入多序列对齐结构的不对齐段的步骤之后还包括:
[0027]收集单入口单出口区域R中对单入口单出口区域R外的定义的第一使用信息,收集单入口单出口区域R外对单入口单出口区域R内的定义的第二使用信息。
[0028]可选地,步骤6具体包括:
[0029]步骤6.1,根据所述第一使用本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种自动化代码尺寸缩减方法,其特征在于,所述自动化代码尺寸缩减方法包括:步骤1,获取中间表示中可以执行优化的原始函数,遍历所述原始函数中的每一原始指令,将所有所述原始函数线性化为总指令序列IS,其中,总指令序列IS包括来自所述原始函数中的所有所述原始指令和额外插入的多个空指令,所述空指令位于所有所述原始函数末尾以及所有没有后继结点的基本块的最后一条指令末尾;步骤2,根据指令类型选择对应的哈希映射方式,将总指令序列IS转化为无符号整数序列V,并建立总指令序列IS与无符号整数序列V的第一映射关系,其中,由任一所述空指令映射得到的无符号整数与无符号整数序列V中的所有其他无符号整数均不相同;步骤3,根据无符号整数序列V构造后缀树;步骤4,基于所述第一映射关系,从所述后缀树中获取冗余总数组RVV,其中,冗余总数组RVV包括多个冗余子数组RV,每一冗余子数组RV包括多个长度相等的指令序列ISS,指令序列ISS是总指令序列IS的子序列,且各指令序列ISS对应的无符号整数序列相同,冗余总数组RVV中,任一指令序列ISS的长度大于等于预设长度阈值,任意两个指令序列ISS在总指令序列IS中不存在交叠情况;步骤5,从冗余总数组RVV中取出一冗余子数组RV,生成冗余子数组RV的多序列对齐结构,其中,所述多序列对齐结构包括对齐段和不对齐段,所述对齐段包括多个指令序列ISS,每一指令序列ISS对应程序控制流图上的一单入口单出口区域R,单入口单出口区域R包含指令序列ISS,所述不对齐段包括线性化后的各单入口单出口区域R中除指令序列ISS之外的指令;步骤6,根据所述多序列对齐结构,创建语义等价的抽象函数MF,其中,抽象函数MF包括第一类指令、第二类指令和第三类指令,所述第一类指令是根据所述对齐段中的指令生成的指令,所述第二类指令是根据所述非对齐段中的指令生成的指令,所述第三类指令是为所述第一类指令填充操作数时额外生成的指令,所述第三类指令的数量小于等于预设数量阈值;步骤7,在所述多序列对齐结构对应的各单入口单出口区域R的入口处创建对抽象函数MF的函数调用,删除各单入口单出口区域R中的所有指令;步骤8,若当前的冗余总数组RVV不为空,则返回执行步骤5。2.如权利要求1所述的自动化代码尺寸缩减方法,其特征在于,步骤4具体包括:步骤4.1,从所述后缀树中取出节点N,统计节点N的子孙叶节点数;步骤4.2,若所述子孙叶节点数大于等于2,则基于所述第一映射关系,统计节点N对应的所有指令序列ISS以及指令序列ISS的长度,并生成用于储存指令序列ISS的冗余子数组RV,其中,节点N对应的指令序列ISS是由根节点至节点N的路径中所经过的无符号整数序列基于所述第一映射关系对应的指令序列,冗余子数组RV的原始长度等于所述子孙叶节点数;步骤4.3,若指令序列ISS的长度大于等于预设长度阈值,则消除冗余子数组RV中各指令序列ISS在总指令序列IS中的交叠情况,其中,若两个指令序列ISS存在交叠情况,则从冗余子数组RV中删除索引较大的指令序列ISS;步骤4.4,若消除交叠情况后的冗余子数组RV的长度大于等于2,则将冗余子数组RV插入冗余总数组RVV中;
步骤4.5,若所述后缀树的所有节点均已访问,则评估冗余总数组RVV中各冗余子数组RV消除后能够带来的指令数缩减的预测收益,将各冗余子数组RV按照所述预测收益从大到小排序,否则,返回执行步骤4.1;步骤4.6,遍历冗余总数组RVV中的每一冗余子数组RV,采用贪心策略消除冗余总数组RVV中各指令序列ISS在总指令序列IS中的交叠情况,其中,若排序靠后的一冗余子数组RV中的一指令序列ISS与排序靠前的另一冗余子数组RV中的另一指令序列ISS存在交叠情况,则删除排序靠后的冗余子数组RV中的指令序列ISS;步骤4.7,若消除交叠情况后的一冗余子数组RV的长度小于2,则从冗余总数组RVV中删除该冗余子数组RV。3.如权利要求1所述的自动化代码尺寸缩减方法,其特征在于,步骤5具体包括:步骤5.1,从冗余总数组RVV中取出一冗余子数组RV,遍历冗余子数组RV中的每一指令序列ISS,采用启发式算法从程序控制流图上寻找包含各指令序列ISS的最小的单入口单出口区域;步骤5.2,若找到一指令序列ISS对应的一单入口单出口区域R,则将单入口单出口区域R中除指令序列ISS之外的指令线性化并插入多序列对齐结构的不对齐段,继续遍历,否则,从冗余子数组RV中删除该指令序列ISS,继续遍历;步骤5.3,遍历结束后,若冗余子数组RV的长度大于等于2,则将冗余子数组RV中的各指令序列ISS插入所述多序列对齐结构的对齐段,并进入步骤6,否则,返回执行步骤5.1。4.如权利要求3所述的自动化代码尺寸缩减方法,其特征在于,步骤5.2中,在所述将单入口单出口区域R中除指令序列ISS之外的指令线性化并插入多序列对齐结构的不对齐段的步骤之后还包括:收集单入口单出口区域R中对单入口单出口区域R外的定义的第一使用信息,收集单入口单出口区域R外对单入口单出口区域R内的定义的第二使用信息。5...

【专利技术属性】
技术研发人员:李清安商文翰
申请(专利权)人:武汉大学
类型:发明
国别省市:

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

1