]> Cypherpunks repositories - gostls13.git/commit
cmd/compile: ignore some dead code when deciding whether to inline
authorJosh Bleecher Snyder <josharian@gmail.com>
Sun, 26 Feb 2017 23:25:57 +0000 (15:25 -0800)
committerJosh Bleecher Snyder <josharian@gmail.com>
Mon, 27 Feb 2017 19:18:01 +0000 (19:18 +0000)
commit566e72d0cedc593054dd36f9d3e91b588e849074
treef570aa58621122d0023bcb6ce8443b536aed911f
parentc7894924c7702c88e2b9836323bd4f40cd0257e7
cmd/compile: ignore some dead code when deciding whether to inline

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: Matthew Dempsky <mdempsky@google.com>
src/cmd/compile/internal/gc/const.go
src/cmd/compile/internal/gc/inl.go