On Mon, 5 Jun 2023 18:05:47 GMT, Vladimir Ivanov <vliva...@openjdk.org> wrote:
>> Cesar Soares Lucas has updated the pull request with a new target base due >> to a merge or a rebase. The pull request now contains 15 commits: >> >> - Catching up with master branch. >> >> Merge remote-tracking branch 'origin/master' into >> rematerialization-of-merges >> - Address PR review 6: refactoring around rematerialization & improve test >> cases. >> - Address PR review 5: refactor on rematerialization & add tests. >> - Merge remote-tracking branch 'origin/master' into >> rematerialization-of-merges >> - Address part of PR review 4 & fix a bug setting only_candidate >> - Catching up with master >> >> Merge remote-tracking branch 'origin/master' into >> rematerialization-of-merges >> - Fix tests. Remember previous reducible Phis. >> - Address PR review 3. Some comments and be able to abort compilation. >> - Merge with Master >> - Addressing PR review 2: refactor & reuse MacroExpand::scalar_replacement >> method. >> - ... and 5 more: https://git.openjdk.org/jdk/compare/46c4da7f...8f81a7c8 > > src/hotspot/share/code/debugInfo.cpp line 301: > >> 299: void ObjectMergeValue::print_detailed(outputStream* st) const { >> 300: st->print("merge: ID=%d", _id); >> 301: #ifndef PRODUCT > > Can you post a sample of the output, please? > > Why is it limited to non-product builds? It's valuable irrespective of build > flavor. > > As I see in `ObjectValue::print_on` and `ScopeDesc::print_on`, you mix > `print_on` with `print_fields_on`. Any particular reason for that? You could > add `is_object_merge` case in ObjectValue::print_on` instead and extend > `ObjectValue::print_fields_on` to cover `ObjectMergeValue` case. I find it > hard to reason about `ObjectValue::print_on` vs `ObjectMergeValue::print_on` > since it's a non-virtual method. > > > > Also, formatting is broken. I added a few samples below and there are a few more here: https://gist.github.com/JohnTortugo/913523947e08157def6cfebafa7d5daa Sample 1: Compiled method (c2) 415 24 TestTrapAfterMerge::test (57 bytes) total in heap [0x00007f7b4d03da90,0x00007f7b4d03de18] = 904 relocation [0x00007f7b4d03dc00,0x00007f7b4d03dc18] = 24 main code [0x00007f7b4d03dc20,0x00007f7b4d03dcb8] = 152 stub code [0x00007f7b4d03dcb8,0x00007f7b4d03dcd0] = 24 oops [0x00007f7b4d03dcd0,0x00007f7b4d03dce0] = 16 metadata [0x00007f7b4d03dce0,0x00007f7b4d03dce8] = 8 scopes data [0x00007f7b4d03dce8,0x00007f7b4d03dd50] = 104 scopes pcs [0x00007f7b4d03dd50,0x00007f7b4d03de10] = 192 dependencies [0x00007f7b4d03de10,0x00007f7b4d03de18] = 8 scopes: ScopeDesc(pc=0x00007f7b4d03dc3a offset=1a): TestTrapAfterMerge::test@-1 (line 3) ScopeDesc(pc=0x00007f7b4d03dc41 offset=21): TestTrapAfterMerge::test@11 (line 5) ScopeDesc(pc=0x00007f7b4d03dc44 offset=24): TestTrapAfterMerge::test@51 (line 12) ScopeDesc(pc=0x00007f7b4d03dc4a offset=2a): TestTrapAfterMerge::test@46 (line 8) ScopeDesc(pc=0x00007f7b4d03dc52 offset=32): TestTrapAfterMerge::test@37 (line 9) ScopeDesc(pc=0x00007f7b4d03dc57 offset=37): TestTrapAfterMerge::test@43 (line 8) ScopeDesc(pc=0x00007f7b4d03dc61 offset=41): TestTrapAfterMerge::test@46 (line 8) reexecute=true Locals - l0: empty - l1: empty - l2: reg rbx [6],int - l3: empty - l4: merge: ID=26 - l5: reg r11 [22],int Objects - 0: merge: ID=26, selector="reg r10 [20],int", merge_pointer="nullptr", candidate objs=[27, 28] - 1: obj: ID=27, is_root=0, N.Fields=1, klass: Point Fields: reg r8 [16],int - 2: obj: ID=28, is_root=0, N.Fields=1, klass: Point Fields: reg rcx [2],int ScopeDesc(pc=0x00007f7b4d03dc63 offset=43): TestTrapAfterMerge::test@46 (line 8) ScopeDesc(pc=0x00007f7b4d03dc6c offset=4c): TestTrapAfterMerge::test@34 (line 8) ScopeDesc(pc=0x00007f7b4d03dc71 offset=51): TestTrapAfterMerge::test@55 (line 12) - Sample2: Compiled method (c2) 443 24 TestManys::test (41 bytes) total in heap [0x00007f35e9155b90,0x00007f35e9155e78] = 744 relocation [0x00007f35e9155d00,0x00007f35e9155d18] = 24 main code [0x00007f35e9155d20,0x00007f35e9155d88] = 104 stub code [0x00007f35e9155d88,0x00007f35e9155da0] = 24 oops [0x00007f35e9155da0,0x00007f35e9155db0] = 16 metadata [0x00007f35e9155db0,0x00007f35e9155db8] = 8 scopes data [0x00007f35e9155db8,0x00007f35e9155e10] = 88 scopes pcs [0x00007f35e9155e10,0x00007f35e9155e70] = 96 dependencies [0x00007f35e9155e70,0x00007f35e9155e78] = 8 scopes: ScopeDesc(pc=0x00007f35e9155d3a offset=1a): TestManys::test@-1 (line 57) ScopeDesc(pc=0x00007f35e9155d42 offset=22): TestManys::test@11 (line 59) ScopeDesc(pc=0x00007f35e9155d58 offset=38): TestManys::test@25 (line 63) Locals - l0: empty - l1: empty - l2: empty - l3: empty - l4: empty - l5: empty - l6: empty - l7: empty - l8: merge: ID=26 Objects - 0: merge: ID=26, selector="reg rbp [10],int", merge_pointer="nullptr", candidate objs=[27, 28] - 1: obj: ID=27, is_root=0, N.Fields=4, klass: Point Fields: stack[36], stack[36], 0, 0 - 2: obj: ID=28, is_root=0, N.Fields=4, klass: Point Fields: 2023, 0, 0, 0 ScopeDesc(pc=0x00007f35e9155d74 offset=54): TestManys::test@25 (line 63) - Sample3: Compiled method (c2) 436 24 TestMultiSFO::test (48 bytes) total in heap [0x00007f1df5155590,0x00007f1df5155850] = 704 relocation [0x00007f1df5155700,0x00007f1df5155718] = 24 main code [0x00007f1df5155720,0x00007f1df5155788] = 104 stub code [0x00007f1df5155788,0x00007f1df51557a0] = 24 oops [0x00007f1df51557a0,0x00007f1df51557b0] = 16 metadata [0x00007f1df51557b0,0x00007f1df51557b8] = 8 scopes data [0x00007f1df51557b8,0x00007f1df51557f8] = 64 scopes pcs [0x00007f1df51557f8,0x00007f1df5155848] = 80 dependencies [0x00007f1df5155848,0x00007f1df5155850] = 8 scopes: ScopeDesc(pc=0x00007f1df515573a offset=1a): TestMultiSFO::test@-1 (line 12) ScopeDesc(pc=0x00007f1df515575c offset=3c): TestMultiSFO::test@28 (line 19) Locals - l0: empty - l1: empty - l2: empty - l3: merge: ID=14 - l4: obj: ID=15, is_root=1, N.Fields=2, klass: TestMultiSFO$Point Fields: stack[12], stack[8] Objects - 0: merge: ID=14, selector="reg rbp [10],int", merge_pointer="nullptr", candidate objs=[15, 16] - 1: obj: ID=15, is_root=1, N.Fields=2, klass: TestMultiSFO$Point Fields: stack[12], stack[8] - 2: obj: ID=16, is_root=0, N.Fields=2, klass: TestMultiSFO$Point Fields: stack[8], stack[12] ScopeDesc(pc=0x00007f1df5155778 offset=58): TestMultiSFO::test@28 (line 19) ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/12897#discussion_r1218500009