Peephole 优化实做介绍

本文探讨了在嵌入式系统中,如何通过Peephole优化来减小C编译器生成的代码大小,同时保持程序效率。首先,通过解析ASM代码构建指令表,然后合并基本块以剔除非必要标签。接着,应用特定算法处理指令表,生成删除或修改指令的Erase表。最后,依据Erase表生成优化后的指令代码。
摘要由CSDN通过智能技术生成

 C Complier 在嵌入上使用的时候,尽量都是CodeSize 最小,那么在这样的前提下,如何将code size 最小,这是一个编译器优化中比较常见的问题,但是同时如何保证程序的效率,这两者之中难免出现冲突,存在这样的矛盾问题,首先你要了解目前你自己的C complier 编译出来的程序是要运行效率高,还是Codesize最小,这两者似乎没有办法协调。
     当然这篇文章主要在code size 优化上,而且接着前一篇继续说明peephole内部的算法如何。
1.首先使用Visual parser 将自己ASM code,进行解析,或者自己写解析器,收集每一行指令的信息,将其放入一个表中,表中的每一行都是一条ASM 指令的信息(Instrution table)。
2.合并基本块(Basic block)
   因为c complier产生的ASM code 中间经常要产生一些没有实际作用的label, 其实这些label是Debugger 等其他组件使用的,但不会影响程序的执行流程。因此我们要将这些没有实际作用的label,剔除掉,因为peephole 所聚焦的是一个basic block.
    Basic Block : 是指在局部范围内,程序的片断只有一个入口和一个出口,这样的代码片断就构成一个基本块。
     首先程序中有很多的label, 这些label 之间可能是basic block, 也可能不是,当是一个basic block 的时候,还要看能不能和周围的basic block 构成一个更大basic block.<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值