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