Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Simplify JIT label handling #51208

Merged
merged 2 commits into from
Apr 15, 2021

Commits on Apr 14, 2021

  1. Simplify JIT label handling

    Remove the BBF_JMP_TARGET flag that was set early and attempted
    to be maintained all through compilation. Instead, use
    BBF_USE_LABEL to indicate to the emitter where we need labels.
    
    Also, stop setting and maintaining BBF_USE_LABEL early.
    
    Add a pass over the blocks when preparing for codegen that sets
    most of the necessary BBF_USE_LABEL flags. This flag will never
    be set before codegen. A few places set the flag after codegen starts,
    namely `genCreateTempLabel` and BBJ_COND handling for alignment.
    Note that this flag must be set before the block is processed for
    codegen (and an insGroup is created).
    
    Together, these changes make it easier to work with the flow graph
    without worrying about maintaining these bits of information through
    various optimizations.
    
    Add a few more details about alignment processing to the dump.
    
    There are a few code asm diffs due to alignment processing not previously
    creating a label to help compute how large a loop is.
    
    There are a lot of textual asm diffs due to there being (mostly)
    fewer labels, plus some additional insGroup output. This can happen if
    a block was labeled with `BBF_JMP_TARGET` or `BBF_USE_LABEL` before,
    but didn't need to be, perhaps after some optimizations. Now, the flag is
    never added in the first place.
    
    There are a large number of GC info diffs. Labels are where GC info state
    changes are recorded between codegen and the emitter. If we eliminate an
    unnecessary emitter label, then we also eliminate a capture of the current
    codegen GC state. Since the emitter is lazy at marking GC deaths, this
    means that we see a lot of lengthened GC lifetimes -- until the next
    label, or some other cause of GC kill. Often, you see a register kill
    followed by register birth just disappear, and the register is maintained
    alive across the interim.
    BruceForstall committed Apr 14, 2021
    Configuration menu
    Copy the full SHA
    80aa2bf View commit details
    Browse the repository at this point in the history

Commits on Apr 15, 2021

  1. Configuration menu
    Copy the full SHA
    7c1f38d View commit details
    Browse the repository at this point in the history