1. 24 May, 2018 8 commits
  2. 23 May, 2018 23 commits
    • Heschi Kreinick's avatar
      cmd/compile: fix debug info generation for loads from Phis · 65c365bf
      Heschi Kreinick authored
      Apparently a LoadReg can take a Phi as its argument. The Phi has names
      in the NamedValue table, so just read the Load's names from the Phi.
      
      The example given, XORKeyStream in chacha20, is pretty complicated so I
      didn't try to actually debug it and verify that the results are right.
      But the debug logging looks reasonable, with the right names in the right
      registers at the right times.
      
      Fixes #25404
      
      Change-Id: I2c3183dcfb033948556d6805bd66c22c0b45625c
      Reviewed-on: https://go-review.googlesource.com/114008
      Run-TryBot: Heschi Kreinick <heschi@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarDavid Chase <drchase@google.com>
      65c365bf
    • Heschi Kreinick's avatar
      cmd/compile: clean up debug info generation logging · 391a963b
      Heschi Kreinick authored
      Remove the unexpected function, which is a lot less relevant now that
      the generation basically can't detect invalid states, and make sure no
      logging appears without -d locationlists=2.
      
      Updates #25404
      
      Change-Id: If3522df5a7397f2e7b43cb808936e319132132b6
      Reviewed-on: https://go-review.googlesource.com/114007
      Run-TryBot: Heschi Kreinick <heschi@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarDavid Chase <drchase@google.com>
      391a963b
    • Alexander Döring's avatar
      math/big: reduce allocations in Karatsuba case of sqr · 1a5d0f83
      Alexander Döring authored
      For #23221.
      
      Change-Id: If55dcf2e0706d6658f4a0863e3740437e008706c
      Reviewed-on: https://go-review.googlesource.com/114335
      Run-TryBot: Robert Griesemer <gri@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarRobert Griesemer <gri@golang.org>
      1a5d0f83
    • Anit Gandhi's avatar
      crypto/{aes,internal/cipherhw,tls}: use common internal/cpu in place of cipherhw · 3f2039e2
      Anit Gandhi authored
      When the internal/cpu package was introduced, the AES package still used
      the custom crypto/internal/cipherhw package for amd64 and s390x. This
      change removes that package entirely in favor of directly referencing the
      cpu feature flags set and exposed by the internal/cpu package. In
      addition, 5 new flags have been added to the internal/cpu s390x struct
      for detecting various cipher message (KM) features.
      
      Change-Id: I77cdd8bc1b04ab0e483b21bf1879b5801a4ba5f4
      GitHub-Last-Rev: a611e3ecb1f480dcbfce3cb0c8c9e4058f56c1a4
      GitHub-Pull-Request: golang/go#24766
      Reviewed-on: https://go-review.googlesource.com/105695Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      3f2039e2
    • Richard Musiol's avatar
      cmd/compile: add wasm stack optimization · 482d2419
      Richard Musiol authored
      Go's SSA instructions only operate on registers. For example, an add
      instruction would read two registers, do the addition and then write
      to a register. WebAssembly's instructions, on the other hand, operate
      on the stack. The add instruction first pops two values from the stack,
      does the addition, then pushes the result to the stack. To fulfill
      Go's semantics, one needs to map Go's single add instruction to
      4 WebAssembly instructions:
      - Push the value of local variable A to the stack
      - Push the value of local variable B to the stack
      - Do addition
      - Write value from stack to local variable C
      
      Now consider that B was set to the constant 42 before the addition:
      - Push constant 42 to the stack
      - Write value from stack to local variable B
      
      This works, but is inefficient. Instead, the stack is used directly
      by inlining instructions if possible. With inlining it becomes:
      - Push the value of local variable A to the stack (add)
      - Push constant 42 to the stack (constant)
      - Do addition (add)
      - Write value from stack to local variable C (add)
      
      Note that the two SSA instructions can not be generated sequentially
      anymore, because their WebAssembly instructions are interleaved.
      
      Design doc: https://docs.google.com/document/d/131vjr4DH6JFnb-blm_uRdaC0_Nv3OUwjEY5qVCxCup4
      
      Updates #18892
      
      Change-Id: Ie35e1c0bebf4985fddda0d6330eb2066f9ad6dec
      Reviewed-on: https://go-review.googlesource.com/103535
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
      482d2419
    • Hana Kim's avatar
      cmd/vendor/.../unix: pick up upstream fixes for broken tests · 02399fa6
      Hana Kim authored
      Update golang/go#25528
      Update golang/go#25529
      
      Change-Id: I47ec282e76eb7740547e220ac00d6a7992e17b9e
      Reviewed-on: https://go-review.googlesource.com/114094Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      02399fa6
    • Alexander Döring's avatar
      math/big: specialize Karatsuba implementation for squaring · 1dc20e91
      Alexander Döring authored
      Currently we use three different algorithms for squaring:
      1. basic multiplication for small numbers
      2. basic squaring for medium numbers
      3. Karatsuba multiplication for large numbers
      
      Change 3. to a version of Karatsuba multiplication specialized
      for x == y.
      
      Increasing the performance of 3. lets us lower the threshold
      between 2. and 3.
      
      Adapt TestCalibrate to the change that 3. isn't independent
      of the threshold between 1. and 2. any more.
      
      Fixes #23221.
      
      benchstat old.txt new.txt
      name           old time/op  new time/op  delta
      NatSqr/1-4     29.6ns ± 7%  29.5ns ± 5%     ~     (p=0.103 n=50+50)
      NatSqr/2-4     51.9ns ± 1%  51.9ns ± 1%     ~     (p=0.693 n=42+49)
      NatSqr/3-4     64.3ns ± 1%  64.1ns ± 0%   -0.26%  (p=0.000 n=46+43)
      NatSqr/5-4     93.5ns ± 2%  93.1ns ± 1%   -0.39%  (p=0.000 n=48+49)
      NatSqr/8-4      131ns ± 1%   131ns ± 1%     ~     (p=0.870 n=46+49)
      NatSqr/10-4     175ns ± 1%   175ns ± 1%   +0.38%  (p=0.000 n=49+47)
      NatSqr/20-4     426ns ± 1%   429ns ± 1%   +0.84%  (p=0.000 n=46+48)
      NatSqr/30-4     702ns ± 2%   699ns ± 1%   -0.38%  (p=0.011 n=46+44)
      NatSqr/50-4    1.44µs ± 2%  1.43µs ± 1%   -0.54%  (p=0.010 n=48+48)
      NatSqr/80-4    2.85µs ± 1%  2.87µs ± 1%   +0.68%  (p=0.000 n=47+47)
      NatSqr/100-4   4.06µs ± 1%  4.07µs ± 1%   +0.29%  (p=0.000 n=46+45)
      NatSqr/200-4   13.4µs ± 1%  13.5µs ± 1%   +0.73%  (p=0.000 n=48+48)
      NatSqr/300-4   28.5µs ± 1%  28.2µs ± 1%   -1.22%  (p=0.000 n=46+48)
      NatSqr/500-4   81.9µs ± 1%  67.0µs ± 1%  -18.25%  (p=0.000 n=48+48)
      NatSqr/800-4    161µs ± 1%   140µs ± 1%  -13.29%  (p=0.000 n=47+48)
      NatSqr/1000-4   245µs ± 1%   207µs ± 1%  -15.17%  (p=0.000 n=49+49)
      
      go test -v -calibrate --run TestCalibrate
      ...
      Calibrating threshold between basicSqr(x) and karatsubaSqr(x)
      Looking for a timing difference for x between 200 - 500 words by 10 step
      words = 200 deltaT =     -980ns (  -7%) is karatsubaSqr(x) better: false
      words = 210 deltaT =     -773ns (  -5%) is karatsubaSqr(x) better: false
      words = 220 deltaT =     -695ns (  -4%) is karatsubaSqr(x) better: false
      words = 230 deltaT =     -570ns (  -3%) is karatsubaSqr(x) better: false
      words = 240 deltaT =     -458ns (  -2%) is karatsubaSqr(x) better: false
      words = 250 deltaT =      -63ns (   0%) is karatsubaSqr(x) better: false
      words = 260 deltaT =      118ns (   0%) is karatsubaSqr(x) better: true  threshold  found
      words = 270 deltaT =      377ns (   1%) is karatsubaSqr(x) better: true
      words = 280 deltaT =      765ns (   3%) is karatsubaSqr(x) better: true
      words = 290 deltaT =      673ns (   2%) is karatsubaSqr(x) better: true
      words = 300 deltaT =      502ns (   1%) is karatsubaSqr(x) better: true
      words = 310 deltaT =      629ns (   2%) is karatsubaSqr(x) better: true
      words = 320 deltaT =    1.011µs (   3%) is karatsubaSqr(x) better: true
      words = 330 deltaT =     1.36µs (   4%) is karatsubaSqr(x) better: true
      words = 340 deltaT =    3.001µs (   8%) is karatsubaSqr(x) better: true
      words = 350 deltaT =    3.178µs (   8%) is karatsubaSqr(x) better: true
      ...
      
      Change-Id: I6f13c23d94d042539ac28e77fd2618cdc37a429e
      Reviewed-on: https://go-review.googlesource.com/105075
      Run-TryBot: Robert Griesemer <gri@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarRobert Griesemer <gri@golang.org>
      1dc20e91
    • Andrew Bonventre's avatar
      doc: update Code of Conduct · 723f4286
      Andrew Bonventre authored
      Change-Id: I82c03dd026bb797a49b7361389373924acf6366c
      Reviewed-on: https://go-review.googlesource.com/114085Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
      723f4286
    • Hana (Hyang-Ah) Kim's avatar
      cmd/pprof: add readline support similar to upstream · 3f892149
      Hana (Hyang-Ah) Kim authored
      The upstream pprof implements the readline feature using
      the github.com/chzyer/readline package in its pprof.go main.
      
      It would be ideal to use the same readline support package as
      the upstream for better user experience and code maintenance.
      However, bringing in third-party packages requires more work
      than I envisioned (e.g. clean up the vendored code to meet the
      expected standard - iow don't break builders).
      
      As a result, this change implements the similar feature
      for the pprof command included in the go distribution
      (cmd/pprof/pprof.go) using golang.org/x/crypto/ssh/terminal
      for now.
      
      Auto-completion is not yet supported (same in the upstream).
      
      The feature is enabled only in linux, windows, darwin, and
      only when terminal support is available.
      
      This change brings in new vendored packages,
      golang.org/x/crypto/ssh/terminal and
      golang.org/x/sys/{unix,windows}.
      
      For #14041
      
      Change-Id: If4a790796acf2ab20f7e81268b9d9354c5a5cd2b
      Reviewed-on: https://go-review.googlesource.com/112436
      Run-TryBot: Hyang-Ah Hana Kim <hyangah@gmail.com>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      3f892149
    • Richard Musiol's avatar
      syscall: partially revert "enable some nacl code to be shared with js/wasm" · 392ff18b
      Richard Musiol authored
      This partially reverts commit 3bdbb5df.
      The latest CL of js/wasm's file system support does not use
      file descriptor mapping any more.
      
      Change-Id: Iaec9c84b392366282cddc69acc75c8a3eb556824
      Reviewed-on: https://go-review.googlesource.com/114195Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      392ff18b
    • Adam Medzinski's avatar
      net: add example for net.UDPConn.WriteTo function · 645d4726
      Adam Medzinski authored
      The current documentation of the WriteTo function is very poor and it
      is difficult to deduce how to use it correctly. A good example will
      make things much easier.
      
      Fixes #25456
      
      Change-Id: Ibf0c0e153afae8f3e0d7d765d0dc9bcbfd69bfb1
      Reviewed-on: https://go-review.googlesource.com/113775
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      645d4726
    • Elias Naur's avatar
      misc/android: forward SIGQUIT to the process running on the device · 7ba1c91d
      Elias Naur authored
      When a test binary runs for too long, the go command sends it a
      SIGQUIT to force a backtrace dump. On Android, the exec wrapper
      will instead receive the signal and dump its backtrace.
      
      Forward SIGQUIT signals from the wrapper to the wrapped process
      to gain useful backtraces.
      
      Inspired by issuse 25519; this CL would have revealed the hanging
      test directly in the builder log.
      
      Change-Id: Ic362d06940d261374343a1dc09366ef54edaa631
      Reviewed-on: https://go-review.googlesource.com/114137
      Run-TryBot: Elias Naur <elias.naur@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      7ba1c91d
    • David Chase's avatar
      cmd/compile: grow stack before test() to avoid gdb misbehavior · 77c51c6c
      David Chase authored
      While next-ing over a call in gdb, if execution of that call
      causes a goroutine's stack to grow (i.e., be moved), gdb loses
      track and runs ahead to the next breakpoint, or to the end of
      the program, whichever comes first.
      
      Prevent this by preemptively growing the stack so that
      ssa/debug_test.go will reliably measure what is intended,
      the goodness of line number placement and variable printing.
      
      Fixes #25497.
      
      Change-Id: I8daf931650292a8c8faad2285d7fd405f2157bd2
      Reviewed-on: https://go-review.googlesource.com/114080
      Run-TryBot: David Chase <drchase@google.com>
      Reviewed-by: 's avatarAustin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      77c51c6c
    • Ian Gudger's avatar
      net: fix DNS NXDOMAIN performance regression · 11b3ee6f
      Ian Gudger authored
      golang.org/cl/37879 unintentionally changed the way NXDOMAIN errors were
      handled. Before that change, resolution would fail on the first NXDOMAIN
      error and return to the user. After that change, the next server would
      be consulted and resolution would fail only after all servers had been
      consulted. This change restores the old behavior.
      
      Go 10.10.2:
      BenchmarkGoLookupIP-12                        	   10000	    174883 ns/op   11450 B/op	     163 allocs/op
      BenchmarkGoLookupIPNoSuchHost-12              	    3000	    670140 ns/op   52189 B/op	     544 allocs/op
      BenchmarkGoLookupIPWithBrokenNameServer-12    	       1	5002568137 ns/op  163792 B/op	     375 allocs/op
      
      before this change:
      BenchmarkGoLookupIP-12                        	   10000	    165501 ns/op    8585 B/op	      94 allocs/op
      BenchmarkGoLookupIPNoSuchHost-12              	    1000	   1204117 ns/op   83661 B/op	     674 allocs/op
      BenchmarkGoLookupIPWithBrokenNameServer-12    	       1	5002629186 ns/op  159128 B/op	     275 allocs/op
      
      after this change:
      BenchmarkGoLookupIP-12                        	   10000	    158102 ns/op    8585 B/op	      94 allocs/op
      BenchmarkGoLookupIPNoSuchHost-12              	    2000	    645364 ns/op   42990 B/op	     356 allocs/op
      BenchmarkGoLookupIPWithBrokenNameServer-12    	       1	5002163437 ns/op  159144 B/op	     275 allocs/op
      
      Fixes #25336
      
      Change-Id: I315cd70330d1f66e54ce5a189a61c99f095bc138
      Reviewed-on: https://go-review.googlesource.com/113815Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      11b3ee6f
    • dchenk's avatar
      net/http: fix doc comment on PostFormValue function · 09797676
      dchenk authored
      This function checks Request.PostForm, which now includes values parsed
      from a PATCH request.
      
      Change-Id: I5d0af58d9c0e9111d4e822c45f0fb1f511bbf0d5
      Reviewed-on: https://go-review.googlesource.com/114009Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      09797676
    • azat's avatar
      os: Add example for Expand function. · ef993816
      azat authored
      Change-Id: I581492c29158e57ca2f98b75f47870791965a7ff
      Reviewed-on: https://go-review.googlesource.com/81155Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      ef993816
    • isharipo's avatar
      cmd/internal/obj/x86: add missing Yi8 for VEX ytabs · 67fe8b56
      isharipo authored
      This change adds Yi8 forms for every ytab that had them before AVX-512 patch.
      The rationale is backwards-compatibility.
      
      EVEX forms remain strict and unchanged as they're not bound to any
      backwards-compatibility issues.
      
      Fixes #25510
      
      Change-Id: Icd692266010ed64c9fe47cc837afc2edf2ad2d1d
      Reviewed-on: https://go-review.googlesource.com/114136
      Run-TryBot: Iskander Sharipov <iskander.sharipov@intel.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarIlya Tocar <ilya.tocar@intel.com>
      67fe8b56
    • Peter Weinberger's avatar
      internal/trace: change Less to make sorting events deterministice · 1764609b
      Peter Weinberger authored
          The existing code just used timestamps. The new code uses more fields
          when timestamps are equal.
      
      	Revised to shorten code per reviewer comments.
      
      Change-Id: Ibd0824d0acd7644484d536b1a754a0da156fac3d
      Reviewed-on: https://go-review.googlesource.com/113721Reviewed-by: 's avatarHyang-Ah Hana Kim <hyangah@gmail.com>
      1764609b
    • Alex Brainman's avatar
      cmd/go: skip TestLinkerTmpDirIsDeleted if cgo is not enabled · ef880a2f
      Alex Brainman authored
      Fixes builders that do not have cgo installed.
      
      Change-Id: I719b7959226b0e67c3ffc11e071784787cabc5ab
      Reviewed-on: https://go-review.googlesource.com/114235
      Run-TryBot: Alex Brainman <alex.brainman@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      ef880a2f
    • Tobias Klauser's avatar
      debug/pe: gofmt · 4bb649fb
      Tobias Klauser authored
      CL 110555 introduced some changes which were not properly gofmt'ed.
      Because the CL was sent via Github the gofmt checks usually performed by
      git-codereview didn't catch this (see #24946).
      
      Change-Id: I65c1271620690dbeec88b4ce482d158f7d6df45d
      Reviewed-on: https://go-review.googlesource.com/114255
      Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarAlex Brainman <alex.brainman@gmail.com>
      4bb649fb
    • Alex Brainman's avatar
      cmd/link: close go.o before deleting it · 1174ad3a
      Alex Brainman authored
      Windows does not allow to delete opened file.
      
      Fixes #24704
      
      Change-Id: Idfca2d00a2c46bdd9bd2a721478bfd003c474ece
      Reviewed-on: https://go-review.googlesource.com/113935
      Run-TryBot: Alex Brainman <alex.brainman@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      1174ad3a
    • Ben Shi's avatar
      misc/android: add a NL at the of README · 5776bd55
      Ben Shi authored
      There is no NL at the end of README, and that make it strange
      when doing "cat misc/android/README".
      
      Change-Id: Ib47953d7b16e8927a4d6be7d5be8de8f2ddbcc39
      Reviewed-on: https://go-review.googlesource.com/114010Reviewed-by: 's avatarElias Naur <elias.naur@gmail.com>
      5776bd55
    • Ben Burkert's avatar
      internal/poll: disable splice on old linux versions · 92bdfab7
      Ben Burkert authored
      The splice syscall is buggy prior to linux 2.6.29. Instead of returning
      0 when reading a closed socket, it returns EAGAIN.  While it is possible
      to detect this (HAProxy falls back to recv), it is simpiler to avoid
      using splice all together. the "fcntl(fd, F_GETPIPE_SZ)" syscall is used
      detect buggy versions of splice as the syscall returns EINVAL on
      versions prior to 2.6.35.
      
      Fixes #25486
      
      Change-Id: I860c029f13de2b09e95a7ba39b76ac7fca91a195
      Reviewed-on: https://go-review.googlesource.com/113999Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      92bdfab7
  3. 22 May, 2018 9 commits
    • Austin Clements's avatar
      cmd/compile: ignore g register in liveness analysis · 13290098
      Austin Clements authored
      In rare circumstances that we don't yet fully understand, the g
      register can be spilled to the stack and then reloaded. If this
      happens, liveness analysis sees a pointer load into a
      non-general-purpose register and panics.
      
      We should fix the root cause of this, but fix the build for now by
      ignoring pointer loads into the g register.
      
      For #25504.
      
      Change-Id: I0dfee1af9750c8e9157c7637280cdf07118ef2ca
      Reviewed-on: https://go-review.googlesource.com/114081
      Run-TryBot: Austin Clements <austin@google.com>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      13290098
    • David Chase's avatar
      cmd/compile: common up code in fuse for joining blocks · cfbf375a
      David Chase authored
      There's semantically-but-not-literally equivalent code in
      two cases for joining blocks' value lists in ssa/fuse.go.
      It can be made literally equivalent, then commoned up.
      
      Updates #25426.
      
      Change-Id: Id1819366c9d22e5126f9203dcd4c622423994110
      Reviewed-on: https://go-review.googlesource.com/113719
      Run-TryBot: David Chase <drchase@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarJosh Bleecher Snyder <josharian@gmail.com>
      cfbf375a
    • Austin Clements's avatar
      cmd/compile: reuse liveness structures · f11e9aac
      Austin Clements authored
      Currently liveness analysis is a significant source of allocations in
      the compiler. This CL mitigates this by moving the main sources of
      allocation to the ssa.Cache, allowing them to be reused between
      different liveness runs.
      
      Passes toolstash -cmp.
      
      name        old time/op       new time/op       delta
      Template          194ms ± 1%        193ms ± 1%    ~     (p=0.156 n=10+9)
      Unicode          99.1ms ± 1%       99.3ms ± 2%    ~     (p=0.853 n=10+10)
      GoTypes           689ms ± 0%        687ms ± 0%  -0.27% 	(p=0.022 n=10+9)
      Compiler          3.29s ± 1%        3.30s ± 1%    ~ 	(p=0.489 n=9+9)
      SSA               8.02s ± 2%        7.97s ± 1%  -0.71%  (p=0.011 n=10+10)
      Flate             131ms ± 1%        130ms ± 1%  -0.59%  (p=0.043 n=9+10)
      GoParser          162ms ± 1%        160ms ± 1%  -1.53%  (p=0.000 n=10+10)
      Reflect           454ms ± 0%        454ms ± 0%    ~    	(p=0.959 n=8+8)
      Tar               185ms ± 1%        185ms ± 2%    ~ 	(p=0.905 n=9+10)
      XML               235ms ± 1%        232ms ± 1%  -1.15% 	(p=0.001 n=9+10)
      [Geo mean]        414ms             412ms       -0.39%
      
      name        old alloc/op      new alloc/op      delta
      Template         35.6MB ± 0%       34.2MB ± 0%  -3.75%  (p=0.000 n=10+10)
      Unicode          29.5MB ± 0%       29.4MB ± 0%  -0.26%  (p=0.000 n=10+9)
      GoTypes           117MB ± 0%        112MB ± 0%  -3.78%  (p=0.000 n=9+10)
      Compiler          532MB ± 0%        512MB ± 0%  -3.80%  (p=0.000 n=10+10)
      SSA              1.55GB ± 0%       1.48GB ± 0%  -4.82%  (p=0.000 n=10+10)
      Flate            24.5MB ± 0%       23.6MB ± 0%  -3.61%  (p=0.000 n=10+9)
      GoParser         28.7MB ± 0%       27.7MB ± 0%  -3.43%  (p=0.000 n=10+10)
      Reflect          80.5MB ± 0%       78.1MB ± 0%  -2.96%  (p=0.000 n=10+10)
      Tar              35.1MB ± 0%       33.9MB ± 0%  -3.49%  (p=0.000 n=10+10)
      XML              43.7MB ± 0%       42.4MB ± 0%  -3.05%  (p=0.000 n=10+10)
      [Geo mean]       78.4MB            75.8MB       -3.30%
      
      name        old allocs/op     new allocs/op     delta
      Template           335k ± 0%         335k ± 0%  -0.12%  (p=0.000 n=10+10)
      Unicode            339k ± 0%         339k ± 0%  -0.01%  (p=0.001 n=10+10)
      GoTypes           1.18M ± 0%        1.17M ± 0%  -0.12%  (p=0.000 n=10+10)
      Compiler          4.94M ± 0%        4.94M ± 0%  -0.06%  (p=0.000 n=10+10)
      SSA               12.5M ± 0%        12.5M ± 0%  -0.07%  (p=0.000 n=10+10)
      Flate              223k ± 0%         223k ± 0%  -0.11%  (p=0.000 n=10+10)
      GoParser           281k ± 0%         281k ± 0%  -0.08%  (p=0.000 n=10+10)
      Reflect            963k ± 0%         960k ± 0%  -0.23%  (p=0.000 n=10+9)
      Tar                330k ± 0%         330k ± 0%  -0.12%  (p=0.000 n=10+10)
      XML                392k ± 0%         392k ± 0%  -0.08%  (p=0.000 n=10+10)
      [Geo mean]         761k              760k       -0.10%
      
      Compared to just before "cmd/internal/obj: consolidate emitting entry
      stack map", the cumulative effect of adding stack maps everywhere and
      register maps, plus these optimizations, is:
      
      name        old time/op       new time/op       delta
      Template          186ms ± 1%        194ms ± 1%  +4.41%  (p=0.000 n=9+10)
      Unicode          96.5ms ± 1%       99.1ms ± 1%  +2.76%  (p=0.000 n=9+10)
      GoTypes           659ms ± 1%        689ms ± 0%  +4.56%  (p=0.000 n=9+10)
      Compiler          3.14s ± 2%        3.29s ± 1%  +4.95%  (p=0.000 n=9+9)
      SSA               7.68s ± 3%        8.02s ± 2%  +4.41%  (p=0.000 n=10+10)
      Flate             126ms ± 0%        131ms ± 1%  +4.14%  (p=0.000 n=10+9)
      GoParser          153ms ± 1%        162ms ± 1%  +5.90%  (p=0.000 n=10+10)
      Reflect           436ms ± 1%        454ms ± 0%  +4.14%  (p=0.000 n=10+8)
      Tar               177ms ± 1%        185ms ± 1%  +4.28%  (p=0.000 n=8+9)
      XML               224ms ± 1%        235ms ± 1%  +5.23%  (p=0.000 n=10+9)
      [Geo mean]        396ms             414ms       +4.47%
      
      name        old alloc/op      new alloc/op      delta
      Template         34.5MB ± 0%       35.6MB ± 0%  +3.24%  (p=0.000 n=10+10)
      Unicode          29.3MB ± 0%       29.5MB ± 0%  +0.51%  (p=0.000 n=9+10)
      GoTypes           113MB ± 0%        117MB ± 0%  +3.31%  (p=0.000 n=8+9)
      Compiler          509MB ± 0%        532MB ± 0%  +4.46%  (p=0.000 n=10+10)
      SSA              1.49GB ± 0%       1.55GB ± 0%  +4.10%  (p=0.000 n=10+10)
      Flate            23.8MB ± 0%       24.5MB ± 0%  +2.92%  (p=0.000 n=10+10)
      GoParser         27.9MB ± 0%       28.7MB ± 0%  +2.88%  (p=0.000 n=10+10)
      Reflect          77.4MB ± 0%       80.5MB ± 0%  +4.01%  (p=0.000 n=10+10)
      Tar              34.1MB ± 0%       35.1MB ± 0%  +3.12%  (p=0.000 n=10+10)
      XML              42.6MB ± 0%       43.7MB ± 0%  +2.65%  (p=0.000 n=10+10)
      [Geo mean]       76.1MB            78.4MB       +3.11%
      
      name        old allocs/op     new allocs/op     delta
      Template           320k ± 0%         335k ± 0%  +4.60%  (p=0.000 n=10+10)
      Unicode            336k ± 0%         339k ± 0%  +0.96%  (p=0.000 n=9+10)
      GoTypes           1.12M ± 0%        1.18M ± 0%  +4.55%  (p=0.000 n=10+10)
      Compiler          4.66M ± 0%        4.94M ± 0%  +6.18%  (p=0.000 n=10+10)
      SSA               11.9M ± 0%        12.5M ± 0%  +5.37%  (p=0.000 n=10+10)
      Flate              214k ± 0%         223k ± 0%  +4.15%  (p=0.000 n=9+10)
      GoParser           270k ± 0%         281k ± 0%  +4.15%  (p=0.000 n=10+10)
      Reflect            921k ± 0%         963k ± 0%  +4.49%  (p=0.000 n=10+10)
      Tar                317k ± 0%         330k ± 0%  +4.25%  (p=0.000 n=10+10)
      XML                375k ± 0%         392k ± 0%  +4.75%  (p=0.000 n=10+10)
      [Geo mean]         729k              761k       +4.34%
      
      Updates #24543.
      
      Change-Id: Ia951fdb3c17ae1c156e1d05fc42e69caba33c91a
      Reviewed-on: https://go-review.googlesource.com/110179
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarDavid Chase <drchase@google.com>
      f11e9aac
    • Austin Clements's avatar
      cmd/compile: make LivenessMap dense · 75dadbec
      Austin Clements authored
      Currently liveness information is kept in a map keyed by *ssa.Value.
      This made sense when liveness information was sparse, but now we have
      liveness for nearly every ssa.Value. There's a fair amount of memory
      and CPU overhead to this map now.
      
      This CL replaces this map with a slice indexed by value ID.
      
      Passes toolstash -cmp.
      
      name        old time/op       new time/op       delta
      Template          197ms ± 1%        194ms ± 1%  -1.60%  (p=0.000 n=9+10)
      Unicode           100ms ± 2%         99ms ± 1%  -1.31%  (p=0.012 n=8+10)
      GoTypes           695ms ± 1%        689ms ± 0%  -0.94%  (p=0.000 n=10+10)
      Compiler          3.34s ± 2%        3.29s ± 1%  -1.26%  (p=0.000 n=10+9)
      SSA               8.08s ± 0%        8.02s ± 2%  -0.70%  (p=0.034 n=8+10)
      Flate             133ms ± 1%        131ms ± 1%  -1.04%  (p=0.006 n=10+9)
      GoParser          163ms ± 1%        162ms ± 1%  -0.79%  (p=0.034 n=8+10)
      Reflect           459ms ± 1%        454ms ± 0%  -1.06%  (p=0.000 n=10+8)
      Tar               186ms ± 1%        185ms ± 1%  -0.87%  (p=0.003 n=9+9)
      XML               238ms ± 1%        235ms ± 1%  -1.01%  (p=0.004 n=8+9)
      [Geo mean]        418ms             414ms       -1.06%
      
      name        old alloc/op      new alloc/op      delta
      Template         36.4MB ± 0%       35.6MB ± 0%  -2.29%  (p=0.000 n=9+10)
      Unicode          29.7MB ± 0%       29.5MB ± 0%  -0.68%  (p=0.000 n=10+10)
      GoTypes           119MB ± 0%        117MB ± 0%  -2.30%  (p=0.000 n=9+9)
      Compiler          546MB ± 0%        532MB ± 0%  -2.47%  (p=0.000 n=10+10)
      SSA              1.59GB ± 0%       1.55GB ± 0%  -2.41%  (p=0.000 n=10+10)
      Flate            24.9MB ± 0%       24.5MB ± 0%  -1.77%  (p=0.000 n=8+10)
      GoParser         29.5MB ± 0%       28.7MB ± 0%  -2.60%  (p=0.000 n=9+10)
      Reflect          81.7MB ± 0%       80.5MB ± 0%  -1.49%  (p=0.000 n=10+10)
      Tar              35.7MB ± 0%       35.1MB ± 0%  -1.64%  (p=0.000 n=10+10)
      XML              45.0MB ± 0%       43.7MB ± 0%  -2.76%  (p=0.000 n=9+10)
      [Geo mean]       80.1MB            78.4MB       -2.04%
      
      name        old allocs/op     new allocs/op     delta
      Template           336k ± 0%         335k ± 0%  -0.31%  (p=0.000 n=9+10)
      Unicode            339k ± 0%         339k ± 0%  -0.05%  (p=0.000 n=10+10)
      GoTypes           1.18M ± 0%        1.18M ± 0%  -0.26%  (p=0.000 n=10+10)
      Compiler          4.96M ± 0%        4.94M ± 0%  -0.24%  (p=0.000 n=10+10)
      SSA               12.6M ± 0%        12.5M ± 0%  -0.30%  (p=0.000 n=10+10)
      Flate              224k ± 0%         223k ± 0%  -0.30%  (p=0.000 n=10+10)
      GoParser           282k ± 0%         281k ± 0%  -0.32%  (p=0.000 n=10+10)
      Reflect            965k ± 0%         963k ± 0%  -0.27%  (p=0.000 n=9+10)
      Tar                331k ± 0%         330k ± 0%  -0.27%  (p=0.000 n=10+10)
      XML                393k ± 0%         392k ± 0%  -0.26%  (p=0.000 n=10+10)
      [Geo mean]         763k              761k       -0.26%
      
      Updates #24543.
      
      Change-Id: I4cfd2461510d3c026a262760bca225dc37482341
      Reviewed-on: https://go-review.googlesource.com/110178
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      75dadbec
    • Austin Clements's avatar
      cmd/compile: incrementally compact liveness maps · 3c36b8be
      Austin Clements authored
      The per-Value slice of liveness maps is currently one of the largest
      sources of allocation in the compiler. On cmd/compile/internal/ssa,
      it's 5% of overall allocation, or 75MB in total. Enabling liveness
      maps everywhere significantly increased this allocation footprint,
      which in turn slowed down the compiler.
      
      Improve this by compacting the liveness maps after every block is
      processed. There are typically very few distinct liveness maps, so
      compacting the maps after every block, rather than at the end of the
      function, can significantly reduce these allocations.
      
      Passes toolstash -cmp.
      
      name        old time/op       new time/op       delta
      Template          198ms ± 2%        196ms ± 1%  -1.11%  (p=0.008 n=9+10)
      Unicode           100ms ± 1%         99ms ± 1%  -0.94%  (p=0.015 n=8+9)
      GoTypes           703ms ± 2%        695ms ± 1%  -1.15%  (p=0.000 n=10+10)
      Compiler          3.38s ± 3%        3.33s ± 0%  -1.66%  (p=0.000 n=10+9)
      SSA               7.96s ± 1%        7.93s ± 1%    ~ 	(p=0.113 n=9+10)
      Flate             134ms ± 1%        132ms ± 1%  -1.30%  (p=0.000 n=8+10)
      GoParser          165ms ± 2%        163ms ± 1%  -1.32%  (p=0.013 n=9+10)
      Reflect           462ms ± 2%        459ms ± 0%  -0.65%  (p=0.036 n=9+8)
      Tar               188ms ± 2%        186ms ± 1%    ~     (p=0.173 n=8+10)
      XML               243ms ± 7%        239ms ± 1%    ~     (p=0.684 n=10+10)
      [Geo mean]        421ms             416ms       -1.10%
      
      name        old alloc/op      new alloc/op      delta
      Template         38.0MB ± 0%       36.5MB ± 0%  -3.98%  (p=0.000 n=10+10)
      Unicode          30.3MB ± 0%       29.6MB ± 0%  -2.21% 	(p=0.000 n=10+10)
      GoTypes           125MB ± 0%        120MB ± 0%  -4.51% 	(p=0.000 n=10+9)
      Compiler          575MB ± 0%        546MB ± 0%  -5.06% 	(p=0.000 n=10+10)
      SSA              1.64GB ± 0%       1.55GB ± 0%  -4.97% 	(p=0.000 n=10+10)
      Flate            25.9MB ± 0%       25.0MB ± 0%  -3.41% 	(p=0.000 n=10+10)
      GoParser         30.7MB ± 0%       29.5MB ± 0%  -3.97% 	(p=0.000 n=10+10)
      Reflect          84.1MB ± 0%       81.9MB ± 0%  -2.64% 	(p=0.000 n=10+10)
      Tar              37.0MB ± 0%       35.8MB ± 0%  -3.27% 	(p=0.000 n=10+9)
      XML              47.2MB ± 0%       45.0MB ± 0%  -4.57% 	(p=0.000 n=10+10)
      [Geo mean]       83.2MB            79.9MB       -3.86%
      
      name        old allocs/op     new allocs/op     delta
      Template           337k ± 0%         337k ± 0%  -0.06%  (p=0.000 n=10+10)
      Unicode            340k ± 0%         340k ± 0%  -0.01% 	(p=0.014 n=10+10)
      GoTypes           1.18M ± 0%        1.18M ± 0%  -0.04% 	(p=0.000 n=10+10)
      Compiler          4.97M ± 0%        4.97M ± 0%  -0.03% 	(p=0.000 n=10+10)
      SSA               12.3M ± 0%        12.3M ± 0%  -0.01% 	(p=0.000 n=10+10)
      Flate              226k ± 0%         225k ± 0%  -0.09% 	(p=0.000 n=10+10)
      GoParser           283k ± 0%         283k ± 0%  -0.06% 	(p=0.000 n=10+9)
      Reflect            972k ± 0%         971k ± 0%  -0.04% 	(p=0.000 n=10+8)
      Tar                333k ± 0%         332k ± 0%  -0.05% 	(p=0.000 n=10+9)
      XML                395k ± 0%         395k ± 0%  -0.04% 	(p=0.000 n=10+10)
      [Geo mean]         764k              764k       -0.04%
      
      Updates #24543.
      
      Change-Id: I6fdc46e4ddb6a8eea95d38242345205eb8397f0b
      Reviewed-on: https://go-review.googlesource.com/110177
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      3c36b8be
    • Austin Clements's avatar
      cmd/compile: abstract bvec sets · 3c4aaf8a
      Austin Clements authored
      This moves the bvec hash table logic out of Liveness.compact and into
      a bvecSet type. Furthermore, the bvecSet type has the ability to grow
      dynamically, which the current implementation doesn't. In addition to
      making the code cleaner, this will make it possible to incrementally
      compact liveness bitmaps.
      
      Passes toolstash -cmp
      
      Updates #24543.
      
      Change-Id: I46c53e504494206061a1f790ae4a02d768a65681
      Reviewed-on: https://go-review.googlesource.com/110176
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      3c4aaf8a
    • Austin Clements's avatar
      cmd/compile: single pass over Blocks in Liveness.epilogue · 577c05ca
      Austin Clements authored
      Currently Liveness.epilogue makes three passes over the Blocks, but
      there's no need to do this. Combine them into a single pass. This
      eliminates the need for blockEffects.lastbitmapindex, but, more
      importantly, will let us incrementally compact the liveness bitmaps
      and significantly reduce allocatons in Liveness.epilogue.
      
      Passes toolstash -cmp.
      
      Updates #24543.
      
      Change-Id: I27802bcd00d23aa122a7ec16cdfd739ae12dd7aa
      Reviewed-on: https://go-review.googlesource.com/110175
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      Reviewed-by: 's avatarDavid Chase <drchase@google.com>
      577c05ca
    • Hana Kim's avatar
      cmd/vendor/README: temporary instruction for update · 51be90a2
      Hana Kim authored
      Until vgo sorts out and cleans up the vendoring process.
      
      Ran govendor to update packages the cmd/pprof depends on
      which resulted in deletion of some of unnecessary files.
      
      Change-Id: Idfba53e94414e90a5e280222750a6df77e979a16
      Reviewed-on: https://go-review.googlesource.com/114079
      Run-TryBot: Hyang-Ah Hana Kim <hyangah@gmail.com>
      Reviewed-by: 's avatarDaniel Theophanes <kardianos@gmail.com>
      51be90a2
    • David Chase's avatar
      cmd/link: revert DWARF version to 2 for .debug_lines · 402dd10a
      David Chase authored
      On OSX 10.12 and earlier, paired with XCode 9.0,
      specifying DWARF version 3 causes dsymutil to misbehave.
      Version 2 appears to be good enough to allow processing
      of the prologue_end opcode on (at least one version of)
      Linux and OSX 10.13.
      
      Fixes #25451.
      
      Change-Id: Ic760e34248393a5386be96351c8e492da1d3413b
      Reviewed-on: https://go-review.googlesource.com/114015Reviewed-by: 's avatarAlessandro Arzilli <alessandro.arzilli@gmail.com>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      402dd10a