hotspot/src/share/vm/c1/c1_IR.hpp
changeset 5046 27e801a857cb
parent 4894 8a76fd3d098d
child 5687 b862d1f189bd
child 5547 f4b087cbb361
equal deleted inserted replaced
5044:7e40acdf2163 5046:27e801a857cb
     1 /*
     1 /*
     2  * Copyright 1999-2009 Sun Microsystems, Inc.  All Rights Reserved.
     2  * Copyright 1999-2010 Sun Microsystems, Inc.  All Rights Reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     7  * published by the Free Software Foundation.
   240   IRScopeDebugInfo*             caller()      { return _caller;      }
   240   IRScopeDebugInfo*             caller()      { return _caller;      }
   241 
   241 
   242   //Whether we should reexecute this bytecode for deopt
   242   //Whether we should reexecute this bytecode for deopt
   243   bool should_reexecute();
   243   bool should_reexecute();
   244 
   244 
   245   void record_debug_info(DebugInformationRecorder* recorder, int pc_offset, bool topmost) {
   245   void record_debug_info(DebugInformationRecorder* recorder, int pc_offset, bool topmost, bool is_method_handle_invoke = false) {
   246     if (caller() != NULL) {
   246     if (caller() != NULL) {
   247       // Order is significant:  Must record caller first.
   247       // Order is significant:  Must record caller first.
   248       caller()->record_debug_info(recorder, pc_offset, false/*topmost*/);
   248       caller()->record_debug_info(recorder, pc_offset, false/*topmost*/);
   249     }
   249     }
   250     DebugToken* locvals = recorder->create_scope_values(locals());
   250     DebugToken* locvals = recorder->create_scope_values(locals());
   251     DebugToken* expvals = recorder->create_scope_values(expressions());
   251     DebugToken* expvals = recorder->create_scope_values(expressions());
   252     DebugToken* monvals = recorder->create_monitor_values(monitors());
   252     DebugToken* monvals = recorder->create_monitor_values(monitors());
   253     // reexecute allowed only for the topmost frame
   253     // reexecute allowed only for the topmost frame
   254     bool reexecute = topmost ? should_reexecute() : false;
   254     bool reexecute = topmost ? should_reexecute() : false;
   255     bool is_method_handle_invoke = false;
       
   256     bool return_oop = false; // This flag will be ignored since it used only for C2 with escape analysis.
   255     bool return_oop = false; // This flag will be ignored since it used only for C2 with escape analysis.
   257     recorder->describe_scope(pc_offset, scope()->method(), bci(), reexecute, is_method_handle_invoke, return_oop, locvals, expvals, monvals);
   256     recorder->describe_scope(pc_offset, scope()->method(), bci(), reexecute, is_method_handle_invoke, return_oop, locvals, expvals, monvals);
   258   }
   257   }
   259 };
   258 };
   260 
   259 
   301   XHandlers* exception_handlers() const          { return _exception_handlers; }
   300   XHandlers* exception_handlers() const          { return _exception_handlers; }
   302   ValueStack* stack() const                      { return _stack; }
   301   ValueStack* stack() const                      { return _stack; }
   303   int bci() const                                { return _bci; }
   302   int bci() const                                { return _bci; }
   304 
   303 
   305   void add_register_oop(LIR_Opr opr);
   304   void add_register_oop(LIR_Opr opr);
   306   void record_debug_info(DebugInformationRecorder* recorder, int pc_offset);
   305   void record_debug_info(DebugInformationRecorder* recorder, int pc_offset, bool is_method_handle_invoke = false);
   307 
   306 
   308   CodeEmitInfo* next() const        { return _next; }
   307   CodeEmitInfo* next() const        { return _next; }
   309   void set_next(CodeEmitInfo* next) { _next = next; }
   308   void set_next(CodeEmitInfo* next) { _next = next; }
   310 
   309 
   311   int id() const      { return _id; }
   310   int id() const      { return _id; }