跳到內容

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
華夏公益教科書