review (XS) for 6889869: assert(!Interpreter::bytecode_should_reexecute(code), "should not reexecute")
Christian Thalinger
Christian.Thalinger at Sun.COM
Wed Oct 14 01:06:58 PDT 2009
On Mon, 2009-10-12 at 13:14 -0700, Tom Rodriguez wrote:
> I'd considered adding an is_same_info method to PcDesc and that's a
> good reason to do it. Actually looking at it some more there's
> another latent issue because it doesn't check _obj_decode_offset
> either. I'll change it do this. openjdk.java.net is still borked so
> I'll update the webrev when it's back but it's basically this:
>
> diff -r 03b336640699 src/share/vm/code/pcDesc.hpp
> --- a/src/share/vm/code/pcDesc.hpp Wed Oct 07 15:38:37 2009 -0700
> +++ b/src/share/vm/code/pcDesc.hpp Mon Oct 12 13:11:54 2009 -0700
> @@ -39,6 +39,7 @@ class PcDesc VALUE_OBJ_CLASS_SPEC {
> struct {
> unsigned int reexecute: 1;
> } bits;
> + operator ==(const PcDescFlags& other) { return word ==
> other.word; }
> } _flags;
>
> public:
> @@ -64,6 +65,13 @@ class PcDesc VALUE_OBJ_CLASS_SPEC {
> bool should_reexecute() const { return
> _flags.bits.reexecute; }
> void set_should_reexecute(bool z)
> { _flags.bits.reexecute = z; }
>
> + // Does pd refer to the same information as pd?
> + bool is_same_info(const PcDesc* pd) {
> + return _scope_decode_offset == pd->_scope_decode_offset &&
> + _obj_decode_offset == pd->_obj_decode_offset &&
> + _flags == pd->_flags;
> + }
> +
> // Returns the real pc
> address real_pc(const nmethod* code) const;
>
> diff -r 03b336640699 src/share/vm/code/debugInfoRec.cpp
> --- a/src/share/vm/code/debugInfoRec.cpp Wed Oct 07 15:38:37
> 2009 -0700
> +++ b/src/share/vm/code/debugInfoRec.cpp Mon Oct 12 13:07:49
> 2009 -0700
> @@ -356,8 +356,7 @@ void DebugInformationRecorder::end_scope
> // search forward until it finds last.
> // In addition, it does not matter if the last PcDesc
> // is for a safepoint or not.
> - if (_prev_safepoint_pc < prev->pc_offset() &&
> - prev->scope_decode_offset() == last->scope_decode_offset()) {
> + if (_prev_safepoint_pc < prev->pc_offset() && prev-
> >is_same_info(last)) {
> assert(prev == last-1, "sane");
> prev->set_pc_offset(pc_offset);
> _pcs_length -= 1;
That looks very good. -- Christian
More information about the hotspot-compiler-dev
mailing list