src/share/vm/opto/output.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Sdiff src/share/vm/opto

src/share/vm/opto/output.cpp

Print this page
rev 9032 : 8137167: JEP165: Compiler Control: Implementation task
Summary: Compiler Control JEP
Reviewed-by: roland, twisti


  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #include "precompiled.hpp"
  26 #include "asm/assembler.inline.hpp"
  27 #include "code/compiledIC.hpp"
  28 #include "code/debugInfo.hpp"
  29 #include "code/debugInfoRec.hpp"
  30 #include "compiler/compileBroker.hpp"

  31 #include "compiler/oopMap.hpp"
  32 #include "memory/allocation.inline.hpp"
  33 #include "opto/ad.hpp"
  34 #include "opto/callnode.hpp"
  35 #include "opto/cfgnode.hpp"
  36 #include "opto/locknode.hpp"
  37 #include "opto/machnode.hpp"
  38 #include "opto/optoreg.hpp"
  39 #include "opto/output.hpp"
  40 #include "opto/regalloc.hpp"
  41 #include "opto/runtime.hpp"
  42 #include "opto/subnode.hpp"
  43 #include "opto/type.hpp"
  44 #include "runtime/handles.inline.hpp"
  45 #include "utilities/xmlstream.hpp"
  46 
  47 #ifndef PRODUCT
  48 #define DEBUG_ARG(x) , x
  49 #else
  50 #define DEBUG_ARG(x)


  72   MachPrologNode *prolog = new MachPrologNode();
  73   entry->map_node(prolog, 0);
  74   _cfg->map_node_to_block(prolog, entry);
  75   _cfg->unmap_node_from_block(start); // start is no longer in any block
  76 
  77   // Virtual methods need an unverified entry point
  78 
  79   if( is_osr_compilation() ) {
  80     if( PoisonOSREntry ) {
  81       // TODO: Should use a ShouldNotReachHereNode...
  82       _cfg->insert( broot, 0, new MachBreakpointNode() );
  83     }
  84   } else {
  85     if( _method && !_method->flags().is_static() ) {
  86       // Insert unvalidated entry point
  87       _cfg->insert( broot, 0, new MachUEPNode() );
  88     }
  89 
  90   }
  91 
  92 
  93   // Break before main entry point
  94   if( (_method && _method->break_at_execute())
  95 #ifndef PRODUCT
  96     ||(OptoBreakpoint && is_method_compilation())
  97     ||(OptoBreakpointOSR && is_osr_compilation())
  98     ||(OptoBreakpointC2R && !_method)
  99 #endif
 100     ) {
 101     // checking for _method means that OptoBreakpoint does not apply to
 102     // runtime stubs or frame converters
 103     _cfg->insert( entry, 1, new MachBreakpointNode() );
 104   }
 105 
 106   // Insert epilogs before every return
 107   for (uint i = 0; i < _cfg->number_of_blocks(); i++) {
 108     Block* block = _cfg->get_block(i);
 109     if (!block->is_connector() && block->non_connector_successor(0) == _cfg->get_root_block()) { // Found a program exit point?
 110       Node* m = block->end();
 111       if (m->is_Mach() && m->as_Mach()->ideal_Opcode() != Op_Halt) {
 112         MachEpilogNode* epilog = new MachEpilogNode(m->as_Mach()->ideal_Opcode() == Op_Return);
 113         block->add_inst(epilog);
 114         _cfg->map_node_to_block(epilog, block);




  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #include "precompiled.hpp"
  26 #include "asm/assembler.inline.hpp"
  27 #include "code/compiledIC.hpp"
  28 #include "code/debugInfo.hpp"
  29 #include "code/debugInfoRec.hpp"
  30 #include "compiler/compileBroker.hpp"
  31 #include "compiler/compilerDirectives.hpp"
  32 #include "compiler/oopMap.hpp"
  33 #include "memory/allocation.inline.hpp"
  34 #include "opto/ad.hpp"
  35 #include "opto/callnode.hpp"
  36 #include "opto/cfgnode.hpp"
  37 #include "opto/locknode.hpp"
  38 #include "opto/machnode.hpp"
  39 #include "opto/optoreg.hpp"
  40 #include "opto/output.hpp"
  41 #include "opto/regalloc.hpp"
  42 #include "opto/runtime.hpp"
  43 #include "opto/subnode.hpp"
  44 #include "opto/type.hpp"
  45 #include "runtime/handles.inline.hpp"
  46 #include "utilities/xmlstream.hpp"
  47 
  48 #ifndef PRODUCT
  49 #define DEBUG_ARG(x) , x
  50 #else
  51 #define DEBUG_ARG(x)


  73   MachPrologNode *prolog = new MachPrologNode();
  74   entry->map_node(prolog, 0);
  75   _cfg->map_node_to_block(prolog, entry);
  76   _cfg->unmap_node_from_block(start); // start is no longer in any block
  77 
  78   // Virtual methods need an unverified entry point
  79 
  80   if( is_osr_compilation() ) {
  81     if( PoisonOSREntry ) {
  82       // TODO: Should use a ShouldNotReachHereNode...
  83       _cfg->insert( broot, 0, new MachBreakpointNode() );
  84     }
  85   } else {
  86     if( _method && !_method->flags().is_static() ) {
  87       // Insert unvalidated entry point
  88       _cfg->insert( broot, 0, new MachUEPNode() );
  89     }
  90 
  91   }
  92 

  93   // Break before main entry point
  94   if( (_method && C->directive()->BreakAtExecuteOption)
  95 #ifndef PRODUCT
  96     ||(OptoBreakpoint && is_method_compilation())
  97     ||(OptoBreakpointOSR && is_osr_compilation())
  98     ||(OptoBreakpointC2R && !_method)
  99 #endif
 100     ) {
 101     // checking for _method means that OptoBreakpoint does not apply to
 102     // runtime stubs or frame converters
 103     _cfg->insert( entry, 1, new MachBreakpointNode() );
 104   }
 105 
 106   // Insert epilogs before every return
 107   for (uint i = 0; i < _cfg->number_of_blocks(); i++) {
 108     Block* block = _cfg->get_block(i);
 109     if (!block->is_connector() && block->non_connector_successor(0) == _cfg->get_root_block()) { // Found a program exit point?
 110       Node* m = block->end();
 111       if (m->is_Mach() && m->as_Mach()->ideal_Opcode() != Op_Halt) {
 112         MachEpilogNode* epilog = new MachEpilogNode(m->as_Mach()->ideal_Opcode() == Op_Return);
 113         block->add_inst(epilog);
 114         _cfg->map_node_to_block(epilog, block);


src/share/vm/opto/output.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File