comparison src/share/vm/opto/postaloc.cpp @ 2008:2f644f85485d

6961690: load oops from constant table on SPARC Summary: oops should be loaded from the constant table of an nmethod instead of materializing them with a long code sequence. Reviewed-by: never, kvn
author twisti
date Fri, 03 Dec 2010 01:34:31 -0800
parents f95d63e2154a
children 8f47d8870d9a
comparison
equal deleted inserted replaced
2007:5ddfcf4b079e 2008:2f644f85485d
197 // Skip through all copies to the _value_ being used. Do not change from 197 // Skip through all copies to the _value_ being used. Do not change from
198 // int to pointer. This attempts to jump through a chain of copies, where 198 // int to pointer. This attempts to jump through a chain of copies, where
199 // intermediate copies might be illegal, i.e., value is stored down to stack 199 // intermediate copies might be illegal, i.e., value is stored down to stack
200 // then reloaded BUT survives in a register the whole way. 200 // then reloaded BUT survives in a register the whole way.
201 Node *val = skip_copies(n->in(k)); 201 Node *val = skip_copies(n->in(k));
202
203 if (val == x && nk_idx != 0 &&
204 regnd[nk_reg] != NULL && regnd[nk_reg] != x &&
205 n2lidx(x) == n2lidx(regnd[nk_reg])) {
206 // When rematerialzing nodes and stretching lifetimes, the
207 // allocator will reuse the original def for multidef LRG instead
208 // of the current reaching def because it can't know it's safe to
209 // do so. After allocation completes if they are in the same LRG
210 // then it should use the current reaching def instead.
211 n->set_req(k, regnd[nk_reg]);
212 blk_adjust += yank_if_dead(val, current_block, &value, &regnd);
213 val = skip_copies(n->in(k));
214 }
202 215
203 if( val == x ) return blk_adjust; // No progress? 216 if( val == x ) return blk_adjust; // No progress?
204 217
205 bool single = is_single_register(val->ideal_reg()); 218 bool single = is_single_register(val->ideal_reg());
206 uint val_idx = n2lidx(val); 219 uint val_idx = n2lidx(val);