Mercurial > hg > graal-jvmci-8
diff src/share/vm/code/scopeDesc.cpp @ 7046:b6a8f2d23057
VM support for deferred reads and writes: ScopeDesc, DebugInfo, DebugInfoRecorder
author | Lukas Stadler <lukas.stadler@jku.at> |
---|---|
date | Tue, 27 Nov 2012 13:43:04 +0100 |
parents | e522a00b91aa |
children | d4e6c82cd6a1 |
line wrap: on
line diff
--- a/src/share/vm/code/scopeDesc.cpp Tue Nov 27 12:10:41 2012 +0100 +++ b/src/share/vm/code/scopeDesc.cpp Tue Nov 27 13:43:04 2012 +0100 @@ -73,6 +73,9 @@ _locals_decode_offset = DebugInformationRecorder::serialized_null; _expressions_decode_offset = DebugInformationRecorder::serialized_null; _monitors_decode_offset = DebugInformationRecorder::serialized_null; +#ifdef GRAAL + _deferred_writes_decode_offset = DebugInformationRecorder::serialized_null; +#endif // GRAAL } else { // decode header DebugInfoReadStream* stream = stream_at(decode_offset()); @@ -85,6 +88,9 @@ _locals_decode_offset = stream->read_int(); _expressions_decode_offset = stream->read_int(); _monitors_decode_offset = stream->read_int(); +#ifdef GRAAL + _deferred_writes_decode_offset = stream->read_int(); +#endif // GRAAL } } @@ -126,6 +132,25 @@ return result; } +#ifdef GRAAL + +GrowableArray<DeferredWriteValue*>* ScopeDesc::decode_deferred_writes(int decode_offset) { + if (decode_offset == DebugInformationRecorder::serialized_null) return NULL; + DebugInfoReadStream* stream = stream_at(decode_offset); + int length = stream->read_int(); + GrowableArray<DeferredWriteValue*>* result = new GrowableArray<DeferredWriteValue*> (length); + for (int index = 0; index < length; index++) { + result->push(new DeferredWriteValue(stream)); + } + return result; +} + +GrowableArray<DeferredWriteValue*>* ScopeDesc::deferred_writes() { + return decode_deferred_writes(_deferred_writes_decode_offset); +} + +#endif // GRAAL + DebugInfoReadStream* ScopeDesc::stream_at(int decode_offset) const { return new DebugInfoReadStream(_code, decode_offset, _objects); } @@ -225,8 +250,8 @@ } } -#ifdef COMPILER2 - if (DoEscapeAnalysis && is_top() && _objects != NULL) { +#if defined(COMPILER2) || defined(GRAAL) + if (NOT_GRAAL(DoEscapeAnalysis &&) is_top() && _objects != NULL) { tty->print_cr("Objects"); for (int i = 0; i < _objects->length(); i++) { ObjectValue* sv = (ObjectValue*) _objects->at(i); @@ -235,7 +260,20 @@ tty->cr(); } } -#endif // COMPILER2 +#endif // COMPILER2 || GRAAL +#ifdef GRAAL + // deferred writes + { GrowableArray<DeferredWriteValue*>* l = ((ScopeDesc*) this)->deferred_writes(); + if (l != NULL) { + st->print_cr(" Deferred writes"); + for (int index = 0; index < l->length(); index++) { + st->print(" - @%d: ", index); + l->at(index)->print_on(st); + st->cr(); + } + } + } +#endif } #endif