RFR: 8270459: Conflict inlining decisions by C1/C2 with the same CompileCommand [v2]
Jie Fu
jiefu at openjdk.java.net
Thu Jul 15 06:56:44 UTC 2021
> Hi all,
>
> Conflict inlining decisions can be observed by C1/C2 with the same CompileCommand.
> And I came across this situation while I was analyzing a performance issue using the jmh, which made me quite confused.
>
> For the example in the JBS.
>
> 28 1 % 3 TestInline::main @ 11 (43 bytes)
> @ 23 TestInline::caller (4 bytes) disallowed by CompileCommand
> 29 2 3 TestInline::main (43 bytes)
> @ 23 TestInline::caller (4 bytes) disallowed by CompileCommand
> 31 3 % 4 TestInline::main @ 11 (43 bytes)
> 33 1 % 3 TestInline::main @ 11 (43 bytes) made not entrant
> @ 23 TestInline::caller (4 bytes) force inline by CompileCommand
>
>
> This can be easily reproduced by specifying both the `inline` and `dontinline` compile commands for a method.
>
> -XX:CompileCommand=inline,TestInline::caller \
> -XX:CompileCommand=dontinline,TestInline::caller \
>
>
> The fix will ignore the inline/not-inline directives if both the `inline` and `dontinline` compile commands are specified for a method.
>
> Effect of the patch:
>
> 27 1 % 3 TestInline::main @ 11 (43 bytes)
> @ 23 TestInline::caller (4 bytes) inline
> 28 2 3 TestInline::main (43 bytes)
> @ 23 TestInline::caller (4 bytes) inline
> 28 3 % 4 TestInline::main @ 11 (43 bytes)
> 30 1 % 3 TestInline::main @ 11 (43 bytes) made not entrant
> @ 23 TestInline::caller (4 bytes) inline (hot)
> 31 3 % 4 TestInline::main @ 11 (43 bytes) made not entrant
>
>
> Testing:
> - tier 1~3 on Linux/x64, no regression
>
> Thanks.
> Best regards,
> Jie
Jie Fu has updated the pull request incrementally with two additional commits since the last revision:
- The jtreg test requires a compiler
- The last specified inlining option should overwrite all previous
-------------
Changes:
- all: https://git.openjdk.java.net/jdk/pull/4780/files
- new: https://git.openjdk.java.net/jdk/pull/4780/files/2022cb17..390c7cf2
Webrevs:
- full: https://webrevs.openjdk.java.net/?repo=jdk&pr=4780&range=01
- incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=4780&range=00-01
Stats: 59 lines in 2 files changed: 51 ins; 1 del; 7 mod
Patch: https://git.openjdk.java.net/jdk/pull/4780.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/4780/head:pull/4780
PR: https://git.openjdk.java.net/jdk/pull/4780
More information about the hotspot-compiler-dev
mailing list