Mercurial > hg > truffle
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, ®nd); | |
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); |