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);
|