Compiler deoptimization behaviour

David Griffiths david.griffiths at gmail.com
Tue Jun 19 14:05:27 UTC 2018


Ha, that's funny! Too good for me though, I was trying to create a
simple program to test some stack walking code :-)

Anyway thanks for the explanation - I saw all those stack saves in the
unoptimized add2 and wondered what it was doing.

Cheers,

David

On 19 June 2018 at 14:31, Andrew Haley <aph at redhat.com> wrote:
> On 06/19/2018 02:17 PM, Andrew Haley wrote:
>> Try  -XX:MaxInlineLevel=15.
>
> And incidentally, if we do that and inline everything we get some truly
> beautiful code:
>
> Compiled method (c2)    4989  652       4       TestFrames::add2 (31 bytes)
>   ...
>   0x000003ffa8b2a4f4: ldr       x10, [x1,#16]
>   0x000003ffa8b2a4f8: add       x10, x10, w2, sxtw
>  ;; 0x14D6FBCFA76
>   0x000003ffa8b2a4fc: mov       x11, #0xfa76                    // #64118
>   0x000003ffa8b2a500: movk      x11, #0x6fbc, lsl #16
>   0x000003ffa8b2a504: movk      x11, #0x14d, lsl #32
>   0x000003ffa8b2a508: add       x10, x10, x11
>   0x000003ffa8b2a50c: str       x10, [x1,#16]   ;*putfield var {reexecute=0 rethrow=0 return_oop=0}
>                                                 ; - TestFrames::add13 at 8 (line 103)
>                                                 ; - TestFrames::add12 at 22 (line 99)
>                                                 ; - TestFrames::add11 at 22 (line 93)
>                                                 ; - TestFrames::add10 at 22 (line 87)
>                                                 ; - TestFrames::add9 at 22 (line 81)
>                                                 ; - TestFrames::add8 at 22 (line 75)
>                                                 ; - TestFrames::add7 at 22 (line 69)
>                                                 ; - TestFrames::add6 at 22 (line 63)
>                                                 ; - TestFrames::add5 at 22 (line 57)
>                                                 ; - TestFrames::add4 at 21 (line 51)
>                                                 ; - TestFrames::add3 at 21 (line 45)
>                                                 ; - TestFrames::add2 at 21 (line 39)
>
>   0x000003ffa8b2a510: ldp       xfp, xlr, [sp,#16]
>   0x000003ffa8b2a514: add       sp, sp, #0x20
>   0x000003ffa8b2a518: ldr       xscratch1, [xthread,#288]
>   0x000003ffa8b2a51c: ldr       wzr, [xscratch1]  ;   {poll_return}
>   0x000003ffa8b2a520: ret
>
> Note that this is all of add2 and it contains no loops at all.  It
> adds n to var, adds 0x14D6FBCFA76 to that, and stores the result in var.
> It has optimized 10*12 operations to 1.  Now that's what I call
> optimization!
>
>
> --
> Andrew Haley
> Java Platform Lead Engineer
> Red Hat UK Ltd. <https://www.redhat.com>
> EAC8 43EB D3EF DB98 CC77 2FAD A5CD 6035 332F A671


More information about the hotspot-dev mailing list