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