RFR: 8275086: compiler/c2/irTests/TestPostParseCallDevirtualization.java fails when compiler1 is disabled
SUN Guoyun
duke at openjdk.java.net
Tue Oct 19 03:58:46 UTC 2021
On Sat, 16 Oct 2021 17:35:13 GMT, Igor Veresov <iveresov at openjdk.org> wrote:
>> Hi all,
>> Jtreg test case compiler/c2/irTests/TestPostParseCallDevirtualization.java fails for fastdebug mode on x86/aarch64/mips architecture when "--with-jvm-features=-compiler1" be used. the failed info is:
>>
>> <pre><code class="shell">
>> One or more @IR rules failed:
>>
>> Failed IR Rules (1)
>> ------------------
>> - Method "public int compiler.c2.irTests.TestPostParseCallDevirtualization.testMethodHandleCallWithCCP() throws java.lang.Throwable":
>> * @IR rule 1: "@compiler.lib.ir_framework.IR(failOn={"#PRE#(\\\\d+(\\\\s){2}(CallStaticJava.*)+(\\\\s){2}===.*#IS_REPLACED#)", "invokeBasic"}, applyIf={}, applyIfAnd={}, applyIfOr={}, counts={"#PRE#(\\\\d+(\\\\s){2}(CallStaticJava.*)+(\\\\s){2}===.*#IS_REPLACED#)", "invokeStatic", "= 1"}, applyIfNot={})"
>> - failOn: Graph contains forbidden nodes:
>> Regex 1: (\\d+(\\s){2}(CallStaticJava.*)+(\\s){2}===.*invokeBasic)
>> Matched forbidden node:
>> 280 CallStaticJava === 5 6 7 8 1 ( 188 1 1 1 1 1 1 ) [[ 281 282 283 285 ]] # Static java.lang.invoke.MethodHandle::invokeBasic
>> - counts: Graph contains wrong number of nodes:
>> Regex 1: (\\d+(\\s){2}(CallStaticJava.*)+(\\s){2}===.*invokeStatic)
>> Expected 1 but found 0 nodes.
>>
>>>>> Check stdout for compilation output of the failed methods
>> </code></pre>
>>
>> This is a patch to fix this problem. Please help review it.
>>
>> Thanks,
>> Sun Guoyun
>
> ```ensure_method_data()``` creates an MDO if it doesn't exist. I think that's what's happening. Because ```ciMethod::method_data()``` would normally do the load and it clearly doesn't happen.
Thank you for @veresov reply.
There are two ways to pass this use case test:
1. use `applyIf = {"TieredCompilation", "true"}` to prohibit the testing of testMethodHandleCallWithLoop() and testMethodHandleCallWithCCP().
2. use`-XX:Tier4InvocationThreshold=300` to make sure MDO can be created.
Which way is more reasonable?
-------------
PR: https://git.openjdk.java.net/jdk/pull/5903
More information about the hotspot-compiler-dev
mailing list