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