• Shenghou Ma's avatar
    cmd/7g: enable peephole optimizer · 63d72f69
    Shenghou Ma authored
    Based on cmd/9g/peep.go.
    
    Go 1 benchmark comparison:
    benchmark                          old ns/op       new ns/op       delta
    BenchmarkBinaryTree17              24328574000     18351639000     -24.57%
    BenchmarkFannkuch11                17029365000     10817758000     -36.48%
    BenchmarkFmtFprintfEmpty           291             223             -23.37%
    BenchmarkFmtFprintfString          1073            799             -25.54%
    BenchmarkFmtFprintfInt             1024            778             -24.02%
    BenchmarkFmtFprintfIntInt          1654            1277            -22.79%
    BenchmarkFmtFprintfPrefixedInt     1360            1083            -20.37%
    BenchmarkFmtFprintfFloat           2272            1415            -37.72%
    BenchmarkFmtManyArgs               5933            4742            -20.07%
    BenchmarkGobDecode                 53166003        38584736        -27.43%
    BenchmarkGobEncode                 37930156        30074874        -20.71%
    BenchmarkGzip                      1880638900      1286832100      -31.57%
    BenchmarkGunzip                    386343633       292194480       -24.37%
    BenchmarkHTTPClientServer          237077          179776          -24.17%
    BenchmarkJSONEncode                101731690       73116925        -28.13%
    BenchmarkJSONDecode                344655360       241277600       -29.99%
    BenchmarkMandelbrot200             28329778        12950809        -54.29%
    BenchmarkGoParse                   21670755        16554244        -23.61%
    BenchmarkRegexpMatchEasy0_32       557             484             -13.11%
    BenchmarkRegexpMatchEasy0_1K       4687            4832            +3.09%
    BenchmarkRegexpMatchEasy1_32       539             483             -10.39%
    BenchmarkRegexpMatchEasy1_1K       5100            5080            -0.39%
    BenchmarkRegexpMatchMedium_32      796             651             -18.22%
    BenchmarkRegexpMatchMedium_1K      233099          182047          -21.90%
    BenchmarkRegexpMatchHard_32        13202           9897            -25.03%
    BenchmarkRegexpMatchHard_1K        401027          303602          -24.29%
    BenchmarkRevcomp                   3837679666      2816546600      -26.61%
    BenchmarkTemplate                  440608300       324831040       -26.28%
    BenchmarkTimeParse                 1460            1019            -30.21%
    BenchmarkTimeFormat                1609            1174            -27.04%
    
    benchmark                         old MB/s     new MB/s     speedup
    BenchmarkGobDecode                14.44        19.89        1.38x
    BenchmarkGobEncode                20.24        25.52        1.26x
    BenchmarkGzip                     10.32        15.08        1.46x
    BenchmarkGunzip                   50.23        66.41        1.32x
    BenchmarkJSONEncode               19.07        26.54        1.39x
    BenchmarkJSONDecode               5.63         8.04         1.43x
    BenchmarkGoParse                  2.67         3.50         1.31x
    BenchmarkRegexpMatchEasy0_32      57.38        66.05        1.15x
    BenchmarkRegexpMatchEasy0_1K      218.47       211.91       0.97x
    BenchmarkRegexpMatchEasy1_32      59.29        66.21        1.12x
    BenchmarkRegexpMatchEasy1_1K      200.76       201.54       1.00x
    BenchmarkRegexpMatchMedium_32     1.26         1.53         1.21x
    BenchmarkRegexpMatchMedium_1K     4.39         5.62         1.28x
    BenchmarkRegexpMatchHard_32       2.42         3.23         1.33x
    BenchmarkRegexpMatchHard_1K       2.55         3.37         1.32x
    BenchmarkRevcomp                  66.23        90.24        1.36x
    BenchmarkTemplate                 4.40         5.97         1.36x
    
    Fixes #10105.
    
    Change-Id: I353cc9fdf922e431821508c9dbbe4d9a85d64bd4
    Signed-off-by: 's avatarShenghou Ma <minux@golang.org>
    Reviewed-on: https://go-review.googlesource.com/8471Reviewed-by: 's avatarDave Cheney <dave@cheney.net>
    63d72f69
Name
Last commit
Last update
..
bench Loading commit data...
bugs Loading commit data...
chan Loading commit data...
ddd2.dir Loading commit data...
dwarf Loading commit data...
fixedbugs Loading commit data...
import2.dir Loading commit data...
import4.dir Loading commit data...
interface Loading commit data...
ken Loading commit data...
method4.dir Loading commit data...
safe Loading commit data...
stress Loading commit data...
syntax Loading commit data...
235.go Loading commit data...
64bit.go Loading commit data...
alias.go Loading commit data...
alias1.go Loading commit data...
append.go Loading commit data...
args.go Loading commit data...
assign.go Loading commit data...
assign1.go Loading commit data...
bigalg.go Loading commit data...
bigmap.go Loading commit data...
blank.go Loading commit data...
blank1.go Loading commit data...
bom.go Loading commit data...
bombad.go Loading commit data...
bounds.go Loading commit data...
chancap.go Loading commit data...
chanlinear.go Loading commit data...
char_lit.go Loading commit data...
char_lit1.go Loading commit data...
clearfat.go Loading commit data...
closedchan.go Loading commit data...
closure.go Loading commit data...
closure1.go Loading commit data...
closure2.go Loading commit data...
cmp.go Loading commit data...
cmp6.go Loading commit data...
cmplx.go Loading commit data...
cmplxdivide.c Loading commit data...
cmplxdivide.go Loading commit data...
cmplxdivide1.go Loading commit data...
complit.go Loading commit data...
complit1.go Loading commit data...
compos.go Loading commit data...
const.go Loading commit data...
const1.go Loading commit data...
const2.go Loading commit data...
const3.go Loading commit data...
const4.go Loading commit data...
const5.go Loading commit data...
const6.go Loading commit data...
convT2X.go Loading commit data...
convert.go Loading commit data...
convert1.go Loading commit data...
convert3.go Loading commit data...
convlit.go Loading commit data...
convlit1.go Loading commit data...
copy.go Loading commit data...
crlf.go Loading commit data...
ddd.go Loading commit data...
ddd1.go Loading commit data...
ddd2.go Loading commit data...
decl.go Loading commit data...
declbad.go Loading commit data...
defer.go Loading commit data...
deferfin.go Loading commit data...
deferprint.go Loading commit data...
deferprint.out Loading commit data...
divide.go Loading commit data...
divmod.go Loading commit data...
empty.go Loading commit data...
env.go Loading commit data...
eof.go Loading commit data...
eof1.go Loading commit data...
errchk Loading commit data...
escape.go Loading commit data...
escape2.go Loading commit data...
escape2n.go Loading commit data...
escape3.go Loading commit data...
escape4.go Loading commit data...
escape5.go Loading commit data...
escape_closure.go Loading commit data...
escape_field.go Loading commit data...
escape_iface.go Loading commit data...
escape_indir.go Loading commit data...
escape_level.go Loading commit data...
escape_map.go Loading commit data...
escape_param.go Loading commit data...
escape_slice.go Loading commit data...
fibo.go Loading commit data...
float_lit.go Loading commit data...
float_lit2.go Loading commit data...
float_lit3.go Loading commit data...
floatcmp.go Loading commit data...
for.go Loading commit data...
func.go Loading commit data...
func1.go Loading commit data...
func2.go Loading commit data...
func3.go Loading commit data...
func4.go Loading commit data...
func5.go Loading commit data...
func6.go Loading commit data...
func7.go Loading commit data...
func8.go Loading commit data...
funcdup.go Loading commit data...
funcdup2.go Loading commit data...
gc.go Loading commit data...
gc1.go Loading commit data...
gc2.go Loading commit data...
gcstring.go Loading commit data...
goprint.go Loading commit data...
goprint.out Loading commit data...
goto.go Loading commit data...
helloworld.go Loading commit data...
helloworld.out Loading commit data...
if.go Loading commit data...
import.go Loading commit data...
import1.go Loading commit data...
import2.go Loading commit data...
import4.go Loading commit data...
import5.go Loading commit data...
index.go Loading commit data...
index0.go Loading commit data...
index1.go Loading commit data...
index2.go Loading commit data...
indirect.go Loading commit data...
indirect1.go Loading commit data...
init.go Loading commit data...
init1.go Loading commit data...
initcomma.go Loading commit data...
initialize.go Loading commit data...
initializerr.go Loading commit data...
inline.go Loading commit data...
int_lit.go Loading commit data...
intcvt.go Loading commit data...
iota.go Loading commit data...
label.go Loading commit data...
label1.go Loading commit data...
linkx.go Loading commit data...
linkx_run.go Loading commit data...
literal.go Loading commit data...
live.go Loading commit data...
live1.go Loading commit data...
live2.go Loading commit data...
mallocfin.go Loading commit data...
map.go Loading commit data...
map1.go Loading commit data...
maplinear.go Loading commit data...
method.go Loading commit data...
method1.go Loading commit data...
method2.go Loading commit data...
method3.go Loading commit data...
method4.go Loading commit data...
method5.go Loading commit data...
named.go Loading commit data...
named1.go Loading commit data...
nil.go Loading commit data...
nilcheck.go Loading commit data...
nilptr.go Loading commit data...
nilptr2.go Loading commit data...
nilptr3.go Loading commit data...
nilptr4.go Loading commit data...
nosplit.go Loading commit data...
nul1.go Loading commit data...
parentype.go Loading commit data...
peano.go Loading commit data...
print.go Loading commit data...
print.out Loading commit data...
printbig.go Loading commit data...
printbig.out Loading commit data...
range.go Loading commit data...
recover.go Loading commit data...
recover1.go Loading commit data...
recover2.go Loading commit data...
recover3.go Loading commit data...
recover4.go Loading commit data...
rename.go Loading commit data...
rename1.go Loading commit data...
reorder.go Loading commit data...
reorder2.go Loading commit data...
return.go Loading commit data...
rotate.go Loading commit data...
rotate0.go Loading commit data...
rotate1.go Loading commit data...
rotate2.go Loading commit data...
rotate3.go Loading commit data...
run.go Loading commit data...
rune.go Loading commit data...
runtime.go Loading commit data...
shift1.go Loading commit data...
shift2.go Loading commit data...
sieve.go Loading commit data...
sigchld.go Loading commit data...
sigchld.out Loading commit data...
simassign.go Loading commit data...
sinit.go Loading commit data...
sinit_run.go Loading commit data...
sizeof.go Loading commit data...
slice3.go Loading commit data...
slice3err.go Loading commit data...
slicecap.go Loading commit data...
solitaire.go Loading commit data...
stack.go Loading commit data...
string_lit.go Loading commit data...
stringrange.go Loading commit data...
struct0.go Loading commit data...
switch.go Loading commit data...
switch3.go Loading commit data...
switch4.go Loading commit data...
tinyfin.go Loading commit data...
torture.go Loading commit data...
turing.go Loading commit data...
typecheck.go Loading commit data...
typeswitch.go Loading commit data...
typeswitch1.go Loading commit data...
typeswitch2.go Loading commit data...
typeswitch3.go Loading commit data...
undef.go Loading commit data...
utf.go Loading commit data...
varerr.go Loading commit data...
varinit.go Loading commit data...
zerodivide.go Loading commit data...