• Heschi Kreinick's avatar
    cmd/compile: reimplement location list generation · 2075a932
    Heschi Kreinick authored
    Completely redesign and reimplement location list generation to be more
    efficient, and hopefully not too hard to understand.
    
    RegKills are gone. Instead of using the regalloc's liveness
    calculations, redo them using the Ops' clobber information. Besides
    saving a lot of Values, this avoids adding RegKills to blocks that would
    be empty otherwise, which was messing up optimizations. This does mean
    that it's much harder to tell whether the generation process is buggy
    (there's nothing to cross-check it with), and there may be disagreements
    with GC liveness. But the performance gain is significant, and it's nice
    not to be messing with earlier compiler phases.
    
    The intermediate representations are gone. Instead of producing
    ssa.BlockDebugs, then dwarf.LocationLists, and then finally real
    location lists, go directly from the SSA to a (mostly) real location
    list. Because the SSA analysis happens before assembly, it stores
    encoded block/value IDs where PCs would nor...
    2075a932
ssa.go 170 KB