Mercurial > hg > release > icedtea6-1.10
changeset 1571:e3339b19c3d9
2009-05-29 Gary Benson <gbenson@redhat.com>
* ports/hotspot/src/share/vm/shark/sharkBlock.hpp
(SharkBlock::maybe_add_safepoint): Replaced with...
(SharkBlock::maybe_add_backedge_safepoint): New method.
* ports/hotspot/src/share/vm/shark/sharkBlock.cpp
(SharkBlock::maybe_add_safepoint): Replaced with...
(SharkBlock::maybe_add_backedge_safepoint): New method.
(SharkBlock::parse_bytecode): Updated for above.
* ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.hpp
(SharkBlock::maybe_add_backedge_safepoint): New method.
(SharkBlock::_can_reach_visited): New field.
(SharkBlock::can_reach): New method.
(SharkBlock::can_reach_helper): Likewise.
* ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.cpp
(SharkBlock::maybe_add_backedge_safepoint): New method.
(SharkBlock::can_reach): Likewise.
(SharkBlock::can_reach_helper): Likewise.
author | Gary Benson <gbenson@redhat.com> |
---|---|
date | Fri, 29 May 2009 12:38:51 +0100 |
parents | 1c47ca6df830 |
children | 6b95c888541f |
files | ChangeLog ports/hotspot/src/share/vm/shark/sharkBlock.cpp ports/hotspot/src/share/vm/shark/sharkBlock.hpp ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.cpp ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.hpp |
diffstat | 5 files changed, 79 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Fri May 29 10:12:01 2009 +0100 +++ b/ChangeLog Fri May 29 12:38:51 2009 +0100 @@ -1,3 +1,23 @@ +2009-05-29 Gary Benson <gbenson@redhat.com> + + * ports/hotspot/src/share/vm/shark/sharkBlock.hpp + (SharkBlock::maybe_add_safepoint): Replaced with... + (SharkBlock::maybe_add_backedge_safepoint): New method. + * ports/hotspot/src/share/vm/shark/sharkBlock.cpp + (SharkBlock::maybe_add_safepoint): Replaced with... + (SharkBlock::maybe_add_backedge_safepoint): New method. + (SharkBlock::parse_bytecode): Updated for above. + + * ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.hpp + (SharkBlock::maybe_add_backedge_safepoint): New method. + (SharkBlock::_can_reach_visited): New field. + (SharkBlock::can_reach): New method. + (SharkBlock::can_reach_helper): Likewise. + * ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.cpp + (SharkBlock::maybe_add_backedge_safepoint): New method. + (SharkBlock::can_reach): Likewise. + (SharkBlock::can_reach_helper): Likewise. + 2009-05-29 Gary Benson <gbenson@redhat.com> * ports/hotspot/src/share/vm/shark/sharkState.hpp
--- a/ports/hotspot/src/share/vm/shark/sharkBlock.cpp Fri May 29 10:12:01 2009 +0100 +++ b/ports/hotspot/src/share/vm/shark/sharkBlock.cpp Fri May 29 12:38:51 2009 +0100 @@ -74,24 +74,24 @@ case Bytecodes::_if_icmpgt: case Bytecodes::_if_icmpge: if (iter()->get_dest() <= bci()) - maybe_add_safepoint(); + maybe_add_backedge_safepoint(); break; case Bytecodes::_goto_w: if (iter()->get_far_dest() <= bci()) - maybe_add_safepoint(); + maybe_add_backedge_safepoint(); break; case Bytecodes::_tableswitch: case Bytecodes::_lookupswitch: if (switch_default_dest() <= bci()) { - maybe_add_safepoint(); + maybe_add_backedge_safepoint(); break; } int len = switch_table_length(); for (int i = 0; i < len; i++) { if (switch_dest(i) <= bci()) { - maybe_add_safepoint(); + maybe_add_backedge_safepoint(); break; } } @@ -1138,7 +1138,7 @@ ShouldNotCallThis(); } -void SharkBlock::maybe_add_safepoint() +void SharkBlock::maybe_add_backedge_safepoint() { ShouldNotCallThis(); }
--- a/ports/hotspot/src/share/vm/shark/sharkBlock.hpp Fri May 29 10:12:01 2009 +0100 +++ b/ports/hotspot/src/share/vm/shark/sharkBlock.hpp Fri May 29 12:38:51 2009 +0100 @@ -231,7 +231,7 @@ // Safepoints protected: - virtual void maybe_add_safepoint(); + virtual void maybe_add_backedge_safepoint(); // Traps protected:
--- a/ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.cpp Fri May 29 10:12:01 2009 +0100 +++ b/ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.cpp Fri May 29 12:38:51 2009 +0100 @@ -469,6 +469,51 @@ current_state()->set_has_safepointed(true); } +void SharkTopLevelBlock::maybe_add_backedge_safepoint() +{ + if (current_state()->has_safepointed()) + return; + + for (int i = 0; i < num_successors(); i++) { + if (successor(i)->can_reach(this)) { + maybe_add_safepoint(); + break; + } + } +} + +bool SharkTopLevelBlock::can_reach(SharkTopLevelBlock* other) +{ + for (int i = 0; i < function()->block_count(); i++) + function()->block(i)->_can_reach_visited = false; + + return can_reach_helper(other); +} + +bool SharkTopLevelBlock::can_reach_helper(SharkTopLevelBlock* other) +{ + if (this == other) + return true; + + if (_can_reach_visited) + return false; + _can_reach_visited = true; + + if (!has_trap()) { + for (int i = 0; i < num_successors(); i++) { + if (successor(i)->can_reach_helper(other)) + return true; + } + } + + for (int i = 0; i < num_exceptions(); i++) { + if (exception(i)->can_reach_helper(other)) + return true; + } + + return false; +} + void SharkTopLevelBlock::do_trap(int trap_request) { current_state()->decache_for_trap();
--- a/ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.hpp Fri May 29 10:12:01 2009 +0100 +++ b/ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.hpp Fri May 29 12:38:51 2009 +0100 @@ -311,6 +311,14 @@ // Safepoints private: void maybe_add_safepoint(); + void maybe_add_backedge_safepoint(); + + // Loop safepoint removal + private: + bool _can_reach_visited; + + bool can_reach(SharkTopLevelBlock* other); + bool can_reach_helper(SharkTopLevelBlock* other); // Traps private: