我正在为其服务器端编译器未优化的语言(LSL)编写源代码级优化器。优化器在常量折叠等某些领域工作并表现良好,但为了使其更强大,我想构建一个 CFG,以启用/简化跳转优化、死代码删除以及以后从 SSA 中受益。
现在,由于它是源代码级别的,我无法将代码转换为 3AC 之类的东西,否则我可能会创建一个实际上不如原始版本优化的版本。
所以我的问题是:我会在 CFG 中包含哪些内容?合乎逻辑的答案是存储代表整个语句的 AST 节点。我面临的问题是表达式可能会调用用户函数,而这些函数可能会改变全局变量,这会影响 SSA 表单,这就是为什么我想将这些函数作为同一图表的一部分,而不是不同的图表。