Mercurial > hg > graal-compiler
comparison src/share/vm/ci/ciExceptionHandler.cpp @ 1138:dd57230ba8fe
6893268: additional dynamic language related optimizations in C2
Summary: C2 needs some additional optimizations to be able to handle MethodHandle invokes and invokedynamic instructions at the best performance.
Reviewed-by: kvn, never
author | twisti |
---|---|
date | Tue, 05 Jan 2010 15:21:25 +0100 |
parents | a61af66fc99e |
children | c18cbe5936b8 |
comparison
equal
deleted
inserted
replaced
1137:97125851f396 | 1138:dd57230ba8fe |
---|---|
1 /* | 1 /* |
2 * Copyright 1999-2003 Sun Microsystems, Inc. All Rights Reserved. | 2 * Copyright 1999-2009 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. |
32 // ------------------------------------------------------------------ | 32 // ------------------------------------------------------------------ |
33 // ciExceptionHandler::catch_klass | 33 // ciExceptionHandler::catch_klass |
34 // | 34 // |
35 // Get the exception klass that this handler catches. | 35 // Get the exception klass that this handler catches. |
36 ciInstanceKlass* ciExceptionHandler::catch_klass() { | 36 ciInstanceKlass* ciExceptionHandler::catch_klass() { |
37 VM_ENTRY_MARK; | |
37 assert(!is_catch_all(), "bad index"); | 38 assert(!is_catch_all(), "bad index"); |
38 if (_catch_klass == NULL) { | 39 if (_catch_klass == NULL) { |
39 bool will_link; | 40 bool will_link; |
40 ciKlass* k = CURRENT_ENV->get_klass_by_index(_loading_klass, | 41 assert(_loading_klass->get_instanceKlass()->is_linked(), "must be linked before accessing constant pool"); |
42 constantPoolHandle cpool(_loading_klass->get_instanceKlass()->constants()); | |
43 ciKlass* k = CURRENT_ENV->get_klass_by_index(cpool, | |
41 _catch_klass_index, | 44 _catch_klass_index, |
42 will_link); | 45 will_link, |
46 _loading_klass); | |
43 if (!will_link && k->is_loaded()) { | 47 if (!will_link && k->is_loaded()) { |
44 GUARDED_VM_ENTRY( | 48 GUARDED_VM_ENTRY( |
45 k = CURRENT_ENV->get_unloaded_klass(_loading_klass, k->name()); | 49 k = CURRENT_ENV->get_unloaded_klass(_loading_klass, k->name()); |
46 ) | 50 ) |
47 } | 51 } |