@@ -558,35 +558,28 @@ void PhaseChaitin::post_allocate_copy_removal() {
558558 }
559559 }
560560
561-
562561 // Extract Node_List mappings. If 'freed' is non-zero, we just popped
563562 // 'freed's blocks off the list
564- Node_List ®nd = *(free_list.is_empty () ? new Node_List () : free_list.pop ());
565- Node_List &value = *(free_list.is_empty () ? new Node_List () : free_list.pop ());
563+ Node_List ®nd = *(free_list.is_empty () ? new Node_List (_max_reg ) : free_list.pop ());
564+ Node_List &value = *(free_list.is_empty () ? new Node_List (_max_reg ) : free_list.pop ());
566565 assert ( !freed || blk2value[freed->_pre_order ] == &value, " " );
567- value.map (_max_reg,NULL );
568- regnd.map (_max_reg,NULL );
569566 // Set mappings as OUR mappings
570567 blk2value[block->_pre_order ] = &value;
571568 blk2regnd[block->_pre_order ] = ®nd;
572569
573570 // Initialize value & regnd for this block
574571 if (missing_some_inputs) {
575- // Some predecessor has not yet been visited; zap map to empty
576- for (uint k = 0 ; k < (uint)_max_reg; k++ ) {
577- value.map (k, NULL );
578- regnd.map (k, NULL );
572+ // Some predecessor has not yet been visited; zap map to empty if necessary
573+ if (freed ) {
574+ value.clear ( );
575+ regnd.clear ( );
579576 }
580577 } else {
581- if ( !freed ) { // Didn't get a freebie prior block
578+ if ( !freed) { // Didn't get a freebie prior block
582579 // Must clone some data
583580 freed = _cfg.get_block_for_node (block->pred (1 ));
584- Node_List &f_value = *blk2value[freed->_pre_order ];
585- Node_List &f_regnd = *blk2regnd[freed->_pre_order ];
586- for ( uint k = 0 ; k < (uint)_max_reg; k++ ) {
587- value.map (k,f_value[k]);
588- regnd.map (k,f_regnd[k]);
589- }
581+ value.copy (*blk2value[freed->_pre_order ]);
582+ regnd.copy (*blk2regnd[freed->_pre_order ]);
590583 }
591584 // Merge all inputs together, setting to NULL any conflicts.
592585 for (j = 1 ; j < block->num_preds (); j++) {
@@ -595,10 +588,10 @@ void PhaseChaitin::post_allocate_copy_removal() {
595588 continue ; // Did self already via freelist
596589 }
597590 Node_List &p_regnd = *blk2regnd[pb->_pre_order ];
598- for ( uint k = 0 ; k < (uint)_max_reg; k++ ) {
599- if ( regnd[k] != p_regnd[k] ) { // Conflict on reaching defs?
600- value.map (k,NULL ); // Then no value handy
601- regnd.map (k,NULL );
591+ for ( uint k = 0 ; k < (uint)_max_reg; k++) {
592+ if ( regnd[k] != p_regnd[k]) { // Conflict on reaching defs?
593+ value.map (k, NULL ); // Then no value handy
594+ regnd.map (k, NULL );
602595 }
603596 }
604597 }
@@ -634,14 +627,14 @@ void PhaseChaitin::post_allocate_copy_removal() {
634627 // can lead to situations where some uses are from the old and some from
635628 // the new values. Not illegal by itself but throws the over-strong
636629 // assert in scheduling.
637- if ( pidx ) {
638- value.map (preg,phi);
639- regnd.map (preg,phi);
630+ if ( pidx) {
631+ value.map (preg, phi);
632+ regnd.map (preg, phi);
640633 int n_regs = RegMask::num_registers (phi->ideal_reg (), lrgs (pidx));
641634 for (int l = 1 ; l < n_regs; l++) {
642635 OptoReg::Name preg_lo = OptoReg::add (preg,-l);
643- value.map (preg_lo,phi);
644- regnd.map (preg_lo,phi);
636+ value.map (preg_lo, phi);
637+ regnd.map (preg_lo, phi);
645638 }
646639 }
647640 }
0 commit comments