Mercurial > hg > graal-jvmci-8
comparison src/share/vm/opto/idealGraphPrinter.cpp @ 2403:1927db75dd85
7024475: loop doesn't terminate when compiled
Reviewed-by: kvn
author | never |
---|---|
date | Sun, 27 Mar 2011 00:00:14 -0700 |
parents | f95d63e2154a |
children | a80577f854f9 |
comparison
equal
deleted
inserted
replaced
2402:244bf8afbbd3 | 2403:1927db75dd85 |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. | 2 * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | 4 * |
5 * This code is free software; you can redistribute it and/or modify it | 5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as | 6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
597 } | 597 } |
598 } | 598 } |
599 | 599 |
600 if (caller != NULL) { | 600 if (caller != NULL) { |
601 stringStream bciStream; | 601 stringStream bciStream; |
602 ciMethod* last = NULL; | |
603 int last_bci; | |
602 while(caller) { | 604 while(caller) { |
605 if (caller->has_method()) { | |
606 last = caller->method(); | |
607 last_bci = caller->bci(); | |
608 } | |
603 bciStream.print("%d ", caller->bci()); | 609 bciStream.print("%d ", caller->bci()); |
604 caller = caller->caller(); | 610 caller = caller->caller(); |
605 } | 611 } |
606 print_prop("bci", bciStream.as_string()); | 612 print_prop("bci", bciStream.as_string()); |
613 if (last != NULL && last->has_linenumber_table() && last_bci >= 0) { | |
614 print_prop("line", last->line_number_from_bci(last_bci)); | |
615 } | |
616 } | |
617 | |
618 if (node->debug_orig() != NULL) { | |
619 stringStream dorigStream; | |
620 Node* dorig = node->debug_orig(); | |
621 if (dorig) { | |
622 dorigStream.print("%d ", dorig->_idx); | |
623 Node* first = dorig; | |
624 dorig = first->debug_orig(); | |
625 while (dorig && dorig != first) { | |
626 dorigStream.print("%d ", dorig->_idx); | |
627 dorig = dorig->debug_orig(); | |
628 } | |
629 } | |
630 print_prop("debug_orig", dorigStream.as_string()); | |
607 } | 631 } |
608 | 632 |
609 if (_chaitin && _chaitin != (PhaseChaitin *)0xdeadbeef) { | 633 if (_chaitin && _chaitin != (PhaseChaitin *)0xdeadbeef) { |
610 buffer[0] = 0; | 634 buffer[0] = 0; |
611 _chaitin->dump_register(node, buffer); | 635 _chaitin->dump_register(node, buffer); |
626 | 650 |
627 VectorSet visited(Thread::current()->resource_area()); | 651 VectorSet visited(Thread::current()->resource_area()); |
628 GrowableArray<Node *> nodeStack(Thread::current()->resource_area(), 0, 0, NULL); | 652 GrowableArray<Node *> nodeStack(Thread::current()->resource_area(), 0, 0, NULL); |
629 nodeStack.push(start); | 653 nodeStack.push(start); |
630 visited.test_set(start->_idx); | 654 visited.test_set(start->_idx); |
655 if (C->cfg() != NULL) { | |
656 // once we have a CFG there are some nodes that aren't really | |
657 // reachable but are in the CFG so add them here. | |
658 for (uint i = 0; i < C->cfg()->_blocks.size(); i++) { | |
659 Block *b = C->cfg()->_blocks[i]; | |
660 for (uint s = 0; s < b->_nodes.size(); s++) { | |
661 nodeStack.push(b->_nodes[s]); | |
662 } | |
663 } | |
664 } | |
665 | |
631 while(nodeStack.length() > 0) { | 666 while(nodeStack.length() > 0) { |
632 | 667 |
633 Node *n = nodeStack.pop(); | 668 Node *n = nodeStack.pop(); |
634 visit_node(n, param); | 669 visit_node(n, param); |
635 | 670 |
684 begin_head(BLOCK_ELEMENT); | 719 begin_head(BLOCK_ELEMENT); |
685 print_attr(BLOCK_NAME_PROPERTY, b->_pre_order); | 720 print_attr(BLOCK_NAME_PROPERTY, b->_pre_order); |
686 end_head(); | 721 end_head(); |
687 | 722 |
688 head(SUCCESSORS_ELEMENT); | 723 head(SUCCESSORS_ELEMENT); |
689 for (uint s = 0; s < C->cfg()->_blocks[i]->_num_succs; s++) { | 724 for (uint s = 0; s < b->_num_succs; s++) { |
690 begin_elem(SUCCESSOR_ELEMENT); | 725 begin_elem(SUCCESSOR_ELEMENT); |
691 print_attr(BLOCK_NAME_PROPERTY, b->_succs[s]->_pre_order); | 726 print_attr(BLOCK_NAME_PROPERTY, b->_succs[s]->_pre_order); |
692 end_elem(); | 727 end_elem(); |
693 } | 728 } |
694 tail(SUCCESSORS_ELEMENT); | 729 tail(SUCCESSORS_ELEMENT); |
695 | 730 |
731 head(NODES_ELEMENT); | |
732 for (uint s = 0; s < b->_nodes.size(); s++) { | |
733 begin_elem(NODE_ELEMENT); | |
734 print_attr(NODE_ID_PROPERTY, get_node_id(b->_nodes[s])); | |
735 end_elem(); | |
736 } | |
737 tail(NODES_ELEMENT); | |
738 | |
696 tail(BLOCK_ELEMENT); | 739 tail(BLOCK_ELEMENT); |
697 } | 740 } |
698 | |
699 tail(CONTROL_FLOW_ELEMENT); | 741 tail(CONTROL_FLOW_ELEMENT); |
700 } | 742 } |
701 tail(GRAPH_ELEMENT); | 743 tail(GRAPH_ELEMENT); |
702 output()->flush(); | 744 output()->flush(); |
703 } | 745 } |