aliyun/coolbpf

移除libfirm依赖,libfirm学习成本过高,不适合小型的脚本语言

chengshuyi opened this issue · 2 comments

需要设计一个bpf中间代码,主要流程:

  1. 可以根据imple and Efficient Construction of Static Single Assignment Form来实现一个ssa ir,在生成ir的过程中即可做优化,优化主要包括:constant folding、algebraic simplification、cse、copy propogation等
  2. 指令选择,需要将bpf ir替换成bpf指令,比如load指令,一般load的中间代码只有2个操作数,而bpf的load指令会有3个操作数,包括目的寄存器,源寄存器,偏移,也就是dst_reg = *(uint *) (src_reg + off16)这种形式。在指令选择期间可以做一些简单的优化。
  3. 寄存器分配,可以使用rust wasmtime的regalloc2库,该库支持ssa ir形式的代码生成,符合我们的需求。
  4. 最后就是代码生成。

closed. #28