• George Wort's avatar
    [turbolizer] Display live ranges with sequences · 0282737d
    George Wort authored
    Display register allocation live ranges alongside sequences in
    turbolizer.
    
    The existing --trace-turbo flag now also outputs the register
    allocation data as part of the json file alongside the
    instruction sequence data that is already produced before and
    after register allocation is performed. This data includes live
    range intervals for each virtual and fixed register and the state
    of their assignments.
    
    This json data can now be displayed in turbolizer alongside the
    instruction sequences. The information is presented as a grid,
    with each grid cell representing a LifeTimePosition of a certain
    virtual register, determined by the column and row indices
    respectively. Each LifeTimePosition is shown to be part of an
    instruction id which itself is shown to be part of a block id.
    Each interval is shown as a coloured rectangle positioned over
    the relevant cells, and displaying text to indicate the state of
    their assignment.
    
    The Resizer object has been extended to allow the grid's html
    panel to be varied in size in the same manner that the left and
    right panels can be. The size of the grid itself must also be
    adjusted whenever the div container changes size.
    
    The RangeView class is introduced and is created and held by the
    single SequenceView object used to display the
    InstructionSequence data before and after register allocation.
    A checkbox allows the user to show/hide the range view, this is
    disabled when register allocation data is not provided or more
    than 249 instructions are in the sequence. The latter being
    required due to the css grid-row-col limit of 1000 alond with
    helping alleviate performance issues. The SequenceView object
    tracks the phase index currently selected as well as whether or
    not it is currently being shown. This ensures that the RangeView
    is not hidden and shown when switching between before and after
    register allocation, allowing for a smoother transition between
    the two. The scroll position is also saved and restored for
    convenience.
    
    The data about the instruction sequence required for the display
    is held by the RangeView object and reset whenever a new
    instruction sequence is shown. The grid div must sync its scroll
    with the headers and row labels so as to ensure a consistent
    view. The register allocation data is extracted from the json,
    with each register row showing all intervals within the relevant
    ranges. When the view is switched between before and after
    register allocation, the relevant intervals are swapped in.
    
    Bug: v8:7327
    Notry: true
    Change-Id: I183535a2410a7d663382f387199885250fb98691
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2184232Reviewed-by: 's avatarGeorg Neis <neis@chromium.org>
    Reviewed-by: 's avatarSantiago Aboy Solanes <solanes@chromium.org>
    Commit-Queue: Santiago Aboy Solanes <solanes@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#68019}
    0282737d