# HG changeset patch # User Miguel Garcia # Date 1398792638 -7200 # Node ID 2f684eda1938cc92a72a35461c8d00f1871fe389 # Parent bda013e0d8bb75f27560646d5d8bd8b638530046# Parent 10023073e8580d8effc91a970f060aab50ef3cd2 Merge diff -r bda013e0d8bb -r 2f684eda1938 graal/com.oracle.graal.asm.hsail/src/com/oracle/graal/asm/hsail/HSAILAssembler.java diff -r bda013e0d8bb -r 2f684eda1938 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java Tue Apr 29 18:10:16 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java Tue Apr 29 19:30:38 2014 +0200 @@ -288,7 +288,7 @@ return stamp; } - private ValueNode implicitLoadConvert(StructuredGraph graph, Kind kind, ValueNode value) { + public ValueNode implicitLoadConvert(StructuredGraph graph, Kind kind, ValueNode value) { return implicitLoadConvert(graph, kind, value, true); } @@ -334,7 +334,7 @@ } } - private ValueNode implicitStoreConvert(StructuredGraph graph, Kind kind, ValueNode value) { + public ValueNode implicitStoreConvert(StructuredGraph graph, Kind kind, ValueNode value) { return implicitStoreConvert(graph, kind, value, true); } diff -r bda013e0d8bb -r 2f684eda1938 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotHostForeignCallsProvider.java diff -r bda013e0d8bb -r 2f684eda1938 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotLoweringProvider.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotLoweringProvider.java Tue Apr 29 18:10:16 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotLoweringProvider.java Tue Apr 29 19:30:38 2014 +0200 @@ -39,4 +39,8 @@ int getScalingFactor(Kind kind); IndexedLocationNode createArrayLocation(Graph graph, Kind elementKind, ValueNode index, boolean initialization); + + ValueNode implicitLoadConvert(StructuredGraph graph, Kind kind, ValueNode value); + + ValueNode implicitStoreConvert(StructuredGraph graph, Kind kind, ValueNode value); } diff -r bda013e0d8bb -r 2f684eda1938 graal/com.oracle.graal.lir.hsail/src/com/oracle/graal/lir/hsail/HSAILMove.java diff -r bda013e0d8bb -r 2f684eda1938 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/MemoryCheckpoint.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/MemoryCheckpoint.java Tue Apr 29 18:10:16 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/MemoryCheckpoint.java Tue Apr 29 19:30:38 2014 +0200 @@ -31,7 +31,7 @@ * represented by location identities (i.e. change a value at one or more locations that belong to * these location identities). */ -public interface MemoryCheckpoint extends MemoryNode, NodeInterface { +public interface MemoryCheckpoint extends MemoryNode { FixedNode asNode(); diff -r bda013e0d8bb -r 2f684eda1938 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/util/GraphUtil.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/util/GraphUtil.java Tue Apr 29 18:10:16 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/util/GraphUtil.java Tue Apr 29 19:30:38 2014 +0200 @@ -150,7 +150,9 @@ if (fixed instanceof StateSplit) { FrameState stateAfter = ((StateSplit) fixed).stateAfter(); ((StateSplit) fixed).setStateAfter(null); - killWithUnusedFloatingInputs(stateAfter); + if (stateAfter.usages().isEmpty()) { + killWithUnusedFloatingInputs(stateAfter); + } } FixedNode next = fixed.next(); fixed.setNext(null); diff -r bda013e0d8bb -r 2f684eda1938 src/share/vm/code/debugInfoRec.cpp --- a/src/share/vm/code/debugInfoRec.cpp Tue Apr 29 18:10:16 2014 +0200 +++ b/src/share/vm/code/debugInfoRec.cpp Tue Apr 29 19:30:38 2014 +0200 @@ -235,16 +235,13 @@ int DebugInformationRecorder::find_sharable_decode_offset(int stream_offset) { - // It's always a space win to share and Graal generates quite a bit - // of scopes data so always enable the sharing logic with Graal. - // Presumably this is disabled in regular HotSpot because it makes - // recording more expensive? -#ifndef GRAAL - // Only pull this trick if non-safepoint recording - // is enabled, for now. - if (!recording_non_safepoints()) + if (FLAG_IS_DEFAULT(ShareDebugInfo)) { + if (!ShareDebugInfo && !recording_non_safepoints()) { + return serialized_null; + } + } else if (!ShareDebugInfo) { return serialized_null; -#endif + } NOT_PRODUCT(++dir_stats.chunks_queried); int stream_length = stream()->position() - stream_offset; diff -r bda013e0d8bb -r 2f684eda1938 src/share/vm/code/nmethod.cpp --- a/src/share/vm/code/nmethod.cpp Tue Apr 29 18:10:16 2014 +0200 +++ b/src/share/vm/code/nmethod.cpp Tue Apr 29 19:30:38 2014 +0200 @@ -142,6 +142,7 @@ int handler_table_size; int nul_chk_table_size; int oops_size; + int metadata_size; void note_nmethod(nmethod* nm) { nmethod_count += 1; @@ -151,6 +152,7 @@ insts_size += nm->insts_size(); stub_size += nm->stub_size(); oops_size += nm->oops_size(); + metadata_size += nm->metadata_size(); scopes_data_size += nm->scopes_data_size(); scopes_pcs_size += nm->scopes_pcs_size(); dependencies_size += nm->dependencies_size(); @@ -161,11 +163,13 @@ if (nmethod_count == 0) return; tty->print_cr("Statistics for %d bytecoded nmethods for %s:", nmethod_count, name); if (total_size != 0) tty->print_cr(" total in heap = %d", total_size); + if (nmethod_count != 0) tty->print_cr(" header = %d", nmethod_count * sizeof(nmethod)); if (relocation_size != 0) tty->print_cr(" relocation = %d", relocation_size); if (consts_size != 0) tty->print_cr(" constants = %d", consts_size); if (insts_size != 0) tty->print_cr(" main code = %d", insts_size); if (stub_size != 0) tty->print_cr(" stub code = %d", stub_size); if (oops_size != 0) tty->print_cr(" oops = %d", oops_size); + if (metadata_size != 0) tty->print_cr(" metadata = %d", metadata_size); if (scopes_data_size != 0) tty->print_cr(" scopes data = %d", scopes_data_size); if (scopes_pcs_size != 0) tty->print_cr(" scopes pcs = %d", scopes_pcs_size); if (dependencies_size != 0) tty->print_cr(" dependencies = %d", dependencies_size); @@ -180,12 +184,14 @@ int native_relocation_size; int native_insts_size; int native_oops_size; + int native_metadata_size; void note_native_nmethod(nmethod* nm) { native_nmethod_count += 1; native_total_size += nm->size(); native_relocation_size += nm->relocation_size(); native_insts_size += nm->insts_size(); native_oops_size += nm->oops_size(); + native_metadata_size += nm->metadata_size(); } void print_native_nmethod_stats() { if (native_nmethod_count == 0) return; @@ -194,6 +200,7 @@ if (native_relocation_size != 0) tty->print_cr(" N. relocation = %d", native_relocation_size); if (native_insts_size != 0) tty->print_cr(" N. main code = %d", native_insts_size); if (native_oops_size != 0) tty->print_cr(" N. oops = %d", native_oops_size); + if (native_metadata_size != 0) tty->print_cr(" N. metadata = %d", native_metadata_size); } }; @@ -229,11 +236,18 @@ #ifdef GRAAL static java_nmethod_stats_struct graal_java_nmethod_stats; #endif +#ifdef SHARK +static java_nmethod_stats_struct shark_java_nmethod_stats; +#endif static java_nmethod_stats_struct unknown_java_nmethod_stats; static native_nmethod_stats_struct native_nmethod_stats; static pc_nmethod_stats_struct pc_nmethod_stats; +static void note_native_wrapper_nmethod(nmethod* nm) { + native_nmethod_stats.note_native_nmethod(nm); +} + static void note_java_nmethod(nmethod* nm) { #ifdef COMPILER1 if (nm->is_compiled_by_c1()) { @@ -250,6 +264,11 @@ graal_java_nmethod_stats.note_nmethod(nm); } else #endif +#ifdef SHARK + if (nm->is_compiled_by_shark()) { + shark_java_nmethod_stats.note_nmethod(nm); + } else +#endif { unknown_java_nmethod_stats.note_nmethod(nm); } @@ -556,7 +575,7 @@ code_buffer, frame_size, basic_lock_owner_sp_offset, basic_lock_sp_offset, oop_maps); - if (nm != NULL) note_java_nmethod(nm); + if (nm != NULL) note_native_wrapper_nmethod(nm); if (PrintAssembly && nm != NULL) { Disassembler::decode(nm); } @@ -3083,9 +3102,14 @@ #ifdef GRAAL graal_java_nmethod_stats.print_nmethod_stats("Graal"); #endif +#ifdef SHARK + shark_java_nmethod_stats.print_nmethod_stats("Shark"); +#endif unknown_java_nmethod_stats.print_nmethod_stats("Unknown"); DebugInformationRecorder::print_statistics(); +#ifndef PRODUCT pc_nmethod_stats.print_pc_stats(); +#endif Dependencies::print_statistics(); if (xtty != NULL) xtty->tail("statistics"); } diff -r bda013e0d8bb -r 2f684eda1938 src/share/vm/runtime/globals.hpp --- a/src/share/vm/runtime/globals.hpp Tue Apr 29 18:10:16 2014 +0200 +++ b/src/share/vm/runtime/globals.hpp Tue Apr 29 19:30:38 2014 +0200 @@ -980,6 +980,9 @@ product(bool, PrintNMethodStatistics, false, \ "Print a summary statistic for the generated nmethods") \ \ + product(bool, ShareDebugInfo, IS_GRAAL_DEFINED, \ + "Always tries to share similar debug info inside a nmethod") \ + \ diagnostic(bool, PrintNMethods, false, \ "Print assembly code for nmethods when generated") \ \