1. 23 Oct, 2018 21 commits
    • Lynn Boger's avatar
      runtime: use unsigned load for iscgo variable in ppc64x runtime asm · e41fbc79
      Lynn Boger authored
      This changes the runtime asm code that loads iscgo to use MOVBZ
      instead of MOVB, avoiding an unnecessary sign extension. This is most
      significant in runtime.save_g, reducing the size from 8 to 7
      instructions.
      
      Change-Id: Iaa2121464b5309e1f27fd91b19b5603c7aaf619d
      Reviewed-on: https://go-review.googlesource.com/c/144217
      Run-TryBot: Lynn Boger <laboger@linux.vnet.ibm.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarDavid Chase <drchase@google.com>
      e41fbc79
    • Lynn Boger's avatar
      internal/bytealg: improve asm for memequal on ppc64x · 6994731e
      Lynn Boger authored
      This includes two changes to the memequal function.
      
      Previously the asm implementation on ppc64x for Equal called the internal
      function memequal using a BL, whereas the other asm implementations for
      bytes functions on ppc64x used BR. The BR is preferred because the BL
      causes the calling function to stack a frame. This changes Equal so it
      uses BR and is consistent with the others.
      
      This also uses vsx instructions where possible to improve performance
      of the compares for sizes over 32.
      
      Here are results from the sizes affected:
      
      Equal/32             8.40ns ± 0%     7.66ns ± 0%    -8.81%  (p=0.029 n=4+4)
      Equal/4K              193ns ± 0%      144ns ± 0%   -25.39%  (p=0.029 n=4+4)
      Equal/4M              346µs ± 0%      277µs ± 0%   -20.08%  (p=0.029 n=4+4)
      Equal/64M            7.66ms ± 1%     7.27ms ± 0%    -5.10%  (p=0.029 n=4+4)
      
      Change-Id: Ib6ee2cdc3e5d146e2705e3338858b8e965d25420
      Reviewed-on: https://go-review.googlesource.com/c/143060
      Run-TryBot: Lynn Boger <laboger@linux.vnet.ibm.com>
      Reviewed-by: default avatarCarlos Eduardo Seo <cseo@linux.vnet.ibm.com>
      Reviewed-by: default avatarDavid Chase <drchase@google.com>
      6994731e
    • Carlos Eduardo Seo's avatar
      cmd/compile, runtime: add new lightweight atomics for ppc64x · 5c472132
      Carlos Eduardo Seo authored
      This change creates the infrastructure for new lightweight atomics
      primitives in runtime/internal/atomic:
      
      - LoadAcq, for load-acquire
      - StoreRel, for store-release
      - CasRel, for Compare-and-Swap-release
      
      and implements them for ppc64x. There is visible performance improvement
      in producer-consumer scenarios, like BenchmarkChanProdCons*:
      
      benchmark                           old ns/op     new ns/op     delta
      BenchmarkChanProdCons0-48           2034          2034          +0.00%
      BenchmarkChanProdCons10-48          1798          1608          -10.57%
      BenchmarkChanProdCons100-48         1596          1585          -0.69%
      BenchmarkChanProdConsWork0-48       2084          2046          -1.82%
      BenchmarkChanProdConsWork10-48      1829          1668          -8.80%
      BenchmarkChanProdConsWork100-48     1650          1650          +0.00%
      
      Fixes #21348
      
      Change-Id: I1f6ce377e4a0fe4bd7f5f775e8036f50070ad8db
      Reviewed-on: https://go-review.googlesource.com/c/142277
      Run-TryBot: Lynn Boger <laboger@linux.vnet.ibm.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarDavid Chase <drchase@google.com>
      5c472132
    • Martin Möhrmann's avatar
      cmd/compile: avoid appends and allocate full slice length in copyRet · 5dbc67a9
      Martin Möhrmann authored
      passes toolstash -cmp
      
      compilebench allocs:
      name      old allocs/op   new allocs/op   delta
      Template       385k ± 0%       385k ± 0%  -0.00%  (p=0.017 n=19+20)
      Unicode        342k ± 0%       342k ± 0%    ~     (p=0.867 n=20+20)
      GoTypes       1.15M ± 0%      1.15M ± 0%  -0.00%  (p=0.008 n=20+20)
      SSA           12.1M ± 0%      12.1M ± 0%    ~     (p=0.141 n=20+19)
      Flate          234k ± 0%       234k ± 0%    ~     (p=0.125 n=20+19)
      GoParser       315k ± 0%       315k ± 0%    ~     (p=0.104 n=20+20)
      Reflect        972k ± 0%       972k ± 0%  -0.00%  (p=0.000 n=17+20)
      Tar            391k ± 0%       391k ± 0%  -0.01%  (p=0.000 n=19+20)
      XML            404k ± 0%       403k ± 0%  -0.01%  (p=0.000 n=20+19)
      
      Change-Id: Ie24f7fae7b6b85422ec1ff0240f08f0a34064d72
      Reviewed-on: https://go-review.googlesource.com/c/144038
      Run-TryBot: Martin Möhrmann <martisch@uos.de>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      5dbc67a9
    • Martin Möhrmann's avatar
      runtime: remove unused maxSliceCap function and maxElems array · 64279235
      Martin Möhrmann authored
      All uses of these have been converted to use runtime/internal/math
      functions for overflow checking.
      
      Fixes #21588
      
      Change-Id: I0ba57028e471803dc7d445e66d77a8f87edfdafb
      Reviewed-on: https://go-review.googlesource.com/c/144037
      Run-TryBot: Martin Möhrmann <martisch@uos.de>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      64279235
    • Martin Möhrmann's avatar
      runtime: use multiplication with overflow check for newarray · 1e50dd02
      Martin Möhrmann authored
      This improves performance for e.g. maps with a bucket size
      (key+value*8 bytes) larger than 32 bytes and removes loading
      a value from the maxElems array for smaller bucket sizes.
      
      name                old time/op  new time/op  delta
      MakeMap/[Byte]Byte  95.5ns ± 1%  94.7ns ± 1%  -0.78%  (p=0.013 n=9+9)
      MakeMap/[Int]Int     128ns ± 0%   121ns ± 2%  -5.63%  (p=0.000 n=6+10)
      
      Updates #21588
      
      Change-Id: I7d9eb7d49150c399c15dcab675e24bc97ff97852
      Reviewed-on: https://go-review.googlesource.com/c/143997Reviewed-by: default avatarKeith Randall <khr@golang.org>
      1e50dd02
    • Martin Möhrmann's avatar
      runtime: use multiplication with overflow check for makechan · 286c7ae1
      Martin Möhrmann authored
      This improves performance for channels with an element size
      larger than 32 bytes and removes loading a value from the
      maxElems array for smaller element sizes.
      
      MakeChan/Byte       88.8ns ± 6%  85.2ns ± 1%  -4.03%  (p=0.000 n=10+10)
      MakeChan/Int         100ns ± 4%    96ns ± 2%  -3.72%  (p=0.000 n=9+10)
      MakeChan/Ptr         124ns ± 3%   126ns ± 2%    ~     (p=0.068 n=10+10)
      MakeChan/Struct/0   80.5ns ± 2%  80.7ns ± 2%    ~     (p=0.697 n=10+10)
      MakeChan/Struct/32   143ns ± 4%   141ns ± 2%    ~     (p=0.221 n=10+10)
      MakeChan/Struct/40   169ns ± 2%   159ns ± 4%  -6.26%  (p=0.000 n=10+10)
      
      Updates #21588
      
      Change-Id: Ifbf12a5af2f0ec7e1d2241ecfffab020e9abec48
      Reviewed-on: https://go-review.googlesource.com/c/144017Reviewed-by: default avatarKeith Randall <khr@golang.org>
      286c7ae1
    • Alberto Donizetti's avatar
      cmd/compile: preallocate in, out arrays in methodfunc · 72f099c3
      Alberto Donizetti authored
      This gives a modest (but measurable) reduction in the number of
      allocations when building the compilebench packages. It's safe and
      exact (there's no heuristic or guessing, the lenghts of in and out are
      known when we enter the function), so it may be worth it.
      
      name       old time/op       new time/op       delta
      Template         236ms ±23%        227ms ± 8%    ~     (p=0.955 n=8+7)
      Unicode          112ms ± 7%        111ms ± 8%    ~     (p=0.798 n=8+8)
      GoTypes          859ms ± 6%        874ms ± 6%    ~     (p=0.442 n=8+8)
      Compiler         3.90s ±12%        3.85s ± 9%    ~     (p=0.878 n=8+8)
      SSA              12.1s ± 7%        11.9s ± 8%    ~     (p=0.798 n=8+8)
      Flate            151ms ±13%        157ms ±14%    ~     (p=0.382 n=8+8)
      GoParser         190ms ±14%        192ms ±10%    ~     (p=0.645 n=8+8)
      Reflect          554ms ± 5%        555ms ± 9%    ~     (p=0.878 n=8+8)
      Tar              220ms ±19%        212ms ± 6%    ~     (p=0.867 n=8+7)
      XML              296ms ±16%        303ms ±13%    ~     (p=0.574 n=8+8)
      
      name       old alloc/op      new alloc/op      delta
      Template        35.4MB ± 0%       35.4MB ± 0%  -0.03%  (p=0.021 n=8+8)
      Unicode         29.2MB ± 0%       29.2MB ± 0%    ~     (p=0.645 n=8+8)
      GoTypes          123MB ± 0%        123MB ± 0%  -0.02%  (p=0.001 n=7+8)
      Compiler         514MB ± 0%        514MB ± 0%    ~     (p=0.336 n=8+7)
      SSA             1.94GB ± 0%       1.94GB ± 0%  -0.00%  (p=0.004 n=8+7)
      Flate           24.5MB ± 0%       24.5MB ± 0%  -0.03%  (p=0.015 n=8+8)
      GoParser        28.7MB ± 0%       28.7MB ± 0%    ~     (p=0.279 n=8+8)
      Reflect         87.4MB ± 0%       87.4MB ± 0%  -0.02%  (p=0.000 n=8+8)
      Tar             35.2MB ± 0%       35.2MB ± 0%  -0.02%  (p=0.007 n=8+8)
      XML             47.4MB ± 0%       47.4MB ± 0%    ~     (p=0.083 n=8+8)
      
      name       old allocs/op     new allocs/op     delta
      Template          348k ± 0%         348k ± 0%  -0.15%  (p=0.000 n=8+8)
      Unicode           339k ± 0%         339k ± 0%    ~     (p=0.195 n=8+8)
      GoTypes          1.28M ± 0%        1.27M ± 0%  -0.20%  (p=0.000 n=8+8)
      Compiler         4.88M ± 0%        4.88M ± 0%  -0.15%  (p=0.000 n=8+8)
      SSA              15.2M ± 0%        15.2M ± 0%  -0.02%  (p=0.000 n=8+7)
      Flate             234k ± 0%         233k ± 0%  -0.34%  (p=0.000 n=8+8)
      GoParser          291k ± 0%         291k ± 0%  -0.13%  (p=0.000 n=8+8)
      Reflect          1.05M ± 0%        1.05M ± 0%  -0.20%  (p=0.000 n=8+8)
      Tar               344k ± 0%         343k ± 0%  -0.22%  (p=0.000 n=8+8)
      XML               430k ± 0%         429k ± 0%  -0.24%  (p=0.000 n=8+8)
      
      Change-Id: I0044b99079ef211003325a7f136e35b55cc5cb74
      Reviewed-on: https://go-review.googlesource.com/c/143638Reviewed-by: default avatarKeith Randall <khr@golang.org>
      72f099c3
    • Clément Chigot's avatar
      net: fix TestInterfaceMulticastAddrs for AIX · e850b375
      Clément Chigot authored
      This commit disables checkMulticastStats for AIX operating system.
      
      Change-Id: If8d0fb609a0dcf75b7bb5c3871cfb6fad76a0a92
      Reviewed-on: https://go-review.googlesource.com/c/144102
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      e850b375
    • diplozoon's avatar
      cmd/go: remove unnecessary else conditions · 0d656934
      diplozoon authored
      Fixes golint warning about "if block ends with a return statement, so drop this else and outdent its block".
      
      Change-Id: I6fc8724f586efcb6e2ed92ee36be421d3e9a8c80
      Reviewed-on: https://go-review.googlesource.com/c/144137Reviewed-by: default avatarRalph Corderoy <ralph@inputplus.co.uk>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      0d656934
    • Hana Kim's avatar
      cmd/go/internal/modload: fix use of //go:linkname · c9bc1340
      Hana Kim authored
      I can't find the exact rule about space before compiler directive
      openings from
      https://golang.org/cmd/compile/#hdr-Compiler_Directives
      but it seems like the compiler doesn't recognize it
      as a compiler directive if it is preceded by space.
      Removing the space made the //go:linkname in the __gomod__.go file
      working as intended.
      
      Manually tested.
      
      Update #26404
      
      Change-Id: I589f7203a628b2fa6238d82878029e0f098091b6
      Reviewed-on: https://go-review.googlesource.com/c/143977Reviewed-by: default avatarBryan C. Mills <bcmills@google.com>
      Run-TryBot: Bryan C. Mills <bcmills@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      c9bc1340
    • Clément Chigot's avatar
      cmd/link: add new loading package for XCOFF files · b171b281
      Clément Chigot authored
      This commit adds the new package cmd/link/internal/loadxcoff.
      
      It also adds a new symbol kind in cmd/link/internal/sym package, which
      aims to represent TOC entries for XCOFF files.
      
      cmd/dist is updated to add this new package and cmd/internal/xcoff during
      the bootstrap.
      
      Updates: #25893
      
      Change-Id: I42b6578cf0ba4cc28ad4aa98122a91ab1d1bbf6e
      Reviewed-on: https://go-review.googlesource.com/c/138728
      Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      b171b281
    • Peter Weinberger's avatar
      internal/traceparser: provide parser that uses less space and parses segments... · daaf361f
      Peter Weinberger authored
      internal/traceparser: provide parser that uses less space and parses segments of runtime trace files
      
      Traceparser generally takes 20-30% less space than internal/trace. The only
      user of these pakcages is cmd/trace, and the new package lets it handle some
      trace files that were too large. The new parser will also convert segments
      of the raw trace file (e.g. the last 10 seconds) to Events. Trace files from
      go 1.8 and before are not supported.
      
      Change-Id: If83fa183246db8f75182ccd3ba8df07673c0ebd0
      Reviewed-on: https://go-review.googlesource.com/c/137635
      Run-TryBot: Peter Weinberger <pjw@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarHyang-Ah Hana Kim <hyangah@gmail.com>
      daaf361f
    • Iskander Sharipov's avatar
      cmd/compile/internal/gc: remove dead code from stringtoarraylit · 5ddb2091
      Iskander Sharipov authored
      The code path for []byte is unused.
      Rename function to stringtoruneslit to reflect change in the behavior.
      
      Note that removed code had a bug in it,
      it used [0] index instead of [i] inside a loop body.
      
      Change-Id: I58ece5d9d3835887b014446f8a7d3e7fc2fdcaa3
      Reviewed-on: https://go-review.googlesource.com/c/125796
      Run-TryBot: Iskander Sharipov <iskander.sharipov@intel.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      5ddb2091
    • Martin Möhrmann's avatar
      runtime: use multiplication with overflow check for makeslice · 05166bf5
      Martin Möhrmann authored
      This improves performance for slices with an element size larger
      than 32 bytes and removes loading a value from the maxElems
      array for smaller element sizes.
      
      name                 old time/op  new time/op  delta
      MakeSlice/Byte       18.0ns ± 4%  18.0ns ± 2%     ~     (p=0.575 n=20+17)
      MakeSlice/Int16      21.8ns ± 2%  21.6ns ± 1%   -0.63%  (p=0.035 n=20+19)
      MakeSlice/Int        42.0ns ± 2%  41.6ns ± 1%     ~     (p=0.121 n=20+18)
      MakeSlice/Ptr        62.6ns ± 2%  62.4ns ± 2%     ~     (p=0.491 n=20+18)
      MakeSlice/Struct/24  57.4ns ± 3%  56.0ns ± 2%   -2.40%  (p=0.000 n=19+19)
      MakeSlice/Struct/32  62.1ns ± 2%  60.6ns ± 3%   -2.43%  (p=0.000 n=20+20)
      MakeSlice/Struct/40  77.3ns ± 3%  68.9ns ± 3%  -10.91%  (p=0.000 n=20+20)
      
      Updates #21588
      
      Change-Id: Ie12807bf8f77c0e15453413f47e3d7de771b798f
      Reviewed-on: https://go-review.googlesource.com/c/142377
      Run-TryBot: Martin Möhrmann <martisch@uos.de>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      05166bf5
    • Martin Möhrmann's avatar
      runtime: use multiplication with overflow check for growslice · 3b091bf6
      Martin Möhrmann authored
      This improves performance for slices with an element size larger
      than 32 bytes and removes loading a value from the maxElems
      array for smaller element sizes.
      
      name                 old time/op  new time/op  delta
      GrowSlice/Byte       41.4ns ± 2%  41.5ns ± 1%    ~     (p=0.366 n=10+9)
      GrowSlice/Int16      51.1ns ± 2%  51.0ns ± 2%    ~     (p=0.985 n=10+10)
      GrowSlice/Int        64.0ns ± 1%  64.2ns ± 1%    ~     (p=0.180 n=10+10)
      GrowSlice/Ptr        90.8ns ± 1%  90.7ns ± 1%    ~     (p=0.858 n=9+10)
      GrowSlice/Struct/24   108ns ± 0%   108ns ± 2%    ~     (p=0.488 n=8+9)
      GrowSlice/Struct/32   118ns ± 2%   117ns ± 2%    ~     (p=0.327 n=10+10)
      GrowSlice/Struct/40   159ns ± 1%   148ns ± 1%  -6.87%  (p=0.000 n=10+9)
      
      Updates #21588
      
      Change-Id: I443b82972d379b1befa791f9ee468b3adc6bb760
      Reviewed-on: https://go-review.googlesource.com/c/143798
      Run-TryBot: Martin Möhrmann <martisch@uos.de>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      3b091bf6
    • Martin Möhrmann's avatar
      runtime: use multiplication with overflow check for makemap · e85b8db6
      Martin Möhrmann authored
      This improves performance for maps with a bucket size
      (key+value*8 bytes) larger than 32 bytes and removes loading
      a value from the maxElems array for smaller bucket sizes.
      
      name                old time/op  new time/op  delta
      MakeMap/[Byte]Byte  93.5ns ± 1%  91.8ns ± 1%  -1.83%  (p=0.000 n=10+10)
      MakeMap/[Int]Int     134ns ± 1%   127ns ± 2%  -5.61%  (p=0.000 n=9+10)
      
      Updates #21588
      
      Change-Id: I53f77186769c4bd0f2b90f3c6c17df643b060e39
      Reviewed-on: https://go-review.googlesource.com/c/143797
      Run-TryBot: Martin Möhrmann <martisch@uos.de>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      e85b8db6
    • Clément Chigot's avatar
      internal/syscall/unix, net: improve interface_aix.go · 93eded02
      Clément Chigot authored
      This commit improves the interface_aix.go file, based on feedbacks about
      CL 138724.
      
      To retrieve MTU, ioctl is needed. It's implemented inside
      internal/syscall/unix.
      
      Change-Id: Ic583d26b93935a32a5f1eb5a2170b86e80a4a85e
      Reviewed-on: https://go-review.googlesource.com/c/142157
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      93eded02
    • ChrisALiles's avatar
      cmd/compile: use proved bounds to remove signed division fix-ups · 13d5cd78
      ChrisALiles authored
      prove is able to find 94 occurrences in std cmd where a divisor
      can't have the value -1. The change removes
      the extraneous fix-up code for these cases.
      
      Fixes #25239
      
      Change-Id: Ic184de971f47cc57c702eb72805b8e291c14035d
      Reviewed-on: https://go-review.googlesource.com/c/130215
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      13d5cd78
    • Ian Lance Taylor's avatar
      cmd/dist: copy cmd/internal/xcoff to bootstrap directory · 47cc59f3
      Ian Lance Taylor authored
      Fixes build.
      
      Change-Id: Id3d78ae9e4669371b4ebf29f69217d0809ffb829
      Reviewed-on: https://go-review.googlesource.com/c/143917
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      47cc59f3
    • Alexandre Maari's avatar
      text/template: removed truncation of context in error message · 0cc4c297
      Alexandre Maari authored
      Fixes #27930
      
      Change-Id: I31ad3fdb74d74152268c59ae4c651cc4c8c1716d
      Reviewed-on: https://go-review.googlesource.com/c/142217Reviewed-by: default avatarRob Pike <r@golang.org>
      Run-TryBot: Rob Pike <r@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      0cc4c297
  2. 22 Oct, 2018 14 commits
    • Ian Lance Taylor's avatar
      cmd/go: update private copy of goosList · cc558fed
      Ian Lance Taylor authored
      This copies the change to goosList in CL 138115 to the private copy in
      cmd/go.
      
      The change introducing the private copy was apparently not made with
      Gerrit, but can be seen at
      https://github.com/golang/vgo/commit/08359e782fb601567c57f56beb540841c2416d92.
      That change says "This is adapted from code in go/build and the rest
      of cmd/go. At some point, we should deduplicate them."
      
      Doing another copy for now, rather than something more complex
      involving cmd/dist, pending that deduplication.
      
      Change-Id: I9b6e1f63a3a68c002b60a9a97aa367c5cc7801c9
      Reviewed-on: https://go-review.googlesource.com/c/143759
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBryan C. Mills <bcmills@google.com>
      cc558fed
    • Clément Chigot's avatar
      cmd/cgo: add AIX operating system · ce4ef9ad
      Clément Chigot authored
      This commit adds AIX operating system to cmd/cgo package for ppc64
      architecture.
      
      It doesn't fully adapt cgo tool to AIX. But it allows to use
      go tool cgo -godefs which is really usefull for others packages.
      
      Update: #25893
      
      Change-Id: I38e289cf0122d143ba100986d08229b51b03ddfc
      Reviewed-on: https://go-review.googlesource.com/c/138731
      Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      ce4ef9ad
    • Rob Pike's avatar
      encoding/gob: delete out of memory test · 956af978
      Rob Pike authored
      Now that the library allows much larger data, it can kill
      machines with less memory.
      
      Fixes #28321
      
      Change-Id: I98e1a5fdf812fd75adfb22bf01542423de405fe2
      Reviewed-on: https://go-review.googlesource.com/c/143817Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      Reviewed-by: default avatarDmitri Shuralyov <dmitshur@golang.org>
      956af978
    • Robert Griesemer's avatar
      go/types: report error for invalid use of ... in parameter lists · 553237aa
      Robert Griesemer authored
      The parser accepts ...T types in parameter lists whereever a type
      is permitted; this matches the syntax and allows for more tolerant
      parsing and error recovery.
      
      go/types on the other hand assumed that the parser would report
      those errors and assumed any outstanding such errors would be due
      to otherwise manipulated ASTs leading to invalid ASTs.
      
      go/types further assumed that a parameter list (a, b, c ...int)
      was permitted (a couple of tests used such parameter lists).
      
      With this CL, go/types now correctly refuses invalid parameter lists.
      
      Fixes #28281.
      
      Change-Id: Ib788255f7b7819fdb972c7801bb153a53ce2ddf7
      Reviewed-on: https://go-review.googlesource.com/c/143857
      Run-TryBot: Robert Griesemer <gri@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarAlan Donovan <adonovan@google.com>
      553237aa
    • Clément Chigot's avatar
      cmd/go: add AIX operating system · 9258c3f9
      Clément Chigot authored
      This commit adds AIX operating system to cmd/go package for ppc64
      architecture.
      
      Updates: #25893
      
      Change-Id: I2605d10a7833fa2eb197f6db4a52d5919cf93614
      Reviewed-on: https://go-review.googlesource.com/c/138732
      Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      9258c3f9
    • Genevieve Luyt's avatar
      doc: use the new log functions · b917bdd3
      Genevieve Luyt authored
      The log interface was changed in https://golang.org/cl/2419042.
      
      Change-Id: I3eaddd8a5cfcae961db16555fb1b0ce6770b6334
      Reviewed-on: https://go-review.googlesource.com/c/143777Reviewed-by: default avatarRob Pike <r@golang.org>
      b917bdd3
    • Robert Griesemer's avatar
      cmd/compile: s/eqtype/types.Identical/ (fix build) · ddf83eeb
      Robert Griesemer authored
      TBR=khr
      
      Change-Id: Ia5a08f1acd9f37c466829754990733330264f546
      Reviewed-on: https://go-review.googlesource.com/c/143758Reviewed-by: default avatarRobert Griesemer <gri@golang.org>
      ddf83eeb
    • Robert Griesemer's avatar
      go/types: copy embedded methods unchanged when completing interfaces · e9b39417
      Robert Griesemer authored
      The existing code adjusted the receivers of embedded interface methods
      to match the embedding interface type. That required cloning (shallow
      copying) the embedded methods and destroyed their object identity in
      the process. Don't do this anymore. The consequence to clients is that
      they might see different methods of an interface having different
      receiver types; they are always the type of the interface that explicitly
      declared the method (which is what one usually would want, anyway).
      
      Fixes #28282.
      
      Change-Id: I2e6f1497f46affdf7510547a64601de3787367db
      Reviewed-on: https://go-review.googlesource.com/c/143757Reviewed-by: default avatarAlan Donovan <adonovan@google.com>
      e9b39417
    • Alessandro Arzilli's avatar
      cmd/compile,cmd/link: remove statictmp variables from symbol table. · ffbf479a
      Alessandro Arzilli authored
      Removes statictmp variables from debug_info and the final symbol table.
      
      Fixes #27800
      
      Change-Id: I302c59a04bc3f460e7085fef241f937bbf30421d
      Reviewed-on: https://go-review.googlesource.com/c/142577
      Run-TryBot: Alessandro Arzilli <alessandro.arzilli@gmail.com>
      Run-TryBot: Heschi Kreinick <heschi@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarHeschi Kreinick <heschi@google.com>
      ffbf479a
    • Keith Randall's avatar
      cmd/compile: in append(f()), type convert appended items · dca769dc
      Keith Randall authored
      The second and subsequent return values from f() need to be
      converted to the element type of the first return value from f()
      (which must be a slice).
      
      Fixes #22327
      
      Change-Id: I5c0a424812c82c1b95b6d124c5626cfc4408bdb6
      Reviewed-on: https://go-review.googlesource.com/c/142718Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      dca769dc
    • fanzha02's avatar
      cmd/internal/obj/arm64: reclassify 32-bit/64-bit constants · 86ce1cb0
      fanzha02 authored
      Current assembler saves constants in Offset which type is int64,
      causing 32-bit constants have a incorrect class. This CL reclassifies
      constants when opcodes are 32-bit variant, like MOVW, ANDW and
      ADDW, etc. Besides, this CL encodes some constants of ADDCON class
      as MOVs instructions.
      
      This CL changes the assembler behavior as follows.
      
      1. go assembler ADDW $MOVCON, Rn, Rd
         previous version: MOVD $MOVCON, Rtmp; ADDW Rtmp, Rn, Rd
         current version: MOVW $MOVCON, Rtmp; ADDW Rtmp, Rn, Rd
      
      2. go assembly MOVW $0xaaaaffff, R1
         previous version: treats $0xaaaaffff as VCON, encodes it as MOVW 0x994, R1 (loads it from pool).
         current version: treats $0xaaaaffff as MOVCON, and encodes it into MOVW instructions.
      
      3. go assembly MOVD $0x210000, R1
         previous version: treats $0x210000 as ADDCON, loads it from pool
         current version: treats $0x210000 as MOVCON, and encodes it into MOVD instructions.
      
      Add the test cases.
      
      1. Binary size before/after.
      binary                          size change
      pkg/linux_arm64                 -1.534KB
      pkg/tool/linux_arm64            -0.718KB
      go                              -0.32KB
      gofmt                           no change
      
      2. go1 benchmark result.
      name                     old time/op    new time/op    delta
      BinaryTree17-8              6.26s ± 1%     6.28s ± 1%     ~     (p=0.105 n=10+10)
      Fannkuch11-8                5.40s ± 0%     5.39s ± 0%   -0.29%  (p=0.028 n=9+10)
      FmtFprintfEmpty-8          94.5ns ± 0%    95.0ns ± 0%   +0.51%  (p=0.000 n=10+9)
      FmtFprintfString-8          163ns ± 1%     159ns ± 1%   -2.06%  (p=0.000 n=10+9)
      FmtFprintfInt-8             200ns ± 1%     196ns ± 1%   -1.99%  (p=0.000 n=9+10)
      FmtFprintfIntInt-8          292ns ± 3%     284ns ± 1%   -2.87%  (p=0.001 n=10+9)
      FmtFprintfPrefixedInt-8     422ns ± 1%     420ns ± 1%   -0.59%  (p=0.015 n=10+10)
      FmtFprintfFloat-8           458ns ± 0%     463ns ± 1%   +1.19%  (p=0.000 n=9+10)
      FmtManyArgs-8              1.37µs ± 1%    1.35µs ± 1%   -1.85%  (p=0.000 n=10+10)
      GobDecode-8                15.5ms ± 1%    15.3ms ± 1%   -1.82%  (p=0.000 n=10+10)
      GobEncode-8                11.7ms ± 5%    11.7ms ± 2%     ~     (p=0.549 n=10+9)
      Gzip-8                      622ms ± 0%     624ms ± 0%   +0.23%  (p=0.000 n=10+9)
      Gunzip-8                   73.6ms ± 0%    73.8ms ± 1%     ~     (p=0.077 n=9+9)
      HTTPClientServer-8          115µs ± 1%     115µs ± 1%     ~     (p=0.796 n=10+10)
      JSONEncode-8               31.1ms ± 2%    28.7ms ± 1%   -7.98%  (p=0.000 n=10+9)
      JSONDecode-8                145ms ± 0%     145ms ± 1%     ~     (p=0.447 n=9+10)
      Mandelbrot200-8            9.67ms ± 0%    9.60ms ± 0%   -0.76%  (p=0.000 n=9+9)
      GoParse-8                  7.56ms ± 1%    7.58ms ± 0%   +0.21%  (p=0.035 n=10+9)
      RegexpMatchEasy0_32-8       208ns ±10%     222ns ± 0%     ~     (p=0.531 n=10+6)
      RegexpMatchEasy0_1K-8       699ns ± 4%     694ns ± 4%     ~     (p=0.868 n=10+10)
      RegexpMatchEasy1_32-8       186ns ± 8%     190ns ±12%     ~     (p=0.955 n=10+10)
      RegexpMatchEasy1_1K-8      1.13µs ± 1%    1.05µs ± 2%   -6.64%  (p=0.000 n=10+10)
      RegexpMatchMedium_32-8      316ns ± 7%     288ns ± 1%   -8.68%  (p=0.000 n=10+7)
      RegexpMatchMedium_1K-8     90.2µs ± 0%    85.5µs ± 2%   -5.19%  (p=0.000 n=10+10)
      RegexpMatchHard_32-8       5.53µs ± 0%    3.90µs ± 0%  -29.52%  (p=0.000 n=10+10)
      RegexpMatchHard_1K-8        119µs ± 0%     124µs ± 0%   +4.29%  (p=0.000 n=9+10)
      Revcomp-8                   1.07s ± 0%     1.07s ± 0%     ~     (p=0.094 n=9+9)
      Template-8                  162ms ± 1%     160ms ± 2%     ~     (p=0.089 n=10+10)
      TimeParse-8                 756ns ± 2%     763ns ± 1%     ~     (p=0.158 n=10+10)
      TimeFormat-8                758ns ± 1%     746ns ± 1%   -1.52%  (p=0.000 n=10+10)
      
      name                     old speed      new speed      delta
      GobDecode-8              49.4MB/s ± 1%  50.3MB/s ± 1%   +1.84%  (p=0.000 n=10+10)
      GobEncode-8              65.6MB/s ± 5%  65.4MB/s ± 2%     ~     (p=0.549 n=10+9)
      Gzip-8                   31.2MB/s ± 0%  31.1MB/s ± 0%   -0.24%  (p=0.000 n=9+9)
      Gunzip-8                  264MB/s ± 0%   263MB/s ± 1%     ~     (p=0.073 n=9+9)
      JSONEncode-8             62.3MB/s ± 2%  67.7MB/s ± 1%   +8.67%  (p=0.000 n=10+9)
      JSONDecode-8             13.4MB/s ± 0%  13.4MB/s ± 1%     ~     (p=0.508 n=9+10)
      GoParse-8                7.66MB/s ± 1%  7.64MB/s ± 0%   -0.23%  (p=0.049 n=10+9)
      RegexpMatchEasy0_32-8     154MB/s ± 9%   143MB/s ± 3%     ~     (p=0.303 n=10+7)
      RegexpMatchEasy0_1K-8    1.46GB/s ± 4%  1.47GB/s ± 4%     ~     (p=0.912 n=10+10)
      RegexpMatchEasy1_32-8     172MB/s ± 9%   170MB/s ±12%     ~     (p=0.971 n=10+10)
      RegexpMatchEasy1_1K-8     908MB/s ± 1%   972MB/s ± 2%   +7.12%  (p=0.000 n=10+10)
      RegexpMatchMedium_32-8   3.17MB/s ± 7%  3.46MB/s ± 1%   +9.14%  (p=0.000 n=10+7)
      RegexpMatchMedium_1K-8   11.3MB/s ± 0%  12.0MB/s ± 2%   +5.51%  (p=0.000 n=10+10)
      RegexpMatchHard_32-8     5.78MB/s ± 0%  8.21MB/s ± 0%  +41.93%  (p=0.000 n=9+10)
      RegexpMatchHard_1K-8     8.62MB/s ± 0%  8.27MB/s ± 0%   -4.11%  (p=0.000 n=9+10)
      Revcomp-8                 237MB/s ± 0%   237MB/s ± 0%     ~     (p=0.081 n=9+9)
      Template-8               12.0MB/s ± 1%  12.1MB/s ± 2%     ~     (p=0.072 n=10+10)
      
      Change-Id: I080801f520366b42d5f9699954bd33106976a81b
      Reviewed-on: https://go-review.googlesource.com/c/120661
      Run-TryBot: Ben Shi <powerman1st@163.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      86ce1cb0
    • Carlos Eduardo Seo's avatar
      cmd/compile: intrinsify math/big.mulWW on ppc64x · 1e8ecefc
      Carlos Eduardo Seo authored
      This change implements mulWW as an intrinsic for ppc64x. Performance
      numbers below:
      
      name                            old time/op    new time/op    delta
      QuoRem                            4.54µs ±45%    3.22µs ± 0%  -29.22%  (p=0.029 n=4+4)
      ModSqrt225_Tonelli                 765µs ± 3%     757µs ± 0%   -1.02%  (p=0.029 n=4+4)
      ModSqrt225_3Mod4                   231µs ± 0%     231µs ± 0%   -0.10%  (p=0.029 n=4+4)
      ModSqrt231_Tonelli                 789µs ± 0%     788µs ± 0%   -0.14%  (p=0.029 n=4+4)
      ModSqrt231_5Mod8                   267µs ± 0%     267µs ± 0%   -0.13%  (p=0.029 n=4+4)
      Sqrt                              49.5µs ±17%    45.3µs ± 0%   -8.48%  (p=0.029 n=4+4)
      IntSqr/1                          32.2ns ±22%    24.2ns ± 0%  -24.79%  (p=0.029 n=4+4)
      IntSqr/2                          60.6ns ± 0%    60.9ns ± 0%   +0.50%  (p=0.029 n=4+4)
      IntSqr/3                          82.8ns ± 0%    83.3ns ± 0%   +0.51%  (p=0.029 n=4+4)
      IntSqr/5                           122ns ± 0%     121ns ± 0%   -1.22%  (p=0.029 n=4+4)
      IntSqr/8                           227ns ± 0%     226ns ± 0%   -0.44%  (p=0.029 n=4+4)
      IntSqr/10                          300ns ± 0%     298ns ± 0%   -0.67%  (p=0.029 n=4+4)
      IntSqr/20                         1.02µs ± 0%    0.89µs ± 0%  -13.08%  (p=0.029 n=4+4)
      IntSqr/30                         1.73µs ± 0%    1.51µs ± 0%  -12.73%  (p=0.029 n=4+4)
      IntSqr/50                         3.69µs ± 1%    3.29µs ± 0%  -10.70%  (p=0.029 n=4+4)
      IntSqr/80                         7.64µs ± 0%    7.04µs ± 0%   -7.91%  (p=0.029 n=4+4)
      IntSqr/100                        11.1µs ± 0%    10.3µs ± 0%   -7.04%  (p=0.029 n=4+4)
      IntSqr/200                        37.9µs ± 0%    36.4µs ± 0%   -4.13%  (p=0.029 n=4+4)
      IntSqr/300                        69.4µs ± 0%    66.0µs ± 0%   -4.94%  (p=0.029 n=4+4)
      IntSqr/500                         174µs ± 0%     168µs ± 0%   -3.10%  (p=0.029 n=4+4)
      IntSqr/800                         347µs ± 0%     333µs ± 0%   -4.06%  (p=0.029 n=4+4)
      IntSqr/1000                        524µs ± 0%     507µs ± 0%   -3.21%  (p=0.029 n=4+4)
      
      Change-Id: If067452f5b6579ad3a2e9daa76a7ffe6fceae1bb
      Reviewed-on: https://go-review.googlesource.com/c/143217
      Run-TryBot: Giovanni Bajo <rasky@develer.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarGiovanni Bajo <rasky@develer.com>
      1e8ecefc
    • Rob Pike's avatar
      encoding/gob: increase "tooBig" from 1GB to 8GB on 64-bit machines · 3bf9b77c
      Rob Pike authored
      A little shift magic makes it easy to adjust the maximum buffer
      size on machines with larger integers.
      
      Fixes #27635
      
      Change-Id: I1f26b07a363fbb9730df2377052475fa88bbb781
      Reviewed-on: https://go-review.googlesource.com/c/143678
      Run-TryBot: Rob Pike <r@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      3bf9b77c
    • Rob Pike's avatar
      doc: tweak example in Effective Go · 7c2718b1
      Rob Pike authored
      A prior attempt at addressing the issue got bogged down in an
      endless conversation around the subtleties of Read semantics.
      Let's not go there.
      
      Instead, we put the issue to bed, perhaps not in perfect comfort
      but well enough, by moving a line of the example so that even
      if there is a "benign" error as the issue suggests, the loop
      terminates with n and err correctly set.
      
      Fixes #27818
      
      Change-Id: I4a32d56c9e782f17578565d90b22ce531e3d8667
      Reviewed-on: https://go-review.googlesource.com/c/143677Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      7c2718b1
  3. 21 Oct, 2018 1 commit
  4. 20 Oct, 2018 2 commits
  5. 19 Oct, 2018 2 commits
    • Robert Griesemer's avatar
      go/types: temporarily disable a verification in Stdlib test · 2e886891
      Robert Griesemer authored
      Keeps the longtest builder green for now.
      Proper fix to come ASAP.
      
      Also, reword an internal comment that could easily be misread.
      
      Updates #28282.
      
      Change-Id: I8f41c9faa5a3eb638e6204bae3ff374ed49e5177
      Reviewed-on: https://go-review.googlesource.com/c/143478
      Run-TryBot: Robert Griesemer <gri@golang.org>
      Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      2e886891
    • Josh Bleecher Snyder's avatar
      cmd/compile: move argument stack construction to SSA generation · 2578ac54
      Josh Bleecher Snyder authored
      The goal of this change is to move work from walk to SSA,
      and simplify things along the way.
      
      This is hard to accomplish cleanly with small incremental changes,
      so this large commit message aims to provide a roadmap to the diff.
      
      High level description:
      
      Prior to this change, walk was responsible for constructing (most of) the stack for function calls.
      ascompatte gathered variadic arguments into a slice.
      It also rewrote n.List from a list of arguments to a list of assignments to stack slots.
      ascompatte was called multiple times to handle the receiver in a method call.
      reorder1 then introduced temporaries into n.List as needed to avoid smashing the stack.
      adjustargs then made extra stack space for go/defer args as needed.
      
      Node to SSA construction evaluated all the statements in n.List,
      and issued the function call, assuming that the stack was correctly constructed.
      Intrinsic calls had to dig around inside n.List to extract the arguments,
      since intrinsics don't use the stack to make function calls.
      
      This change moves stack construction to the SSA construction phase.
      ascompatte, now called walkParams, does all the work that ascompatte and reorder1 did.
      It handles variadic arguments, inserts the method receiver if needed, and allocates temporaries.
      It does not, however, make any assignments to stack slots.
      Instead, it moves the function arguments to n.Rlist, leaving assignments to temporaries in n.List.
      (It would be better to use Ninit instead of List; future work.)
      During SSA construction, after doing all the temporary assignments in n.List,
      the function arguments are assigned to stack slots by
      constructing the appropriate SSA Value, using (*state).storeArg.
      SSA construction also now handles adjustments for go/defer args.
      This change also simplifies intrinsic calls, since we no longer need to undo walk's work.
      
      Along the way, we simplify nodarg by pushing the fp==1 case to its callers, where it fits nicely.
      
      Generated code differences:
      
      There were a few optimizations applied along the way, the old way.
      f(g()) was rewritten to do a block copy of function results to function arguments.
      And reorder1 avoided introducing the final "save the stack" temporary in n.List.
      
      The f(g()) block copy optimization never actually triggered; the order pass rewrote away g(), so that has been removed.
      
      SSA optimizations mostly obviated the need for reorder1's optimization of avoiding the final temporary.
      The exception was when the temporary's type was not SSA-able;
      in that case, we got a Move into an autotmp and then an immediate Move onto the stack,
      with the autotmp never read or used again.
      This change introduces a new rewrite rule to detect such pointless double Moves
      and collapse them into a single Move.
      This is actually more powerful than the original optimization,
      since the original optimization relied on the imprecise Node.HasCall calculation.
      
      The other significant difference in the generated code is that the stack is now constructed
      completely in SP-offset order. Prior to this change, the stack was constructed somewhat
      haphazardly: first the final argument that Node.HasCall deemed to require a temporary,
      then other arguments, then the method receiver, then the defer/go args.
      SP-offset is probably a good default order. See future work.
      
      There are a few minor object file size changes as a result of this change.
      I investigated some regressions in early versions of this change.
      
      One regression (in archive/tar) was the addition of a single CMPQ instruction,
      which would be eliminated were this TODO from flagalloc to be done:
      	// TODO: Remove original instructions if they are never used.
      
      One regression (in text/template) was an ADDQconstmodify that is now
      a regular MOVQLoad+ADDQconst+MOVQStore, due to an unlucky change
      in the order in which arguments are written. The argument change
      order can also now be luckier, so this appears to be a wash.
      
      All in all, though there will be minor winners and losers,
      this change appears to be performance neutral.
      
      Future work:
      
      Move loading the result of function calls to SSA construction; eliminate OINDREGSP.
      
      Consider pushing stack construction deeper into SSA world, perhaps in an arch-specific pass.
      Among other benefits, this would make it easier to transition to a new calling convention.
      This would require rethinking the handling of stack conflicts and is non-trivial.
      
      Figure out some clean way to indicate that stack construction Stores/Moves
      do not alias each other, so that subsequent passes may do things like
      CSE+tighten shared stack setup, do DSE using non-first Stores, etc.
      This would allow us to eliminate the minor text/template regression.
      
      Possibly make assignments to stack slots not treated as statements by DWARF.
      
      Compiler benchmarks:
      
      name        old time/op       new time/op       delta
      Template          182ms ± 2%        179ms ± 2%  -1.69%  (p=0.000 n=47+48)
      Unicode          86.3ms ± 5%       85.1ms ± 4%  -1.36%  (p=0.001 n=50+50)
      GoTypes           646ms ± 1%        642ms ± 1%  -0.63%  (p=0.000 n=49+48)
      Compiler          2.89s ± 1%        2.86s ± 2%  -1.36%  (p=0.000 n=48+50)
      SSA               8.47s ± 1%        8.37s ± 2%  -1.22%  (p=0.000 n=47+50)
      Flate             122ms ± 2%        121ms ± 2%  -0.66%  (p=0.000 n=47+45)
      GoParser          147ms ± 2%        146ms ± 2%  -0.53%  (p=0.006 n=46+49)
      Reflect           406ms ± 2%        403ms ± 2%  -0.76%  (p=0.000 n=48+43)
      Tar               162ms ± 3%        162ms ± 4%    ~     (p=0.191 n=46+50)
      XML               223ms ± 2%        222ms ± 2%  -0.37%  (p=0.031 n=45+49)
      [Geo mean]        382ms             378ms       -0.89%
      
      name        old user-time/op  new user-time/op  delta
      Template          219ms ± 3%        216ms ± 3%  -1.56%  (p=0.000 n=50+48)
      Unicode           109ms ± 6%        109ms ± 5%    ~     (p=0.190 n=50+49)
      GoTypes           836ms ± 2%        828ms ± 2%  -0.96%  (p=0.000 n=49+48)
      Compiler          3.87s ± 2%        3.80s ± 1%  -1.81%  (p=0.000 n=49+46)
      SSA               12.0s ± 1%        11.8s ± 1%  -2.01%  (p=0.000 n=48+50)
      Flate             142ms ± 3%        141ms ± 3%  -0.85%  (p=0.003 n=50+48)
      GoParser          178ms ± 4%        175ms ± 4%  -1.66%  (p=0.000 n=48+46)
      Reflect           520ms ± 2%        512ms ± 2%  -1.44%  (p=0.000 n=45+48)
      Tar               200ms ± 3%        198ms ± 4%  -0.61%  (p=0.037 n=47+50)
      XML               277ms ± 3%        275ms ± 3%  -0.85%  (p=0.000 n=49+48)
      [Geo mean]        482ms             476ms       -1.23%
      
      name        old alloc/op      new alloc/op      delta
      Template         36.1MB ± 0%       35.3MB ± 0%  -2.18%  (p=0.008 n=5+5)
      Unicode          29.8MB ± 0%       29.3MB ± 0%  -1.58%  (p=0.008 n=5+5)
      GoTypes           125MB ± 0%        123MB ± 0%  -2.13%  (p=0.008 n=5+5)
      Compiler          531MB ± 0%        513MB ± 0%  -3.40%  (p=0.008 n=5+5)
      SSA              2.00GB ± 0%       1.93GB ± 0%  -3.34%  (p=0.008 n=5+5)
      Flate            24.5MB ± 0%       24.3MB ± 0%  -1.18%  (p=0.008 n=5+5)
      GoParser         29.4MB ± 0%       28.7MB ± 0%  -2.34%  (p=0.008 n=5+5)
      Reflect          87.1MB ± 0%       86.0MB ± 0%  -1.33%  (p=0.008 n=5+5)
      Tar              35.3MB ± 0%       34.8MB ± 0%  -1.44%  (p=0.008 n=5+5)
      XML              47.9MB ± 0%       47.1MB ± 0%  -1.86%  (p=0.008 n=5+5)
      [Geo mean]       82.8MB            81.1MB       -2.08%
      
      name        old allocs/op     new allocs/op     delta
      Template           352k ± 0%         347k ± 0%  -1.32%  (p=0.008 n=5+5)
      Unicode            342k ± 0%         339k ± 0%  -0.66%  (p=0.008 n=5+5)
      GoTypes           1.29M ± 0%        1.27M ± 0%  -1.30%  (p=0.008 n=5+5)
      Compiler          4.98M ± 0%        4.87M ± 0%  -2.14%  (p=0.008 n=5+5)
      SSA               15.7M ± 0%        15.2M ± 0%  -2.86%  (p=0.008 n=5+5)
      Flate              233k ± 0%         231k ± 0%  -0.83%  (p=0.008 n=5+5)
      GoParser           296k ± 0%         291k ± 0%  -1.54%  (p=0.016 n=5+4)
      Reflect           1.05M ± 0%        1.04M ± 0%  -0.65%  (p=0.008 n=5+5)
      Tar                343k ± 0%         339k ± 0%  -0.97%  (p=0.008 n=5+5)
      XML                432k ± 0%         426k ± 0%  -1.19%  (p=0.008 n=5+5)
      [Geo mean]         815k              804k       -1.35%
      
      name        old object-bytes  new object-bytes  delta
      Template          505kB ± 0%        505kB ± 0%  -0.01%  (p=0.008 n=5+5)
      Unicode           224kB ± 0%        224kB ± 0%    ~     (all equal)
      GoTypes          1.82MB ± 0%       1.83MB ± 0%  +0.06%  (p=0.008 n=5+5)
      Flate             324kB ± 0%        324kB ± 0%  +0.00%  (p=0.008 n=5+5)
      GoParser          402kB ± 0%        402kB ± 0%  +0.04%  (p=0.008 n=5+5)
      Reflect          1.39MB ± 0%       1.39MB ± 0%  -0.01%  (p=0.008 n=5+5)
      Tar               449kB ± 0%        449kB ± 0%  -0.02%  (p=0.008 n=5+5)
      XML               598kB ± 0%        597kB ± 0%  -0.05%  (p=0.008 n=5+5)
      
      Change-Id: Ifc9d5c1bd01f90171414b8fb18ffe2290d271143
      Reviewed-on: https://go-review.googlesource.com/c/114797
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarDavid Chase <drchase@google.com>
      Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      2578ac54