Mercurial > hg > graal-compiler
changeset 7231:c0806f4ff3ea
avoid searching for concrete methods on interfaces
author | Christian Haeubl <haeubl@ssw.jku.at> |
---|---|
date | Fri, 14 Dec 2012 14:53:42 +0100 |
parents | 762717d2cf90 |
children | 310a68c63b69 |
files | graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/inlining/InliningTest.java src/share/vm/graal/graalCompilerToVM.cpp |
diffstat | 2 files changed, 11 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/inlining/InliningTest.java Fri Dec 14 14:39:50 2012 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/inlining/InliningTest.java Fri Dec 14 14:53:42 2012 +0100 @@ -91,7 +91,7 @@ assertInlined(getGraph("invokeLeafClassMethodSnippet")); assertInlined(getGraph("invokeConcreteMethodSnippet")); assertInlined(getGraph("invokeSingleImplementorInterfaceSnippet")); - assertInlined(getGraph("invokeConcreteInterfaceMethodSnippet")); +// assertInlined(getGraph("invokeConcreteInterfaceMethodSnippet")); assertNotInlined(getGraph("invokeOverriddenInterfaceMethodSnippet")); }
--- a/src/share/vm/graal/graalCompilerToVM.cpp Fri Dec 14 14:39:50 2012 +0100 +++ b/src/share/vm/graal/graalCompilerToVM.cpp Fri Dec 14 14:53:42 2012 +0100 @@ -224,17 +224,16 @@ C2V_VMENTRY(jlong, getUniqueConcreteMethod, (JNIEnv *, jobject, jlong metaspace_method, jobject resultHolder)) methodHandle method = asMethod(metaspace_method); KlassHandle holder = method->method_holder(); - // TODO (chaeubl): check if the following is necessary - //if (holder->is_interface()) { - // // Cannot trust interfaces. Because of: - // // interface I { void foo(); } - // // class A { public void foo() {} } - // // class B extends A implements I { } - // // class C extends B { public void foo() { } } - // // class D extends B { } - // // Would lead to identify C.foo() as the unique concrete method for I.foo() without seeing A.foo(). - // return 0L; - //} + if (holder->is_interface()) { + // Cannot trust interfaces. Because of: + // interface I { void foo(); } + // class A { public void foo() {} } + // class B extends A implements I { } + // class C extends B { public void foo() { } } + // class D extends B { } + // Would lead to identify C.foo() as the unique concrete method for I.foo() without seeing A.foo(). + return 0L; + } methodHandle ucm; { ResourceMark rm;