diff -r 1796911eb140 -r 7743e6943cdf hotspot/src/share/vm/opto/cfgnode.cpp --- a/hotspot/src/share/vm/opto/cfgnode.cpp Wed Jul 29 12:33:48 2015 +0200 +++ b/hotspot/src/share/vm/opto/cfgnode.cpp Wed Mar 18 16:16:30 2015 +0100 @@ -2023,6 +2023,14 @@ } #ifndef PRODUCT +void PhiNode::related(GrowableArray *in_rel, GrowableArray *out_rel, bool compact) const { + // For a PhiNode, the set of related nodes includes all inputs till level 2, + // and all outputs till level 1. In compact mode, inputs till level 1 are + // collected. + this->collect_nodes(in_rel, compact ? 1 : 2, false, false); + this->collect_nodes(out_rel, -1, false, false); +} + void PhiNode::dump_spec(outputStream *st) const { TypeNode::dump_spec(st); if (is_tripcount()) { @@ -2047,11 +2055,33 @@ return RegMask::Empty; } +#ifndef PRODUCT +//-----------------------------related----------------------------------------- +// The related nodes of a GotoNode are all inputs at level 1, as well as the +// outputs at level 1. This is regardless of compact mode. +void GotoNode::related(GrowableArray *in_rel, GrowableArray *out_rel, bool compact) const { + this->collect_nodes(in_rel, 1, false, false); + this->collect_nodes(out_rel, -1, false, false); +} +#endif + + //============================================================================= const RegMask &JumpNode::out_RegMask() const { return RegMask::Empty; } +#ifndef PRODUCT +//-----------------------------related----------------------------------------- +// The related nodes of a JumpNode are all inputs at level 1, as well as the +// outputs at level 2 (to include actual jump targets beyond projection nodes). +// This is regardless of compact mode. +void JumpNode::related(GrowableArray *in_rel, GrowableArray *out_rel, bool compact) const { + this->collect_nodes(in_rel, 1, false, false); + this->collect_nodes(out_rel, -2, false, false); +} +#endif + //============================================================================= const RegMask &JProjNode::out_RegMask() const { return RegMask::Empty; @@ -2105,7 +2135,18 @@ #ifndef PRODUCT void JumpProjNode::dump_spec(outputStream *st) const { ProjNode::dump_spec(st); - st->print("@bci %d ",_dest_bci); + st->print("@bci %d ",_dest_bci); +} + +void JumpProjNode::dump_compact_spec(outputStream *st) const { + ProjNode::dump_compact_spec(st); + st->print("(%d)%d@%d", _switch_val, _proj_no, _dest_bci); +} + +void JumpProjNode::related(GrowableArray *in_rel, GrowableArray *out_rel, bool compact) const { + // The related nodes of a JumpProjNode are its inputs and outputs at level 1. + this->collect_nodes(in_rel, 1, false, false); + this->collect_nodes(out_rel, -1, false, false); } #endif