RFR[16]: 8247681: Improve bootstrapping of unary concatenations

Claes Redestad claes.redestad at oracle.com
Wed Jun 17 10:54:05 UTC 2020


On 2020-06-16 18:06, Paul Sandoz wrote:
> Looks good.

Thanks!

> 
> It’s tempting to do something like this to de-dup the code with less potential for mistakes:
> 
> String s = null;
> // Select the singular non-null value, if any
> If (s0 != null && s1 == null) s = s0;
> else if (s0 == null && s1 != null) s = s1;
> If (s != null) {
>      if (s.isEmpty()) {
>>      } else if (…) { … }
> }

Ok. The index of where to inject the constant is order dependent, but
the code still slims down a bit:

http://cr.openjdk.java.net/~redestad/8247681/open.01/

Re-ran tier1+2

/Claes

> 
> Paul.
> 
>> On Jun 16, 2020, at 6:00 AM, Claes Redestad <claes.redestad at oracle.com> wrote:
>>
>> Hi,
>>
>> this patch specializes bootstrapping of unary concatenation expressions.
>>
>> Such expressions can be reduced to the canonical String.valueOf
>> "stringifier" for any primitive argument, but needs a special
>> stringifier for reference arguments since we need to produce a new
>> String to be compliant with JLS.
>>
>> Bug:    https://bugs.openjdk.java.net/browse/JDK-8247681
>> Webrev: http://cr.openjdk.java.net/~redestad/8247681/open.00/
>>
>> This ensures we get a similar speed-up as JDK-8247605 for
>> "" + fooString (and fooString + "").
>>
>> Also speeds up bootstrapping for all such simple unary concatenation
>> expressions.
>>
>> Testing: tier1+2
>>
>> Before:
>>
>> Benchmark                            (intValue)  Mode  Cnt   Score Error  Units
>> StringConcat.concatEmptyConstInt           4711  avgt    5  15.539 ± 0.831  ns/op
>> StringConcat.concatEmptyConstString        4711  avgt    5  17.046 ± 1.047  ns/op
>> StringConcat.concatEmptyLeft               4711  avgt    5   7.506 ± 0.588  ns/op
>> StringConcat.concatEmptyRight              4711  avgt    5   7.890 ± 0.314  ns/op
>>
>> After:
>> Benchmark                            (intValue)  Mode  Cnt   Score Error  Units
>> StringConcat.concatEmptyConstInt           4711  avgt    5  15.410 ± 0.944  ns/op
>> StringConcat.concatEmptyConstString        4711  avgt    5   7.397 ± 0.384  ns/op
>> StringConcat.concatEmptyLeft               4711  avgt    5   7.465 ± 0.328  ns/op
>> StringConcat.concatEmptyRight              4711  avgt    5   7.857 ± 0.355  ns/op
>>
>> Thanks!
>>
>> /Claes
> 


More information about the core-libs-dev mailing list