随笔分类 - 编译器的后端
摘要:指令合并主要合并相邻的,use-def 链上 相邻的指令。 讲多条可以合并的指令合并成一条指令,去除多余指令。 1, 常量折叠和计算。 a = 100; b = 100; c = a + b; d = f * c; > d = f * 200; 2,去除无效move指令 a = b; c = a;
阅读全文
摘要:静态单赋值形式 每个遍历仅仅被赋值一次。 变量仅在单bb块内被多次赋值。重命名 a = 1; b = a; a = 2; d = a; > a1 = 1; b = a1; a2 = 2; d = a2; 变量块跨bb块被多次赋值,插入phi节点,并重命名 B1 if (cond) B2 a = b;
阅读全文
摘要:从Function的entry-bb开始,遍历所有的后继bb块。如果无法访问的bb块,删除。
阅读全文
摘要:为什么需要自研编译后端。 从 dsl语言到 可执行文件,如果采用genc code和 llvm-IR 需要通过 gcc 和 llvm , 这两个编译太heavy了,很多优化pass并不需要。 从IR到二进制文件的经历的pass 流 1,去除不必要block。 rm dead code , rm de
阅读全文