コンパイラ

LLVMの基本的な構成として正しいものはどれか。

  1. AC言語専用のコンパイラで、ほかの言語には使えない
  2. B特定のCPUだけを対象にした、アセンブラとリンカの組み合わせ
  3. C共通の中間表現を中心に、前半と後半を組み合わせる
答えと解説を見る

正解:C. 共通の中間表現を中心に、前半と後半を組み合わせる

LLVMは、LLVM IRという共通の中間表現を中心にしたコンパイラの基盤です。C/C++のClangをはじめ、さまざまな言語のフロントエンドがソースをLLVM IRに変換し、共通の最適化の段階を通したあと、x86、Arm、RISC-V、GPUなど多くのCPU向けのバックエンドが機械語を生成します。新しい言語やCPUに対応するときも、片側を作るだけで済むのが強みです。C言語専用でも、特定のCPU専用でもありません。

  • A. 多くの言語のフロントエンドがあり、C言語専用ではありません。
  • B. 多くのCPU向けのバックエンドがあり、特定のCPU専用ではありません。
  • C. 正しい。共通の中間表現を中心に、前半と後半を組み合わせます。
この分野を解く 分野ページへ

コンパイラのほかの問題

  1. コンパイラの最適化のレベルを指定するオプションで、最適化をしない設定(-O0など)がよく使われる場面はどれか。
  2. プロファイルを使った最適化(PGO)の説明として正しいものはどれか。
  3. リンク時最適化(LTO)によって可能になる最適化として最も適切なものはどれか。
  4. C言語で、符号付き整数のオーバーフローは未定義動作である。この前提で、上の関数を最適化するコンパイラが生成しうるコードとして正しいものはどれか。
  5. プログラムの誤りのうち、コンパイルの時点で見つけることができるものはどれか。