PhaseValues define the virtual method is_IterGVN, which is trivially returning 0(!) for all types except those derived from PhaseIterGVN. Similarly there's igvn_rehash_node_delayed which is virtual and a no-op in base types, but implemented to call rehash_node_delayed in PhaseIterGVN.
By devirtualizing we allow for more aggressive inlining and slightly better code generation in a few places.
By devirtualizing we allow for more aggressive inlining and slightly better code generation in a few places.