Mercurial > hg > truffle
comparison src/share/vm/runtime/deoptimization.cpp @ 4978:99d3d8a72252
More ifdef GRAAL usage.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Mon, 27 Feb 2012 18:31:27 +0100 |
parents | 33df1aeaebbf |
children | 1b907994bf2d |
comparison
equal
deleted
inserted
replaced
4977:532be189cf09 | 4978:99d3d8a72252 |
---|---|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
18 * | 18 * |
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | 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 | 20 * or visit www.oracle.com if you need additional information or have any |
21 * questions. | 21 * questions. |
22 * | |
22 */ | 23 */ |
23 | 24 |
24 #include "precompiled.hpp" | 25 #include "precompiled.hpp" |
25 #include "classfile/systemDictionary.hpp" | 26 #include "classfile/systemDictionary.hpp" |
26 #include "code/debugInfoRec.hpp" | 27 #include "code/debugInfoRec.hpp" |
164 // decremented at the end of unpack_frames(). | 165 // decremented at the end of unpack_frames(). |
165 if (TraceDeoptimization) { | 166 if (TraceDeoptimization) { |
166 tty->print("Deoptimization "); | 167 tty->print("Deoptimization "); |
167 } | 168 } |
168 thread->inc_in_deopt_handler(); | 169 thread->inc_in_deopt_handler(); |
170 | |
169 return fetch_unroll_info_helper(thread); | 171 return fetch_unroll_info_helper(thread); |
170 JRT_END | 172 JRT_END |
171 | 173 |
172 | 174 |
173 // This is factored, since it is both called from a JRT_LEAF (deoptimization) and a JRT_ENTRY (uncommon_trap) | 175 // This is factored, since it is both called from a JRT_LEAF (deoptimization) and a JRT_ENTRY (uncommon_trap) |
207 vf = vf->sender(); | 209 vf = vf->sender(); |
208 } | 210 } |
209 assert(vf->is_compiled_frame(), "Wrong frame type"); | 211 assert(vf->is_compiled_frame(), "Wrong frame type"); |
210 chunk->push(compiledVFrame::cast(vf)); | 212 chunk->push(compiledVFrame::cast(vf)); |
211 | 213 |
212 // TODO(tw): Fix this hack after introducing GRAAL macro. | |
213 #if defined(COMPILER2) || defined(GRAAL) | 214 #if defined(COMPILER2) || defined(GRAAL) |
214 // Reallocate the non-escaping objects and restore their fields. Then | 215 // Reallocate the non-escaping objects and restore their fields. Then |
215 // relock objects if synchronization on them was eliminated. | 216 // relock objects if synchronization on them was eliminated. |
216 #ifdef COMPILER2 | 217 #ifdef COMPILER2 |
217 if (DoEscapeAnalysis || EliminateNestedLocks) { | 218 if (DoEscapeAnalysis || EliminateNestedLocks) { |
744 Threads::deoptimized_wrt_marked_nmethods(); | 745 Threads::deoptimized_wrt_marked_nmethods(); |
745 return 0; | 746 return 0; |
746 } | 747 } |
747 | 748 |
748 | 749 |
749 //#ifdef COMPILER2 | 750 #if defined(COMPILER2) || defined(GRAAL) |
750 bool Deoptimization::realloc_objects(JavaThread* thread, frame* fr, GrowableArray<ScopeValue*>* objects, TRAPS) { | 751 bool Deoptimization::realloc_objects(JavaThread* thread, frame* fr, GrowableArray<ScopeValue*>* objects, TRAPS) { |
751 Handle pending_exception(thread->pending_exception()); | 752 Handle pending_exception(thread->pending_exception()); |
752 const char* exception_file = thread->exception_file(); | 753 const char* exception_file = thread->exception_file(); |
753 int exception_line = thread->exception_line(); | 754 int exception_line = thread->exception_line(); |
754 thread->clear_pending_exception(); | 755 thread->clear_pending_exception(); |
989 k->oop_print_on(obj(), tty); | 990 k->oop_print_on(obj(), tty); |
990 } | 991 } |
991 } | 992 } |
992 } | 993 } |
993 #endif | 994 #endif |
994 //#endif // COMPILER2 | 995 #endif // COMPILER2 || GRAAL |
995 | 996 |
996 vframeArray* Deoptimization::create_vframeArray(JavaThread* thread, frame fr, RegisterMap *reg_map, GrowableArray<compiledVFrame*>* chunk) { | 997 vframeArray* Deoptimization::create_vframeArray(JavaThread* thread, frame fr, RegisterMap *reg_map, GrowableArray<compiledVFrame*>* chunk) { |
997 Events::log(thread, "DEOPT PACKING pc=" INTPTR_FORMAT " sp=" INTPTR_FORMAT, fr.pc(), fr.sp()); | 998 Events::log(thread, "DEOPT PACKING pc=" INTPTR_FORMAT " sp=" INTPTR_FORMAT, fr.pc(), fr.sp()); |
998 | 999 |
999 #ifndef PRODUCT | 1000 #ifndef PRODUCT |
1188 thread->popframe_preserve_args(in_ByteSize(bytes_to_save), start_address); | 1189 thread->popframe_preserve_args(in_ByteSize(bytes_to_save), start_address); |
1189 } | 1190 } |
1190 JRT_END | 1191 JRT_END |
1191 | 1192 |
1192 | 1193 |
1194 #if defined(COMPILER2) || defined(SHARK) || defined(GRAAL) | |
1193 void Deoptimization::load_class_by_index(constantPoolHandle constant_pool, int index, TRAPS) { | 1195 void Deoptimization::load_class_by_index(constantPoolHandle constant_pool, int index, TRAPS) { |
1194 // in case of an unresolved klass entry, load the class. | 1196 // in case of an unresolved klass entry, load the class. |
1195 if (constant_pool->tag_at(index).is_unresolved_klass()) { | 1197 if (constant_pool->tag_at(index).is_unresolved_klass()) { |
1196 klassOop tk = constant_pool->klass_at(index, CHECK); | 1198 klassOop tk = constant_pool->klass_at(index, CHECK); |
1197 return; | 1199 return; |
1962 } | 1964 } |
1963 #undef PRINT_STAT_LINE | 1965 #undef PRINT_STAT_LINE |
1964 if (xtty != NULL) xtty->tail("statistics"); | 1966 if (xtty != NULL) xtty->tail("statistics"); |
1965 } | 1967 } |
1966 } | 1968 } |
1969 #else // COMPILER2 || SHARK || GRAAL | |
1970 | |
1971 | |
1972 // Stubs for C1 only system. | |
1973 bool Deoptimization::trap_state_is_recompiled(int trap_state) { | |
1974 return false; | |
1975 } | |
1976 | |
1977 const char* Deoptimization::trap_reason_name(int reason) { | |
1978 return "unknown"; | |
1979 } | |
1980 | |
1981 void Deoptimization::print_statistics() { | |
1982 // no output | |
1983 } | |
1984 | |
1985 void | |
1986 Deoptimization::update_method_data_from_interpreter(methodDataHandle trap_mdo, int trap_bci, int reason) { | |
1987 // no udpate | |
1988 } | |
1989 | |
1990 int Deoptimization::trap_state_has_reason(int trap_state, int reason) { | |
1991 return 0; | |
1992 } | |
1993 | |
1994 void Deoptimization::gather_statistics(DeoptReason reason, DeoptAction action, | |
1995 Bytecodes::Code bc) { | |
1996 // no update | |
1997 } | |
1998 | |
1999 const char* Deoptimization::format_trap_state(char* buf, size_t buflen, | |
2000 int trap_state) { | |
2001 jio_snprintf(buf, buflen, "#%d", trap_state); | |
2002 return buf; | |
2003 } | |
2004 | |
2005 #endif // COMPILER2 || SHARK || GRAAL |