1. 08 May, 2018 12 commits
    • Richard Miller's avatar
      syscall: eliminate aliasing of syscall error strings in Plan 9 · 1b494876
      Richard Miller authored
      To avoid allocation between entersyscall and exitsyscall in Plan 9,
      syscall error strings retrieved from the OS were being stored in
      a shared buffer for each M, leading to overwriting of error strings
      by subsequent syscalls, and potential confusion if exitsyscall
      switched to a different M.  Instead, the error string is now
      retrieved to the G stack and then copied to a new allocated array
      after exitsyscall.
      
      A new test TestPlan9Syserr is provided to confirm the correction.
      
      Fixes #13770
      Fixes #24921
      
      Change-Id: I013c4a42baae80d03a5b61d828396527189f5551
      Reviewed-on: https://go-review.googlesource.com/111195Reviewed-by: 's avatarDavid du Colombier <0intro@gmail.com>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: David du Colombier <0intro@gmail.com>
      1b494876
    • Tobias Klauser's avatar
      debug/elf: add machine and OSABI constants · d148cbe1
      Tobias Klauser authored
      Provide a complete list of EM_* and ELFOSABI_* constants.
      
      Compiled from the tables at
      http://www.sco.com/developers/gabi/latest/ch4.eheader.html
      and llvm/BinaryFormat/ELF.h from LLVM.
      
      Change-Id: Ice1e1476076fafdb8bb8af848caec6d80a82c452
      Reviewed-on: https://go-review.googlesource.com/112115
      Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      d148cbe1
    • Joe Kyo's avatar
      encoding/binary: returns length of bool slice in intDataSize · 5188b4de
      Joe Kyo authored
      intDataSize should return length of bool slice, so functions
      Read and Write can use the fast path to process bool slice.
      
      Change-Id: I8cd275e3ffea82024850662d86caca64bd91bf70
      Reviewed-on: https://go-review.googlesource.com/112135Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      5188b4de
    • Tobias Klauser's avatar
      cmd/compile: use nodl in zeroResults · 6428c892
      Tobias Klauser authored
      Use nodl instead of nod to avoid setting and resetting lineo.
      
      Passes toolstash-check.
      
      Updates #19683
      
      Change-Id: I6a47a7ba43a11352767029eced29f08dff8501a2
      Reviewed-on: https://go-review.googlesource.com/100335
      Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarJosh Bleecher Snyder <josharian@gmail.com>
      6428c892
    • Richard Musiol's avatar
      math, math/big: add wasm architecture · b00f72e0
      Richard Musiol authored
      This commit adds the wasm architecture to the math package.
      
      Updates #18892
      
      Change-Id: I5cc38552a31b193d35fb81ae87600a76b8b9e9b5
      Reviewed-on: https://go-review.googlesource.com/106996Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
      b00f72e0
    • Richard Musiol's avatar
      internal/bytealg: add wasm architecture · b382fe28
      Richard Musiol authored
      This commit adds the wasm architecture to the internal/bytealg package.
      
      Some parts of the assembly code have been extracted from WebAssembly
      bytecode generated with Emscripten (which uses musl libc).
      
      Updates #18892
      
      Change-Id: Iba7f7158356b816c9ad03ca9223903a41a024da6
      Reviewed-on: https://go-review.googlesource.com/103915Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      b382fe28
    • Lynn Boger's avatar
      cmd/compile,test: combine byte loads and stores on ppc64le · 28edaf45
      Lynn Boger authored
      CL 74410 added rules to combine consecutive byte loads and
      stores when the byte order was little endian for ppc64le. This
      is the corresponding change for bytes that are in big endian order.
      These rules are all intended for a little endian target arch.
      
      This adds new testcases in test/codegen/memcombine.go
      
      Fixes #22496
      Updates #24242
      
      Benchmark improvement for encoding/binary:
      name                      old time/op    new time/op    delta
      ReadSlice1000Int32s-16      11.0µs ± 0%     9.0µs ± 0%  -17.47%  (p=0.029 n=4+4)
      ReadStruct-16               2.47µs ± 1%    2.48µs ± 0%   +0.67%  (p=0.114 n=4+4)
      ReadInts-16                  642ns ± 1%     630ns ± 1%   -2.02%  (p=0.029 n=4+4)
      WriteInts-16                 654ns ± 0%     653ns ± 1%   -0.08%  (p=0.629 n=4+4)
      WriteSlice1000Int32s-16     8.75µs ± 0%    8.20µs ± 0%   -6.19%  (p=0.029 n=4+4)
      PutUint16-16                1.16ns ± 0%    0.93ns ± 0%  -19.83%  (p=0.029 n=4+4)
      PutUint32-16                1.16ns ± 0%    0.93ns ± 0%  -19.83%  (p=0.029 n=4+4)
      PutUint64-16                1.85ns ± 0%    0.93ns ± 0%  -49.73%  (p=0.029 n=4+4)
      LittleEndianPutUint16-16    1.03ns ± 0%    0.93ns ± 0%   -9.71%  (p=0.029 n=4+4)
      LittleEndianPutUint32-16    0.93ns ± 0%    0.93ns ± 0%     ~     (all equal)
      LittleEndianPutUint64-16    0.93ns ± 0%    0.93ns ± 0%     ~     (all equal)
      PutUvarint32-16             43.0ns ± 0%    43.1ns ± 0%   +0.12%  (p=0.429 n=4+4)
      PutUvarint64-16              174ns ± 0%     175ns ± 0%   +0.29%  (p=0.429 n=4+4)
      
      Updates made to functions in gcm.go to enable their matching. An existing
      testcase prevents these functions from being replaced by those in encoding/binary
      due to import dependencies.
      
      Change-Id: Idb3bd1e6e7b12d86cd828fb29cb095848a3e485a
      Reviewed-on: https://go-review.googlesource.com/98136
      Run-TryBot: Lynn Boger <laboger@linux.vnet.ibm.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      28edaf45
    • Michael Munday's avatar
      cmd/compile: add some generic composite type optimizations · f31a18de
      Michael Munday authored
      Propagate values through some wide Zero/Move operations. Among
      other things this allows us to optimize some kinds of array
      initialization. For example, the following code no longer
      requires a temporary be allocated on the stack. Instead it
      writes the values directly into the return value.
      
      func f(i uint32) [4]uint32 {
          return [4]uint32{i, i+1, i+2, i+3}
      }
      
      The return value is unnecessarily cleared but removing that is
      probably a task for dead store analysis (I think it needs to
      be able to match multiple Store ops to wide Zero ops).
      
      In order to reliably remove stack variables that are rendered
      unnecessary by these new rules I've added a new generic version
      of the unread autos elimination pass.
      
      These rules are triggered more than 5000 times when building and
      testing the standard library.
      
      Updates #15925 (fixes for arrays of up to 4 elements).
      Updates #24386 (fixes for up to 4 kept elements).
      Updates #24416.
      
      compilebench results:
      
      name       old time/op       new time/op       delta
      Template         353ms ± 5%        359ms ± 3%    ~     (p=0.143 n=10+10)
      Unicode          219ms ± 1%        217ms ± 4%    ~     (p=0.740 n=7+10)
      GoTypes          1.26s ± 1%        1.26s ± 2%    ~     (p=0.549 n=9+10)
      Compiler         6.00s ± 1%        6.08s ± 1%  +1.42%  (p=0.000 n=9+8)
      SSA              15.3s ± 2%        15.6s ± 1%  +2.43%  (p=0.000 n=10+10)
      Flate            237ms ± 2%        240ms ± 2%  +1.31%  (p=0.015 n=10+10)
      GoParser         285ms ± 1%        285ms ± 1%    ~     (p=0.878 n=8+8)
      Reflect          797ms ± 3%        807ms ± 2%    ~     (p=0.065 n=9+10)
      Tar              334ms ± 0%        335ms ± 4%    ~     (p=0.460 n=8+10)
      XML              419ms ± 0%        423ms ± 1%  +0.91%  (p=0.001 n=7+9)
      StdCmd           46.0s ± 0%        46.4s ± 0%  +0.85%  (p=0.000 n=9+9)
      
      name       old user-time/op  new user-time/op  delta
      Template         337ms ± 3%        346ms ± 5%    ~     (p=0.053 n=9+10)
      Unicode          205ms ±10%        205ms ± 8%    ~     (p=1.000 n=10+10)
      GoTypes          1.22s ± 2%        1.21s ± 3%    ~     (p=0.436 n=10+10)
      Compiler         5.85s ± 1%        5.93s ± 0%  +1.46%  (p=0.000 n=10+8)
      SSA              14.9s ± 1%        15.3s ± 1%  +2.62%  (p=0.000 n=10+10)
      Flate            229ms ± 4%        228ms ± 6%    ~     (p=0.796 n=10+10)
      GoParser         271ms ± 3%        275ms ± 4%    ~     (p=0.165 n=10+10)
      Reflect          779ms ± 5%        775ms ± 2%    ~     (p=0.971 n=10+10)
      Tar              317ms ± 4%        319ms ± 5%    ~     (p=0.853 n=10+10)
      XML              404ms ± 4%        409ms ± 5%    ~     (p=0.436 n=10+10)
      
      name       old alloc/op      new alloc/op      delta
      Template        34.9MB ± 0%       35.0MB ± 0%  +0.26%  (p=0.000 n=10+10)
      Unicode         29.3MB ± 0%       29.3MB ± 0%  +0.02%  (p=0.000 n=10+10)
      GoTypes          115MB ± 0%        115MB ± 0%  +0.30%  (p=0.000 n=10+10)
      Compiler         519MB ± 0%        521MB ± 0%  +0.30%  (p=0.000 n=10+10)
      SSA             1.55GB ± 0%       1.57GB ± 0%  +1.34%  (p=0.000 n=10+9)
      Flate           24.1MB ± 0%       24.2MB ± 0%  +0.10%  (p=0.000 n=10+10)
      GoParser        28.1MB ± 0%       28.1MB ± 0%  +0.07%  (p=0.000 n=10+10)
      Reflect         78.7MB ± 0%       78.7MB ± 0%  +0.03%  (p=0.000 n=8+10)
      Tar             34.4MB ± 0%       34.5MB ± 0%  +0.12%  (p=0.000 n=10+10)
      XML             43.2MB ± 0%       43.2MB ± 0%  +0.13%  (p=0.000 n=10+10)
      
      name       old allocs/op     new allocs/op     delta
      Template          330k ± 0%         330k ± 0%  -0.01%  (p=0.017 n=10+10)
      Unicode           337k ± 0%         337k ± 0%  +0.01%  (p=0.000 n=9+10)
      GoTypes          1.15M ± 0%        1.15M ± 0%  +0.03%  (p=0.000 n=10+10)
      Compiler         4.77M ± 0%        4.77M ± 0%  +0.03%  (p=0.000 n=9+10)
      SSA              12.5M ± 0%        12.6M ± 0%  +1.16%  (p=0.000 n=10+10)
      Flate             221k ± 0%         221k ± 0%  +0.05%  (p=0.000 n=9+10)
      GoParser          275k ± 0%         275k ± 0%  +0.01%  (p=0.014 n=10+9)
      Reflect           944k ± 0%         944k ± 0%  -0.02%  (p=0.000 n=10+10)
      Tar               324k ± 0%         323k ± 0%  -0.12%  (p=0.000 n=10+10)
      XML               384k ± 0%         384k ± 0%  -0.01%  (p=0.001 n=10+10)
      
      name       old object-bytes  new object-bytes  delta
      Template         476kB ± 0%        476kB ± 0%  -0.04%  (p=0.000 n=10+10)
      Unicode          218kB ± 0%        218kB ± 0%    ~     (all equal)
      GoTypes         1.58MB ± 0%       1.58MB ± 0%  -0.04%  (p=0.000 n=10+10)
      Compiler        6.25MB ± 0%       6.24MB ± 0%  -0.09%  (p=0.000 n=10+10)
      SSA             15.9MB ± 0%       16.1MB ± 0%  +1.22%  (p=0.000 n=10+10)
      Flate            304kB ± 0%        304kB ± 0%  -0.13%  (p=0.000 n=10+10)
      GoParser         370kB ± 0%        370kB ± 0%  -0.00%  (p=0.000 n=10+10)
      Reflect         1.27MB ± 0%       1.27MB ± 0%  -0.12%  (p=0.000 n=10+10)
      Tar              421kB ± 0%        419kB ± 0%  -0.64%  (p=0.000 n=10+10)
      XML              518kB ± 0%        517kB ± 0%  -0.12%  (p=0.000 n=10+10)
      
      name       old export-bytes  new export-bytes  delta
      Template        16.7kB ± 0%       16.7kB ± 0%    ~     (all equal)
      Unicode         6.52kB ± 0%       6.52kB ± 0%    ~     (all equal)
      GoTypes         29.2kB ± 0%       29.2kB ± 0%    ~     (all equal)
      Compiler        88.0kB ± 0%       88.0kB ± 0%    ~     (all equal)
      SSA              109kB ± 0%        109kB ± 0%    ~     (all equal)
      Flate           4.49kB ± 0%       4.49kB ± 0%    ~     (all equal)
      GoParser        8.10kB ± 0%       8.10kB ± 0%    ~     (all equal)
      Reflect         7.71kB ± 0%       7.71kB ± 0%    ~     (all equal)
      Tar             9.15kB ± 0%       9.15kB ± 0%    ~     (all equal)
      XML             12.3kB ± 0%       12.3kB ± 0%    ~     (all equal)
      
      name       old text-bytes    new text-bytes    delta
      HelloSize        676kB ± 0%        672kB ± 0%  -0.59%  (p=0.000 n=10+10)
      CmdGoSize       7.26MB ± 0%       7.24MB ± 0%  -0.18%  (p=0.000 n=10+10)
      
      name       old data-bytes    new data-bytes    delta
      HelloSize       10.2kB ± 0%       10.2kB ± 0%    ~     (all equal)
      CmdGoSize        248kB ± 0%        248kB ± 0%    ~     (all equal)
      
      name       old bss-bytes     new bss-bytes     delta
      HelloSize        125kB ± 0%        125kB ± 0%    ~     (all equal)
      CmdGoSize        145kB ± 0%        145kB ± 0%    ~     (all equal)
      
      name       old exe-bytes     new exe-bytes     delta
      HelloSize       1.46MB ± 0%       1.45MB ± 0%  -0.31%  (p=0.000 n=10+10)
      CmdGoSize       14.7MB ± 0%       14.7MB ± 0%  -0.17%  (p=0.000 n=10+10)
      
      Change-Id: Ic72b0c189dd542f391e1c9ab88a76e9148dc4285
      Reviewed-on: https://go-review.googlesource.com/106495
      Run-TryBot: Michael Munday <mike.munday@ibm.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      f31a18de
    • Ben Shi's avatar
      cmd/compile: emit more compact 386 instructions · 098ca846
      Ben Shi authored
      ADDL/SUBL/ANDL/ORL/XORL can have a memory operand as destination,
      and this CL optimize the compiler to emit such instructions on
      386 for more compact binary.
      
      Here is test report:
      1. The total size of pkg/linux_386/ and pkg/tool/linux_386/ decreases
      about 14KB.
      (pkg/linux_386/cmd/compile/ and pkg/tool/linux_386/compile are excluded)
      
      2. The go1 benchmark shows little change, excluding ±2% noise.
      name                     old time/op    new time/op    delta
      BinaryTree17-4              3.34s ± 2%     3.38s ± 2%  +1.27%  (p=0.000 n=40+39)
      Fannkuch11-4                3.55s ± 1%     3.51s ± 1%  -1.33%  (p=0.000 n=40+40)
      FmtFprintfEmpty-4          46.3ns ± 3%    46.9ns ± 4%  +1.41%  (p=0.002 n=40+40)
      FmtFprintfString-4         80.8ns ± 3%    80.4ns ± 6%  -0.54%  (p=0.044 n=40+40)
      FmtFprintfInt-4            93.0ns ± 3%    92.2ns ± 4%  -0.88%  (p=0.007 n=39+40)
      FmtFprintfIntInt-4          144ns ± 5%     145ns ± 2%  +0.78%  (p=0.015 n=40+40)
      FmtFprintfPrefixedInt-4     184ns ± 2%     182ns ± 2%  -1.06%  (p=0.004 n=40+40)
      FmtFprintfFloat-4           415ns ± 4%     419ns ± 4%    ~     (p=0.434 n=40+40)
      FmtManyArgs-4               615ns ± 3%     619ns ± 3%    ~     (p=0.100 n=40+40)
      GobDecode-4                7.30ms ± 6%    7.36ms ± 6%    ~     (p=0.074 n=40+40)
      GobEncode-4                7.10ms ± 6%    7.21ms ± 5%    ~     (p=0.082 n=40+39)
      Gzip-4                      364ms ± 3%     362ms ± 6%  -0.71%  (p=0.020 n=40+40)
      Gunzip-4                   42.4ms ± 3%    42.2ms ± 3%    ~     (p=0.303 n=40+40)
      HTTPClientServer-4         62.9µs ± 1%    62.9µs ± 1%    ~     (p=0.768 n=38+39)
      JSONEncode-4               21.4ms ± 4%    21.5ms ± 5%    ~     (p=0.210 n=40+40)
      JSONDecode-4               67.7ms ± 3%    67.9ms ± 4%    ~     (p=0.713 n=40+40)
      Mandelbrot200-4            5.18ms ± 3%    5.21ms ± 3%  +0.59%  (p=0.021 n=40+40)
      GoParse-4                  3.35ms ± 3%    3.34ms ± 2%    ~     (p=0.996 n=40+40)
      RegexpMatchEasy0_32-4      98.5ns ± 5%    96.3ns ± 4%  -2.15%  (p=0.001 n=40+40)
      RegexpMatchEasy0_1K-4       851ns ± 4%     850ns ± 5%    ~     (p=0.700 n=40+40)
      RegexpMatchEasy1_32-4       105ns ± 7%     107ns ± 4%  +1.50%  (p=0.017 n=40+40)
      RegexpMatchEasy1_1K-4      1.03µs ± 5%    1.03µs ± 4%    ~     (p=0.992 n=40+40)
      RegexpMatchMedium_32-4      130ns ± 6%     128ns ± 4%  -1.66%  (p=0.012 n=40+40)
      RegexpMatchMedium_1K-4     44.0µs ± 5%    43.6µs ± 3%    ~     (p=0.704 n=40+40)
      RegexpMatchHard_32-4       2.29µs ± 3%    2.23µs ± 4%  -2.38%  (p=0.000 n=40+40)
      RegexpMatchHard_1K-4       69.0µs ± 3%    68.1µs ± 3%  -1.28%  (p=0.003 n=40+40)
      Revcomp-4                   1.85s ± 2%     1.87s ± 3%  +1.11%  (p=0.000 n=40+40)
      Template-4                 69.8ms ± 3%    69.6ms ± 3%    ~     (p=0.125 n=40+40)
      TimeParse-4                 442ns ± 5%     440ns ± 3%    ~     (p=0.585 n=40+40)
      TimeFormat-4                419ns ± 3%     420ns ± 3%    ~     (p=0.824 n=40+40)
      [Geo mean]                 67.3µs         67.2µs       -0.11%
      
      name                     old speed      new speed      delta
      GobDecode-4               105MB/s ± 6%   104MB/s ± 6%    ~     (p=0.074 n=40+40)
      GobEncode-4               108MB/s ± 7%   107MB/s ± 5%    ~     (p=0.080 n=40+39)
      Gzip-4                   53.3MB/s ± 3%  53.7MB/s ± 6%  +0.73%  (p=0.021 n=40+40)
      Gunzip-4                  458MB/s ± 3%   460MB/s ± 3%    ~     (p=0.301 n=40+40)
      JSONEncode-4             90.8MB/s ± 4%  90.3MB/s ± 4%    ~     (p=0.213 n=40+40)
      JSONDecode-4             28.7MB/s ± 3%  28.6MB/s ± 4%    ~     (p=0.679 n=40+40)
      GoParse-4                17.3MB/s ± 3%  17.3MB/s ± 2%    ~     (p=1.000 n=40+40)
      RegexpMatchEasy0_32-4     325MB/s ± 5%   333MB/s ± 4%  +2.44%  (p=0.000 n=40+38)
      RegexpMatchEasy0_1K-4    1.20GB/s ± 4%  1.21GB/s ± 5%    ~     (p=0.684 n=40+40)
      RegexpMatchEasy1_32-4     303MB/s ± 7%   298MB/s ± 4%  -1.52%  (p=0.022 n=40+40)
      RegexpMatchEasy1_1K-4     995MB/s ± 5%   996MB/s ± 4%    ~     (p=0.996 n=40+40)
      RegexpMatchMedium_32-4   7.67MB/s ± 6%  7.80MB/s ± 4%  +1.68%  (p=0.011 n=40+40)
      RegexpMatchMedium_1K-4   23.3MB/s ± 5%  23.5MB/s ± 3%    ~     (p=0.697 n=40+40)
      RegexpMatchHard_32-4     14.0MB/s ± 3%  14.3MB/s ± 4%  +2.43%  (p=0.000 n=40+40)
      RegexpMatchHard_1K-4     14.8MB/s ± 3%  15.0MB/s ± 3%  +1.30%  (p=0.003 n=40+40)
      Revcomp-4                 137MB/s ± 2%   136MB/s ± 3%  -1.10%  (p=0.000 n=40+40)
      Template-4               27.8MB/s ± 3%  27.9MB/s ± 3%    ~     (p=0.128 n=40+40)
      [Geo mean]               79.6MB/s       79.9MB/s       +0.28%
      
      Change-Id: I02a3efc125dc81e18fc8495eb2bf1bba59ab8733
      Reviewed-on: https://go-review.googlesource.com/110157
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      Reviewed-by: 's avatarIlya Tocar <ilya.tocar@intel.com>
      098ca846
    • Shengyu Zhang's avatar
      text/scanner: return RawString token rather than String for raw string literals · c8915a06
      Shengyu Zhang authored
      Fixes #23675
      
      Change-Id: I78e13d1ca90400e4dd48674b93bb6e2e30718d97
      GitHub-Last-Rev: f2b3a59d2bd92f28fc06360e7920c37b9da0af01
      GitHub-Pull-Request: golang/go#25287
      Reviewed-on: https://go-review.googlesource.com/112037Reviewed-by: 's avatarRobert Griesemer <gri@golang.org>
      Run-TryBot: Robert Griesemer <gri@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      c8915a06
    • Richard Musiol's avatar
      runtime: add js/wasm architecture · 35ea6246
      Richard Musiol authored
      This commit adds the js/wasm architecture to the runtime package.
      Currently WebAssembly has no support for threads yet, see
      https://github.com/WebAssembly/design/issues/1073. Because of that,
      there is no preemption of goroutines and no sysmon goroutine.
      
      Design doc: https://docs.google.com/document/d/131vjr4DH6JFnb-blm_uRdaC0_Nv3OUwjEY5qVCxCup4
      About WebAssembly assembly files: https://docs.google.com/document/d/1GRmy3rA4DiYtBlX-I1Jr_iHykbX8EixC3Mq0TCYqbKc
      
      Updates #18892
      
      Change-Id: I7f12d21b5180500d55ae9fd2f7e926a1731db391
      Reviewed-on: https://go-review.googlesource.com/103877
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarAustin Clements <austin@google.com>
      35ea6246
    • Cherry Zhang's avatar
      cmd/compile: fix Wasm rule file name · cc0aaff4
      Cherry Zhang authored
      The rule generator expects the rule file name matches the arch's
      name defined in
      https://go.googlesource.com/go/+/b1df8d6ffa2c4c5be567934bd44432fff8f3c4a7/src/cmd/compile/internal/ssa/gen/WASMOps.go#197
      
      Rename the file to match. Also rename WASMOps.go for consistency.
      
      Fixes #25282.
      
      Change-Id: I35c4bb2659fe67650933eb0ebf95778974511385
      Reviewed-on: https://go-review.googlesource.com/111975
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      Reviewed-by: 's avatarRichard Musiol <neelance@gmail.com>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      cc0aaff4
  2. 07 May, 2018 13 commits
    • Richard Musiol's avatar
      cmd/link: add wasm architecture · f41dc711
      Richard Musiol authored
      This commit adds the wasm architecture to the link command.
      
      Design doc: https://docs.google.com/document/d/131vjr4DH6JFnb-blm_uRdaC0_Nv3OUwjEY5qVCxCup4
      
      Updates #18892
      
      Change-Id: I5aef29954984537f2979679b5d393209e462f564
      Reviewed-on: https://go-review.googlesource.com/103795
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
      f41dc711
    • Ilya Tocar's avatar
      net: make IPString benchmarks more representative. · 406886b5
      Ilya Tocar authored
      We were spending more time in duffcopy than in the String method.
      Avoid creating a copy of test struct to make benchmark measure performance of
      String() itself.
      
      IPString/IPv4-8     113ns ± 0%      57ns ± 1%  -49.83%  (p=0.000 n=8+10)
      IPString/IPv6-8     972ns ± 1%     915ns ± 1%   -5.88%  (p=0.000 n=9+10)
      
      Change-Id: I5ceff2caa1b8288c43f0cf6c6b3809ca523af1fa
      Reviewed-on: https://go-review.googlesource.com/111881
      Run-TryBot: Ilya Tocar <ilya.tocar@intel.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      406886b5
    • Josh Bleecher Snyder's avatar
      cmd/compile: add some LEAL{1,2,4,8} rewrite rules for AMD64 · b1df8d6f
      Josh Bleecher Snyder authored
      This should improve some 32 bit arithmetic operations.
      
      During make.bash, this increases the number of
      rules firing by 15518:
      
      $ wc -l rulelog-*
       13490514 rulelog-head
       13474996 rulelog-master
      
      compress/flate benchmarks:
      
      name                             old time/op    new time/op    delta
      Decode/Digits/Huffman/1e4-8         103µs ± 4%     102µs ± 0%  -0.95%  (p=0.000 n=30+27)
      Decode/Digits/Huffman/1e5-8         962µs ± 2%     954µs ± 1%  -0.80%  (p=0.000 n=25+25)
      Decode/Digits/Huffman/1e6-8        9.55ms ± 1%    9.50ms ± 1%  -0.57%  (p=0.000 n=29+29)
      Decode/Digits/Speed/1e4-8           110µs ± 2%     110µs ± 2%  -0.41%  (p=0.003 n=28+30)
      Decode/Digits/Speed/1e5-8          1.15ms ± 1%    1.14ms ± 1%  -0.85%  (p=0.000 n=29+28)
      Decode/Digits/Speed/1e6-8          11.5ms ± 2%    11.4ms ± 1%  -1.26%  (p=0.000 n=28+27)
      Decode/Digits/Default/1e4-8         113µs ± 1%     112µs ± 1%  -0.49%  (p=0.001 n=27+30)
      Decode/Digits/Default/1e5-8        1.13ms ± 0%    1.12ms ± 1%  -0.75%  (p=0.000 n=26+24)
      Decode/Digits/Default/1e6-8        11.1ms ± 1%    11.1ms ± 1%  -0.47%  (p=0.000 n=28+27)
      Decode/Digits/Compression/1e4-8     113µs ± 1%     112µs ± 1%  -0.70%  (p=0.000 n=28+29)
      Decode/Digits/Compression/1e5-8    1.13ms ± 2%    1.12ms ± 1%  -1.41%  (p=0.000 n=28+26)
      Decode/Digits/Compression/1e6-8    11.1ms ± 1%    11.1ms ± 1%  -0.33%  (p=0.002 n=29+27)
      Decode/Twain/Huffman/1e4-8          115µs ± 1%     115µs ± 1%  -0.40%  (p=0.000 n=28+26)
      Decode/Twain/Huffman/1e5-8         1.05ms ± 1%    1.04ms ± 0%  -0.41%  (p=0.000 n=27+25)
      Decode/Twain/Huffman/1e6-8         10.4ms ± 1%    10.4ms ± 1%    ~     (p=0.993 n=28+24)
      Decode/Twain/Speed/1e4-8            118µs ± 2%     116µs ± 1%  -1.08%  (p=0.000 n=27+29)
      Decode/Twain/Speed/1e5-8           1.07ms ± 1%    1.07ms ± 1%  -0.23%  (p=0.041 n=26+27)
      Decode/Twain/Speed/1e6-8           10.6ms ± 1%    10.5ms ± 0%  -0.68%  (p=0.000 n=29+27)
      Decode/Twain/Default/1e4-8          110µs ± 1%     109µs ± 0%  -0.49%  (p=0.000 n=29+26)
      Decode/Twain/Default/1e5-8          906µs ± 1%     902µs ± 1%  -0.48%  (p=0.000 n=27+28)
      Decode/Twain/Default/1e6-8         8.75ms ± 1%    8.68ms ± 2%  -0.73%  (p=0.000 n=28+28)
      Decode/Twain/Compression/1e4-8      110µs ± 1%     109µs ± 1%  -0.80%  (p=0.000 n=27+28)
      Decode/Twain/Compression/1e5-8      905µs ± 1%     906µs ± 5%    ~     (p=0.065 n=27+29)
      Decode/Twain/Compression/1e6-8     8.75ms ± 2%    8.68ms ± 1%  -0.76%  (p=0.000 n=26+26)
      Encode/Digits/Huffman/1e4-8        31.8µs ± 1%    32.3µs ± 2%  +1.43%  (p=0.000 n=28+27)
      Encode/Digits/Huffman/1e5-8         299µs ± 2%     296µs ± 1%  -1.05%  (p=0.000 n=29+29)
      Encode/Digits/Huffman/1e6-8        2.99ms ± 3%    2.96ms ± 1%  -1.00%  (p=0.000 n=29+28)
      Encode/Digits/Speed/1e4-8           149µs ± 1%     152µs ± 4%  +2.18%  (p=0.000 n=30+30)
      Encode/Digits/Speed/1e5-8          1.39ms ± 1%    1.40ms ± 2%  +1.02%  (p=0.000 n=27+27)
      Encode/Digits/Speed/1e6-8          13.7ms ± 0%    13.8ms ± 1%  +0.81%  (p=0.000 n=27+27)
      Encode/Digits/Default/1e4-8         297µs ± 7%     297µs ± 7%    ~     (p=1.000 n=30+30)
      Encode/Digits/Default/1e5-8        4.51ms ± 1%    4.42ms ± 1%  -2.06%  (p=0.000 n=29+29)
      Encode/Digits/Default/1e6-8        47.5ms ± 1%    46.6ms ± 1%  -1.90%  (p=0.000 n=27+25)
      Encode/Digits/Compression/1e4-8     302µs ± 7%     303µs ± 9%    ~     (p=0.854 n=30+30)
      Encode/Digits/Compression/1e5-8    4.52ms ± 1%    4.43ms ± 2%  -1.91%  (p=0.000 n=26+25)
      Encode/Digits/Compression/1e6-8    47.5ms ± 1%    46.7ms ± 1%  -1.70%  (p=0.000 n=26+27)
      Encode/Twain/Huffman/1e4-8         46.6µs ± 2%    46.8µs ± 2%    ~     (p=0.114 n=30+30)
      Encode/Twain/Huffman/1e5-8          357µs ± 3%     352µs ± 2%  -1.13%  (p=0.000 n=29+28)
      Encode/Twain/Huffman/1e6-8         3.58ms ± 4%    3.52ms ± 1%  -1.43%  (p=0.003 n=30+28)
      Encode/Twain/Speed/1e4-8            173µs ± 1%     174µs ± 1%  +0.65%  (p=0.000 n=27+28)
      Encode/Twain/Speed/1e5-8           1.39ms ± 1%    1.40ms ± 1%  +0.92%  (p=0.000 n=28+27)
      Encode/Twain/Speed/1e6-8           13.6ms ± 1%    13.7ms ± 1%  +0.51%  (p=0.000 n=25+26)
      Encode/Twain/Default/1e4-8          364µs ± 5%     361µs ± 5%    ~     (p=0.219 n=30+30)
      Encode/Twain/Default/1e5-8         5.41ms ± 1%    5.43ms ± 5%    ~     (p=0.655 n=27+27)
      Encode/Twain/Default/1e6-8         57.2ms ± 1%    58.4ms ± 4%  +2.15%  (p=0.000 n=22+28)
      Encode/Twain/Compression/1e4-8      371µs ± 9%     373µs ± 6%    ~     (p=0.503 n=30+29)
      Encode/Twain/Compression/1e5-8     5.97ms ± 2%    5.92ms ± 1%  -0.75%  (p=0.000 n=28+26)
      Encode/Twain/Compression/1e6-8     64.0ms ± 1%    63.8ms ± 1%  -0.36%  (p=0.036 n=27+25)
      [Geo mean]                         1.37ms         1.36ms       -0.38%
      
      
      Change-Id: I3df4de63f06eaf121c38821bd889453a8de1b199
      Reviewed-on: https://go-review.googlesource.com/101276Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      b1df8d6f
    • Austin Clements's avatar
      runtime: replace system goroutine whitelist with symbol test · 44286b17
      Austin Clements authored
      Currently isSystemGoroutine has a hard-coded list of known entry
      points into system goroutines. This list is annoying to maintain. For
      example, it's missing the ensureSigM goroutine.
      
      Replace it with a check that simply looks for any goroutine with
      runtime function as its entry point, with a few exceptions. This also
      matches the definition recently added to the trace viewer (CL 81315).
      
      Change-Id: Iaed723d4a6e8c2ffb7c0c48fbac1688b00b30f01
      Reviewed-on: https://go-review.googlesource.com/81655
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      44286b17
    • Keith Randall's avatar
      cmd/compile: mention the AuxInt field for bounded shifts · a8a05081
      Keith Randall authored
      This comment needs updating after moving the "bounded" mark from
      Aux to AuxInt.
      
      Change-Id: I924fb22a81fffcd6944b93f0e3357c3aa2c4c49e
      Reviewed-on: https://go-review.googlesource.com/111880Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      a8a05081
    • Sabin Mihai Rapan's avatar
      strconv: update Unquote example to be more concise · 74879f0f
      Sabin Mihai Rapan authored
      Changed the example to convey the intent of the Unquote function
      in a more succint way.
      
      Fixes #23693
      
      Change-Id: I49465641d730e70b5af0d47057335af39882bcec
      Reviewed-on: https://go-review.googlesource.com/92015Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      74879f0f
    • Brad Fitzpatrick's avatar
      vendor, net/http: update x/net for httplex to httpguts merge · 8e9386db
      Brad Fitzpatrick authored
      Updates x/net to git rev cbb82b59bc for:
      
          lex/httplex, http/httpguts: merge the httplex package into httpguts
          https://golang.org/cl/111875
      
          http2: set nextStreamID to 3 when AllowHTTP is set
          https://golang.org/cl/111835
      
          http2: terminate await request cancel goroutine on conn close
          https://golang.org/cl/108415
      
      Fixes #24776 (CL 111655 didn't actually include it)
      
      Change-Id: I0a21e169ebba2ec35219f347f1e31cd4c67bebdf
      Reviewed-on: https://go-review.googlesource.com/111876
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      Reviewed-by: 's avatarKunpei Sakai <namusyaka@gmail.com>
      Reviewed-by: 's avatarAndrew Bonventre <andybons@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      8e9386db
    • Elias Naur's avatar
      misc/ios: uninstall app before installing it · 9b16b9c7
      Elias Naur authored
      Tests can fail because there is leftover data from a previous run.
      For example:
      
      --- FAIL: TestRemoveAll (0.00s)
      	path_test.go:96: RemoveAll "/private/var/mobile/Containers/Data/Application/66247524-5ED7-45A4-82AA-6BF15D6078B2/tmp//_TestRemoveAll_" (first): open /private/var/mobile/Containers/Data/Application/66247524-5ED7-45A4-82AA-6BF15D6078B2/tmp//_TestRemoveAll_/dir: permission denied
      FAIL
      FAIL	os	31.275s
      
      There seem to be no way to simply clear the app data for an app
      short of uninstalling it, so do that.
      
      This change in effect undoes CL 106676, which means that running iOS
      is a little slower again, and that another app from the same
      apple developer account must be present on the device for our app
      install to succeed.
      
      Change-Id: Iacc3a6f95c93568f4418db45e1098c7c7fdb88e0
      Reviewed-on: https://go-review.googlesource.com/111795
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      9b16b9c7
    • Josh Bleecher Snyder's avatar
      text/tabwriter: don't mimic previous lines on flush · a33c5957
      Josh Bleecher Snyder authored
      \f triggers a flush.
      
      This is used (by gofmt, among others) to indicate that
      the current aligned segment has ended.
      
      When flushed, it is unlikely that the previous line is
      in fact a good predictor of the upcoming line,
      so stop treating it as such.
      
      No performance impact on the existing benchmarks,
      which do not perform any flushes.
      
      Change-Id: Ifdf3e6d4600713c90db7b51a10e429d9260dc08c
      Reviewed-on: https://go-review.googlesource.com/111644Reviewed-by: 's avatarRobert Griesemer <gri@golang.org>
      a33c5957
    • Daniel Martí's avatar
      cmd/vet: recognise func type conversions · 3fbfc83d
      Daniel Martí authored
      In hasSideEffects, vet has to be taught whether or not a CallExpr is an
      actual function call, or just a type conversion.
      
      The previous code knew how to differentiate fn(arg) from int(arg), but
      it incorrectly saw (func(T))(fn) as a func call. This edge case is
      slightly tricky, since the CallExpr.Fun has a func signature type, just
      like in func calls.
      
      However, the difference is that in this case the Fun is a type, not a
      value. This information is in types.TypeAndValue, so use it.
      
      Change-Id: I18bb8b23abbe7decc558b726ff2dc31fae2f13d6
      Reviewed-on: https://go-review.googlesource.com/111416
      Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarRobert Griesemer <gri@golang.org>
      3fbfc83d
    • Russ Cox's avatar
      compress/flate: do not rename math/bits import · d474f582
      Russ Cox authored
      Makes compress/flate work better with cmd/dist bootstrap.
      
      Change-Id: Ifc7d74027367008e82c1d14ec77141830583ba82
      Reviewed-on: https://go-review.googlesource.com/111815
      Run-TryBot: Russ Cox <rsc@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      d474f582
    • fanzha02's avatar
      cmd/internal/obj/arm64: fix illegal 4-operand instructions accepted arm64 bug · 9d72e8c6
      fanzha02 authored
      Current assmbler accepts MUL* related instructions with 4 operands,
      such as instruction "MUL R1, R2, R3, R4", which is illegal.
      
      The fix adds an actual field informantion to Optab, which has value
      of C_NONE, C_REG, etc, so assembler can use p.From3Type for checking
      in oplook.
      
      Add test cases.
      
      Fixes #25059
      
      Change-Id: I0656319383c460696b392197bf5960b987f8fc97
      Reviewed-on: https://go-review.googlesource.com/109295Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      9d72e8c6
    • Zhou Peng's avatar
      runtime: fix a typo mistake in comments · 7b7a854c
      Zhou Peng authored
      Change-Id: I33790af9fd0c2f6fdeaf9778c1381e0e6d697abb
      Reviewed-on: https://go-review.googlesource.com/111755Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      7b7a854c
  3. 06 May, 2018 7 commits
    • Author Name's avatar
      io: calculate buffer size only when needed · 15ac56fd
      Author Name authored
      Change-Id: I930be9027fb972198b3d44816a5e4f53ff7eb5ea
      Reviewed-on: https://go-review.googlesource.com/111642Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      15ac56fd
    • Josh Bleecher Snyder's avatar
      cmd/compile: use slice extension idiom in LSym.Grow · c9c73978
      Josh Bleecher Snyder authored
      name        old alloc/op      new alloc/op      delta
      Template         35.0MB ± 0%       35.0MB ± 0%  -0.05%  (p=0.008 n=5+5)
      Unicode          29.3MB ± 0%       29.3MB ± 0%    ~     (p=0.310 n=5+5)
      GoTypes           115MB ± 0%        115MB ± 0%  -0.08%  (p=0.008 n=5+5)
      Compiler          519MB ± 0%        519MB ± 0%  -0.08%  (p=0.008 n=5+5)
      SSA              1.59GB ± 0%       1.59GB ± 0%  -0.05%  (p=0.008 n=5+5)
      Flate            24.2MB ± 0%       24.2MB ± 0%  -0.06%  (p=0.008 n=5+5)
      GoParser         28.2MB ± 0%       28.1MB ± 0%  -0.04%  (p=0.016 n=5+5)
      Reflect          78.8MB ± 0%       78.7MB ± 0%  -0.10%  (p=0.008 n=5+5)
      Tar              34.5MB ± 0%       34.4MB ± 0%  -0.07%  (p=0.008 n=5+5)
      XML              43.3MB ± 0%       43.2MB ± 0%  -0.09%  (p=0.008 n=5+5)
      [Geo mean]       77.5MB            77.4MB       -0.06%
      
      name        old allocs/op     new allocs/op     delta
      Template           330k ± 0%         329k ± 0%  -0.32%  (p=0.008 n=5+5)
      Unicode            337k ± 0%         336k ± 0%  -0.10%  (p=0.008 n=5+5)
      GoTypes           1.15M ± 0%        1.14M ± 0%  -0.34%  (p=0.008 n=5+5)
      Compiler          4.78M ± 0%        4.77M ± 0%  -0.25%  (p=0.008 n=5+5)
      SSA               12.9M ± 0%        12.9M ± 0%  -0.12%  (p=0.008 n=5+5)
      Flate              221k ± 0%         220k ± 0%  -0.32%  (p=0.008 n=5+5)
      GoParser           275k ± 0%         274k ± 0%  -0.34%  (p=0.008 n=5+5)
      Reflect            944k ± 0%         940k ± 0%  -0.42%  (p=0.008 n=5+5)
      Tar                323k ± 0%         322k ± 0%  -0.31%  (p=0.008 n=5+5)
      XML                384k ± 0%         383k ± 0%  -0.26%  (p=0.008 n=5+5)
      [Geo mean]         749k              747k       -0.28%
      
      
      Updates #21266
      
      Change-Id: I926ee3ba009c068239db70cdee8fdf85b5ee6bb4
      Reviewed-on: https://go-review.googlesource.com/109816
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      c9c73978
    • Kunpei Sakai's avatar
      net/http: update bundled http2 · 260ae19c
      Kunpei Sakai authored
      Updates http2 to x/net/http2 git rev 5f9ae10 for:
      
          http2: terminate await request cancel goroutine on conn close
          https://golang.org/cl/108415
      
          http2: don't sniff Content-type in Server when X-Content-Type-Options:nosniff
          https://golang.org/cl/107295
      
          http2, http/httpguts: move ValidTrailerHeader to new common package http/httpguts
          https://golang.org/cl/104042
      
          all: remove "the" duplications
          https://golang.org/cl/94975
      
          http2: use RFC 723x as normative reference in docs
          https://golang.org/cl/94555
      
          all: use HTTPS for iana.org links
          https://golang.org/cl/89415
      
      Fixes #24795
      Fixes #24776
      Updates #23908
      Fixes #21974
      
      Change-Id: I7985617a7dde56cc5ed8670d73b26f8307be83d6
      Reviewed-on: https://go-review.googlesource.com/111655Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      260ae19c
    • Martin Möhrmann's avatar
      runtime: remove hmap field from maptypes · 4ebc67d3
      Martin Möhrmann authored
      The hmap field in the maptype is only used by the runtime to check the sizes of
      the hmap structure created by the compiler and runtime agree.
      
      Comments are already present about the hmap structure definitions in the
      compiler and runtime needing to be in sync.
      
      Add a test that checks the runtimes hmap size is as expected to detect
      when the compilers and runtimes hmap sizes diverge instead of checking
      this at runtime when a map is created.
      
      Change-Id: I974945ebfdb66883a896386a17bbcae62a18cf2a
      Reviewed-on: https://go-review.googlesource.com/91796
      Run-TryBot: Martin Möhrmann <moehrmann@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      Reviewed-by: 's avatarJosh Bleecher Snyder <josharian@gmail.com>
      4ebc67d3
    • Martin Möhrmann's avatar
      cmd/compile: optimize len([]rune(string)) · b9a59d9f
      Martin Möhrmann authored
      Adds a new runtime function to count runes in a string.
      Modifies the compiler to detect the pattern len([]rune(string))
      and replaces it with the new rune counting runtime function.
      
      RuneCount/lenruneslice/ASCII                  27.8ns ± 2%  14.5ns ± 3%  -47.70%  (p=0.000 n=10+10)
      RuneCount/lenruneslice/Japanese                126ns ± 2%    60ns ± 2%  -52.03%  (p=0.000 n=10+10)
      RuneCount/lenruneslice/MixedLength             104ns ± 2%    50ns ± 1%  -51.71%  (p=0.000 n=10+9)
      
      Fixes #24923
      
      Change-Id: Ie9c7e7391a4e2cca675c5cdcc1e5ce7d523948b9
      Reviewed-on: https://go-review.googlesource.com/108985
      Run-TryBot: Martin Möhrmann <moehrmann@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarJosh Bleecher Snyder <josharian@gmail.com>
      b9a59d9f
    • Martin Möhrmann's avatar
      cmd/compile: optimize append(x, make([]T, y)...) slice extension · a8a60ac2
      Martin Möhrmann authored
      Changes the compiler to recognize the slice extension pattern
      
        append(x, make([]T, y)...)
      
      and replace it with growslice and an optional memclr to avoid an allocation for make([]T, y).
      
      Memclr is not called in case growslice already allocated a new cleared backing array
      when T contains pointers.
      
      amd64:
      name                      old time/op    new time/op    delta
      ExtendSlice/IntSlice         103ns ± 4%      57ns ± 4%   -44.55%  (p=0.000 n=18+18)
      ExtendSlice/PointerSlice     155ns ± 3%      77ns ± 3%   -49.93%  (p=0.000 n=20+20)
      ExtendSlice/NoGrow          50.2ns ± 3%     5.2ns ± 2%   -89.67%  (p=0.000 n=18+18)
      
      name                      old alloc/op   new alloc/op   delta
      ExtendSlice/IntSlice         64.0B ± 0%     32.0B ± 0%   -50.00%  (p=0.000 n=20+20)
      ExtendSlice/PointerSlice     64.0B ± 0%     32.0B ± 0%   -50.00%  (p=0.000 n=20+20)
      ExtendSlice/NoGrow           32.0B ± 0%      0.0B       -100.00%  (p=0.000 n=20+20)
      
      name                      old allocs/op  new allocs/op  delta
      ExtendSlice/IntSlice          2.00 ± 0%      1.00 ± 0%   -50.00%  (p=0.000 n=20+20)
      ExtendSlice/PointerSlice      2.00 ± 0%      1.00 ± 0%   -50.00%  (p=0.000 n=20+20)
      ExtendSlice/NoGrow            1.00 ± 0%      0.00       -100.00%  (p=0.000 n=20+20)
      
      Fixes #21266
      
      Change-Id: Idc3077665f63cbe89762b590c5967a864fd1c07f
      Reviewed-on: https://go-review.googlesource.com/109517
      Run-TryBot: Martin Möhrmann <moehrmann@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarJosh Bleecher Snyder <josharian@gmail.com>
      a8a60ac2
    • Josh Bleecher Snyder's avatar
      text/tabwriter: fix BenchmarkPyramid and BenchmarkRagged · 87412a14
      Josh Bleecher Snyder authored
      These were added in CL 106979. They were wrong.
      
      The correct impact of CL 106979 on these benchmarks is:
      
      name            old time/op    new time/op    delta
      Pyramid/10-8      6.22µs ± 1%    5.68µs ± 0%    -8.78%  (p=0.000 n=15+13)
      Pyramid/100-8      275µs ± 1%     255µs ± 1%    -7.30%  (p=0.000 n=15+13)
      Pyramid/1000-8    25.6ms ± 1%    24.8ms ± 1%    -2.88%  (p=0.000 n=15+14)
      Ragged/10-8       8.98µs ± 1%    6.74µs ± 0%   -24.98%  (p=0.000 n=15+14)
      Ragged/100-8      85.3µs ± 0%    57.5µs ± 1%   -32.51%  (p=0.000 n=13+15)
      Ragged/1000-8      847µs ± 1%     561µs ± 1%   -33.85%  (p=0.000 n=14+15)
      
      name            old alloc/op   new alloc/op   delta
      Pyramid/10-8      4.74kB ± 0%    4.88kB ± 0%    +3.04%  (p=0.000 n=15+15)
      Pyramid/100-8      379kB ± 0%     411kB ± 0%    +8.50%  (p=0.000 n=15+12)
      Pyramid/1000-8    35.3MB ± 0%    41.6MB ± 0%   +17.68%  (p=0.000 n=15+15)
      Ragged/10-8       4.82kB ± 0%    1.82kB ± 0%   -62.13%  (p=0.000 n=15+15)
      Ragged/100-8      45.4kB ± 0%     1.8kB ± 0%   -95.98%  (p=0.000 n=15+15)
      Ragged/1000-8      449kB ± 0%       2kB ± 0%   -99.59%  (p=0.000 n=15+15)
      
      name            old allocs/op  new allocs/op  delta
      Pyramid/10-8        50.0 ± 0%      35.0 ± 0%   -30.00%  (p=0.000 n=15+15)
      Pyramid/100-8        704 ± 0%       231 ± 0%   -67.19%  (p=0.000 n=15+15)
      Pyramid/1000-8     10.0k ± 0%      2.1k ± 0%   -79.52%  (p=0.000 n=15+15)
      Ragged/10-8         60.0 ± 0%      19.0 ± 0%   -68.33%  (p=0.000 n=15+15)
      Ragged/100-8         511 ± 0%        19 ± 0%   -96.28%  (p=0.000 n=15+15)
      Ragged/1000-8      5.01k ± 0%     0.02k ± 0%   -99.62%  (p=0.000 n=15+15)
      
      
      This is an improvement over what was originally reported,
      except the increase in alloc/op for the Pyramid benchmarks.
      
      Change-Id: Ib2617c1288ce35f2c78e0172533d231b86e48bc2
      Reviewed-on: https://go-review.googlesource.com/111643
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      87412a14
  4. 05 May, 2018 3 commits
  5. 04 May, 2018 5 commits