Mercurial > hg > truffle
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++)); |