1. 23 Apr, 2019 14 commits
    • Brian Kessler's avatar
      cmd/compile: add signed divisibility by power of 2 rules · 68819fb6
      Brian Kessler authored
      For powers of two (c=1<<k), the divisibility check x%c == 0 can be made
      just by checking the trailing zeroes via a mask x&(c-1)==0 even for signed
      integers.  This avoids division fixups when just divisibility check is needed.
      
      To apply this rule the generic divisibility rule for  A%B = A-(A/B*B) is disabled
      on the "opt" pass, but this does not affect generated code as this rule is applied
      later.
      
      The speed up on amd64 due to elimination of unneccessary fixup code is ~55%:
      
      name                     old time/op  new time/op  delta
      DivconstI64-4            2.08ns ± 0%  2.07ns ± 0%     ~     (p=0.079 n=5+5)
      DivisiblePow2constI64-4  1.78ns ± 1%  0.81ns ± 1%  -54.55%  (p=0.008 n=5+5)
      DivconstU64-4            2.08ns ± 0%  2.08ns ± 0%     ~     (p=1.000 n=5+5)
      DivconstI32-4            1.53ns ± 0%  1.53ns ± 0%     ~     (all equal)
      DivisiblePow2constI32-4  1.79ns ± 1%  0.81ns ± 4%  -54.75%  (p=0.008 n=5+5)
      DivconstU32-4            1.78ns ± 1%  1.78ns ± 1%     ~     (p=1.000 n=5+5)
      DivconstI16-4            1.54ns ± 2%  1.53ns ± 0%     ~     (p=0.333 n=5+4)
      DivisiblePow2constI16-4  1.78ns ± 0%  0.79ns ± 1%  -55.39%  (p=0.000 n=4+5)
      DivconstU16-4            1.00ns ± 5%  0.99ns ± 1%     ~     (p=0.730 n=5+5)
      DivconstI8-4             1.54ns ± 0%  1.53ns ± 0%     ~     (p=0.714 n=4+5)
      DivisiblePow2constI8-4   1.78ns ± 0%  0.80ns ± 0%  -55.06%  (p=0.000 n=5+4)
      DivconstU8-4             0.93ns ± 1%  0.95ns ± 1%   +1.72%  (p=0.024 n=5+5)
      
      A follow-up CL will address the general case of x%c == 0 for signed integers.
      
      Updates #15806
      
      Change-Id: I0d284863774b1bc8c4ce87443bbaec6103e14ef4
      Reviewed-on: https://go-review.googlesource.com/c/go/+/168038Reviewed-by: default avatarKeith Randall <khr@golang.org>
      68819fb6
    • Keith Randall's avatar
      runtime: randomize package initialization order in race mode · 8515d9cf
      Keith Randall authored
      This is one small step to force people to not depend on the order of
      initialization of packages which are not explicitly ordered by import
      directives. Similar to randomizing map iteration order, this makes
      sure people aren't depending on the behavior of the current release,
      so that we can change the order in future releases without breaking
      everyone.
      
      Maybe one day we can randomize always, but for now we do it just in
      race mode. (We would need to measure the impact on startup time before
      we enabled it always.)
      
      RELNOTE=yes
      
      Change-Id: I99026394796125974c5f2c3660a88becb92c9df3
      Reviewed-on: https://go-review.googlesource.com/c/go/+/170318
      Run-TryBot: Keith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarJosh Bleecher Snyder <josharian@gmail.com>
      8515d9cf
    • Keith Randall's avatar
      cmd/compile: always mark atColumn1 results as statements · fd788a86
      Keith Randall authored
      In 31618, we end up comparing the is-stmt-ness of positions
      to repurpose real instructions as inline marks. If the is-stmt-ness
      doesn't match, we end up not being able to remove the inline mark.
      
      Always use statement-full positions to do the matching, so we
      always find a match if there is one.
      
      Also always use positions that are statements for inline marks.
      
      Fixes #31618
      
      Change-Id: Idaf39bdb32fa45238d5cd52973cadf4504f947d5
      Reviewed-on: https://go-review.googlesource.com/c/go/+/173324
      Run-TryBot: Keith Randall <khr@golang.org>
      Reviewed-by: default avatarDavid Chase <drchase@google.com>
      fd788a86
    • Matthew Dempsky's avatar
      cmd/compile: respect -newescape in genwrapper · a152dd04
      Matthew Dempsky authored
      Noticed while preparing a CL for Go 1.14 to remove esc.go.
      
      Change-Id: Ic12be33f5b16c8424d85f373fa450247be086078
      Reviewed-on: https://go-review.googlesource.com/c/go/+/173298
      Run-TryBot: Matthew Dempsky <mdempsky@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      a152dd04
    • Michael Munday's avatar
      math: consolidate assembly stub implementations · f0fdbb1e
      Michael Munday authored
      Where assembly functions are just jumps to the Go implementation
      put them into a stubs_<arch>.s file. This reduces the number of
      files considerably and makes it easier to see what is really
      implemented in assembly.
      
      I've also run the stubs files through asmfmt to format them in
      a more consistent way.
      
      Eventually we should replace these 'stub' assembly files with
      a pure Go implementation now that we have mid-stack inlining
      (see #31362).
      
      Change-Id: If5b2022dcc23e1299f1b7ba79884f1b1263d0f7f
      Reviewed-on: https://go-review.googlesource.com/c/go/+/173398
      Run-TryBot: Michael Munday <mike.munday@ibm.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      f0fdbb1e
    • Benny Siegert's avatar
      A: Add Maya Rashish (individual CLA) · 3d631662
      Benny Siegert authored
      Change-Id: I1380229c250a6100dc7e0bcf59be8df425a3efac
      Reviewed-on: https://go-review.googlesource.com/c/go/+/173399Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      3d631662
    • Benny Siegert's avatar
      doc: update wording in contribution guide · d0fadb93
      Benny Siegert authored
      The top right menu in Gerrit is now a gear icon, and the link
      has a slightly different title.
      
      Change-Id: I3f5d194f31ad09a99416a45db392aa4b5c7d98ff
      Reviewed-on: https://go-review.googlesource.com/c/go/+/173400Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      d0fadb93
    • Nikhil Benesch's avatar
      cmd/go: include AR env var in gccgo build IDs · 213d1cf3
      Nikhil Benesch authored
      The gccgo toolchain uses the archiver specified by the AR environment
      variable, or `ar` by default. Teach the build ID to take the value of
      this environment variable into account, since different archivers can
      produce different results.
      
      Fix #30046.
      
      Change-Id: Ia6821258d54eecedb9026afc38a515cd564c45cb
      Reviewed-on: https://go-review.googlesource.com/c/go/+/160897
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarRuss Cox <rsc@golang.org>
      213d1cf3
    • Russ Cox's avatar
      encoding/json: document HTML escaping in Compact · d92bc7a5
      Russ Cox authored
      Make explicit that Compact does HTML escaping.
      
      Fixes #30357.
      
      Change-Id: I4648f8f3e907d659db977d07253f716df6e07d7b
      Reviewed-on: https://go-review.googlesource.com/c/go/+/173417
      Run-TryBot: Russ Cox <rsc@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      d92bc7a5
    • Russ Cox's avatar
      cmd/go: move runtime/debug.modinfo to runtime.modinfo · b51c1570
      Russ Cox authored
      It is easier to ensure that the symbol is always present
      if we move it to package runtime. Avoids init-time work.
      Also moves it next to buildVersion, the other similar symbol.
      
      Setting up for "go version <binary>".
      
      For #31624.
      
      Change-Id: I943724469ce6992153e701257eb6f12da88c8e4e
      Reviewed-on: https://go-review.googlesource.com/c/go/+/173341
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      b51c1570
    • Shubham Sharma's avatar
      net: add IsNotFound field to DNSError · fac3b5d0
      Shubham Sharma authored
      This adds the ability to determine if a lookup error was
      due to a non-existent hostname. Previously users needed
      to do string matching on the DNSError.Err value.
      
      Fixes #28635
      
      Change-Id: If4bd3ad32cbc2db5614f2c6b72e0a9161d813efa
      Reviewed-on: https://go-review.googlesource.com/c/go/+/168597
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      fac3b5d0
    • Daniel Martí's avatar
      encoding/json: index names for the struct decoder · 7e08c7f4
      Daniel Martí authored
      In the common case, structs have a handful of fields and most inputs
      match struct field names exactly.
      
      The previous code would do a linear search over the fields, stopping at
      the first exact match, and otherwise using the first case insensitive
      match.
      
      This is unfortunate, because it means that for the common case, we'd do
      a linear search with bytes.Equal. Even for structs with only two or
      three fields, that is pretty wasteful.
      
      Worse even, up until the exact match was found via the linear search,
      all previous fields would run their equalFold functions, which aren't
      cheap even in the simple case.
      
      Instead, cache a map along with the field list that indexes the fields
      by their name. This way, a case sensitive field search doesn't involve a
      linear search, nor does it involve any equalFold func calls.
      
      This patch should also slightly speed up cases where there's a case
      insensitive match but not a case sensitive one, as then we'd avoid
      calling bytes.Equal on all the fields. Though that's not a common case,
      and there are no benchmarks for it.
      
      name           old time/op    new time/op    delta
      CodeDecoder-8    11.0ms ± 0%    10.6ms ± 1%  -4.42%  (p=0.000 n=9+10)
      
      name           old speed      new speed      delta
      CodeDecoder-8   176MB/s ± 0%   184MB/s ± 1%  +4.62%  (p=0.000 n=9+10)
      
      name           old alloc/op   new alloc/op   delta
      CodeDecoder-8    2.28MB ± 0%    2.28MB ± 0%    ~     (p=0.725 n=10+10)
      
      name           old allocs/op  new allocs/op  delta
      CodeDecoder-8     76.9k ± 0%     76.9k ± 0%    ~     (all equal)
      
      Updates #28923.
      
      Change-Id: I9929c1f06c76505e5b96914199315dbdaae5dc76
      Reviewed-on: https://go-review.googlesource.com/c/go/+/172918
      Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      7e08c7f4
    • Josh Bleecher Snyder's avatar
      cmd/compile: clean up string/bytes/runes conversion code · 980a57a8
      Josh Bleecher Snyder authored
      Combine the OBYTES2STR and ORUNES2STR cases, as they are identical.
      
      Clean up the construction, commenting, and spacing of the other cases,
      and make them all match.
      
      Passes toolstash-check.
      
      Change-Id: I1be8a528927caeb15e49cb12ca0f11c0827dadd9
      Reviewed-on: https://go-review.googlesource.com/c/go/+/173322
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      980a57a8
    • Russ Cox's avatar
      cmd/go: add env -w and env -u to set and unset default env vars · f0e97546
      Russ Cox authored
      Setting environment variables for go command configuration
      is too difficult and system-specific. This CL adds go env -w,
      to change the default settings more easily, in a portable way.
      It also adds go env -u, to unset those changes.
      
      See https://golang.org/design/30411-env for details.
      
      Fixes #30411.
      
      Change-Id: I36e83f55b666459f8f7f482432a4a6ee015da71d
      Reviewed-on: https://go-review.googlesource.com/c/go/+/171137
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBryan C. Mills <bcmills@google.com>
      f0e97546
  2. 22 Apr, 2019 12 commits
  3. 20 Apr, 2019 3 commits
  4. 19 Apr, 2019 11 commits
    • Bryan C. Mills's avatar
      cmd/go: only add a 'go' directive on 'go mod tidy' or when a conversion occurs · a1c481d8
      Bryan C. Mills authored
      If the go.mod file exists and is empty, we initialize it from any of
      various formats supported by legacy dependency-management tools.
      
      We also initialize the 'go' directive at that point: we know that the
      go.mod file is incomplete, because it does not reflect the information
      in the legacy configuration file, and since we know that the go.mod
      file is incomplete, we should complete it with as much information as
      we have — including the version of the language currently in use.
      
      However, if there is no legacy configuration file present, then we
      cannot infer that the go.mod file is incomplete: it may correctly
      specify a module without external dependencies. In that case, we
      should not initialize the 'go' directive either: the user will not be
      expecting unnecessary edits to the go.mod file, and we generally do
      not make unnecessary-but-helpful edits unless 'go mod tidy' is invoked
      explicitly.
      
      Fixes #30790
      Fixes #31100
      
      Change-Id: I05a7872bce54a917c10d910cd9a616cab52e2730
      Reviewed-on: https://go-review.googlesource.com/c/go/+/169877
      Run-TryBot: Bryan C. Mills <bcmills@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      a1c481d8
    • Matthew Dempsky's avatar
      cmd/compile: fix ICE from go/defer call to variadic function · 9f9e17a8
      Matthew Dempsky authored
      The special case logic for go/defer arguments in Escape.call was
      scattered around a bit and was somewhat inconsistently handled across
      different types of function calls and parameters. This CL pulls the
      logic out into a separate callStmt method that's used uniformly for
      all kinds of function calls and arguments.
      
      Fixes #31573.
      
      Change-Id: Icdcdf611754dc3fcf1af7cb52879fb4b73a7a31f
      Reviewed-on: https://go-review.googlesource.com/c/go/+/173019
      Run-TryBot: Matthew Dempsky <mdempsky@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      9f9e17a8
    • David Chase's avatar
      cmd/compile: shortcut intrinsic inlining AFTER getcallerXX check · 376ce8c8
      David Chase authored
      A check in inl.go to prevent inlining of functions calling
      either getcallerpc or getcallersp does not work when these
      functions are intrinsics. Swap checks to fix.
      
      Includes test.
      
      No bug, this was discovered in the course of a ridiculous
      experiment with inlining.
      
      Change-Id: Ie1392523bb89882d586678f2674e1a4eadc5e431
      Reviewed-on: https://go-review.googlesource.com/c/go/+/172217
      Run-TryBot: David Chase <drchase@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      376ce8c8
    • Than McIntosh's avatar
      go/internal/gccgoimporter: improve alias handling for anonymous fields · dc193dee
      Than McIntosh authored
      The code in the parser that deals with anonymous structure fields
      records the fact that a field is anonymous, then tries to install a proxy
      name for the field based on the name of the type used to declare
      the field. If that type was an alias, the current recipe for determining
      the proxy name was not working properly; enhance the code to recover
      and report the alias name used.
      
      Fixes #31540.
      
      Change-Id: I9b7369ed558a288b56d85170c6f1144daf5228eb
      Reviewed-on: https://go-review.googlesource.com/c/go/+/172603Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      dc193dee
    • Than McIntosh's avatar
      cmd/link: adjust whitelist for -strictdups checking for plan9 · 4590abe0
      Than McIntosh authored
      Add a couple of additional entries to the white list used to screen
      out errors for builtin functions; these correspond to cases
      that appear to come up only on the plan9 builder.
      
      Updates #31503.
      
      Change-Id: I48ab942ab2894240efe651ec7b7eace7aa5cb45e
      Reviewed-on: https://go-review.googlesource.com/c/go/+/172986Reviewed-by: default avatarDavid du Colombier <0intro@gmail.com>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      Run-TryBot: Than McIntosh <thanm@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      4590abe0
    • Yuval Pavel Zholkover's avatar
      os: disable the use of netpoll on directories as well on *BSDs · 059f2d4a
      Yuval Pavel Zholkover authored
      Follow up CL 156379.
      
      Updates #19093
      
      Change-Id: I5ea3177fc5911d3af71cbb32584249e419e9d4a3
      Reviewed-on: https://go-review.googlesource.com/c/go/+/172937
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      059f2d4a
    • Bryan C. Mills's avatar
      cmd/go/internal/modload: fix boundary conditions in matchPackages · 14b5b4a2
      Bryan C. Mills authored
      This makes the boundary logic of matchPackages consistent with
      modload.dirInModule.
      
      Previously, matchPackages always stopped at go.mod file, even within
      the vendor tree. However, we do not guarantee that the vendor tree is
      free of such files in general.
      
      matchPackages also issued needless stat operations for modules in the
      module cach, which we already know to be free of nested modules. On
      systems with slow filesystems (such as macOS), those extra calls could
      potentially slow package matching considerably.
      
      Change-Id: I71979ab752e1d3971b370b37085d30502690413b
      Reviewed-on: https://go-review.googlesource.com/c/go/+/172985
      Run-TryBot: Bryan C. Mills <bcmills@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarJay Conrod <jayconrod@google.com>
      14b5b4a2
    • Cherry Zhang's avatar
      cmd/link: mmap object data · dbe32284
      Cherry Zhang authored
      This resurrects CL 121198, except that this time we map read-only.
      
      In case that we need to apply relocations to the symbol's
      content that is backed by read-only memory, we do our own copy-
      on-write. This can happen if we failed to mmap the output file,
      or we build for Wasm.
      
      Memory profile for building k8s.io/kubernetes/cmd/kube-apiserver
      on Linux/AMD64:
      
      Old (before this sequence of CLs):
      inuse_space 1598.75MB total
      669.87MB 41.90% 41.90%   669.87MB 41.90%  cmd/link/internal/objfile.(*objReader).readSlices
      
      New:
      inuse_space 1280.45MB total
      441.18MB 34.46% 34.46%   441.18MB 34.46%  cmd/link/internal/objfile.(*objReader).readSlices
      
      Change-Id: I6b4d29d6eee9828089ea3120eb38c212db21330b
      Reviewed-on: https://go-review.googlesource.com/c/go/+/170741
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      Reviewed-by: default avatarAustin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      dbe32284
    • Cherry Zhang's avatar
      cmd/link: apply relocations later · f957a7e3
      Cherry Zhang authored
      Move the phase of applying relocations later, after the sections
      and segments are written to the mmap'd output region. Then apply
      relocations directly in the output region, instead of the input.
      So the input slices we read in don't need to be modified.
      
      This is in preparation for mmap'ing input files read-only.
      
      Change-Id: If9c80657b4469da36aec5a9ab6acf664f5af8fa0
      Reviewed-on: https://go-review.googlesource.com/c/go/+/170739
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarAustin Clements <austin@google.com>
      f957a7e3
    • Cherry Zhang's avatar
      cmd/link: apply DWARF relocations while doing compression · 248444d5
      Cherry Zhang authored
      We are preparing for applying relocations to the output buffer.
      However, for DWARF compression, relocations need to be applied
      before compression, but we don't have an output buffer at that
      time. We also cannot delay DWARF compression to when we mmap the
      output file, because we need the size of the DWARF sections to
      compute the file size.
      
      Instead of applying all the relocations together, we apply
      relocations in DWARF sections one symbol at a time, right before
      it is writing out for compression. As the symbol content may be
      in read-only memory (in the future), we use a temporary buffer
      for applying the relocations, and immediately write it out.
      
      If compression is not used, relocations are still applied all
      together.
      
      This is in preparation for mmap'ing input files read-only.
      
      Change-Id: Iae6d2dd71313897d5054bcc458d3bb78075b30c3
      Reviewed-on: https://go-review.googlesource.com/c/go/+/171397
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarAustin Clements <austin@google.com>
      248444d5
    • Cherry Zhang's avatar
      cmd/link: apply R_DWARFFILEREF later · 15a31bd9
      Cherry Zhang authored
      Apply R_DWARFFILEREF relocations later, along with other
      relocations, so that we don't modify symbols' contents before
      they are written to the output buffer.
      
      This is in preparation for mmap'ing input files read-only.
      
      Change-Id: I8e9ffb2f05acf8f198589b8770f277beb3847541
      Reviewed-on: https://go-review.googlesource.com/c/go/+/170740
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarAustin Clements <austin@google.com>
      15a31bd9