--- a/hotspot/src/share/vm/c1/c1_Instruction.cpp Wed Aug 31 16:46:11 2011 -0700
+++ b/hotspot/src/share/vm/c1/c1_Instruction.cpp Thu Sep 01 01:31:25 2011 -0700
@@ -514,28 +514,17 @@
void BlockBegin::set_end(BlockEnd* end) {
assert(end != NULL, "should not reset block end to NULL");
- BlockEnd* old_end = _end;
- if (end == old_end) {
+ if (end == _end) {
return;
}
- // Must make the predecessors/successors match up with the
- // BlockEnd's notion.
- int i, n;
- if (old_end != NULL) {
- // disconnect from the old end
- old_end->set_begin(NULL);
+ clear_end();
- // disconnect this block from it's current successors
- for (i = 0; i < _successors.length(); i++) {
- _successors.at(i)->remove_predecessor(this);
- }
- }
+ // Set the new end
_end = end;
_successors.clear();
// Now reset successors list based on BlockEnd
- n = end->number_of_sux();
- for (i = 0; i < n; i++) {
+ for (int i = 0; i < end->number_of_sux(); i++) {
BlockBegin* sux = end->sux_at(i);
_successors.append(sux);
sux->_predecessors.append(this);
@@ -544,6 +533,22 @@
}
+void BlockBegin::clear_end() {
+ // Must make the predecessors/successors match up with the
+ // BlockEnd's notion.
+ if (_end != NULL) {
+ // disconnect from the old end
+ _end->set_begin(NULL);
+
+ // disconnect this block from it's current successors
+ for (int i = 0; i < _successors.length(); i++) {
+ _successors.at(i)->remove_predecessor(this);
+ }
+ _end = NULL;
+ }
+}
+
+
void BlockBegin::disconnect_edge(BlockBegin* from, BlockBegin* to) {
// disconnect any edges between from and to
#ifndef PRODUCT