comparison src/share/vm/c1/c1_Instruction.cpp @ 3900:a32de5085326

7079673: JSR 292: C1 should inline bytecoded method handle adapters Reviewed-by: never
author twisti
date Thu, 01 Sep 2011 01:31:25 -0700
parents 208b6c560ff4
children 1d7922586cf6
comparison
equal deleted inserted replaced
3899:c124e2e7463e 3900:a32de5085326
512 512
513 // Implementation of BlockBegin 513 // Implementation of BlockBegin
514 514
515 void BlockBegin::set_end(BlockEnd* end) { 515 void BlockBegin::set_end(BlockEnd* end) {
516 assert(end != NULL, "should not reset block end to NULL"); 516 assert(end != NULL, "should not reset block end to NULL");
517 BlockEnd* old_end = _end; 517 if (end == _end) {
518 if (end == old_end) {
519 return; 518 return;
520 } 519 }
521 // Must make the predecessors/successors match up with the 520 clear_end();
522 // BlockEnd's notion. 521
523 int i, n; 522 // Set the new end
524 if (old_end != NULL) {
525 // disconnect from the old end
526 old_end->set_begin(NULL);
527
528 // disconnect this block from it's current successors
529 for (i = 0; i < _successors.length(); i++) {
530 _successors.at(i)->remove_predecessor(this);
531 }
532 }
533 _end = end; 523 _end = end;
534 524
535 _successors.clear(); 525 _successors.clear();
536 // Now reset successors list based on BlockEnd 526 // Now reset successors list based on BlockEnd
537 n = end->number_of_sux(); 527 for (int i = 0; i < end->number_of_sux(); i++) {
538 for (i = 0; i < n; i++) {
539 BlockBegin* sux = end->sux_at(i); 528 BlockBegin* sux = end->sux_at(i);
540 _successors.append(sux); 529 _successors.append(sux);
541 sux->_predecessors.append(this); 530 sux->_predecessors.append(this);
542 } 531 }
543 _end->set_begin(this); 532 _end->set_begin(this);
533 }
534
535
536 void BlockBegin::clear_end() {
537 // Must make the predecessors/successors match up with the
538 // BlockEnd's notion.
539 if (_end != NULL) {
540 // disconnect from the old end
541 _end->set_begin(NULL);
542
543 // disconnect this block from it's current successors
544 for (int i = 0; i < _successors.length(); i++) {
545 _successors.at(i)->remove_predecessor(this);
546 }
547 _end = NULL;
548 }
544 } 549 }
545 550
546 551
547 void BlockBegin::disconnect_edge(BlockBegin* from, BlockBegin* to) { 552 void BlockBegin::disconnect_edge(BlockBegin* from, BlockBegin* to) {
548 // disconnect any edges between from and to 553 // disconnect any edges between from and to