• Dave Cheney's avatar
    cmd/5g: avoid temporary during constant binary op · 7b36acc4
    Dave Cheney authored
    This CL is an attempt to backport the abop code generation from 6g. This improves the generation of the range offset if the increment can be encoded directly via Operand2 shift encoding.
    
    0023 (/home/dfc/src/range.go:7) BGE     ,29(APC)
    0024 (/home/dfc/src/range.go:7) MOVW    0(R3),R5
    0025 (/home/dfc/src/range.go:7) MOVW    $4,R1
    0026 (/home/dfc/src/range.go:7) ADD     R1,R3,R3
    0027 (/home/dfc/src/range.go:8) ADD     R5,R4,R4
    0028 (/home/dfc/src/range.go:7) B       ,17(APC)
    
    becomes
    
    0023 (/home/dfc/src/range.go:7) BGE     ,28(APC)
    0024 (/home/dfc/src/range.go:7) MOVW    0(R3),R0
    0025 (/home/dfc/src/range.go:7) ADD     $4,R3,R3
    0026 (/home/dfc/src/range.go:8) ADD     R0,R4,R4
    0027 (/home/dfc/src/range.go:7) B       ,17(APC)
    
    Benchmarks are unimpressive
    
    dfc@qnap:~/go/test/bench/go1$ ~/go/misc/benchcmp {old,new}.txt
    benchmark                 old ns/op    new ns/op    delta
    BenchmarkBinaryTree17    2147483647   2147483647   +0.93%
    BenchmarkFannkuch11      2147483647   2147483647   -2.52%
    BenchmarkGobDecode        196135200    195842000   -0.15%
    BenchmarkGobEncode         78581650     76734450   -2.35%
    BenchmarkGzip            2147483647   2147483647   -0.47%
    BenchmarkGunzip          1087243000   1070254000   -1.56%
    BenchmarkJSONEncode      1107558000   1146077000   +3.48%
    BenchmarkJSONDecode      2147483647   2147483647   -0.07%
    BenchmarkMandelbrot200   2147483647   2147483647   -0.77%
    BenchmarkParse             74328550     71653400   -3.60%
    BenchmarkRevcomp          111123900    109325950   -1.62%
    BenchmarkTemplate        2147483647   2147483647   -0.82%
    
    benchmark                  old MB/s     new MB/s  speedup
    BenchmarkGobDecode             3.91         3.92    1.00x
    BenchmarkGobEncode             9.77        10.00    1.02x
    BenchmarkGzip                  3.65         3.66    1.00x
    BenchmarkGunzip               17.85        18.13    1.02x
    BenchmarkJSONEncode            1.75         1.69    0.97x
    BenchmarkJSONDecode            0.83         0.83    1.00x
    BenchmarkParse                 0.78         0.81    1.04x
    BenchmarkRevcomp              22.87        23.25    1.02x
    BenchmarkTemplate              0.84         0.85    1.01x
    
    R=remyoudompheng, minux.ma, rsc
    CC=golang-dev
    https://golang.org/cl/6564067
    7b36acc4
cgen.c 27.7 KB