Skip to main content
QUICK REVIEW

[論文レビュー] Structural Operational Semantics for Control Flow Graph Machines

Dmitri Garbuzov, William Mansky|arXiv (Cornell University)|May 14, 2018
Logic, programming, and type systems参考文献 18被引用数 3
ひとこと要約

本稿は、レヴィの呼び出し順序プッシュ値(CBPV)計算と、静的単一代入(SSA)形式をとる制御フローダイアグラム(CFG)マシンとの間で、厳密かつ形式的に検証された同等性を確立している。CBPVの構造的操作的意味論(SOS)の遷移をCFG実行手順と一致させることで、SSA形式のCFGがCBPV項と同等であることを示しており、高階言語理論を用いた等式的推論と低レベル最適化の形式的検証を可能にしている。

ABSTRACT

Compilers use control flow graph (CFG) representations of low-level programs because they are suited to program analysis and optimizations. However, formalizing the behavior and metatheory of CFG programs is non-trivial: CFG programs don't compose well, their semantics depends on auxiliary state, and, as a consequence, they do not enjoy a simple equational theory that can be used for reasoning about the correctness of program transformations. Lambda-calculus-based intermediate representations, in contrast, have well-understood operational semantics and metatheory, including rich equational theories, all of which makes them amenable to formal verification. This paper establishes a tight equivalence between (a variant of) Levy's call-by-push-value (CBPV) calculus and a control flow graph machine whose instructions are in static single assignment (SSA) form. The correspondence is made precise via a series of abstract machines that align the transitions of the structural operational semantics of the CBPV language with the computation steps of the SSA form. The target machine, which is derived from the CBPV language, accurately captures the execution model of control flow graphs, including direct jumps, mutually recursive code blocks, and multi-argument function calls, and the closure-free subset is similar to the SSA intermediate representations found in modern compilers such as LLVM and GCC. The definitions of all the language/abstract machine semantics and the theorems relating them are fully verified in Coq.

研究の動機と目的

  • コンパイラで用いられる制御フローダイアグラム(CFG)プログラムにおける合成的・等式的推論の欠如に対処すること。
  • CFGの非合成的構造、補助状態、弱い等式理論による形式的検証の制限を克服すること。
  • 理解が深く、よく知られた高階操作的意味論(CBPV)と、実用的な低レベル中間表現(SSA CFG)との間の形式的ブリッジを確立すること。
  • CBPVの豊富な等式理論を用いて、CFGレベルの最適化の正しさを機械検証可能な証明で示すこと。
  • SSA CFGがCBPV項と同等であることを示す基盤を提供し、すべての観察可能な動作を保存する形で、検証可能なコンパイルの実現を可能にすること。

提案手法

  • 合成的・等式的推論を可能にする、レヴィの呼び出し順序プッシュ値(CBPV)計算の変種を定義し、構造的操作的意味論(SOS)を用いる。
  • 静的単一代入(SSA)形式で命令を実行する仮想マシンを設計し、直接ジャンプ、複数引数関数呼び出し、相互再帰的コードブロックをモデル化する。
  • 静的に計算可能な還元と動的実行手順を段階的に分離するための中間抽象マシンの連鎖を構築する。
  • 形式的導出の系列を用いて、CBPVのSOS遷移とCFGマシン実行手順の間の1ステップずつの対応関係を証明する。
  • Coqにおいて、すべての意味論的定義と同等性定理を完全に検証し、機械検証された正しさを保証する。
  • すべての適切に構築されたSSA CFGがCBPV項に対応し、逆にすべてのCBPV項が適切に構築されたSSA CFGに対応することを示し、操作的動作を保存する双方向翻訳を構築する。

実験結果

リサーチクエスチョン

  • RQ1高階言語理論を用いて、制御フローダイアグラム(CFG)プログラムの形式的で合成的な操作的意味論を確立できるか?
  • RQ2CBPVの構造的操作的意味論と、SSA形式のCFGマシンとの間には、正確で機械検証可能な対応関係が存在するか?
  • RQ3SSA CFG上のプログラム変換は、それに対応するCBPV項を用いた推論によって形式的に検証可能か?
  • RQ4CBPVとSSA CFGの同等性は、最適化の正しさを推論するための強固な等式理論をサポートするか?
  • RQ5CFGマシンの閉包なし部分は、LLVM や GCC のような現代のコンパイラIRを正確にモデル化できるか?

主な発見

  • CBPVの構造的操作的意味論と、SSA形式のCFGマシンとの間で、厳密かつ形式的に検証された同等性が確立され、CBPV還元の各ステップがマシン命令の実行に正確に対応している。
  • CFGマシンの閉包なし断片は、LLVM や GCC で使用されるSSA中間表現と同型である。
  • 定数畳み込み、不要コード削除、同一ブランチ簡略化を含む、CFGに適用されるすべての最適化が、下位のCBPV等式理論を用いて形式的に正しく証明されている。
  • この対応関係はコンパイラの正しさを越えており、トレース同等性や双模倣よりも、すべての観察的同等性を保存している。
  • CBPV項からSSA CFGへの翻訳は双方向的であるため、すべての適切に構築されたCFGが一意なCBPV項に対応し、逆にすべてのCBPV項が一意なCFGに対応する。
  • 意味論的定義と同等性定理を含む、すべての形式的定式化がCoqで完全に検証されており、プログラム変換の正しさを機械検証可能な証明で保証できる。

より良い研究を、今すぐ始めましょう

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。