• Ian Lance Taylor's avatar
    cmd/compile: change Func.{Dcl,Inldcl} from NodeList to slice · b66a8923
    Ian Lance Taylor authored
    A slice uses less memory than a NodeList, and has better memory locality
    when walking the list.
    
    This uncovered a tricky case involving closures: the escape analysis
    pass when run on a closure was appending to the Dcl list of the OCLOSURE
    rather than the ODCLFUNC.  This happened to work because they shared the
    same NodeList.  Fixed with a change to addrescapes, and a check to
    Tempname to catch any recurrences.
    
    This removes the last use of the listsort function outside of tests.
    I'll send a separate CL to remove it.
    
    Unfortunately, while this passes all tests, it does not pass toolstash
    -cmp.  The problem is that cmpstackvarlt does not fully determine the
    sort order, and the change from listsort to sort.Sort, while generally
    desirable, produces a different ordering.  I could stage this by first
    making cmpstackvarlt fully determined, but no matter what toolstash -cmp
    is going to break at some point.
    
    In my casual testing the compiler is 2.2% faster.
    
    Update #14473.
    
    Change-Id: I367d66daa4ec73ed95c14c66ccda3a2133ad95d5
    Reviewed-on: https://go-review.googlesource.com/19919Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
    b66a8923
gsubr.go 17.7 KB