跳到内容

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
华夏公益教科书