1. 20 Sep, 2017 15 commits
    • Michael Munday's avatar
      cmd/compile: stop rematerializable ops from clobbering flags · 2cb61aa3
      Michael Munday authored
      Rematerializable ops can be inserted after the flagalloc phase,
      they must therefore not clobber flags. This CL adds a check to
      ensure this doesn't happen and fixes the instances where it
      does currently.
      
      amd64: ADDQconst and ADDLconst were recently changed to be
      rematerializable in CL 54393 (only in tip, not 1.9). That change
      has been reverted.
      
      s390x: MOVDaddr could clobber flags when using dynamic linking due
      to a ADD with immediate instruction. Change the code generation to
      use LA/LAY instead.
      
      Fixes #21080.
      
      Change-Id: Ia85c882afa2a820a309e93775354b3169ec6d034
      Reviewed-on: https://go-review.googlesource.com/63030
      Run-TryBot: Michael Munday <mike.munday@ibm.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      Reviewed-by: default avatarIlya Tocar <ilya.tocar@intel.com>
      2cb61aa3
    • Matthew Dempsky's avatar
      cmd/compile: remove {Mark,Pop}dcl calls in bimport · 3628c2d5
      Matthew Dempsky authored
      These were previously only relevant for recording scoping level so
      that invalid 'fallthrough' statements could be rejected. However,
      that's handled differently since CL 61130 (in particular, there's no
      use of types.Block anymore), so these calls can be safely removed.
      
      Passes toolstash-check.
      
      Change-Id: I8631b156594df85b8d39f57acad3ebcf099d52f9
      Reviewed-on: https://go-review.googlesource.com/64810
      Run-TryBot: Matthew Dempsky <mdempsky@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarRobert Griesemer <gri@golang.org>
      3628c2d5
    • Albert Nigmatzianov's avatar
      io: Add benchmarks for CopyN · 36e1c7ab
      Albert Nigmatzianov authored
      Copied from CL 60630
      
      Current results:
      name          time/op
      CopyNSmall-4  2.20µs ±90%
      CopyNLarge-4   136µs ±56%
      
      name          alloc/op
      CopyNSmall-4  1.84kB ±21%
      CopyNLarge-4   128kB ±10%
      
      name          allocs/op
      CopyNSmall-4    1.00 ± 0%
      CopyNLarge-4    1.00 ± 0%
      
      Change-Id: If08c0132a773e936c9f61bff96e0aabf58006d31
      Reviewed-on: https://go-review.googlesource.com/64932
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      36e1c7ab
    • Albert Nigmatzianov's avatar
      io: Improve performance of CopyN · 098eb016
      Albert Nigmatzianov authored
      Benchmarks:
      name          old time/op    new time/op    delta
      CopyNSmall-4    5.09µs ± 1%    2.25µs ±86%  -55.91%  (p=0.000 n=11+14)
      CopyNLarge-4     114µs ±73%     121µs ±72%     ~     (p=0.701 n=14+14)
      
      name          old alloc/op   new alloc/op   delta
      CopyNSmall-4    34.6kB ± 0%     1.9kB ±19%  -94.60%  (p=0.000 n=12+14)
      CopyNLarge-4     129kB ± 8%     127kB ±18%   -2.00%  (p=0.007 n=14+14)
      
      name          old allocs/op  new allocs/op  delta
      CopyNSmall-4      2.00 ± 0%      1.00 ± 0%  -50.00%  (p=0.000 n=14+14)
      CopyNLarge-4      2.00 ± 0%      1.00 ± 0%  -50.00%  (p=0.000 n=14+14)
      
      Benchmark code:
      type Buffer struct {
      	bytes.Buffer
      	io.ReaderFrom
      }
      
      func BenchmarkCopyNSmall(b *testing.B) {
      	bs := bytes.Repeat([]byte{0}, 1024)
      	rd := bytes.NewReader(bs)
      	buf := new(Buffer)
      	b.ResetTimer()
      
      	for i := 0; i < b.N; i++ {
      		io.CopyN(buf, rd, 512)
      		rd.Reset(bs)
      	}
      }
      
      func BenchmarkCopyNLarge(b *testing.B) {
      	bs := bytes.Repeat([]byte{0}, 64*1024)
      	rd := bytes.NewReader(bs)
      	buf := new(Buffer)
      	b.ResetTimer()
      
      	for i := 0; i < b.N; i++ {
      		io.CopyN(buf, rd, (32*1024)+1)
      		rd.Reset(bs)
      	}
      }
      
      Change-Id: Id8d29e55758452c870cf372db640f07baec05849
      Reviewed-on: https://go-review.googlesource.com/60630
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      098eb016
    • Gabriel Aszalos's avatar
      bytes: improve test readability · 97757881
      Gabriel Aszalos authored
      This CL improves the readability of the tests in the bytes package by
      naming the `data` test variable `testString`, using the same convention
      as its counterpart, `testBytes`.
      
      It additionally removes some type casting which was unnecessary.
      
      Change-Id: If38b5606ce8bda0306bae24498f21cb8dbbb6377
      Reviewed-on: https://go-review.googlesource.com/64931
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      97757881
    • Marvin Stenger's avatar
      cmd/dist: rename variables + functions · 1b548dc5
      Marvin Stenger authored
      This belongs to a series of clean-up changes (see below) for cmd/dist.
      This is change (9).
      
      These changes include:
      (1)  apply minor fixes
      (2)  restore behavior of branchtag
      (3)  unleash bootstrap optimization for windows
      (4)  use standard generated code header
      (5)  remove trivial variables + functions
      (6)  move functions for the better
      (7)  simplify code segments
      (8)  use bytes.Buffer for code generation
      (9)  rename variables + functions
      
      Change-Id: I9247433d7d07a2c99d15b0a4d23164bcbc042768
      Reviewed-on: https://go-review.googlesource.com/61015
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      1b548dc5
    • Gabriel Aszalos's avatar
      bytes: correct message in test log · a696db1b
      Gabriel Aszalos authored
      Change-Id: Ib731874b9a37ff141e4305d8ccfdf7c165155da6
      Reviewed-on: https://go-review.googlesource.com/64930Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      a696db1b
    • Michael Munday's avatar
      cmd/compile: add s390x intrinsics for Ceil, Floor, Round and Trunc · 7582494e
      Michael Munday authored
      Ceil, Floor and Trunc are pre-existing intrinsics. Round is a new
      function and has been added as an intrinsic in this CL. All of the
      functions can be implemented as a single 'LOAD FP INTEGER'
      instruction, FIDBR, on s390x.
      
      name   old time/op  new time/op  delta
      Ceil   2.34ns ± 0%  0.85ns ± 0%  -63.74%  (p=0.000 n=5+4)
      Floor  2.33ns ± 0%  0.85ns ± 1%  -63.35%  (p=0.008 n=5+5)
      Round  4.23ns ± 0%  0.85ns ± 0%  -79.89%  (p=0.000 n=5+4)
      Trunc  2.35ns ± 0%  0.85ns ± 0%  -63.83%  (p=0.029 n=4+4)
      
      Change-Id: Idee7ba24a2899d12bf9afee4eedd6b4aaad3c510
      Reviewed-on: https://go-review.googlesource.com/63890
      Run-TryBot: Michael Munday <mike.munday@ibm.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      7582494e
    • Rajath Agasthya's avatar
      fmt: Implement pp.WriteString method · 8802b188
      Rajath Agasthya authored
      This allows io.WriteString to make use of WriteString method
      implemented by pp when writing a string to fmt.State.
      
      Fixes #20786
      
      Change-Id: Ice7a92bf303127ad87f05562217fa076f5c589ad
      Reviewed-on: https://go-review.googlesource.com/61430Reviewed-by: default avatarRob Pike <r@golang.org>
      8802b188
    • Hiroshi Ioka's avatar
      all: correct location of go tool · fb54abe9
      Hiroshi Ioka authored
      In general, there are no guarantee that `go` command exist on $PATH.
      This CL tries to get `go` command from $GOROOT/bin instead.
      
      There are three kinds of code we should handle:
          For normal code, the CL implements goCmd() or goCmdName().
          For unit tests, the CL uses testenv.GoTool() or testenv.GoToolPath().
          For integration tests, the CL sets PATH=$GOROOT/bin:$PATH in cmd/dist.
      
      Note that make.bash sets PATH=$GOROOT/bin:$PATH in the build process.
      So this change is only useful when we use toolchain manually.
      
      Updates #21875
      
      Change-Id: I963b9f22ea732dd735363ececde4cf94a5db5ca2
      Reviewed-on: https://go-review.googlesource.com/64650
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      fb54abe9
    • Marvin Stenger's avatar
      cmd/dist: use bytes.Buffer for code generation · 88ced021
      Marvin Stenger authored
      This belongs to a series of clean-up changes (see below) for cmd/dist.
      This is change (8).
      
      These changes include:
      (1)  apply minor fixes
      (2)  restore behavior of branchtag
      (3)  unleash bootstrap optimization for windows
      (4)  use standard generated code header
      (5)  remove trivial variables + functions
      (6)  move functions for the better
      (7)  simplify code segments
      (8)  use bytes.Buffer for code generation
      (9)  rename variables + functions
      (10) remove doc.go
      
      Change-Id: I2d5a071eb8e14690325612271432fdc5f43b108b
      Reviewed-on: https://go-review.googlesource.com/61014
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      88ced021
    • Hiroshi Ioka's avatar
      cmd/nm: add test case for go archives · 822f832d
      Hiroshi Ioka authored
      Also, rename some test cases, check (*os.File).Close
      
      For #21706
      
      Change-Id: Ie60c4d345b2259736c823dc6001c08affcdd86e7
      Reviewed-on: https://go-review.googlesource.com/64510Reviewed-by: default avatarDavid Crawshaw <crawshaw@golang.org>
      Run-TryBot: David Crawshaw <crawshaw@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      822f832d
    • Samuel Tan's avatar
      html/template: prevent aliasing of parse Trees via AddParseTree · cd0a5f08
      Samuel Tan authored
      Check all associated templates in the set for an existing reference
      to the given Tree in AddParseTree before assigning that reference
      to a new or existing template. This prevents multiple html/template
      Templates from referencing and modifying the same underlying Tree.
      
      While there, fix a few existing unit tests so that they terminate
      upon encountering unrecoverable failures.
      
      Fixes #21844
      
      Change-Id: I6b4f6996cf5467113ef94f7b91a6933dbbc21839
      Reviewed-on: https://go-review.googlesource.com/64770
      Run-TryBot: Rob Pike <r@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarRob Pike <r@golang.org>
      cd0a5f08
    • Marvin Stenger's avatar
      cmd/dist: simplify code segments · 3844e707
      Marvin Stenger authored
      This belongs to a series of clean-up changes (see below) for cmd/dist.
      This is change (7).
      
      These changes include:
      (1)  apply minor fixes
      (2)  restore behavior of branchtag
      (3)  unleash bootstrap optimization for windows
      (4)  use standard generated code header
      (5)  remove trivial variables + functions
      (6)  move functions for the better
      (7)  simplify code segments
      (8)  use bytes.Buffer for code generation
      (9)  rename variables + functions
      (10) remove doc.go
      
      Change-Id: Ia3c33ef060b4baaef354b729ba82ed0b28e52857
      Reviewed-on: https://go-review.googlesource.com/61013
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      3844e707
    • Sam Whited's avatar
      cmd/vet: don't warn on expected space in XML tag · c174e46a
      Sam Whited authored
      The change in https://golang.org/cl/43295 added warning about spaces in
      struct tags. However, in XML tags it is expected that there will be a
      space between the namespace and the local name.
      
      Change-Id: Ic31c3bdae30797f406f25c737b83bbe2de1ed1db
      Reviewed-on: https://go-review.googlesource.com/62570
      Run-TryBot: Rob Pike <r@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarRob Pike <r@golang.org>
      c174e46a
  2. 19 Sep, 2017 14 commits
  3. 18 Sep, 2017 6 commits
    • Matthew Dempsky's avatar
      cmd/compile: fix compiler crash on recursive types · bb2f0da2
      Matthew Dempsky authored
      By setting both a valid size and alignment for broken recursive types,
      we can appease some more safety checks and prevent compiler crashes.
      
      Fixes #21882.
      
      Change-Id: Ibaa137d8aa2c2a9d521462f144d7016c4abfd6e7
      Reviewed-on: https://go-review.googlesource.com/64430
      Run-TryBot: Matthew Dempsky <mdempsky@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarRobert Griesemer <gri@golang.org>
      bb2f0da2
    • Samuel Tan's avatar
      html/template: explain URL filtering · 9ee6f7b0
      Samuel Tan authored
      Expand documentation in of the internal urlFilter function
      to explain why URLs with schemes other than "http", "https",
      and "mailto" are filtered out.
      
      Fixes #20586
      
      Change-Id: I1f65ff6e15fc4cd325489327c40f8c141904bf5c
      Reviewed-on: https://go-review.googlesource.com/52853Reviewed-by: default avatarMike Samuel <mikesamuel@gmail.com>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      9ee6f7b0
    • griesemer's avatar
      go/types, constant: remove superfluous import comment · 6c8d5125
      griesemer authored
      The comment was a left-over from the long-past move
      of these two packages from x/tools to the std lib.
      
      Fixes #21791.
      
      Change-Id: I65cbebf479e609be0204b58edb6506c6403aec9b
      Reviewed-on: https://go-review.googlesource.com/64250
      Run-TryBot: Robert Griesemer <gri@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarAlan Donovan <adonovan@google.com>
      6c8d5125
    • Gabriel Aszalos's avatar
      bytes: removed unnecessary slicing on copy · 66ce8e38
      Gabriel Aszalos authored
      Change-Id: Ia42e3479c852a88968947411de8b32e5bcda5ae3
      Reviewed-on: https://go-review.googlesource.com/64371Reviewed-by: default avatarJoe Tsai <thebrokentoaster@gmail.com>
      Run-TryBot: Joe Tsai <thebrokentoaster@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      66ce8e38
    • Joe Tsai's avatar
      archive/tar: add Reader.WriteTo and Writer.ReadFrom · 57c79feb
      Joe Tsai authored
      To support the efficient packing and extracting of sparse files,
      add two new methods:
      	func Reader.WriteTo(io.Writer) (int64, error)
      	func Writer.ReadFrom(io.Reader) (int64, error)
      
      If the current archive entry is sparse and the provided io.{Reader,Writer}
      is also an io.Seeker, then use Seek to skip past the holes.
      If the last region in a file entry is a hole, then we seek to 1 byte
      before the EOF:
      	* for Reader.WriteTo to write a single byte
      	to ensure that the resulting filesize is correct.
      	* for Writer.ReadFrom to read a single byte
      	to verify that the input filesize is correct.
      
      The downside of this approach is when the last region in the sparse file
      is a hole. In the case of Reader.WriteTo, the 1-byte write will cause
      the last fragment to have a single chunk allocated.
      However, the goal of ReadFrom/WriteTo is *not* the ability to
      exactly reproduce sparse files (in terms of the location of sparse holes),
      but rather to provide an efficient way to create them.
      
      File systems already impose their own restrictions on how the sparse file
      will be created. Some filesystems (e.g., HFS+) don't support sparseness and
      seeking forward simply causes the FS to write zeros. Other filesystems
      have different chunk sizes, which will cause chunk allocations at boundaries
      different from what was in the original sparse file. In either case,
      it should not be a normal expectation of users that the location of holes
      in sparse files exactly matches the source.
      
      For users that really desire to have exact reproduction of sparse holes,
      they can wrap os.File with their own io.WriteSeeker that discards the
      final 1-byte write and uses File.Truncate to resize the file to the
      correct size.
      
      Other reasons we choose this approach over special-casing *os.File because:
      	* The Reader already has special-case logic for io.Seeker
      	* As much as possible, we want to decouple OS-specific logic from
      	Reader and Writer.
      	* This allows other abstractions over *os.File to also benefit from
      	the "skip past holes" logic.
      	* It is easier to test, since it is harder to mock an *os.File.
      
      Updates #13548
      
      Change-Id: I0a4f293bd53d13d154a946bc4a2ade28a6646f6a
      Reviewed-on: https://go-review.googlesource.com/60872
      Run-TryBot: Joe Tsai <thebrokentoaster@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      57c79feb
    • Damien Lespiau's avatar
      cmd/internal/obj/x86: add ADDSUBPS/PD · 1e607f22
      Damien Lespiau authored
      These are the last instructions missing to complete SSE3 support.
      
      For reference what was missing was found by a tool [1]:
      
      $ x86db-gogen list --extension SSE3 --not-known
      ADDSUBPD xmmreg,xmmrm [rm: 66 0f d0 /r] PRESCOTT,SSE3,SO
      ADDSUBPS xmmreg,xmmrm [rm: f2 0f d0 /r] PRESCOTT,SSE3,SO
      
      [1] https://github.com/dlespiau/x86db
      
      Fixes #20293
      
      Change-Id: Ib5a91bf64dcc5282cdb60eae740ae52b4db16ebd
      Reviewed-on: https://go-review.googlesource.com/42990
      Run-TryBot: Keith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIlya Tocar <ilya.tocar@intel.com>
      1e607f22
  4. 17 Sep, 2017 2 commits
  5. 16 Sep, 2017 2 commits
    • Giovanni Bajo's avatar
      runtime: improve fastrand with a better generator · e7e4a4ff
      Giovanni Bajo authored
      The current generator is a simple LSFR, which showed strong
      correlation in higher bits, as manifested by fastrandn().
      
      Change it with xorshift64+, which is slightly more complex,
      has a larger state, but has a period of 2^64-1 and is much better
      at statistical tests. The version used here is capable of
      passing Diehard and even SmallCrush.
      
      Speed is slightly worse but is probably insignificant:
      
      name                old time/op  new time/op  delta
      Fastrand-4          0.77ns ±12%  0.91ns ±21%  +17.31%  (p=0.048 n=5+5)
      FastrandHashiter-4  13.6ns ±21%  15.2ns ±17%     ~     (p=0.160 n=6+5)
      Fastrandn/2-4       2.30ns ± 5%  2.45ns ±15%     ~     (p=0.222 n=5+5)
      Fastrandn/3-4       2.36ns ± 7%  2.45ns ± 6%     ~     (p=0.222 n=5+5)
      Fastrandn/4-4       2.33ns ± 8%  2.61ns ±30%     ~     (p=0.126 n=6+5)
      Fastrandn/5-4       2.33ns ± 5%  2.48ns ± 9%     ~     (p=0.052 n=6+5)
      
      Fixes #21806
      
      Change-Id: I013bb37b463fdfc229a7f324df8fe2da8d286f33
      Reviewed-on: https://go-review.googlesource.com/62530
      Run-TryBot: Michael Munday <mike.munday@ibm.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      e7e4a4ff
    • Michael Munday's avatar
      cmd/compile: test constant folded integer to/from float conversions · a5d6b414
      Michael Munday authored
      Improves test coverage of the rules added in CL 63795 and would have
      detected the bug fixed by CL 63950.
      
      Change-Id: I107ee8d8e0b6684ce85b2446bd5018c5a03d608a
      Reviewed-on: https://go-review.googlesource.com/64130Reviewed-by: default avatarKeith Randall <khr@golang.org>
      a5d6b414
  6. 15 Sep, 2017 1 commit
    • Ben Shi's avatar
      cmd/compile: optimize ARM code with MULAF/MULSF/MULAD/MULSD · a07176b4
      Ben Shi authored
      The go compiler can generate better ARM code with those more
      efficient FP instructions. And there is little improvement
      in total but big improvement in special cases.
      
      1. The size of pkg/linux_arm/math.a shrinks by 2.4%.
      
      2. there is neither improvement nor regression in compilecmp benchmark.
      name        old time/op       new time/op       delta
      Template          2.32s ± 2%        2.32s ± 1%    ~     (p=1.000 n=9+10)
      Unicode           1.32s ± 4%        1.32s ± 4%    ~     (p=0.912 n=10+10)
      GoTypes           7.76s ± 1%        7.79s ± 1%    ~     (p=0.447 n=9+10)
      Compiler          37.4s ± 2%        37.2s ± 2%    ~     (p=0.218 n=10+10)
      SSA               84.8s ± 2%        85.0s ± 1%    ~     (p=0.604 n=10+9)
      Flate             1.45s ± 2%        1.44s ± 2%    ~     (p=0.075 n=10+10)
      GoParser          1.82s ± 1%        1.81s ± 1%    ~     (p=0.190 n=10+10)
      Reflect           5.06s ± 1%        5.05s ± 1%    ~     (p=0.315 n=10+9)
      Tar               2.37s ± 1%        2.37s ± 2%    ~     (p=0.912 n=10+10)
      XML               2.56s ± 1%        2.58s ± 2%    ~     (p=0.089 n=10+10)
      [Geo mean]        4.77s             4.77s       -0.08%
      
      name        old user-time/op  new user-time/op  delta
      Template          2.74s ± 2%        2.75s ± 2%    ~     (p=0.856 n=9+10)
      Unicode           1.61s ± 4%        1.62s ± 3%    ~     (p=0.693 n=10+10)
      GoTypes           9.55s ± 1%        9.49s ± 2%    ~     (p=0.056 n=9+10)
      Compiler          45.9s ± 1%        45.8s ± 1%    ~     (p=0.345 n=9+10)
      SSA                110s ± 1%         110s ± 1%    ~     (p=0.763 n=9+10)
      Flate             1.68s ± 2%        1.68s ± 3%    ~     (p=0.616 n=10+10)
      GoParser          2.14s ± 4%        2.14s ± 1%    ~     (p=0.825 n=10+9)
      Reflect           5.95s ± 1%        5.97s ± 3%    ~     (p=0.951 n=9+10)
      Tar               2.94s ± 3%        2.93s ± 2%    ~     (p=0.359 n=10+10)
      XML               3.03s ± 3%        3.07s ± 6%    ~     (p=0.166 n=10+10)
      [Geo mean]        5.76s             5.77s       +0.12%
      
      name        old text-bytes    new text-bytes    delta
      HelloSize         588kB ± 0%        588kB ± 0%    ~     (all equal)
      
      name        old data-bytes    new data-bytes    delta
      HelloSize        5.46kB ± 0%       5.46kB ± 0%    ~     (all equal)
      
      name        old bss-bytes     new bss-bytes     delta
      HelloSize        72.9kB ± 0%       72.9kB ± 0%    ~     (all equal)
      
      name        old exe-bytes     new exe-bytes     delta
      HelloSize        1.03MB ± 0%       1.03MB ± 0%    ~     (all equal)
      
      3. The performance of Mandelbrot200 improves 15%, though little
         improvement in total.
      name                     old time/op    new time/op    delta
      BinaryTree17-4              41.7s ± 1%     41.7s ± 1%     ~     (p=0.264 n=29+23)
      Fannkuch11-4                24.2s ± 0%     24.1s ± 1%   -0.13%  (p=0.050 n=30+30)
      FmtFprintfEmpty-4           826ns ± 1%     824ns ± 1%   -0.24%  (p=0.038 n=25+30)
      FmtFprintfString-4         1.38µs ± 1%    1.38µs ± 0%   -0.42%  (p=0.000 n=27+25)
      FmtFprintfInt-4            1.46µs ± 1%    1.46µs ± 0%     ~     (p=0.060 n=30+23)
      FmtFprintfIntInt-4         2.11µs ± 1%    2.08µs ± 0%   -1.04%  (p=0.000 n=30+30)
      FmtFprintfPrefixedInt-4    2.23µs ± 1%    2.22µs ± 1%   -0.51%  (p=0.000 n=30+30)
      FmtFprintfFloat-4          4.49µs ± 1%    4.48µs ± 1%   -0.22%  (p=0.004 n=26+30)
      FmtManyArgs-4              8.06µs ± 1%    8.12µs ± 1%   +0.68%  (p=0.000 n=25+30)
      GobDecode-4                 104ms ± 1%     104ms ± 2%     ~     (p=0.362 n=29+29)
      GobEncode-4                92.9ms ± 1%    92.8ms ± 2%     ~     (p=0.786 n=30+30)
      Gzip-4                      4.12s ± 1%     4.12s ± 1%     ~     (p=0.314 n=30+30)
      Gunzip-4                    602ms ± 1%     603ms ± 1%     ~     (p=0.164 n=30+30)
      HTTPClientServer-4          659µs ± 1%     655µs ± 2%   -0.64%  (p=0.006 n=25+28)
      JSONEncode-4                234ms ± 1%     235ms ± 1%   +0.29%  (p=0.050 n=30+30)
      JSONDecode-4                912ms ± 0%     911ms ± 0%     ~     (p=0.385 n=18+24)
      Mandelbrot200-4            49.2ms ± 0%    41.7ms ± 0%  -15.35%  (p=0.000 n=25+27)
      GoParse-4                  46.3ms ± 1%    46.3ms ± 2%     ~     (p=0.572 n=30+30)
      RegexpMatchEasy0_32-4      1.29µs ± 1%    1.27µs ± 0%   -1.59%  (p=0.000 n=30+30)
      RegexpMatchEasy0_1K-4      7.62µs ± 4%    7.71µs ± 3%     ~     (p=0.074 n=30+30)
      RegexpMatchEasy1_32-4      1.31µs ± 0%    1.30µs ± 1%   -0.71%  (p=0.000 n=23+30)
      RegexpMatchEasy1_1K-4      10.3µs ± 3%    10.3µs ± 5%     ~     (p=0.105 n=30+30)
      RegexpMatchMedium_32-4     2.06µs ± 1%    2.06µs ± 1%     ~     (p=0.100 n=30+30)
      RegexpMatchMedium_1K-4      533µs ± 1%     534µs ± 1%     ~     (p=0.254 n=29+30)
      RegexpMatchHard_32-4       28.9µs ± 0%    28.9µs ± 0%     ~     (p=0.154 n=30+30)
      RegexpMatchHard_1K-4        868µs ± 1%     867µs ± 0%     ~     (p=0.729 n=30+23)
      Revcomp-4                  66.9ms ± 1%    67.2ms ± 2%     ~     (p=0.102 n=28+29)
      Template-4                  1.07s ± 1%     1.06s ± 1%   -0.53%  (p=0.000 n=30+30)
      TimeParse-4                7.07µs ± 1%    7.01µs ± 0%   -0.85%  (p=0.000 n=30+25)
      TimeFormat-4               13.1µs ± 0%    13.2µs ± 1%   +0.77%  (p=0.000 n=27+27)
      [Geo mean]                  721µs          716µs        -0.70%
      
      name                     old speed      new speed      delta
      GobDecode-4              7.38MB/s ± 1%  7.37MB/s ± 2%     ~     (p=0.399 n=29+29)
      GobEncode-4              8.26MB/s ± 1%  8.27MB/s ± 2%     ~     (p=0.790 n=30+30)
      Gzip-4                   4.71MB/s ± 1%  4.71MB/s ± 1%     ~     (p=0.885 n=30+30)
      Gunzip-4                 32.2MB/s ± 1%  32.2MB/s ± 1%     ~     (p=0.190 n=30+30)
      JSONEncode-4             8.28MB/s ± 1%  8.25MB/s ± 1%     ~     (p=0.053 n=30+30)
      JSONDecode-4             2.13MB/s ± 0%  2.12MB/s ± 1%     ~     (p=0.072 n=18+30)
      GoParse-4                1.25MB/s ± 1%  1.25MB/s ± 2%     ~     (p=0.863 n=30+30)
      RegexpMatchEasy0_32-4    24.8MB/s ± 0%  25.2MB/s ± 1%   +1.61%  (p=0.000 n=30+30)
      RegexpMatchEasy0_1K-4     134MB/s ± 4%   133MB/s ± 3%     ~     (p=0.074 n=30+30)
      RegexpMatchEasy1_32-4    24.5MB/s ± 0%  24.6MB/s ± 1%   +0.72%  (p=0.000 n=23+30)
      RegexpMatchEasy1_1K-4    99.1MB/s ± 3%  99.8MB/s ± 5%     ~     (p=0.105 n=30+30)
      RegexpMatchMedium_32-4    483kB/s ± 1%   487kB/s ± 1%   +0.83%  (p=0.002 n=30+30)
      RegexpMatchMedium_1K-4   1.92MB/s ± 1%  1.92MB/s ± 1%     ~     (p=0.058 n=30+30)
      RegexpMatchHard_32-4     1.10MB/s ± 0%  1.11MB/s ± 0%     ~     (p=0.804 n=30+30)
      RegexpMatchHard_1K-4     1.18MB/s ± 0%  1.18MB/s ± 0%     ~     (all equal)
      Revcomp-4                38.0MB/s ± 1%  37.8MB/s ± 2%     ~     (p=0.098 n=28+29)
      Template-4               1.82MB/s ± 1%  1.83MB/s ± 1%   +0.55%  (p=0.000 n=29+29)
      [Geo mean]               6.79MB/s       6.79MB/s        +0.09%
      
      Change-Id: Ia91991c2c5c59c5df712de85a83b13a21c0a554b
      Reviewed-on: https://go-review.googlesource.com/63770
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      a07176b4