[15] RFR (M): 8136414: Large performance penalty declaring a method strictfp on strict-only platforms

Vladimir Ivanov vladimir.x.ivanov at oracle.com
Mon Feb 10 13:23:23 UTC 2020


Thanks, Tobias.

> You may want to do some whitespace cleanup in graphKit.cpp before pushing (for example, around
> parentheses in lines 2330, 2346, 2360, 2374).

Good catch. Will do.

Best regards,
Vladimir Ivanov

> On 07.02.20 10:37, Vladimir Ivanov wrote:
>> http://cr.openjdk.java.net/~vlivanov/8136414/webrev.00/
>> https://bugs.openjdk.java.net/browse/JDK-8136414
>>
>> After JDK-7175279 [1] landed in the repo, it becomes possible to relax constrains on inlining
>> between strict FP and non-strict FP methods on x86-64.
>>
>> Since x86-64 doesn't use x87 anymore, the platform becomes strict-only and it's safe to mix strict
>> and non-strict FP code.
>>
>> The actual fix is a tiny change in doCall.cpp [2].
>>
>> The rest is a refactoring which regularizes and cleans up related code:
>>
>>    * removes RoundFPResults and UseStrictFP develop flags;
>>
>>    * migrate all the checks to strict_fp_requires_explicit_rounding /
>> pd_strict_fp_requires_explicit_rounding which are set true only on x86-32;
>>
>>    * move related UseSSE checks to x86-specific code (or even x86-32 if UseSSE <= 2 is requires);
>>
>> Testing: hs-precheckin-comp, tier1-4
>>
>> Thanks!
>>
>> Best regards,
>> Vladimir Ivanov
>>
>> [1] https://bugs.openjdk.java.net/browse/JDK-7175279
>>
>> [2] src/hotspot/share/opto/doCall.cpp
>>
>> -  // Do not inline strict fp into non-strict code, or the reverse
>> -  if (caller->is_strict() ^ callee->is_strict()) {
>> +  // If explicit rounding is required, do not inline strict into non-strict code (or the reverse).
>> +  if (Matcher::strict_fp_requires_explicit_rounding &&
>> +      caller->is_strict() != callee->is_strict()) {
>>       allow_inline = false;
>>     }


More information about the hotspot-compiler-dev mailing list