552
553 // Check for float-vs-int live range (used in register-pressure
554 // calculations)
555 const Type *n_type = n->bottom_type();
556 if( n_type->is_floatingpoint() )
557 lrg._is_float = 1;
558
559 // Check for twice prior spilling. Once prior spilling might have
560 // spilled 'soft', 2nd prior spill should have spilled 'hard' and
561 // further spilling is unlikely to make progress.
562 if( _spilled_once.test(n->_idx) ) {
563 lrg._was_spilled1 = 1;
564 if( _spilled_twice.test(n->_idx) )
565 lrg._was_spilled2 = 1;
566 }
567
568 #ifndef PRODUCT
569 if (trace_spilling() && lrg._def != NULL) {
570 // collect defs for MultiDef printing
571 if (lrg._defs == NULL) {
572 lrg._defs = new (_ifg->_arena) GrowableArray<Node*>();
573 lrg._defs->append(lrg._def);
574 }
575 lrg._defs->append(n);
576 }
577 #endif
578
579 // Check for a single def LRG; these can spill nicely
580 // via rematerialization. Flag as NULL for no def found
581 // yet, or 'n' for single def or -1 for many defs.
582 lrg._def = lrg._def ? NodeSentinel : n;
583
584 // Limit result register mask to acceptable registers
585 const RegMask &rm = n->out_RegMask();
586 lrg.AND( rm );
587 // Check for bound register masks
588 const RegMask &lrgmask = lrg.mask();
589 if( lrgmask.is_bound1() || lrgmask.is_bound2() )
590 lrg._is_bound = 1;
591
592 // Check for maximum frequency value
|
552
553 // Check for float-vs-int live range (used in register-pressure
554 // calculations)
555 const Type *n_type = n->bottom_type();
556 if( n_type->is_floatingpoint() )
557 lrg._is_float = 1;
558
559 // Check for twice prior spilling. Once prior spilling might have
560 // spilled 'soft', 2nd prior spill should have spilled 'hard' and
561 // further spilling is unlikely to make progress.
562 if( _spilled_once.test(n->_idx) ) {
563 lrg._was_spilled1 = 1;
564 if( _spilled_twice.test(n->_idx) )
565 lrg._was_spilled2 = 1;
566 }
567
568 #ifndef PRODUCT
569 if (trace_spilling() && lrg._def != NULL) {
570 // collect defs for MultiDef printing
571 if (lrg._defs == NULL) {
572 lrg._defs = new (_ifg->_arena) GrowableArray<Node*>(_ifg->_arena, 2, 0, NULL);
573 lrg._defs->append(lrg._def);
574 }
575 lrg._defs->append(n);
576 }
577 #endif
578
579 // Check for a single def LRG; these can spill nicely
580 // via rematerialization. Flag as NULL for no def found
581 // yet, or 'n' for single def or -1 for many defs.
582 lrg._def = lrg._def ? NodeSentinel : n;
583
584 // Limit result register mask to acceptable registers
585 const RegMask &rm = n->out_RegMask();
586 lrg.AND( rm );
587 // Check for bound register masks
588 const RegMask &lrgmask = lrg.mask();
589 if( lrgmask.is_bound1() || lrgmask.is_bound2() )
590 lrg._is_bound = 1;
591
592 // Check for maximum frequency value
|