Up Top

JIT Compiler の処理 (1) : JIT コンパイルを開始する処理 : 実行回数が閾値を超えたことによる開始処理 : (2) CompilationPolicy の処理 : SimpleThresholdPolicy の場合


概要(Summary)

SimpleThresholdPolicy クラスの CompilationPolicy オブジェクトの場合, CompilationPolicy::event() が呼ばれると SimpleThresholdPolicy::event() が実行される.

JIT コンパイルを行うかどうかの判断は, 上記の関数から呼び出される SimpleThresholdPolicy::method_invocation_event() または SimpleThresholdPolicy::method_back_branch_event() で行われる.

また, Tiered Compilation では複数の JIT コンパイルレベルが存在するが, 次のレベルに移るかどうかの判断は SimpleThresholdPolicy::call_event(メソッド全体のコンパイル用) 及び SimpleThresholdPolicy::loop_event(ループのコンパイル用) 内で行われている.

処理の流れ (概要)(Execution Flows : Summary)

SimpleThresholdPolicy::event()
-> * メソッドのコンパイルの場合:
     -> SimpleThresholdPolicy::method_invocation_event()
        -> SimpleThresholdPolicy::call_event()
           -> SimpleThresholdPolicy::common()
              (なお使用するpredicateは SimpleThresholdPolicy::call_predicate())
              -> SimpleThresholdPolicy::is_trivial()
              -> SimpleThresholdPolicy::call_predicate()
                 -> SimpleThresholdPolicy::call_predicate_helper()
        -> SimpleThresholdPolicy::compile()
           -> SimpleThresholdPolicy::submit_compile()
              -> CompileBroker::compile_method()
                 -> (See: here for details)
   * ループのコンパイルの場合:
     -> SimpleThresholdPolicy::method_back_branch_event()
        -> SimpleThresholdPolicy::call_event()
           -> (同上)
        -> SimpleThresholdPolicy::loop_event()
           -> SimpleThresholdPolicy::common()
              (なお使用するpredicateは SimpleThresholdPolicy::loop_predicate())
              -> SimpleThresholdPolicy::loop_predicate()
                 -> SimpleThresholdPolicy::loop_predicate_helper()
        -> SimpleThresholdPolicy::compile()
           -> (同上)

処理の流れ (詳細)(Execution Flows : Details)

SimpleThresholdPolicy::event()

See: here for details

SimpleThresholdPolicy::handle_counter_overflow()

See: here for details

SimpleThresholdPolicy::set_carry_if_necessary()

See: here for details

SimpleThresholdPolicy::method_invocation_event()

See: here for details

SimpleThresholdPolicy::call_event()

See: here for details

SimpleThresholdPolicy::common()

See: here for details

SimpleThresholdPolicy::is_trivial()

See: here for details

SimpleThresholdPolicy::call_predicate()

See: here for details

SimpleThresholdPolicy::call_predicate_helper()

See: here for details

SimpleThresholdPolicy::compile()

See: here for details

SimpleThresholdPolicy::submit_compile()

See: here for details

SimpleThresholdPolicy::method_back_branch_event()

See: here for details

SimpleThresholdPolicy::loop_event()

(#Under Construction) See: here for details

SimpleThresholdPolicy::loop_predicate()

See: here for details

SimpleThresholdPolicy::loop_predicate_helper()

See: here for details


This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.