LLVM IR 量子拡張 (1. QIR を考える)

@k_yamaz 蛙 は, 量子コンピュータのための量子プログラミング言語や, 量子コンパイラを開発するための
OSSコミュニティ「OpenQL Project」を運営しております.
量子プログラミング言語, 量子コンパイラを開発するための調査, 検討を書いています.
OpenQL は, OpenMP や OpenCL の仕様を参考にして, 仕様を検討しています.

“A Software Methodology for Compiling Quantum Programs arXiv:1604.01401 “ による提案や
QuTechQuEST * , EPiQCによるLLVM ベースで量子拡張を目指した実装 ScaffCC など,
世界の研究機関でも同様の研究がされております.

LLVM IR の拡張

ここでは, LLVM Frontend, Backend で量子拡張することを考えています.
このためには, IR を拡張することを考える必要がありそうです.

arXiv:1604.01401 では, QIR を構成するべきという提案はありますが, 具体的な提案はされていません.
ScaffCC は, 今後実装を調べていきますが, 現状確認したところでは, IR を拡張する方針ではなく, Pass を拡張して対応しているようです.
具体的な QIR の仕様で, 公けになっている提案はみつけられていません.

IR の Instraction は, llvm/include/llvm/IR/Instruction.def に定義されています.
ここに, “1-qubit operator”, “2-qubit operator”, “measurement operator” の3つを追加すれば良いと考えられます.

具体的には, 未だどのような操作 (量子ゲート) を追加していけばよいかがはっきりしませんが, 一先ず

  • 1-qubit operator は, 任意角回転のユニタリ
  • 2-qubit operator は, CNOT
  • measurement operator は, Z軸基底の測定

として検討を進めていくことにます.