これらは, C2 JIT Compiler 内の処理フェーズを表すクラス. より具体的に言うと, レジスタ割り当て処理を表すクラス.
PhaseRegAlloc クラスの具象サブクラス.
このクラスは, Chaitin (Briggs-Chaitin) の graph coloring によるレジスタ割り当てを行う.
((cite: hotspot/src/share/vm/opto/chaitin.hpp))
//------------------------------Chaitin----------------------------------------
// Briggs-Chaitin style allocation, mostly.
class PhaseChaitin : public PhaseRegAlloc {
Compile::Code_Gen() 内で(のみ)使用されている.
See: here for details
PhaseChaitin クラス用の補助クラス.
live-range を表すためのクラス. なおクラス名は "Live-RanGe" の略とのこと.
((cite: hotspot/src/share/vm/opto/chaitin.hpp))
//------------------------------LRG--------------------------------------------
// Live-RanGe structure.
class LRG : public ResourceObj {
各 PhaseIFG オブジェクトの _lrgs フィールドに(のみ)格納されている.
(正確には, このフィールドは LRG の配列を格納するフィールド. その PhaseIFG オブジェクト内で使用される LRG オブジェクトは全てこの中に格納されている)
配列用のメモリ領域は PhaseIFG::init() 内で(のみ)確保されている.
See: here for details
PhaseChaitin クラス用の補助クラス.
各 Node と LRG の対応付けを管理するためのクラス (より正確には, Node の index から LRG への写像).
((cite: hotspot/src/share/vm/opto/chaitin.hpp))
//------------------------------LRG_List---------------------------------------
// Map Node indices to Live RanGe indices.
// Array lookup in the optimized case.
class LRG_List : public ResourceObj {
以下の箇所に(のみ)格納されている.
(上記のフィールドは全て, ポインタ型ではなく実体なので, 格納しているオブジェクトの生成時に一緒に生成される)
See: here for details
PhaseChaitin クラス内で使用される補助クラス.
Phase クラスの具象サブクラスの1つ. 干渉グラフ(interference graph)の作成を行う.
((cite: hotspot/src/share/vm/opto/chaitin.hpp))
//------------------------------IFG--------------------------------------------
// InterFerence Graph
// An undirected graph implementation. Created with a fixed number of
// vertices. Edges can be added & tested. Vertices can be removed, then
// added back later with all edges intact. Can add edges between one vertex
// and a list of other vertices. Can union vertices (and their edges)
// together. The IFG needs to be really really fast, and also fairly
// abstract! It needs abstraction so I can fiddle with the implementation to
// get even more speed.
class PhaseIFG : public Phase {
PhaseChaitin::Register_Allocate() 内で(のみ)使用されている.
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.