These are chat archives for Constellation/iv

20th
Feb 2014
Yusuke Suzuki
@Constellation
Feb 20 2014 03:02
TEST #1.travis.yml
Later I'll set up libcxx on Travis-CI and do CI with LLVM/Clang + libc++ on Ubuntu.
Yusuke Suzuki
@Constellation
Feb 20 2014 04:23
railgun::VM は普通の register vm で, JIT しない時にしか使われません.
IV_JIT_ENABLED が有効な場合, railgun::VM は現在は一切利用されません.
JIT が有効だと,
railgun::Compiler が bytecode に変換したあと, bytecode を受け取って machine code を吐く breaker::Compiler に渡って, で, machine code が実行されます.
このため, JIT が disable の時にも MIC が動くように, railgun::VM の方にも MIC の system が入っています.
が, JIT する場合は, railgun::VM の方は利用しないので, そっちは気にしなくって大丈夫です.
Yusuke Suzuki
@Constellation
Feb 20 2014 04:33
何かしら directory 切って, そこで LLVM 関連の作業しようと思います.
Yusuke Suzuki
@Constellation
Feb 20 2014 04:39
Added iv/lv5/diagram directory.
Yusuke Suzuki
@Constellation
Feb 20 2014 04:52

このあたりの理解が曖昧なのですがrailgunにもMICが入っているのはなぜですか。
railgunのMICにヒットするのならbreakerのMICにもヒットすると考えているのですが、違いますか?

railgun::VM を使うときには breaker は利用されず, breaker を使うときには railgun::VM が使われないからです.

bailoutの仕組みを理解してないのですが、LLVMのコンパイルが失敗した場合はどのような処理になりますか。
resumePointをLLVM-IRの間に挟んでいくような形になりますか。

はい, そうしたいと考えています. breaker で profiling をとって, OSR で LLVM に飛ぶ構成を検討しています.

現状で理解できている処理系を図に描いてみました。間違ってる箇所を指摘していただけると助かります。

はい, 図で言うと, まず,

  • railgun::VM は俗に言う interpreter なのでそのまま実行されます, assembler への path はありません
  • railgun::Compiler から bytecode が breaker::Compiler に渡されます (真ん中の四角は breaker::Compiller です)
  • breaker::Compiler はもう ASM 吐いちゃうので, そこで code を instrument して, profiling し, railgun::Compiler のはいた bytecode を元に LLVM が compile を行う予定です. bytecode を parse して LLVM IR に変換します. この時に inlining や profiling 結果の type oracle を用いる予定で, いわゆる ion と同じ stack です.