comparison src/share/vm/opto/chaitin.cpp @ 295:ea18057223c4

6732194: Data corruption dependent on -server/-client/-Xbatch Summary: rematerializing nodes results in incorrect inputs Reviewed-by: rasbold
author never
date Mon, 18 Aug 2008 23:17:51 -0700
parents d1605aabd0a1
children 0bf25c4807f9
comparison
equal deleted inserted replaced
294:616a07a75c3c 295:ea18057223c4
41 41
42 tty->print("EffDeg: "); 42 tty->print("EffDeg: ");
43 if( _degree_valid ) tty->print( "%d ", _eff_degree ); 43 if( _degree_valid ) tty->print( "%d ", _eff_degree );
44 else tty->print("? "); 44 else tty->print("? ");
45 45
46 if( _def == NodeSentinel ) { 46 if( is_multidef() ) {
47 tty->print("MultiDef "); 47 tty->print("MultiDef ");
48 if (_defs != NULL) { 48 if (_defs != NULL) {
49 tty->print("("); 49 tty->print("(");
50 for (int i = 0; i < _defs->length(); i++) { 50 for (int i = 0; i < _defs->length(); i++) {
51 tty->print("N%d ", _defs->at(i)->_idx); 51 tty->print("N%d ", _defs->at(i)->_idx);
763 lrg._is_bound = 1; 763 lrg._is_bound = 1;
764 } 764 }
765 // if the LRG is an unaligned pair, we will have to spill 765 // if the LRG is an unaligned pair, we will have to spill
766 // so clear the LRG's register mask if it is not already spilled 766 // so clear the LRG's register mask if it is not already spilled
767 if ( !n->is_SpillCopy() && 767 if ( !n->is_SpillCopy() &&
768 (lrg._def == NULL || lrg._def == NodeSentinel || !lrg._def->is_SpillCopy()) && 768 (lrg._def == NULL || lrg.is_multidef() || !lrg._def->is_SpillCopy()) &&
769 lrgmask.is_misaligned_Pair()) { 769 lrgmask.is_misaligned_Pair()) {
770 lrg.Clear(); 770 lrg.Clear();
771 } 771 }
772 772
773 // Check for maximum frequency value 773 // Check for maximum frequency value
1280 1280
1281 //--------------- 1281 //---------------
1282 // Live range is live and no colors available 1282 // Live range is live and no colors available
1283 else { 1283 else {
1284 assert( lrg->alive(), "" ); 1284 assert( lrg->alive(), "" );
1285 assert( !lrg->_fat_proj || lrg->_def == NodeSentinel || 1285 assert( !lrg->_fat_proj || lrg->is_multidef() ||
1286 lrg->_def->outcnt() > 0, "fat_proj cannot spill"); 1286 lrg->_def->outcnt() > 0, "fat_proj cannot spill");
1287 assert( !orig_mask.is_AllStack(), "All Stack does not spill" ); 1287 assert( !orig_mask.is_AllStack(), "All Stack does not spill" );
1288 1288
1289 // Assign the special spillreg register 1289 // Assign the special spillreg register
1290 lrg->set_reg(OptoReg::Name(spill_reg++)); 1290 lrg->set_reg(OptoReg::Name(spill_reg++));