java窥孔优化初学者编译器

时间:2011-12-14 18:02:31

标签: java assembly intel codegen peephole-optimization

作为小组项目的一部分,我正在为简化语言编写编译器。作为可选功能之一,我认为我会添加一个窥视孔优化器来检查codegen的输出intel汇编代码并对其进行优化。

我们的编译器是用java完成的,看起来使用我迄今学到的java创建这个窥孔优化器似乎要做很多工作。我是否应该使用某种工具来实现这一点,因为模式匹配字符串在java中听起来不是一个好方法。

感谢

3 个答案:

答案 0 :(得分:3)

窥孔优化应该在解析树的二进制表示上完成,而不是在作为汇编程序输入的文本上完成。

答案 1 :(得分:3)

很难说没有看你的编译器的设计,但通常你会在生成代码和发出代码之间有一个中间步骤。例如,您可以考虑让代码生成阶段的输出为例如链接的指令列表,其中每个指令对象存储指令类型,任何参数,标签/分支目标等。然后每个模式将检查当前节点及其直接后继(例如if (curr.isMov() && curr.next.isPush() && ...)并相应地修改列表。然后您的窥孔优化器从codegen输出开始,在其上运行每个模式,并一遍又一遍地执行此操作直到列表停止更改。然后你有一个单独的阶段,只需要这个指令列表并输出实际的程序集。

答案 2 :(得分:2)

肯定不会使用字符串。您可以查看lex / yacc及其类似物(例如Jack是Java的一个,虽然我没有使用它)来生成程序集的AST,然后对AST运行优化,并再次写出装配......但你确实意识到这是一个的事情,对吗? : - )