ROSE 编译器框架/常量传播
外观
另请参阅 ROSE 编译器框架/通用数据流框架,因为此分析是使用该框架实现的。
参见 http://en.wikipedia.org/wiki/Constant_folding 关于常量折叠和常量传播的示例,“常量传播是在编译时用已知常量的值替换表达式中的值的进程。”
分析将只生成表示传播常量值的格。它不会实际转换 AST!因此,下面的示例代码仅用于说明值的传播。
输入代码
int x = 14;
int y = 7 - x / 2;
return y * (28 / x + 2);
传播 x 产生
int x = 14;
int y = 7 - 14 / 2;
return y * (28 / 14 + 2);
继续传播产生以下结果
int x = 14;
int y = 0;
return 0;
列表
- rose/tests/roseTests/programAnalysisTests/generalDataFlowAnalysisTests/constantPropagation.h
- rose/tests/roseTests/programAnalysisTests/generalDataFlowAnalysisTests/constantPropagation.C
待办事项
- 将它们移至 rose/src/midend/programAnalysis/genericDataflow/simpleAnalyses
测试翻译器
- rose/tests/roseTests/programAnalysisTests/generalDataFlowAnalysisTests/constantPropagationTest.C github-链接
测试翻译器将
- 为 CFG 生成点图并附加常量格。
- 验证生成的結果是预期的(以输入测试输入文件中的编译指示的形式给出)。
带有验证的测试输入
- rose/tests/roseTests/programAnalysisTests/generalDataFlowAnalysisTests/cp_test1.C