Skip to content

Commit 33ed036

Browse files
committed
8283775: better dump: VM support for graph querying in debugger with BFS traversal and node filtering
Reviewed-by: kvn, chagedorn, thartmann, rcastanedalo
1 parent ac28be7 commit 33ed036

File tree

4 files changed

+746
-32
lines changed

4 files changed

+746
-32
lines changed

src/hotspot/share/opto/callnode.cpp

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -192,13 +192,18 @@ uint ReturnNode::match_edge(uint idx) const {
192192

193193

194194
#ifndef PRODUCT
195-
void ReturnNode::dump_req(outputStream *st) const {
196-
// Dump the required inputs, enclosed in '(' and ')'
195+
void ReturnNode::dump_req(outputStream *st, DumpConfig* dc) const {
196+
// Dump the required inputs, after printing "returns"
197197
uint i; // Exit value of loop
198198
for (i = 0; i < req(); i++) { // For all required inputs
199-
if (i == TypeFunc::Parms) st->print("returns");
200-
if (in(i)) st->print("%c%d ", Compile::current()->node_arena()->contains(in(i)) ? ' ' : 'o', in(i)->_idx);
201-
else st->print("_ ");
199+
if (i == TypeFunc::Parms) st->print("returns ");
200+
Node* p = in(i);
201+
if (p != nullptr) {
202+
p->dump_idx(false, st, dc);
203+
st->print(" ");
204+
} else {
205+
st->print("_ ");
206+
}
202207
}
203208
}
204209
#endif
@@ -235,13 +240,18 @@ uint RethrowNode::match_edge(uint idx) const {
235240
}
236241

237242
#ifndef PRODUCT
238-
void RethrowNode::dump_req(outputStream *st) const {
239-
// Dump the required inputs, enclosed in '(' and ')'
243+
void RethrowNode::dump_req(outputStream *st, DumpConfig* dc) const {
244+
// Dump the required inputs, after printing "exception"
240245
uint i; // Exit value of loop
241246
for (i = 0; i < req(); i++) { // For all required inputs
242-
if (i == TypeFunc::Parms) st->print("exception");
243-
if (in(i)) st->print("%c%d ", Compile::current()->node_arena()->contains(in(i)) ? ' ' : 'o', in(i)->_idx);
244-
else st->print("_ ");
247+
if (i == TypeFunc::Parms) st->print("exception ");
248+
Node* p = in(i);
249+
if (p != nullptr) {
250+
p->dump_idx(false, st, dc);
251+
st->print(" ");
252+
} else {
253+
st->print("_ ");
254+
}
245255
}
246256
}
247257
#endif
@@ -689,13 +699,18 @@ int JVMState::interpreter_frame_size() const {
689699
bool CallNode::cmp( const Node &n ) const
690700
{ return _tf == ((CallNode&)n)._tf && _jvms == ((CallNode&)n)._jvms; }
691701
#ifndef PRODUCT
692-
void CallNode::dump_req(outputStream *st) const {
702+
void CallNode::dump_req(outputStream *st, DumpConfig* dc) const {
693703
// Dump the required inputs, enclosed in '(' and ')'
694704
uint i; // Exit value of loop
695705
for (i = 0; i < req(); i++) { // For all required inputs
696706
if (i == TypeFunc::Parms) st->print("(");
697-
if (in(i)) st->print("%c%d ", Compile::current()->node_arena()->contains(in(i)) ? ' ' : 'o', in(i)->_idx);
698-
else st->print("_ ");
707+
Node* p = in(i);
708+
if (p != nullptr) {
709+
p->dump_idx(false, st, dc);
710+
st->print(" ");
711+
} else {
712+
st->print("_ ");
713+
}
699714
}
700715
st->print(")");
701716
}

src/hotspot/share/opto/callnode.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ class ReturnNode : public Node {
127127
virtual uint ideal_reg() const { return NotAMachineReg; }
128128
virtual uint match_edge(uint idx) const;
129129
#ifndef PRODUCT
130-
virtual void dump_req(outputStream *st = tty) const;
130+
virtual void dump_req(outputStream *st = tty, DumpConfig* dc = nullptr) const;
131131
#endif
132132
};
133133

@@ -148,7 +148,7 @@ class RethrowNode : public Node {
148148
virtual uint match_edge(uint idx) const;
149149
virtual uint ideal_reg() const { return NotAMachineReg; }
150150
#ifndef PRODUCT
151-
virtual void dump_req(outputStream *st = tty) const;
151+
virtual void dump_req(outputStream *st = tty, DumpConfig* dc = nullptr) const;
152152
#endif
153153
};
154154

@@ -655,7 +655,7 @@ class CallNode : public SafePointNode {
655655
virtual void copy_call_debug_info(PhaseIterGVN* phase, SafePointNode* sfpt) {}
656656

657657
#ifndef PRODUCT
658-
virtual void dump_req(outputStream* st = tty) const;
658+
virtual void dump_req(outputStream* st = tty, DumpConfig* dc = nullptr) const;
659659
virtual void dump_spec(outputStream* st) const;
660660
#endif
661661
};

0 commit comments

Comments
 (0)