• Josh Bleecher Snyder's avatar
    cmd/compile: ignore some dead code when deciding whether to inline · 566e72d0
    Josh Bleecher Snyder authored
    Constant evaluation provides some rudimentary
    knowledge of dead code at inlining decision time.
    Use it.
    
    This CL addresses only dead code inside if statements.
    For statements are never inlined anyway,
    and dead code inside for statements is rare.
    Analyzing switch statements is worth doing,
    but it is more complicated, since we would have
    to evaluate each case; leave it for later.
    
    Fixes #9274
    
    After this CL, the following functions in std+cmd
    can be newly inlined:
    
    cmd/internal/obj/x86/asm6.go:3122: can inline subreg
    cmd/vendor/golang.org/x/arch/x86/x86asm/decode.go:172: can inline instPrefix
    cmd/vendor/golang.org/x/arch/x86/x86asm/decode.go:202: can inline truncated
    go/constant/value.go:234: can inline makeFloat
    go/types/labels.go:52: can inline (*block).insert
    math/big/float.go:231: can inline (*Float).Sign
    math/bits/bits.go:57: can inline OnesCount
    net/http/server.go:597: can inline (*Server).newConn
    runtime/hashmap.go:1165: can inline reflect_maplen
    runtime/proc.go:207: can inline os_beforeExit
    runtime/signal_unix.go:55: can inline init.5
    runtime/stack.go:1081: can inline gostartcallfn
    
    Change-Id: I4c92fb96aa0c3d33df7b3f2da548612e79b56b5b
    Reviewed-on: https://go-review.googlesource.com/37499
    
    Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
    566e72d0
inl.go 25.4 KB