Mercurial > hg > truffle
comparison src/share/vm/opto/macro.cpp @ 163:885ed790ecf0
6695810: null oop passed to encode_heap_oop_not_null
Summary: fix several problems in C2 related to Escape Analysis and Compressed Oops.
Reviewed-by: never, jrose
author | kvn |
---|---|
date | Wed, 21 May 2008 10:45:07 -0700 |
parents | b130b98db9cf |
children | 7793bd37a336 |
comparison
equal
deleted
inserted
replaced
162:8aa010f60e0f | 163:885ed790ecf0 |
---|---|
1280 } else { | 1280 } else { |
1281 mark_node = makecon(TypeRawPtr::make((address)markOopDesc::prototype())); | 1281 mark_node = makecon(TypeRawPtr::make((address)markOopDesc::prototype())); |
1282 } | 1282 } |
1283 rawmem = make_store(control, rawmem, object, oopDesc::mark_offset_in_bytes(), mark_node, T_ADDRESS); | 1283 rawmem = make_store(control, rawmem, object, oopDesc::mark_offset_in_bytes(), mark_node, T_ADDRESS); |
1284 | 1284 |
1285 if (UseCompressedOops) { | |
1286 Node *zeronode = makecon(TypeInt::ZERO); | |
1287 // store uncompressed 0 into klass ptr to zero out gap. The gap is | |
1288 // used for primitive fields and has to be zeroed. | |
1289 rawmem = make_store(control, rawmem, object, oopDesc::klass_gap_offset_in_bytes(), zeronode, T_INT); | |
1290 } | |
1291 rawmem = make_store(control, rawmem, object, oopDesc::klass_offset_in_bytes(), klass_node, T_OBJECT); | 1285 rawmem = make_store(control, rawmem, object, oopDesc::klass_offset_in_bytes(), klass_node, T_OBJECT); |
1292 int header_size = alloc->minimum_header_size(); // conservatively small | 1286 int header_size = alloc->minimum_header_size(); // conservatively small |
1293 | 1287 |
1294 // Array length | 1288 // Array length |
1295 if (length != NULL) { // Arrays need length field | 1289 if (length != NULL) { // Arrays need length field |