1. 29 Aug, 2018 3 commits
    • Zheng Xu's avatar
      build: support frame-pointer for arm64 · 8f4fd3f3
      Zheng Xu authored
      Supporting frame-pointer makes Linux's perf and other profilers much more useful
      because it lets them gather a stack trace efficiently on profiling events. Major
      changes include:
      1. save FP on the word below where RSP is pointing to (proposed by Cherry and Austin)
      2. adjust some specific offsets in runtime assembly and wrapper code
      3. add support to FP in goroutine scheduler
      4. adjust link stack overflow check to take the extra word into account
      5. adjust nosplit test cases to enable frame sizes which are 16 bytes aligned
      
      Performance impacts on go1 benchmarks:
      
      Enable frame-pointer (by default)
      
      name                      old time/op    new time/op    delta
      BinaryTree17-46              5.94s ± 0%     6.00s ± 0%  +1.03%  (p=0.029 n=4+4)
      Fannkuch11-46                2.84s ± 1%     2.77s ± 0%  -2.58%  (p=0.008 n=5+5)
      FmtFprintfEmpty-46          55.0ns ± 1%    58.9ns ± 1%  +7.06%  (p=0.008 n=5+5)
      FmtFprintfString-46          102ns ± 0%     105ns ± 0%  +2.94%  (p=0.008 n=5+5)
      FmtFprintfInt-46             118ns ± 0%     117ns ± 1%  -1.19%  (p=0.000 n=4+5)
      FmtFprintfIntInt-46          181ns ± 0%     182ns ± 1%    ~     (p=0.444 n=5+5)
      FmtFprintfPrefixedInt-46     215ns ± 1%     214ns ± 0%    ~     (p=0.254 n=5+4)
      FmtFprintfFloat-46           292ns ± 0%     296ns ± 0%  +1.46%  (p=0.029 n=4+4)
      FmtManyArgs-46               720ns ± 0%     732ns ± 0%  +1.72%  (p=0.008 n=5+5)
      GobDecode-46                9.82ms ± 1%   10.03ms ± 2%  +2.10%  (p=0.008 n=5+5)
      GobEncode-46                8.14ms ± 0%    8.72ms ± 1%  +7.14%  (p=0.008 n=5+5)
      Gzip-46                      420ms ± 0%     424ms ± 0%  +0.92%  (p=0.008 n=5+5)
      Gunzip-46                   48.2ms ± 0%    48.4ms ± 0%  +0.41%  (p=0.008 n=5+5)
      HTTPClientServer-46          201µs ± 4%     201µs ± 0%    ~     (p=0.730 n=5+4)
      JSONEncode-46               17.1ms ± 0%    17.7ms ± 1%  +3.80%  (p=0.008 n=5+5)
      JSONDecode-46               88.0ms ± 0%    90.1ms ± 0%  +2.42%  (p=0.008 n=5+5)
      Mandelbrot200-46            5.06ms ± 0%    5.07ms ± 0%    ~     (p=0.310 n=5+5)
      GoParse-46                  5.04ms ± 0%    5.12ms ± 0%  +1.53%  (p=0.008 n=5+5)
      RegexpMatchEasy0_32-46       117ns ± 0%     117ns ± 0%    ~     (all equal)
      RegexpMatchEasy0_1K-46       332ns ± 0%     329ns ± 0%  -0.78%  (p=0.008 n=5+5)
      RegexpMatchEasy1_32-46       104ns ± 0%     113ns ± 0%  +8.65%  (p=0.029 n=4+4)
      RegexpMatchEasy1_1K-46       563ns ± 0%     569ns ± 0%  +1.10%  (p=0.008 n=5+5)
      RegexpMatchMedium_32-46      167ns ± 2%     177ns ± 1%  +5.74%  (p=0.008 n=5+5)
      RegexpMatchMedium_1K-46     49.5µs ± 0%    53.4µs ± 0%  +7.81%  (p=0.008 n=5+5)
      RegexpMatchHard_32-46       2.56µs ± 1%    2.72µs ± 0%  +6.01%  (p=0.008 n=5+5)
      RegexpMatchHard_1K-46       77.0µs ± 0%    81.8µs ± 0%  +6.24%  (p=0.016 n=5+4)
      Revcomp-46                   631ms ± 1%     627ms ± 1%    ~     (p=0.095 n=5+5)
      Template-46                 81.8ms ± 0%    86.3ms ± 0%  +5.55%  (p=0.008 n=5+5)
      TimeParse-46                 423ns ± 0%     432ns ± 0%  +2.32%  (p=0.008 n=5+5)
      TimeFormat-46                478ns ± 2%     497ns ± 1%  +3.89%  (p=0.008 n=5+5)
      [Geo mean]                  71.6µs         73.3µs       +2.45%
      
      name                      old speed      new speed      delta
      GobDecode-46              78.1MB/s ± 1%  76.6MB/s ± 2%  -2.04%  (p=0.008 n=5+5)
      GobEncode-46              94.3MB/s ± 0%  88.0MB/s ± 1%  -6.67%  (p=0.008 n=5+5)
      Gzip-46                   46.2MB/s ± 0%  45.8MB/s ± 0%  -0.91%  (p=0.008 n=5+5)
      Gunzip-46                  403MB/s ± 0%   401MB/s ± 0%  -0.41%  (p=0.008 n=5+5)
      JSONEncode-46              114MB/s ± 0%   109MB/s ± 1%  -3.66%  (p=0.008 n=5+5)
      JSONDecode-46             22.0MB/s ± 0%  21.5MB/s ± 0%  -2.35%  (p=0.008 n=5+5)
      GoParse-46                11.5MB/s ± 0%  11.3MB/s ± 0%  -1.51%  (p=0.008 n=5+5)
      RegexpMatchEasy0_32-46     272MB/s ± 0%   272MB/s ± 1%    ~     (p=0.190 n=4+5)
      RegexpMatchEasy0_1K-46    3.08GB/s ± 0%  3.11GB/s ± 0%  +0.77%  (p=0.008 n=5+5)
      RegexpMatchEasy1_32-46     306MB/s ± 0%   283MB/s ± 0%  -7.63%  (p=0.029 n=4+4)
      RegexpMatchEasy1_1K-46    1.82GB/s ± 0%  1.80GB/s ± 0%  -1.07%  (p=0.008 n=5+5)
      RegexpMatchMedium_32-46   5.99MB/s ± 0%  5.64MB/s ± 1%  -5.77%  (p=0.016 n=4+5)
      RegexpMatchMedium_1K-46   20.7MB/s ± 0%  19.2MB/s ± 0%  -7.25%  (p=0.008 n=5+5)
      RegexpMatchHard_32-46     12.5MB/s ± 1%  11.8MB/s ± 0%  -5.66%  (p=0.008 n=5+5)
      RegexpMatchHard_1K-46     13.3MB/s ± 0%  12.5MB/s ± 1%  -6.01%  (p=0.008 n=5+5)
      Revcomp-46                 402MB/s ± 1%   405MB/s ± 1%    ~     (p=0.095 n=5+5)
      Template-46               23.7MB/s ± 0%  22.5MB/s ± 0%  -5.25%  (p=0.008 n=5+5)
      [Geo mean]                82.2MB/s       79.6MB/s       -3.26%
      
      Disable frame-pointer (GOEXPERIMENT=noframepointer)
      
      name                      old time/op    new time/op    delta
      BinaryTree17-46              5.94s ± 0%     5.96s ± 0%  +0.39%  (p=0.029 n=4+4)
      Fannkuch11-46                2.84s ± 1%     2.79s ± 1%  -1.68%  (p=0.008 n=5+5)
      FmtFprintfEmpty-46          55.0ns ± 1%    55.2ns ± 3%    ~     (p=0.794 n=5+5)
      FmtFprintfString-46          102ns ± 0%     103ns ± 0%  +0.98%  (p=0.016 n=5+4)
      FmtFprintfInt-46             118ns ± 0%     115ns ± 0%  -2.54%  (p=0.029 n=4+4)
      FmtFprintfIntInt-46          181ns ± 0%     179ns ± 0%  -1.10%  (p=0.000 n=5+4)
      FmtFprintfPrefixedInt-46     215ns ± 1%     213ns ± 0%    ~     (p=0.143 n=5+4)
      FmtFprintfFloat-46           292ns ± 0%     300ns ± 0%  +2.83%  (p=0.029 n=4+4)
      FmtManyArgs-46               720ns ± 0%     739ns ± 0%  +2.64%  (p=0.008 n=5+5)
      GobDecode-46                9.82ms ± 1%    9.78ms ± 1%    ~     (p=0.151 n=5+5)
      GobEncode-46                8.14ms ± 0%    8.12ms ± 1%    ~     (p=0.690 n=5+5)
      Gzip-46                      420ms ± 0%     420ms ± 0%    ~     (p=0.548 n=5+5)
      Gunzip-46                   48.2ms ± 0%    48.0ms ± 0%  -0.33%  (p=0.032 n=5+5)
      HTTPClientServer-46          201µs ± 4%     199µs ± 3%    ~     (p=0.548 n=5+5)
      JSONEncode-46               17.1ms ± 0%    17.2ms ± 0%    ~     (p=0.056 n=5+5)
      JSONDecode-46               88.0ms ± 0%    88.6ms ± 0%  +0.64%  (p=0.008 n=5+5)
      Mandelbrot200-46            5.06ms ± 0%    5.07ms ± 0%    ~     (p=0.548 n=5+5)
      GoParse-46                  5.04ms ± 0%    5.07ms ± 0%  +0.65%  (p=0.008 n=5+5)
      RegexpMatchEasy0_32-46       117ns ± 0%     112ns ± 4%  -4.27%  (p=0.016 n=4+5)
      RegexpMatchEasy0_1K-46       332ns ± 0%     330ns ± 1%    ~     (p=0.095 n=5+5)
      RegexpMatchEasy1_32-46       104ns ± 0%     110ns ± 1%  +5.29%  (p=0.029 n=4+4)
      RegexpMatchEasy1_1K-46       563ns ± 0%     567ns ± 2%    ~     (p=0.151 n=5+5)
      RegexpMatchMedium_32-46      167ns ± 2%     166ns ± 0%    ~     (p=0.333 n=5+4)
      RegexpMatchMedium_1K-46     49.5µs ± 0%    49.6µs ± 0%    ~     (p=0.841 n=5+5)
      RegexpMatchHard_32-46       2.56µs ± 1%    2.49µs ± 0%  -2.81%  (p=0.008 n=5+5)
      RegexpMatchHard_1K-46       77.0µs ± 0%    75.8µs ± 0%  -1.55%  (p=0.008 n=5+5)
      Revcomp-46                   631ms ± 1%     628ms ± 0%    ~     (p=0.095 n=5+5)
      Template-46                 81.8ms ± 0%    84.3ms ± 1%  +3.05%  (p=0.008 n=5+5)
      TimeParse-46                 423ns ± 0%     425ns ± 0%  +0.52%  (p=0.008 n=5+5)
      TimeFormat-46                478ns ± 2%     478ns ± 1%    ~     (p=1.000 n=5+5)
      [Geo mean]                  71.6µs         71.6µs       -0.01%
      
      name                      old speed      new speed      delta
      GobDecode-46              78.1MB/s ± 1%  78.5MB/s ± 1%    ~     (p=0.151 n=5+5)
      GobEncode-46              94.3MB/s ± 0%  94.5MB/s ± 1%    ~     (p=0.690 n=5+5)
      Gzip-46                   46.2MB/s ± 0%  46.2MB/s ± 0%    ~     (p=0.571 n=5+5)
      Gunzip-46                  403MB/s ± 0%   404MB/s ± 0%  +0.33%  (p=0.032 n=5+5)
      JSONEncode-46              114MB/s ± 0%   113MB/s ± 0%    ~     (p=0.056 n=5+5)
      JSONDecode-46             22.0MB/s ± 0%  21.9MB/s ± 0%  -0.64%  (p=0.008 n=5+5)
      GoParse-46                11.5MB/s ± 0%  11.4MB/s ± 0%  -0.64%  (p=0.008 n=5+5)
      RegexpMatchEasy0_32-46     272MB/s ± 0%   285MB/s ± 4%  +4.74%  (p=0.016 n=4+5)
      RegexpMatchEasy0_1K-46    3.08GB/s ± 0%  3.10GB/s ± 1%    ~     (p=0.151 n=5+5)
      RegexpMatchEasy1_32-46     306MB/s ± 0%   290MB/s ± 1%  -5.21%  (p=0.029 n=4+4)
      RegexpMatchEasy1_1K-46    1.82GB/s ± 0%  1.81GB/s ± 2%    ~     (p=0.151 n=5+5)
      RegexpMatchMedium_32-46   5.99MB/s ± 0%  6.02MB/s ± 1%    ~     (p=0.063 n=4+5)
      RegexpMatchMedium_1K-46   20.7MB/s ± 0%  20.7MB/s ± 0%    ~     (p=0.659 n=5+5)
      RegexpMatchHard_32-46     12.5MB/s ± 1%  12.8MB/s ± 0%  +2.88%  (p=0.008 n=5+5)
      RegexpMatchHard_1K-46     13.3MB/s ± 0%  13.5MB/s ± 0%  +1.58%  (p=0.008 n=5+5)
      Revcomp-46                 402MB/s ± 1%   405MB/s ± 0%    ~     (p=0.095 n=5+5)
      Template-46               23.7MB/s ± 0%  23.0MB/s ± 1%  -2.95%  (p=0.008 n=5+5)
      [Geo mean]                82.2MB/s       82.3MB/s       +0.04%
      
      Frame-pointer is enabled on Linux by default but can be disabled by setting: GOEXPERIMENT=noframepointer.
      
      Fixes #10110
      
      Change-Id: I1bfaca6dba29a63009d7c6ab04ed7a1413d9479e
      Reviewed-on: https://go-review.googlesource.com/61511Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      8f4fd3f3
    • Than McIntosh's avatar
      cmd/compile: remove var sorting from DWARF inline generation · 7b88b22a
      Than McIntosh authored
      When generation DWARF inline info records, the current implementation
      includes a sorting pass that reorders a subprogram's child variable
      DIEs based on class (param/auto) and name. This sorting is no longer
      needed, and can cause problems for a debugger (if we want to use the
      DWARF info for creating a call to an optimized function); this patch
      removes it.
      
      Ordering of DWARF subprogram variable/parameter DIEs is still
      deterministic with this change, since it is keyed off the order in
      which vars appear in the pre-inlining function "Dcl" list.
      
      Updates #27039
      
      Change-Id: I3b91290d11bb3b9b36fb61271d80b801841401ee
      Reviewed-on: https://go-review.googlesource.com/131895Reviewed-by: 's avatarHeschi Kreinick <heschi@google.com>
      7b88b22a
    • Ben Shi's avatar
      syscall: skip an unsupported test case on android · 225981f8
      Ben Shi authored
      Lookup is not supported on android, and the test
      syscall/exec_linux_test.go which relies on it will fail on
      android/arm64.
      
      Fixes #27327
      
      Change-Id: I6fdb8992d4634ac7e3689360ff114e9431b5e90c
      Reviewed-on: https://go-review.googlesource.com/131995Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      225981f8
  2. 28 Aug, 2018 13 commits
  3. 27 Aug, 2018 3 commits
    • Ben Shi's avatar
      cmd/compile: optimize arm's comparison · 2b69ad0b
      Ben Shi authored
      The CMP/CMN/TST/TEQ perform similar to SUB/ADD/AND/XOR except
      the result is abondoned, and only NZCV flags are affected.
      
      This CL implements further optimization with them.
      
      1. A micro benchmark test gets more than 9% improvment.
      TSTTEQ-4                   6.99ms ± 0%    6.35ms ± 0%  -9.15%  (p=0.000 n=33+36)
      (https://github.com/benshi001/ugo1/blob/master/tstteq2_test.go)
      
      2. The go1 benckmark shows no regression, excluding noise.
      name                     old time/op    new time/op    delta
      BinaryTree17-4              25.7s ± 1%     25.7s ± 1%    ~     (p=0.830 n=40+40)
      Fannkuch11-4                13.3s ± 0%     13.2s ± 0%  -0.65%  (p=0.000 n=40+34)
      FmtFprintfEmpty-4           394ns ± 0%     394ns ± 0%    ~     (p=0.819 n=40+40)
      FmtFprintfString-4          677ns ± 0%     677ns ± 0%  +0.06%  (p=0.039 n=39+40)
      FmtFprintfInt-4             707ns ± 0%     706ns ± 0%  -0.14%  (p=0.000 n=40+39)
      FmtFprintfIntInt-4         1.04µs ± 0%    1.04µs ± 0%  +0.10%  (p=0.000 n=29+31)
      FmtFprintfPrefixedInt-4    1.10µs ± 0%    1.11µs ± 0%  +0.65%  (p=0.000 n=39+37)
      FmtFprintfFloat-4          2.27µs ± 0%    2.26µs ± 0%  -0.53%  (p=0.000 n=39+40)
      FmtManyArgs-4              3.96µs ± 0%    3.96µs ± 0%  +0.10%  (p=0.000 n=39+40)
      GobDecode-4                53.4ms ± 1%    52.8ms ± 2%  -1.10%  (p=0.000 n=39+39)
      GobEncode-4                50.3ms ± 3%    50.4ms ± 2%    ~     (p=0.089 n=40+39)
      Gzip-4                      2.62s ± 0%     2.64s ± 0%  +0.60%  (p=0.000 n=40+39)
      Gunzip-4                    312ms ± 0%     312ms ± 0%  +0.02%  (p=0.030 n=40+39)
      HTTPClientServer-4         1.01ms ± 7%    0.98ms ± 7%  -2.37%  (p=0.000 n=40+39)
      JSONEncode-4                126ms ± 1%     126ms ± 1%  -0.38%  (p=0.004 n=39+39)
      JSONDecode-4                423ms ± 0%     426ms ± 2%  +0.72%  (p=0.001 n=39+40)
      Mandelbrot200-4            18.4ms ± 0%    18.4ms ± 0%  +0.04%  (p=0.000 n=38+40)
      GoParse-4                  22.8ms ± 0%    22.6ms ± 0%  -0.68%  (p=0.000 n=35+40)
      RegexpMatchEasy0_32-4       699ns ± 0%     704ns ± 0%  +0.73%  (p=0.000 n=27+40)
      RegexpMatchEasy0_1K-4      4.27µs ± 0%    4.26µs ± 0%  -0.09%  (p=0.000 n=35+38)
      RegexpMatchEasy1_32-4       741ns ± 0%     735ns ± 0%  -0.85%  (p=0.000 n=40+35)
      RegexpMatchEasy1_1K-4      5.53µs ± 0%    5.49µs ± 0%  -0.69%  (p=0.000 n=39+40)
      RegexpMatchMedium_32-4     1.07µs ± 0%    1.04µs ± 2%  -2.34%  (p=0.000 n=40+40)
      RegexpMatchMedium_1K-4      261µs ± 0%     261µs ± 0%  -0.16%  (p=0.000 n=40+39)
      RegexpMatchHard_32-4       14.9µs ± 0%    14.9µs ± 0%  -0.18%  (p=0.000 n=39+40)
      RegexpMatchHard_1K-4        445µs ± 0%     446µs ± 0%  +0.09%  (p=0.000 n=36+34)
      Revcomp-4                  41.8ms ± 1%    41.8ms ± 1%    ~     (p=0.595 n=39+38)
      Template-4                  530ms ± 1%     528ms ± 1%  -0.49%  (p=0.000 n=40+40)
      TimeParse-4                3.39µs ± 0%    3.42µs ± 0%  +0.98%  (p=0.000 n=36+38)
      TimeFormat-4               6.12µs ± 0%    6.07µs ± 0%  -0.81%  (p=0.000 n=34+38)
      [Geo mean]                  384µs          383µs       -0.24%
      
      name                     old speed      new speed      delta
      GobDecode-4              14.4MB/s ± 1%  14.5MB/s ± 2%  +1.11%  (p=0.000 n=39+39)
      GobEncode-4              15.3MB/s ± 3%  15.2MB/s ± 2%    ~     (p=0.104 n=40+39)
      Gzip-4                   7.40MB/s ± 1%  7.36MB/s ± 0%  -0.60%  (p=0.000 n=40+39)
      Gunzip-4                 62.2MB/s ± 0%  62.1MB/s ± 0%  -0.02%  (p=0.047 n=40+39)
      JSONEncode-4             15.4MB/s ± 1%  15.4MB/s ± 2%  +0.39%  (p=0.002 n=39+39)
      JSONDecode-4             4.59MB/s ± 0%  4.56MB/s ± 2%  -0.71%  (p=0.000 n=39+40)
      GoParse-4                2.54MB/s ± 0%  2.56MB/s ± 0%  +0.72%  (p=0.000 n=26+40)
      RegexpMatchEasy0_32-4    45.8MB/s ± 0%  45.4MB/s ± 0%  -0.75%  (p=0.000 n=38+40)
      RegexpMatchEasy0_1K-4     240MB/s ± 0%   240MB/s ± 0%  +0.09%  (p=0.000 n=35+38)
      RegexpMatchEasy1_32-4    43.1MB/s ± 0%  43.5MB/s ± 0%  +0.84%  (p=0.000 n=40+39)
      RegexpMatchEasy1_1K-4     185MB/s ± 0%   186MB/s ± 0%  +0.69%  (p=0.000 n=39+40)
      RegexpMatchMedium_32-4    936kB/s ± 1%   959kB/s ± 2%  +2.38%  (p=0.000 n=40+40)
      RegexpMatchMedium_1K-4   3.92MB/s ± 0%  3.93MB/s ± 0%  +0.18%  (p=0.000 n=39+40)
      RegexpMatchHard_32-4     2.15MB/s ± 0%  2.15MB/s ± 0%  +0.19%  (p=0.000 n=40+40)
      RegexpMatchHard_1K-4     2.30MB/s ± 0%  2.30MB/s ± 0%    ~     (all equal)
      Revcomp-4                60.8MB/s ± 1%  60.8MB/s ± 1%    ~     (p=0.600 n=39+38)
      Template-4               3.66MB/s ± 1%  3.68MB/s ± 1%  +0.46%  (p=0.000 n=40+40)
      [Geo mean]               12.8MB/s       12.8MB/s       +0.27%
      
      Change-Id: I849161169ecf0876a04b7c1d3990fa8d1435215e
      Reviewed-on: https://go-review.googlesource.com/122855
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
      2b69ad0b
    • Ben Shi's avatar
      cmd/compile: add missing type information for some arm/arm64 rules · 096229b2
      Ben Shi authored
      Some indexed load/store rules lack of type information, and this
      CL adds that for them.
      
      Change-Id: Icac315ccb83a2f5bf30b056d4667d5b59eb4e5e2
      Reviewed-on: https://go-review.googlesource.com/128455Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      096229b2
    • Benny Siegert's avatar
      cmd/dist: do not run race detector tests on netbsd · 7334904e
      Benny Siegert authored
      The race detector is not fully functional on NetBSD yet. Without
      this change, all.bash fails in TestOutput.
      
      This unbreaks the netbsd-amd64 builder.
      
      Update #26403
      Fixes #27268
      
      Change-Id: I2c7015692d3632aa1037f40155d4fc5c7bb1d8c3
      Reviewed-on: https://go-review.googlesource.com/131555Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      7334904e
  4. 26 Aug, 2018 6 commits
  5. 25 Aug, 2018 7 commits
    • Daniel Martí's avatar
      encoding/json: remove a branch in the structEncoder loop · c21ba224
      Daniel Martí authored
      Encoders like map and array can use the much cheaper "i > 0" check to
      see if we're not writing the first element. However, since struct fields
      support omitempty, we need to keep track of that separately.
      
      This is much more expensive - after calling the field encoder itself,
      and retrieving the field via reflection, this branch was the third most
      expensive piece of this field loop.
      
      Instead, hoist the branch logic outside of the loop. The code doesn't
      get much more complex, since we just delay the writing of each byte
      until the next iteration. Yet the performance improvement is noticeable,
      even when the struct types in CodeEncoder only have 2 and 7 fields,
      respectively.
      
      name           old time/op    new time/op    delta
      CodeEncoder-4    5.39ms ± 0%    5.31ms ± 0%  -1.37%  (p=0.010 n=4+6)
      
      name           old speed      new speed      delta
      CodeEncoder-4   360MB/s ± 0%   365MB/s ± 0%  +1.39%  (p=0.010 n=4+6)
      
      Updates #5683.
      
      Change-Id: I2662cf459e0dfd68e56fa52bc898a417e84266c2
      Reviewed-on: https://go-review.googlesource.com/131401
      Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      c21ba224
    • Daniel Martí's avatar
      encoding/json: avoid some more pointer receivers · 88f4bcce
      Daniel Martí authored
      A few encoder struct types, such as map and slice, only encapsulate
      other prepared encoder funcs. Using pointer receivers has no advantage,
      and makes calling these methods slightly more expensive.
      
      Not a huge performance win, but certainly an easy one. The struct types
      used in the benchmark below contain one slice field and one pointer
      field.
      
      name           old time/op    new time/op    delta
      CodeEncoder-4    5.48ms ± 0%    5.39ms ± 0%  -1.66%  (p=0.010 n=6+4)
      
      name           old speed      new speed      delta
      CodeEncoder-4   354MB/s ± 0%   360MB/s ± 0%  +1.69%  (p=0.010 n=6+4)
      
      Updates #5683.
      
      Change-Id: I9f78dbe07fcc6fbf19a6d96c22f5d6970db9eca4
      Reviewed-on: https://go-review.googlesource.com/131400
      Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      88f4bcce
    • Brad Fitzpatrick's avatar
      net/http: make Transport return Writable Response.Body on protocol switch · 54162040
      Brad Fitzpatrick authored
      Updates #26937
      Updates #17227
      
      Change-Id: I79865938b05c219e1947822e60e4f52bb2604b70
      Reviewed-on: https://go-review.googlesource.com/131279Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      54162040
    • Goo's avatar
      src/make.bat: add missing go.exe extension · 30b080e0
      Goo authored
      Got error:
      'go' is not an internal or external command, nor is it a runnable program
      
      Change-Id: Ie45a3a12252fa01b67ca09ef8fbb5b4bbf728fe7
      GitHub-Last-Rev: 451815cacd9bfc509fa0aab3be54303797e605a2
      GitHub-Pull-Request: golang/go#27214
      Reviewed-on: https://go-review.googlesource.com/131397Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      30b080e0
    • Florin Pățan's avatar
      cmd/dist: fix compilation on windows · d145d923
      Florin Pățan authored
      Add missing extensions to binary files in order to allow execution.
      
      Change-Id: Idfe4c72c80c26b7b938023bc7bbe1ef85e1aa7b0
      
      Change-Id: Idfe4c72c80c26b7b938023bc7bbe1ef85e1aa7b0
      GitHub-Last-Rev: ed9d8124270c30b7f25f89656432ef5089466c7e
      GitHub-Pull-Request: golang/go#26464
      Reviewed-on: https://go-review.googlesource.com/124936
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      d145d923
    • Ian Lance Taylor's avatar
      cmd/go: don't let script grep commands match $WORK · f2ed3e1d
      Ian Lance Taylor authored
      If $WORK happens to contain the string that a stdout/stderr/grep
      command is searching for, a negative grep command will fail incorrectly.
      
      Fixes #27170
      Fixes #27221
      
      Change-Id: I84454d3c42360fe3295c7235d388381525eb85b4
      Reviewed-on: https://go-review.googlesource.com/131398
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBryan C. Mills <bcmills@google.com>
      f2ed3e1d
    • Ben Shi's avatar
      cmd/compile: optimize 386 code with FLDPI · e03220a5
      Ben Shi authored
      FLDPI pushes the constant pi to 387's register stack, which is
      more efficient than MOVSSconst/MOVSDconst.
      
      1. This optimization reduces 0.3KB of the total size of pkg/linux_386
      (exlcuding cmd/compile).
      
      2. There is little regression in the go1 benchmark.
      name                     old time/op    new time/op    delta
      BinaryTree17-4              3.30s ± 3%     3.30s ± 2%    ~     (p=0.759 n=40+39)
      Fannkuch11-4                3.53s ± 1%     3.54s ± 1%    ~     (p=0.168 n=40+40)
      FmtFprintfEmpty-4          45.5ns ± 3%    45.6ns ± 3%    ~     (p=0.553 n=40+40)
      FmtFprintfString-4         78.4ns ± 3%    78.3ns ± 3%    ~     (p=0.593 n=40+40)
      FmtFprintfInt-4            88.8ns ± 2%    89.9ns ± 2%    ~     (p=0.083 n=40+33)
      FmtFprintfIntInt-4          140ns ± 4%     140ns ± 4%    ~     (p=0.656 n=40+40)
      FmtFprintfPrefixedInt-4     180ns ± 2%     181ns ± 3%  +0.53%  (p=0.050 n=40+40)
      FmtFprintfFloat-4           408ns ± 4%     411ns ± 3%    ~     (p=0.112 n=40+40)
      FmtManyArgs-4               599ns ± 3%     602ns ± 3%    ~     (p=0.784 n=40+40)
      GobDecode-4                7.24ms ± 6%    7.30ms ± 5%    ~     (p=0.171 n=40+40)
      GobEncode-4                6.98ms ± 5%    6.89ms ± 8%    ~     (p=0.107 n=40+40)
      Gzip-4                      396ms ± 4%     396ms ± 3%    ~     (p=0.852 n=40+40)
      Gunzip-4                   41.3ms ± 3%    41.5ms ± 4%    ~     (p=0.221 n=40+40)
      HTTPClientServer-4         63.4µs ± 3%    63.4µs ± 2%    ~     (p=0.895 n=39+40)
      JSONEncode-4               17.5ms ± 2%    17.5ms ± 3%    ~     (p=0.090 n=40+40)
      JSONDecode-4               60.6ms ± 3%    60.1ms ± 4%    ~     (p=0.184 n=40+40)
      Mandelbrot200-4            7.80ms ± 3%    7.78ms ± 2%    ~     (p=0.512 n=40+40)
      GoParse-4                  3.30ms ± 3%    3.28ms ± 2%  -0.61%  (p=0.034 n=40+40)
      RegexpMatchEasy0_32-4       104ns ± 4%     103ns ± 4%    ~     (p=0.118 n=40+40)
      RegexpMatchEasy0_1K-4       850ns ± 2%     848ns ± 2%    ~     (p=0.370 n=40+40)
      RegexpMatchEasy1_32-4       112ns ± 4%     112ns ± 4%    ~     (p=0.848 n=40+40)
      RegexpMatchEasy1_1K-4      1.04µs ± 4%    1.03µs ± 4%    ~     (p=0.333 n=40+40)
      RegexpMatchMedium_32-4      132ns ± 4%     131ns ± 3%    ~     (p=0.527 n=40+40)
      RegexpMatchMedium_1K-4     43.4µs ± 3%    43.5µs ± 3%    ~     (p=0.111 n=40+40)
      RegexpMatchHard_32-4       2.24µs ± 4%    2.24µs ± 4%    ~     (p=0.441 n=40+40)
      RegexpMatchHard_1K-4       67.9µs ± 3%    68.0µs ± 3%    ~     (p=0.095 n=40+40)
      Revcomp-4                   1.84s ± 2%     1.84s ± 2%    ~     (p=0.677 n=40+40)
      Template-4                 68.4ms ± 3%    68.6ms ± 3%    ~     (p=0.345 n=40+40)
      TimeParse-4                 433ns ± 3%     433ns ± 3%    ~     (p=0.403 n=40+40)
      TimeFormat-4                407ns ± 3%     406ns ± 3%    ~     (p=0.900 n=40+40)
      [Geo mean]                 67.1µs         67.2µs       +0.04%
      
      name                     old speed      new speed      delta
      GobDecode-4               106MB/s ± 5%   105MB/s ± 5%    ~     (p=0.173 n=40+40)
      GobEncode-4               110MB/s ± 5%   112MB/s ± 9%    ~     (p=0.104 n=40+40)
      Gzip-4                   49.0MB/s ± 4%  49.1MB/s ± 4%    ~     (p=0.836 n=40+40)
      Gunzip-4                  471MB/s ± 3%   468MB/s ± 4%    ~     (p=0.218 n=40+40)
      JSONEncode-4              111MB/s ± 2%   111MB/s ± 3%    ~     (p=0.090 n=40+40)
      JSONDecode-4             32.0MB/s ± 3%  32.3MB/s ± 4%    ~     (p=0.194 n=40+40)
      GoParse-4                17.6MB/s ± 3%  17.7MB/s ± 2%  +0.62%  (p=0.035 n=40+40)
      RegexpMatchEasy0_32-4     307MB/s ± 4%   309MB/s ± 4%  +0.70%  (p=0.041 n=40+40)
      RegexpMatchEasy0_1K-4    1.20GB/s ± 3%  1.21GB/s ± 2%    ~     (p=0.353 n=40+40)
      RegexpMatchEasy1_32-4     285MB/s ± 3%   284MB/s ± 4%    ~     (p=0.384 n=40+40)
      RegexpMatchEasy1_1K-4     988MB/s ± 4%   992MB/s ± 3%    ~     (p=0.335 n=40+40)
      RegexpMatchMedium_32-4   7.56MB/s ± 4%  7.57MB/s ± 4%    ~     (p=0.314 n=40+40)
      RegexpMatchMedium_1K-4   23.6MB/s ± 3%  23.6MB/s ± 3%    ~     (p=0.107 n=40+40)
      RegexpMatchHard_32-4     14.3MB/s ± 4%  14.3MB/s ± 4%    ~     (p=0.429 n=40+40)
      RegexpMatchHard_1K-4     15.1MB/s ± 3%  15.1MB/s ± 3%    ~     (p=0.099 n=40+40)
      Revcomp-4                 138MB/s ± 2%   138MB/s ± 2%    ~     (p=0.658 n=40+40)
      Template-4               28.4MB/s ± 3%  28.3MB/s ± 3%    ~     (p=0.331 n=40+40)
      [Geo mean]               80.8MB/s       80.8MB/s       +0.09%
      
      Change-Id: I0cb715eead68ade097a302e7fb80ccbd1d1b511e
      Reviewed-on: https://go-review.googlesource.com/130975
      Run-TryBot: Ben Shi <powerman1st@163.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      e03220a5
  6. 24 Aug, 2018 8 commits
    • Ben Shi's avatar
      cmd/compile: introduce more read-modify-write operations for amd64 · 3bc34385
      Ben Shi authored
      Add suport of read-modify-write for AND/SUB/AND/OR/XOR on amd64.
      
      1. The total size of pkg/linux_amd64 decreases about 4KB, excluding
      cmd/compile.
      
      2. The go1 benchmark shows a little improvement, excluding noise.
      
      name                     old time/op    new time/op    delta
      BinaryTree17-4              2.63s ± 3%     2.65s ± 4%   +1.01%  (p=0.037 n=35+35)
      Fannkuch11-4                2.33s ± 2%     2.39s ± 2%   +2.49%  (p=0.000 n=35+35)
      FmtFprintfEmpty-4          45.4ns ± 5%    40.8ns ± 6%  -10.09%  (p=0.000 n=35+35)
      FmtFprintfString-4         73.3ns ± 4%    70.9ns ± 3%   -3.23%  (p=0.000 n=30+35)
      FmtFprintfInt-4            79.9ns ± 4%    79.5ns ± 3%     ~     (p=0.736 n=34+35)
      FmtFprintfIntInt-4          126ns ± 4%     125ns ± 4%     ~     (p=0.083 n=35+35)
      FmtFprintfPrefixedInt-4     152ns ± 6%     152ns ± 3%     ~     (p=0.855 n=34+35)
      FmtFprintfFloat-4           215ns ± 4%     213ns ± 4%     ~     (p=0.066 n=35+35)
      FmtManyArgs-4               522ns ± 3%     506ns ± 3%   -3.15%  (p=0.000 n=35+35)
      GobDecode-4                6.45ms ± 8%    6.51ms ± 7%   +0.96%  (p=0.026 n=35+35)
      GobEncode-4                6.10ms ± 6%    6.02ms ± 8%     ~     (p=0.160 n=35+35)
      Gzip-4                      228ms ± 3%     221ms ± 3%   -2.92%  (p=0.000 n=35+35)
      Gunzip-4                   37.5ms ± 4%    37.2ms ± 3%   -0.78%  (p=0.036 n=35+35)
      HTTPClientServer-4         58.7µs ± 2%    59.2µs ± 1%   +0.80%  (p=0.000 n=33+33)
      JSONEncode-4               12.0ms ± 3%    12.2ms ± 3%   +1.84%  (p=0.008 n=35+35)
      JSONDecode-4               57.0ms ± 4%    56.6ms ± 3%     ~     (p=0.320 n=35+35)
      Mandelbrot200-4            3.82ms ± 3%    3.79ms ± 3%     ~     (p=0.074 n=35+35)
      GoParse-4                  3.21ms ± 5%    3.24ms ± 4%     ~     (p=0.119 n=35+35)
      RegexpMatchEasy0_32-4      76.3ns ± 4%    75.4ns ± 4%   -1.14%  (p=0.014 n=34+33)
      RegexpMatchEasy0_1K-4       251ns ± 4%     254ns ± 3%   +1.28%  (p=0.016 n=35+35)
      RegexpMatchEasy1_32-4      69.6ns ± 3%    70.1ns ± 3%   +0.82%  (p=0.005 n=35+35)
      RegexpMatchEasy1_1K-4       367ns ± 4%     376ns ± 4%   +2.47%  (p=0.000 n=35+35)
      RegexpMatchMedium_32-4      108ns ± 5%     104ns ± 4%   -3.18%  (p=0.000 n=35+35)
      RegexpMatchMedium_1K-4     33.8µs ± 3%    32.7µs ± 3%   -3.27%  (p=0.000 n=35+35)
      RegexpMatchHard_32-4       1.55µs ± 3%    1.52µs ± 3%   -1.64%  (p=0.000 n=35+35)
      RegexpMatchHard_1K-4       46.6µs ± 3%    46.6µs ± 4%     ~     (p=0.149 n=35+35)
      Revcomp-4                   416ms ± 7%     412ms ± 6%   -0.95%  (p=0.033 n=33+35)
      Template-4                 64.3ms ± 3%    62.4ms ± 7%   -2.94%  (p=0.000 n=35+35)
      TimeParse-4                 320ns ± 2%     322ns ± 3%     ~     (p=0.589 n=35+35)
      TimeFormat-4                300ns ± 3%     300ns ± 3%     ~     (p=0.597 n=35+35)
      [Geo mean]                 47.4µs         47.0µs        -0.86%
      
      name                     old speed      new speed      delta
      GobDecode-4               119MB/s ± 7%   118MB/s ± 7%   -0.96%  (p=0.027 n=35+35)
      GobEncode-4               126MB/s ± 7%   127MB/s ± 6%     ~     (p=0.157 n=34+34)
      Gzip-4                   85.3MB/s ± 3%  87.9MB/s ± 3%   +3.02%  (p=0.000 n=35+35)
      Gunzip-4                  518MB/s ± 4%   522MB/s ± 3%   +0.79%  (p=0.037 n=35+35)
      JSONEncode-4              162MB/s ± 3%   159MB/s ± 3%   -1.81%  (p=0.009 n=35+35)
      JSONDecode-4             34.1MB/s ± 4%  34.3MB/s ± 3%     ~     (p=0.318 n=35+35)
      GoParse-4                18.0MB/s ± 5%  17.9MB/s ± 4%     ~     (p=0.117 n=35+35)
      RegexpMatchEasy0_32-4     419MB/s ± 3%   425MB/s ± 4%   +1.46%  (p=0.003 n=32+33)
      RegexpMatchEasy0_1K-4    4.07GB/s ± 4%  4.02GB/s ± 3%   -1.28%  (p=0.014 n=35+35)
      RegexpMatchEasy1_32-4     460MB/s ± 3%   456MB/s ± 4%   -0.82%  (p=0.004 n=35+35)
      RegexpMatchEasy1_1K-4    2.79GB/s ± 4%  2.72GB/s ± 4%   -2.39%  (p=0.000 n=35+35)
      RegexpMatchMedium_32-4   9.23MB/s ± 4%  9.53MB/s ± 4%   +3.16%  (p=0.000 n=35+35)
      RegexpMatchMedium_1K-4   30.3MB/s ± 3%  31.3MB/s ± 3%   +3.38%  (p=0.000 n=35+35)
      RegexpMatchHard_32-4     20.7MB/s ± 3%  21.0MB/s ± 3%   +1.67%  (p=0.000 n=35+35)
      RegexpMatchHard_1K-4     22.0MB/s ± 3%  21.9MB/s ± 4%     ~     (p=0.277 n=35+33)
      Revcomp-4                 612MB/s ± 7%   618MB/s ± 6%   +0.96%  (p=0.034 n=33+35)
      Template-4               30.2MB/s ± 3%  31.1MB/s ± 6%   +3.05%  (p=0.000 n=35+35)
      [Geo mean]                123MB/s        124MB/s        +0.64%
      
      Change-Id: Ia025da272e07d0069413824bfff3471b106d6280
      Reviewed-on: https://go-review.googlesource.com/121535
      Run-TryBot: Ben Shi <powerman1st@163.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarIlya Tocar <ilya.tocar@intel.com>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      3bc34385
    • Shenghou Ma's avatar
      doc/go1.11: fix typo · aacc891d
      Shenghou Ma authored
      Change-Id: I097bd90f62add7838f8c7baf3b777ad167635354
      Reviewed-on: https://go-review.googlesource.com/131357Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      aacc891d
    • Keith Randall's avatar
      cmd/compile: remove vet-blocking hack · 4a4e3b0b
      Keith Randall authored
      ...and add the vet failures to the vet whitelist.
      
      Change-Id: Idcf4289f39dda561c85f3b0afe396e5299e6495f
      Reviewed-on: https://go-review.googlesource.com/127995
      Run-TryBot: Keith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarDavid Chase <drchase@google.com>
      4a4e3b0b
    • Keith Randall's avatar
      cmd/compile: enable two orphaned tests · 707fd452
      Keith Randall authored
      These tests weren't being run.  Re-enable them.
      
      R=go1.12
      
      Change-Id: I8d3cd09b7f07e4c39f855ddb9be000718ec86494
      Reviewed-on: https://go-review.googlesource.com/127117
      Run-TryBot: Keith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarDavid Chase <drchase@google.com>
      707fd452
    • Keith Randall's avatar
      cmd/compile: move last compile tests to new test infrastructure · dca709da
      Keith Randall authored
      R=go1.12
      
      Fixes #26469
      
      Change-Id: Idbba88ef60f15a0ec9a83c78541a4d4fb63e534a
      Reviewed-on: https://go-review.googlesource.com/127116Reviewed-by: 's avatarDavid Chase <drchase@google.com>
      dca709da
    • Keith Randall's avatar
      cmd/compile: move more compiler tests to new test infrastructure · 25ea4e57
      Keith Randall authored
      Update #26469
      
      Change-Id: I1188e49cde1bda11506afef6b6e3f34c6ff45ea5
      Reviewed-on: https://go-review.googlesource.com/127115
      Run-TryBot: Keith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarDavid Chase <drchase@google.com>
      25ea4e57
    • Keith Randall's avatar
      reflect: use a bigger object when we need a finalizer to run · 78ce3a03
      Keith Randall authored
      If an object is allocated as part of a tinyalloc, then other live
      objects in the same tinyalloc chunk keep the finalizer from being run,
      even if the object that has the finalizer is dead.
      
      Make sure the object we're setting the finalizer on is big enough
      to not trigger tinyalloc allocation.
      
      Fixes #26857
      Update #21717
      
      Change-Id: I56ad8679426283237ebff20a0da6c9cf64eb1c27
      Reviewed-on: https://go-review.googlesource.com/128475
      Run-TryBot: Keith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarAustin Clements <austin@google.com>
      Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
      78ce3a03
    • Keith Randall's avatar
      cmd/compile: move autogenerated tests to new infrastructure · 776298ab
      Keith Randall authored
      Update #26469
      
      R=go1.12
      
      Change-Id: Ib9a00ee5e98371769669bb9cad58320b66127374
      Reviewed-on: https://go-review.googlesource.com/127095
      Run-TryBot: Keith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarDavid Chase <drchase@google.com>
      776298ab