RFR: 8309953: Strengthen and optimize oopDesc age methods
Aleksey Shipilev
shade at openjdk.org
Tue Jun 13 20:13:18 UTC 2023
See the RFE for discussion. Basically, there is little reason to do two loads of mark word, when we can do one.
Sample generated code for `oopDesc::age` can be seen if we turn that method from `inline` to the regular method:
# Before
000000000080f440 <oopDesc::age>:
80f440: ff 83 00 d1 sub sp, sp, #32
80f444: fd 7b 01 a9 stp x29, x30, [sp, #16]
80f448: fd 43 00 91 add x29, sp, #16
80f44c: 08 00 40 f9 ldr x8, [x0] ; <-- first mark load
80f450: 89 27 00 d0 adrp x9, 0xd01000
80f454: 1f 20 03 d5 nop
80f458: 29 95 4a b9 ldr w9, [x9, #2708]
80f45c: 0a 05 40 92 and x10, x8, #0x3
80f460: 5f 09 00 f1 cmp x10, #2
80f464: ea 17 9f 1a cset w10, eq
80f468: 1f 01 40 f2 tst x8, #0x1
80f46c: e8 17 9f 1a cset w8, eq
80f470: 3f 09 00 71 cmp w9, #2
80f474: 48 01 88 1a csel w8, w10, w8, eq
80f478: 1f 05 00 71 cmp w8, #1
80f47c: 21 01 00 54 b.ne 0x80f4a0
80f480: 08 00 40 f9 ldr x8, [x0] ; <-- second mark load
80f484: e8 07 00 f9 str x8, [sp, #8]
80f488: e0 23 00 91 add x0, sp, #8
80f48c: c4 ed fd 97 bl 0x78ab9c
80f490: 00 18 03 53 ubfx w0, w0, #3, #4
80f494: fd 7b 41 a9 ldp x29, x30, [sp, #16]
80f498: ff 83 00 91 add sp, sp, #32
80f49c: c0 03 5f d6 ret
80f4a0: 00 00 40 f9 ldr x0, [x0]
80f4a4: 00 18 03 53 ubfx w0, w0, #3, #4
80f4a8: fd 7b 41 a9 ldp x29, x30, [sp, #16]
80f4ac: ff 83 00 91 add sp, sp, #32
80f4b0: c0 03 5f d6 ret
# After
000000000080f480 <oopDesc::age>:
80f480: ff 83 00 d1 sub sp, sp, #32
80f484: fd 7b 01 a9 stp x29, x30, [sp, #16]
80f488: fd 43 00 91 add x29, sp, #16
80f48c: 00 00 40 f9 ldr x0, [x0] ; <-- load mark once
80f490: e0 07 00 f9 str x0, [sp, #8]
80f494: 88 27 00 d0 adrp x8, 0xd01000
80f498: 1f 20 03 d5 nop
80f49c: 08 95 4a b9 ldr w8, [x8, #2708]
80f4a0: 09 04 40 92 and x9, x0, #0x3
80f4a4: 3f 09 00 f1 cmp x9, #2
80f4a8: e9 17 9f 1a cset w9, eq
80f4ac: 1f 00 40 f2 tst x0, #0x1
80f4b0: ea 17 9f 1a cset w10, eq
80f4b4: 1f 09 00 71 cmp w8, #2
80f4b8: 28 01 8a 1a csel w8, w9, w10, eq
80f4bc: 1f 05 00 71 cmp w8, #1
80f4c0: 61 00 00 54 b.ne 0x80f4cc
80f4c4: e0 23 00 91 add x0, sp, #8
80f4c8: c5 ed fd 97 bl 0x78abdc
80f4cc: 00 18 03 53 ubfx w0, w0, #3, #4
80f4d0: fd 7b 41 a9 ldp x29, x30, [sp, #16]
80f4d4: ff 83 00 91 add sp, sp, #32
80f4d8: c0 03 5f d6 ret
Additional testing:
- [x] Eyeballing generated code
- [ ] Linux x86_64 fastdebug `tier1 tier2 tier3`
- [ ] Linux AArch64 fastdebug `tier1 tier2 tier3
-------------
Commit messages:
- Revert helper method removals
- Fix
Changes: https://git.openjdk.org/jdk/pull/14456/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=14456&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8309953
Stats: 10 lines in 1 file changed: 2 ins; 0 del; 8 mod
Patch: https://git.openjdk.org/jdk/pull/14456.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/14456/head:pull/14456
PR: https://git.openjdk.org/jdk/pull/14456
More information about the hotspot-dev
mailing list