1. 31 Mar, 2017 7 commits
    • Austin Clements's avatar
      runtime: simplify heap profile flushing · 1be3e76e
      Austin Clements authored
      Currently the heap profile is flushed by *either* gcSweep in STW mode
      or by gcMarkTermination in concurrent mode. Simplify this by making
      gcMarkTermination always flush the heap profile and by making gcSweep
      do one extra flush (instead of two) in STW mode.
      
      Change-Id: I62147afb2a128e1f3d92ef4bb8144c8a345f53c4
      Reviewed-on: https://go-review.googlesource.com/37715
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarRick Hudson <rlh@golang.org>
      1be3e76e
    • Austin Clements's avatar
      runtime: snapshot heap profile during mark termination · eee85fc5
      Austin Clements authored
      Currently we snapshot the heap profile just *after* mark termination
      starts the world because it's a relatively expensive operation.
      However, this means any alloc or free events that happen between
      starting the world and snapshotting the heap profile can be accounted
      to the wrong cycle. In the worst case, a free can be accounted to the
      cycle before the alloc; if the heap is small, this can result
      temporarily in a negative "in use" count in the profile.
      
      Fix this without making STW more expensive by using a global heap
      profile cycle counter. This lets us split up the operation into a two
      parts: 1) a super-cheap snapshot operation that simply increments the
      global cycle counter during STW, and 2) a more expensive cleanup
      operation we can do after starting the world that frees up a slot in
      all buckets for use by the next heap profile cycle.
      
      Fixes #19311.
      
      Change-Id: I6bdafabf111c48b3d26fe2d91267f7bef0bd4270
      Reviewed-on: https://go-review.googlesource.com/37714
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarRick Hudson <rlh@golang.org>
      eee85fc5
    • Austin Clements's avatar
      runtime: pull heap profile cycle into a type · 3ebe7d7d
      Austin Clements authored
      Currently memRecord has the same set of four fields repeated three
      times. Pull these into a type and use this type three times. This
      cleans up and simplifies the code a bit and will make it easier to
      switch to a globally tracked heap profile cycle for #19311.
      
      Change-Id: I414d15673feaa406a8366b48784437c642997cf2
      Reviewed-on: https://go-review.googlesource.com/37713
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarRick Hudson <rlh@golang.org>
      3ebe7d7d
    • Robert Griesemer's avatar
      cmd/compile: remove confusing comment, fix comment for symExport · 42aa608f
      Robert Griesemer authored
      The symExport flag tells whether a symbol is in the export list
      already or not (and it's also used to avoid being added to that
      list). Exporting is based on that export list - no need to check
      again.
      
      Change-Id: I6056f97aa5c24a19376957da29199135c8da35f9
      Reviewed-on: https://go-review.googlesource.com/39033Reviewed-by: 's avatarDave Cheney <dave@cheney.net>
      42aa608f
    • Austin Clements's avatar
      runtime: diagram flow of stats through heap profile · 673a8fdf
      Austin Clements authored
      Every time I modify heap profiling, I find myself redrawing this
      diagram, so add it to the comments. This shows how allocations and
      frees are accounted, how we arrive at consistent profile snapshots,
      and when those snapshots are published to the user.
      
      Change-Id: I106aba1200af3c773b46e24e5f50205e808e2c69
      Reviewed-on: https://go-review.googlesource.com/37514
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarRick Hudson <rlh@golang.org>
      673a8fdf
    • Austin Clements's avatar
      runtime: improve TestMemStats checks · ef1829d1
      Austin Clements authored
      Now that we have a nice predicate system, improve the tests performed
      by TestMemStats. We add some more non-zero checks (now that we force a
      GC, things like NumGC must be non-zero), checks for trivial boolean
      fields, and a few more range checks.
      
      Change-Id: I6da46d33fa0ce5738407ee57d587825479413171
      Reviewed-on: https://go-review.googlesource.com/37513
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarRick Hudson <rlh@golang.org>
      ef1829d1
    • Austin Clements's avatar
      runtime: make TestMemStats failure messages useful · bda74b0e
      Austin Clements authored
      Currently most TestMemStats failures dump the whole MemStats object if
      anything is amiss without telling you what is amiss, or even which
      field is wrong. This makes it hard to figure out what the actual
      problem is.
      
      Replace this with a reflection walk over MemStats and a map of
      predicates to check. If one fails, we can construct a detailed and
      descriptive error message. The predicates are a direct translation of
      the current tests.
      
      Change-Id: I5a7cafb8e6a1eeab653d2e18bb74e2245eaa5444
      Reviewed-on: https://go-review.googlesource.com/37512
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarRick Hudson <rlh@golang.org>
      bda74b0e
  2. 30 Mar, 2017 25 commits
  3. 29 Mar, 2017 8 commits
    • Elias Naur's avatar
      misc/cgo/testcshared: use the gold linker on android/arm64 · 23f56c18
      Elias Naur authored
      The gold linker is used by default in the Android NDK, except on
      arm64:
      
      https://github.com/android-ndk/ndk/issues/148
      
      The Go linker already forces the use of the gold linker on arm and
      arm64 (CL 22141) for other reasons. However, the test.bash script in
      testcshared doesn't, resulting in linker errors on android/arm64:
      
      warning: liblog.so, needed by ./libgo.so, not found (try using -rpath or
      -rpath-link)
      
      Add -fuse-ld=gold when running testcshared on Android. Fixes the
      android/arm64 builder.
      
      Change-Id: I35ca96f01f136bae72bec56d71b7ca3f344df1ed
      Reviewed-on: https://go-review.googlesource.com/38832
      Run-TryBot: Elias Naur <elias.naur@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      23f56c18
    • Caleb Spare's avatar
      runtime: fix for implementation notes appearing in godoc · 592037f3
      Caleb Spare authored
      Change-Id: I31cfae1e98313b68e3bc8f49079491d2725a662b
      Reviewed-on: https://go-review.googlesource.com/38850Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      592037f3
    • Ilya Tocar's avatar
      math: speed up Log on amd64 · 4f579cc6
      Ilya Tocar authored
      After https://golang.org/cl/31490 we break false
      output dependency for CVTS.. in compiler generated code.
      I've looked through asm code, which uses CVTS..
      and added XOR to the only case where it affected performance.
      
      Log-6                  21.6ns ± 0%  19.9ns ± 0%  -7.87%  (p=0.000 n=10+10)
      
      Change-Id: I25d9b405e3041a3839b40f9f9a52e708034bb347
      Reviewed-on: https://go-review.googlesource.com/38771
      Run-TryBot: Ilya Tocar <ilya.tocar@intel.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      4f579cc6
    • Michael Munday's avatar
      cmd/internal/obj: make morestack cutoff the same on all architectures · 41fd8d64
      Michael Munday authored
      There is always 128 bytes available below the stackguard. Allow functions
      with medium-sized stack frames to use this, potentially allowing them to
      avoid growing the stack.
      
      This change makes all architectures use the same calculation as x86.
      
      Change-Id: I2afb1a7c686ae5a933e50903b31ea4106e4cd0a0
      Reviewed-on: https://go-review.googlesource.com/38734Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
      41fd8d64
    • haya14busa's avatar
      regexp: reduce allocations at makeOnePass · fbe67239
      haya14busa authored
      It reduces needless allocations on compiling onepass regex.
      
      Following CL 38750
      
      name                                      old time/op    new time/op    delta
      CompileOnepass/^(?:(?:(?:.(?:$))?))...-4    5.75µs ± 1%    5.51µs ± 2%   -4.25%  (p=0.008 n=5+5)
      CompileOnepass/^abcd$-4                     4.76µs ± 0%    4.52µs ± 1%   -5.06%  (p=0.008 n=5+5)
      CompileOnepass/^(?:(?:a{0,})*?)$-4          5.56µs ± 0%    5.56µs ± 3%     ~     (p=0.524 n=5+5)
      CompileOnepass/^(?:(?:a+)*)$-4              5.09µs ± 0%    5.15µs ± 5%     ~     (p=0.690 n=5+5)
      CompileOnepass/^(?:(?:a|(?:aa)))$-4         6.53µs ± 0%    6.43µs ± 5%     ~     (p=0.151 n=5+5)
      CompileOnepass/^(?:[^\s\S])$-4              4.05µs ± 1%    4.00µs ± 2%     ~     (p=0.095 n=5+5)
      CompileOnepass/^(?:(?:(?:a*)+))$-4          5.47µs ± 0%    5.36µs ± 1%   -1.91%  (p=0.008 n=5+5)
      CompileOnepass/^[a-c]+$-4                   4.13µs ± 1%    4.05µs ± 0%   -2.07%  (p=0.008 n=5+5)
      CompileOnepass/^[a-c]*$-4                   4.59µs ± 2%    4.93µs ± 7%   +7.30%  (p=0.016 n=5+5)
      CompileOnepass/^(?:a*)$-4                   4.67µs ± 1%    4.82µs ± 8%     ~     (p=0.730 n=4+5)
      CompileOnepass/^(?:(?:aa)|a)$-4             6.43µs ± 1%    6.18µs ± 1%   -3.91%  (p=0.008 n=5+5)
      CompileOnepass/^...$-4                      4.71µs ± 0%    4.31µs ± 1%   -8.51%  (p=0.008 n=5+5)
      CompileOnepass/^(?:a|(?:aa))$-4             6.37µs ± 0%    6.17µs ± 0%   -3.23%  (p=0.008 n=5+5)
      CompileOnepass/^a((b))c$-4                  6.85µs ± 1%    6.50µs ± 1%   -5.15%  (p=0.008 n=5+5)
      CompileOnepass/^a.[l-nA-Cg-j]?e$-4          6.99µs ± 1%    6.66µs ± 1%   -4.81%  (p=0.008 n=5+5)
      CompileOnepass/^a((b))$-4                   6.15µs ± 1%    5.87µs ± 0%   -4.57%  (p=0.008 n=5+5)
      CompileOnepass/^a(?:(b)|(c))c$-4            8.62µs ± 1%    8.21µs ± 1%   -4.77%  (p=0.008 n=5+5)
      CompileOnepass/^a(?:b|c)$-4                 5.76µs ±42%    4.42µs ± 1%  -23.35%  (p=0.008 n=5+5)
      CompileOnepass/^a(?:b?|c)$-4                7.17µs ± 6%    6.86µs ± 0%   -4.39%  (p=0.008 n=5+5)
      CompileOnepass/^a(?:b?|c+)$-4               8.08µs ± 2%    7.67µs ± 2%   -4.97%  (p=0.008 n=5+5)
      CompileOnepass/^a(?:bc)+$-4                 5.53µs ± 3%    5.35µs ± 1%   -3.34%  (p=0.008 n=5+5)
      CompileOnepass/^a(?:[bcd])+$-4              5.08µs ± 1%    4.98µs ± 0%   -2.02%  (p=0.008 n=5+5)
      CompileOnepass/^a((?:[bcd])+)$-4            6.49µs ± 1%    6.29µs ± 1%   -3.03%  (p=0.008 n=5+5)
      CompileOnepass/^a(:?b|c)*d$-4               11.8µs ± 1%    11.4µs ± 3%   -3.98%  (p=0.008 n=5+5)
      CompileOnepass/^.bc(d|e)*$-4                8.02µs ± 1%    7.54µs ± 1%   -6.00%  (p=0.008 n=5+5)
      CompileOnepass/^loooooooooooooooooo...-4     228µs ±18%     196µs ± 0%  -14.02%  (p=0.016 n=5+4)
      
      name                                      old alloc/op   new alloc/op   delta
      CompileOnepass/^(?:(?:(?:.(?:$))?))...-4    3.41kB ± 0%    3.38kB ± 0%   -0.94%  (p=0.008 n=5+5)
      CompileOnepass/^abcd$-4                     2.75kB ± 0%    2.74kB ± 0%   -0.29%  (p=0.008 n=5+5)
      CompileOnepass/^(?:(?:a{0,})*?)$-4          3.34kB ± 0%    3.34kB ± 0%     ~     (all equal)
      CompileOnepass/^(?:(?:a+)*)$-4              2.95kB ± 0%    2.95kB ± 0%     ~     (all equal)
      CompileOnepass/^(?:(?:a|(?:aa)))$-4         3.75kB ± 0%    3.74kB ± 0%   -0.43%  (p=0.008 n=5+5)
      CompileOnepass/^(?:[^\s\S])$-4              2.46kB ± 0%    2.45kB ± 0%   -0.49%  (p=0.008 n=5+5)
      CompileOnepass/^(?:(?:(?:a*)+))$-4          3.13kB ± 0%    3.13kB ± 0%     ~     (all equal)
      CompileOnepass/^[a-c]+$-4                   2.48kB ± 0%    2.48kB ± 0%     ~     (all equal)
      CompileOnepass/^[a-c]*$-4                   2.52kB ± 0%    2.52kB ± 0%     ~     (all equal)
      CompileOnepass/^(?:a*)$-4                   2.63kB ± 0%    2.63kB ± 0%     ~     (all equal)
      CompileOnepass/^(?:(?:aa)|a)$-4             3.64kB ± 0%    3.62kB ± 0%   -0.44%  (p=0.008 n=5+5)
      CompileOnepass/^...$-4                      2.91kB ± 0%    2.87kB ± 0%   -1.37%  (p=0.008 n=5+5)
      CompileOnepass/^(?:a|(?:aa))$-4             3.64kB ± 0%    3.62kB ± 0%   -0.44%  (p=0.008 n=5+5)
      CompileOnepass/^a((b))c$-4                  4.39kB ± 0%    4.38kB ± 0%   -0.18%  (p=0.008 n=5+5)
      CompileOnepass/^a.[l-nA-Cg-j]?e$-4          4.32kB ± 0%    4.30kB ± 0%   -0.56%  (p=0.008 n=5+5)
      CompileOnepass/^a((b))$-4                   4.06kB ± 0%    4.05kB ± 0%   -0.39%  (p=0.008 n=5+5)
      CompileOnepass/^a(?:(b)|(c))c$-4            5.31kB ± 0%    5.30kB ± 0%   -0.15%  (p=0.008 n=5+5)
      CompileOnepass/^a(?:b|c)$-4                 2.88kB ± 0%    2.87kB ± 0%   -0.28%  (p=0.008 n=5+5)
      CompileOnepass/^a(?:b?|c)$-4                4.36kB ± 0%    4.35kB ± 0%   -0.18%  (p=0.008 n=5+5)
      CompileOnepass/^a(?:b?|c+)$-4               4.59kB ± 0%    4.58kB ± 0%   -0.17%  (p=0.008 n=5+5)
      CompileOnepass/^a(?:bc)+$-4                 3.15kB ± 0%    3.15kB ± 0%     ~     (all equal)
      CompileOnepass/^a(?:[bcd])+$-4              2.94kB ± 0%    2.94kB ± 0%     ~     (all equal)
      CompileOnepass/^a((?:[bcd])+)$-4            4.09kB ± 0%    4.08kB ± 0%   -0.20%  (p=0.008 n=5+5)
      CompileOnepass/^a(:?b|c)*d$-4               6.15kB ± 0%    6.10kB ± 0%   -0.78%  (p=0.008 n=5+5)
      CompileOnepass/^.bc(d|e)*$-4                4.47kB ± 0%    4.46kB ± 0%   -0.36%  (p=0.008 n=5+5)
      CompileOnepass/^loooooooooooooooooo...-4     135kB ± 0%     135kB ± 0%     ~     (p=0.810 n=5+5)
      
      name                                      old allocs/op  new allocs/op  delta
      CompileOnepass/^(?:(?:(?:.(?:$))?))...-4      49.0 ± 0%      47.0 ± 0%   -4.08%  (p=0.008 n=5+5)
      CompileOnepass/^abcd$-4                       41.0 ± 0%      41.0 ± 0%     ~     (all equal)
      CompileOnepass/^(?:(?:a{0,})*?)$-4            49.0 ± 0%      49.0 ± 0%     ~     (all equal)
      CompileOnepass/^(?:(?:a+)*)$-4                44.0 ± 0%      44.0 ± 0%     ~     (all equal)
      CompileOnepass/^(?:(?:a|(?:aa)))$-4           54.0 ± 0%      54.0 ± 0%     ~     (all equal)
      CompileOnepass/^(?:[^\s\S])$-4                33.0 ± 0%      33.0 ± 0%     ~     (all equal)
      CompileOnepass/^(?:(?:(?:a*)+))$-4            46.0 ± 0%      46.0 ± 0%     ~     (all equal)
      CompileOnepass/^[a-c]+$-4                     36.0 ± 0%      36.0 ± 0%     ~     (all equal)
      CompileOnepass/^[a-c]*$-4                     41.0 ± 0%      41.0 ± 0%     ~     (all equal)
      CompileOnepass/^(?:a*)$-4                     42.0 ± 0%      42.0 ± 0%     ~     (all equal)
      CompileOnepass/^(?:(?:aa)|a)$-4               53.0 ± 0%      53.0 ± 0%     ~     (all equal)
      CompileOnepass/^...$-4                        43.0 ± 0%      39.0 ± 0%   -9.30%  (p=0.008 n=5+5)
      CompileOnepass/^(?:a|(?:aa))$-4               53.0 ± 0%      53.0 ± 0%     ~     (all equal)
      CompileOnepass/^a((b))c$-4                    53.0 ± 0%      53.0 ± 0%     ~     (all equal)
      CompileOnepass/^a.[l-nA-Cg-j]?e$-4            58.0 ± 0%      56.0 ± 0%   -3.45%  (p=0.008 n=5+5)
      CompileOnepass/^a((b))$-4                     47.0 ± 0%      47.0 ± 0%     ~     (all equal)
      CompileOnepass/^a(?:(b)|(c))c$-4              65.0 ± 0%      65.0 ± 0%     ~     (all equal)
      CompileOnepass/^a(?:b|c)$-4                   40.0 ± 0%      40.0 ± 0%     ~     (all equal)
      CompileOnepass/^a(?:b?|c)$-4                  57.0 ± 0%      57.0 ± 0%     ~     (all equal)
      CompileOnepass/^a(?:b?|c+)$-4                 63.0 ± 0%      63.0 ± 0%     ~     (all equal)
      CompileOnepass/^a(?:bc)+$-4                   46.0 ± 0%      46.0 ± 0%     ~     (all equal)
      CompileOnepass/^a(?:[bcd])+$-4                43.0 ± 0%      43.0 ± 0%     ~     (all equal)
      CompileOnepass/^a((?:[bcd])+)$-4              49.0 ± 0%      49.0 ± 0%     ~     (all equal)
      CompileOnepass/^a(:?b|c)*d$-4                  105 ± 0%       101 ± 0%   -3.81%  (p=0.008 n=5+5)
      CompileOnepass/^.bc(d|e)*$-4                  62.0 ± 0%      60.0 ± 0%   -3.23%  (p=0.008 n=5+5)
      CompileOnepass/^loooooooooooooooooo...-4     1.09k ± 0%     1.09k ± 0%     ~     (all equal)
      
      Fixes #19735
      
      Change-Id: Ib90e18e1b06166407b26b2a68b88afbb1f486024
      Reviewed-on: https://go-review.googlesource.com/38751Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      fbe67239
    • Cherry Zhang's avatar
      cmd/compile: improve startRegs calculation · 8a5175df
      Cherry Zhang authored
      In register allocation, we calculate what values are used in
      and after the current block. If a value is used only after a
      function call, since registers are clobbered in call, we don't
      need to mark the value live at the entrance of the block.
      Before this CL it is considered live, and unnecessary copy or
      load may be generated when resolving merge edge.
      
      Fixes #14761.
      
      On AMD64:
      name                      old time/op    new time/op    delta
      BinaryTree17-12              2.84s ± 1%     2.81s ± 1%   -1.06%  (p=0.000 n=10+9)
      Fannkuch11-12                3.61s ± 0%     3.55s ± 1%   -1.77%  (p=0.000 n=10+9)
      FmtFprintfEmpty-12          50.4ns ± 4%    50.0ns ± 1%     ~     (p=0.785 n=9+8)
      FmtFprintfString-12         80.0ns ± 3%    78.2ns ± 3%   -2.35%  (p=0.004 n=10+9)
      FmtFprintfInt-12            81.3ns ± 4%    81.8ns ± 2%     ~     (p=0.159 n=10+10)
      FmtFprintfIntInt-12          120ns ± 4%     118ns ± 2%     ~     (p=0.218 n=10+10)
      FmtFprintfPrefixedInt-12     152ns ± 3%     155ns ± 2%   +2.11%  (p=0.026 n=10+10)
      FmtFprintfFloat-12           240ns ± 1%     238ns ± 1%   -0.79%  (p=0.005 n=9+9)
      FmtManyArgs-12               504ns ± 1%     510ns ± 1%   +1.14%  (p=0.000 n=8+9)
      GobDecode-12                7.00ms ± 1%    6.99ms ± 0%     ~     (p=0.497 n=9+10)
      GobEncode-12                5.47ms ± 1%    5.48ms ± 1%     ~     (p=0.218 n=10+10)
      Gzip-12                      258ms ± 2%     256ms ± 1%   -0.96%  (p=0.043 n=10+9)
      Gunzip-12                   38.6ms ± 0%    38.3ms ± 0%   -0.64%  (p=0.000 n=9+8)
      HTTPClientServer-12         90.4µs ± 3%    87.2µs ±11%     ~     (p=0.053 n=9+10)
      JSONEncode-12               15.6ms ± 0%    15.6ms ± 1%     ~     (p=0.077 n=9+9)
      JSONDecode-12               55.1ms ± 1%    54.6ms ± 1%   -0.85%  (p=0.010 n=10+9)
      Mandelbrot200-12            4.49ms ± 0%    4.47ms ± 0%   -0.25%  (p=0.000 n=10+8)
      GoParse-12                  3.38ms ± 0%    3.37ms ± 1%     ~     (p=0.315 n=8+10)
      RegexpMatchEasy0_32-12      82.5ns ± 4%    82.0ns ± 0%     ~     (p=0.164 n=10+8)
      RegexpMatchEasy0_1K-12       203ns ± 1%     202ns ± 1%   -0.85%  (p=0.000 n=9+10)
      RegexpMatchEasy1_32-12      82.3ns ± 1%    81.1ns ± 0%   -1.39%  (p=0.000 n=10+8)
      RegexpMatchEasy1_1K-12       357ns ± 1%     357ns ± 1%     ~     (p=0.697 n=8+9)
      RegexpMatchMedium_32-12      125ns ± 2%     126ns ± 2%     ~     (p=0.197 n=10+10)
      RegexpMatchMedium_1K-12     39.6µs ± 3%    39.6µs ± 1%     ~     (p=0.971 n=10+10)
      RegexpMatchHard_32-12       1.99µs ± 2%    1.99µs ± 4%     ~     (p=0.891 n=10+9)
      RegexpMatchHard_1K-12       60.1µs ± 3%    60.4µs ± 3%     ~     (p=0.684 n=10+10)
      Revcomp-12                   531ms ± 6%     441ms ± 0%  -16.94%  (p=0.000 n=10+9)
      Template-12                 58.9ms ± 1%    58.7ms ± 1%     ~     (p=0.315 n=10+10)
      TimeParse-12                 319ns ± 1%     320ns ± 4%     ~     (p=0.215 n=9+9)
      TimeFormat-12                345ns ± 0%     333ns ± 1%   -3.36%  (p=0.000 n=9+10)
      [Geo mean]                  52.2µs         51.6µs        -1.13%
      
      On ARM64:
      name                     old time/op    new time/op    delta
      BinaryTree17-8              8.53s ± 0%     8.36s ± 0%   -1.89%  (p=0.000 n=10+10)
      Fannkuch11-8                6.15s ± 0%     6.10s ± 0%   -0.67%  (p=0.000 n=10+10)
      FmtFprintfEmpty-8           117ns ± 0%     117ns ± 0%     ~     (all equal)
      FmtFprintfString-8          192ns ± 0%     192ns ± 0%     ~     (all equal)
      FmtFprintfInt-8             198ns ± 0%     198ns ± 0%     ~     (p=0.211 n=10+10)
      FmtFprintfIntInt-8          289ns ± 0%     291ns ± 0%   +0.59%  (p=0.000 n=7+10)
      FmtFprintfPrefixedInt-8     320ns ± 2%     317ns ± 0%     ~     (p=0.431 n=10+8)
      FmtFprintfFloat-8           538ns ± 0%     538ns ± 0%     ~     (all equal)
      FmtManyArgs-8              1.17µs ± 1%    1.18µs ± 1%     ~     (p=0.063 n=10+10)
      GobDecode-8                17.0ms ± 1%    17.2ms ± 1%   +0.83%  (p=0.000 n=10+10)
      GobEncode-8                14.2ms ± 0%    14.1ms ± 1%   -0.78%  (p=0.001 n=9+10)
      Gzip-8                      806ms ± 0%     797ms ± 0%   -1.12%  (p=0.000 n=6+9)
      Gunzip-8                    131ms ± 0%     130ms ± 0%   -0.51%  (p=0.000 n=10+9)
      HTTPClientServer-8          206µs ± 9%     212µs ± 2%     ~     (p=0.829 n=10+8)
      JSONEncode-8               40.1ms ± 0%    40.1ms ± 0%     ~     (p=0.136 n=9+9)
      JSONDecode-8                157ms ± 0%     151ms ± 0%   -3.32%  (p=0.000 n=9+9)
      Mandelbrot200-8            10.1ms ± 0%    10.1ms ± 0%   -0.05%  (p=0.000 n=9+8)
      GoParse-8                  8.43ms ± 0%    8.43ms ± 0%     ~     (p=0.912 n=10+10)
      RegexpMatchEasy0_32-8       228ns ± 1%     227ns ± 0%   -0.26%  (p=0.026 n=10+9)
      RegexpMatchEasy0_1K-8      1.92µs ± 0%    1.63µs ± 0%  -15.18%  (p=0.001 n=7+7)
      RegexpMatchEasy1_32-8       258ns ± 1%     250ns ± 0%   -2.83%  (p=0.000 n=10+10)
      RegexpMatchEasy1_1K-8      2.39µs ± 0%    2.13µs ± 0%  -10.94%  (p=0.000 n=9+9)
      RegexpMatchMedium_32-8      352ns ± 0%     351ns ± 0%   -0.29%  (p=0.004 n=9+10)
      RegexpMatchMedium_1K-8      104µs ± 0%     105µs ± 0%   +0.58%  (p=0.000 n=8+9)
      RegexpMatchHard_32-8       5.84µs ± 0%    5.82µs ± 0%   -0.27%  (p=0.000 n=9+10)
      RegexpMatchHard_1K-8        177µs ± 0%     177µs ± 0%   -0.07%  (p=0.000 n=9+9)
      Revcomp-8                   1.57s ± 1%     1.50s ± 1%   -4.60%  (p=0.000 n=9+10)
      Template-8                  157ms ± 1%     153ms ± 1%   -2.28%  (p=0.000 n=10+9)
      TimeParse-8                 779ns ± 1%     770ns ± 1%   -1.18%  (p=0.013 n=10+10)
      TimeFormat-8                823ns ± 2%     826ns ± 1%     ~     (p=0.324 n=10+9)
      [Geo mean]                  144µs          142µs        -1.45%
      
      Reduce cmd/go text size by 0.5%.
      
      Change-Id: I9288ff983c4a7cf03fc0cb35b9b1750828013117
      Reviewed-on: https://go-review.googlesource.com/38457
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarDavid Chase <drchase@google.com>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      8a5175df
    • Russ Cox's avatar
      cmd/go: exclude vendored packages from ... matches · fa1d54c2
      Russ Cox authored
      By overwhelming popular demand, exclude vendored packages from ... matches,
      by making ... never match the "vendor" element above a vendored package.
      
      go help packages now reads:
      
          An import path is a pattern if it includes one or more "..." wildcards,
          each of which can match any string, including the empty string and
          strings containing slashes.  Such a pattern expands to all package
          directories found in the GOPATH trees with names matching the
          patterns.
      
          To make common patterns more convenient, there are two special cases.
          First, /... at the end of the pattern can match an empty string,
          so that net/... matches both net and packages in its subdirectories, like net/http.
          Second, any slash-separted pattern element containing a wildcard never
          participates in a match of the "vendor" element in the path of a vendored
          package, so that ./... does not match packages in subdirectories of
          ./vendor or ./mycode/vendor, but ./vendor/... and ./mycode/vendor/... do.
          Note, however, that a directory named vendor that itself contains code
          is not a vendored package: cmd/vendor would be a command named vendor,
          and the pattern cmd/... matches it.
      
      Fixes #19090.
      
      Change-Id: I985bf9571100da316c19fbfd19bb1e534a3c9e5f
      Reviewed-on: https://go-review.googlesource.com/38745Reviewed-by: 's avatarAlan Donovan <adonovan@google.com>
      fa1d54c2
    • Keith Randall's avatar
      Revert "cmd/compile: automatically handle commuting ops in rewrite rules" · 68da265c
      Keith Randall authored
      This reverts commit 041ecb69.
      
      Reason for revert: Not working on S390x and some 386 archs.
      I have a guess why the S390x is failing.  No clue on the 386 yet.
      Revert until I can figure it out.
      
      Change-Id: I64f1ce78fa6d1037ebe7ee2a8a8107cb4c1db70c
      Reviewed-on: https://go-review.googlesource.com/38790Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      68da265c