1. 19 Oct, 2018 12 commits
    • Josh Bleecher Snyder's avatar
      cmd/compile: move argument stack construction to SSA generation · 2578ac54
      Josh Bleecher Snyder authored
      The goal of this change is to move work from walk to SSA,
      and simplify things along the way.
      
      This is hard to accomplish cleanly with small incremental changes,
      so this large commit message aims to provide a roadmap to the diff.
      
      High level description:
      
      Prior to this change, walk was responsible for constructing (most of) the stack for function calls.
      ascompatte gathered variadic arguments into a slice.
      It also rewrote n.List from a list of arguments to a list of assignments to stack slots.
      ascompatte was called multiple times to handle the receiver in a method call.
      reorder1 then introduced temporaries into n.List as needed to avoid smashing the stack.
      adjustargs then made extra stack space for go/defer args as needed.
      
      Node to SSA construction evaluated all the statements in n.List,
      and issued the function call, assuming that the stack was correctly constructed.
      Intrinsic calls had to dig around inside n.List to extract the arguments,
      since intrinsics don't use the stack to make function calls.
      
      This change moves stack construction to the SSA construction phase.
      ascompatte, now called walkParams, does all the work that ascompatte and reorder1 did.
      It handles variadic arguments, inserts the method receiver if needed, and allocates temporaries.
      It does not, however, make any assignments to stack slots.
      Instead, it moves the function arguments to n.Rlist, leaving assignments to temporaries in n.List.
      (It would be better to use Ninit instead of List; future work.)
      During SSA construction, after doing all the temporary assignments in n.List,
      the function arguments are assigned to stack slots by
      constructing the appropriate SSA Value, using (*state).storeArg.
      SSA construction also now handles adjustments for go/defer args.
      This change also simplifies intrinsic calls, since we no longer need to undo walk's work.
      
      Along the way, we simplify nodarg by pushing the fp==1 case to its callers, where it fits nicely.
      
      Generated code differences:
      
      There were a few optimizations applied along the way, the old way.
      f(g()) was rewritten to do a block copy of function results to function arguments.
      And reorder1 avoided introducing the final "save the stack" temporary in n.List.
      
      The f(g()) block copy optimization never actually triggered; the order pass rewrote away g(), so that has been removed.
      
      SSA optimizations mostly obviated the need for reorder1's optimization of avoiding the final temporary.
      The exception was when the temporary's type was not SSA-able;
      in that case, we got a Move into an autotmp and then an immediate Move onto the stack,
      with the autotmp never read or used again.
      This change introduces a new rewrite rule to detect such pointless double Moves
      and collapse them into a single Move.
      This is actually more powerful than the original optimization,
      since the original optimization relied on the imprecise Node.HasCall calculation.
      
      The other significant difference in the generated code is that the stack is now constructed
      completely in SP-offset order. Prior to this change, the stack was constructed somewhat
      haphazardly: first the final argument that Node.HasCall deemed to require a temporary,
      then other arguments, then the method receiver, then the defer/go args.
      SP-offset is probably a good default order. See future work.
      
      There are a few minor object file size changes as a result of this change.
      I investigated some regressions in early versions of this change.
      
      One regression (in archive/tar) was the addition of a single CMPQ instruction,
      which would be eliminated were this TODO from flagalloc to be done:
      	// TODO: Remove original instructions if they are never used.
      
      One regression (in text/template) was an ADDQconstmodify that is now
      a regular MOVQLoad+ADDQconst+MOVQStore, due to an unlucky change
      in the order in which arguments are written. The argument change
      order can also now be luckier, so this appears to be a wash.
      
      All in all, though there will be minor winners and losers,
      this change appears to be performance neutral.
      
      Future work:
      
      Move loading the result of function calls to SSA construction; eliminate OINDREGSP.
      
      Consider pushing stack construction deeper into SSA world, perhaps in an arch-specific pass.
      Among other benefits, this would make it easier to transition to a new calling convention.
      This would require rethinking the handling of stack conflicts and is non-trivial.
      
      Figure out some clean way to indicate that stack construction Stores/Moves
      do not alias each other, so that subsequent passes may do things like
      CSE+tighten shared stack setup, do DSE using non-first Stores, etc.
      This would allow us to eliminate the minor text/template regression.
      
      Possibly make assignments to stack slots not treated as statements by DWARF.
      
      Compiler benchmarks:
      
      name        old time/op       new time/op       delta
      Template          182ms ± 2%        179ms ± 2%  -1.69%  (p=0.000 n=47+48)
      Unicode          86.3ms ± 5%       85.1ms ± 4%  -1.36%  (p=0.001 n=50+50)
      GoTypes           646ms ± 1%        642ms ± 1%  -0.63%  (p=0.000 n=49+48)
      Compiler          2.89s ± 1%        2.86s ± 2%  -1.36%  (p=0.000 n=48+50)
      SSA               8.47s ± 1%        8.37s ± 2%  -1.22%  (p=0.000 n=47+50)
      Flate             122ms ± 2%        121ms ± 2%  -0.66%  (p=0.000 n=47+45)
      GoParser          147ms ± 2%        146ms ± 2%  -0.53%  (p=0.006 n=46+49)
      Reflect           406ms ± 2%        403ms ± 2%  -0.76%  (p=0.000 n=48+43)
      Tar               162ms ± 3%        162ms ± 4%    ~     (p=0.191 n=46+50)
      XML               223ms ± 2%        222ms ± 2%  -0.37%  (p=0.031 n=45+49)
      [Geo mean]        382ms             378ms       -0.89%
      
      name        old user-time/op  new user-time/op  delta
      Template          219ms ± 3%        216ms ± 3%  -1.56%  (p=0.000 n=50+48)
      Unicode           109ms ± 6%        109ms ± 5%    ~     (p=0.190 n=50+49)
      GoTypes           836ms ± 2%        828ms ± 2%  -0.96%  (p=0.000 n=49+48)
      Compiler          3.87s ± 2%        3.80s ± 1%  -1.81%  (p=0.000 n=49+46)
      SSA               12.0s ± 1%        11.8s ± 1%  -2.01%  (p=0.000 n=48+50)
      Flate             142ms ± 3%        141ms ± 3%  -0.85%  (p=0.003 n=50+48)
      GoParser          178ms ± 4%        175ms ± 4%  -1.66%  (p=0.000 n=48+46)
      Reflect           520ms ± 2%        512ms ± 2%  -1.44%  (p=0.000 n=45+48)
      Tar               200ms ± 3%        198ms ± 4%  -0.61%  (p=0.037 n=47+50)
      XML               277ms ± 3%        275ms ± 3%  -0.85%  (p=0.000 n=49+48)
      [Geo mean]        482ms             476ms       -1.23%
      
      name        old alloc/op      new alloc/op      delta
      Template         36.1MB ± 0%       35.3MB ± 0%  -2.18%  (p=0.008 n=5+5)
      Unicode          29.8MB ± 0%       29.3MB ± 0%  -1.58%  (p=0.008 n=5+5)
      GoTypes           125MB ± 0%        123MB ± 0%  -2.13%  (p=0.008 n=5+5)
      Compiler          531MB ± 0%        513MB ± 0%  -3.40%  (p=0.008 n=5+5)
      SSA              2.00GB ± 0%       1.93GB ± 0%  -3.34%  (p=0.008 n=5+5)
      Flate            24.5MB ± 0%       24.3MB ± 0%  -1.18%  (p=0.008 n=5+5)
      GoParser         29.4MB ± 0%       28.7MB ± 0%  -2.34%  (p=0.008 n=5+5)
      Reflect          87.1MB ± 0%       86.0MB ± 0%  -1.33%  (p=0.008 n=5+5)
      Tar              35.3MB ± 0%       34.8MB ± 0%  -1.44%  (p=0.008 n=5+5)
      XML              47.9MB ± 0%       47.1MB ± 0%  -1.86%  (p=0.008 n=5+5)
      [Geo mean]       82.8MB            81.1MB       -2.08%
      
      name        old allocs/op     new allocs/op     delta
      Template           352k ± 0%         347k ± 0%  -1.32%  (p=0.008 n=5+5)
      Unicode            342k ± 0%         339k ± 0%  -0.66%  (p=0.008 n=5+5)
      GoTypes           1.29M ± 0%        1.27M ± 0%  -1.30%  (p=0.008 n=5+5)
      Compiler          4.98M ± 0%        4.87M ± 0%  -2.14%  (p=0.008 n=5+5)
      SSA               15.7M ± 0%        15.2M ± 0%  -2.86%  (p=0.008 n=5+5)
      Flate              233k ± 0%         231k ± 0%  -0.83%  (p=0.008 n=5+5)
      GoParser           296k ± 0%         291k ± 0%  -1.54%  (p=0.016 n=5+4)
      Reflect           1.05M ± 0%        1.04M ± 0%  -0.65%  (p=0.008 n=5+5)
      Tar                343k ± 0%         339k ± 0%  -0.97%  (p=0.008 n=5+5)
      XML                432k ± 0%         426k ± 0%  -1.19%  (p=0.008 n=5+5)
      [Geo mean]         815k              804k       -1.35%
      
      name        old object-bytes  new object-bytes  delta
      Template          505kB ± 0%        505kB ± 0%  -0.01%  (p=0.008 n=5+5)
      Unicode           224kB ± 0%        224kB ± 0%    ~     (all equal)
      GoTypes          1.82MB ± 0%       1.83MB ± 0%  +0.06%  (p=0.008 n=5+5)
      Flate             324kB ± 0%        324kB ± 0%  +0.00%  (p=0.008 n=5+5)
      GoParser          402kB ± 0%        402kB ± 0%  +0.04%  (p=0.008 n=5+5)
      Reflect          1.39MB ± 0%       1.39MB ± 0%  -0.01%  (p=0.008 n=5+5)
      Tar               449kB ± 0%        449kB ± 0%  -0.02%  (p=0.008 n=5+5)
      XML               598kB ± 0%        597kB ± 0%  -0.05%  (p=0.008 n=5+5)
      
      Change-Id: Ifc9d5c1bd01f90171414b8fb18ffe2290d271143
      Reviewed-on: https://go-review.googlesource.com/c/114797
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarDavid Chase <drchase@google.com>
      Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      2578ac54
    • Denys Smirnov's avatar
      cmd/compile: in wasm, allocate approximately right number of locals for functions · 6c631ae2
      Denys Smirnov authored
      Currently, WASM binary writer requests 16 int registers (locals) and
      16 float registers for every function regardless of how many locals the
      function uses.
      
      This change counts the number of used registers and requests a number
      of locals matching the highest register index. The change has no effect
      on performance and neglectable binary size improvement, but it makes
      WASM code more readable and easy to analyze.
      
      Change-Id: Ic1079623c0d632b215c68482db909fa440892700
      GitHub-Last-Rev: 184634fa918aff74e280904dc2efafcc80735a8b
      GitHub-Pull-Request: golang/go#28116
      Reviewed-on: https://go-review.googlesource.com/c/140999Reviewed-by: default avatarRichard Musiol <neelance@gmail.com>
      Run-TryBot: Richard Musiol <neelance@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      6c631ae2
    • Robert Griesemer's avatar
      go/types: accept recv base type that is alias to a pointer type · f5636523
      Robert Griesemer authored
      Per the spec clarification https://golang.org/cl/142757 (issue #27995).
      
      Fixes #28251.
      Updates #27995.
      
      Change-Id: Idc142829955f9306a8698c5ed1c24baa8ee2b109
      Reviewed-on: https://go-review.googlesource.com/c/143179Reviewed-by: default avatarAlan Donovan <adonovan@google.com>
      f5636523
    • Robert Griesemer's avatar
      go/types: collect type info for type ...T in variadic functions · 0287d8ed
      Robert Griesemer authored
      Because the code type-checks T rather than ...T (and then corrects
      the type to []T "manually"), it didn't automatically record the
      type for the ast.Expr corresponding to ...T. Do it manually.
      
      Fixes #28277.
      
      Change-Id: I3d9aae310c90b01f52d189e70c48dd9007f72207
      Reviewed-on: https://go-review.googlesource.com/c/143317Reviewed-by: default avatarAlan Donovan <adonovan@google.com>
      0287d8ed
    • Matthew Dempsky's avatar
      cmd/compile: remove compiling_wrappers · 41c0b9eb
      Matthew Dempsky authored
      It's no longer needed after removing safemode.
      
      Change-Id: I7581d77a86342e3b6d7c632839f5eb7a5c20902e
      Reviewed-on: https://go-review.googlesource.com/c/143397
      Run-TryBot: Matthew Dempsky <mdempsky@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      41c0b9eb
    • Robert Griesemer's avatar
      go/types: fix unsymmetric test when typechecking comparisons · 34585ba5
      Robert Griesemer authored
      The existing code assumed that comparability and orderedness
      was implied for the 2nd operand if the 1st operand satisfied
      these predicates.
      
      Fixes #28164.
      
      Change-Id: I61d4e5eedb3297731a20a14acb3645d11b36fcc5
      Reviewed-on: https://go-review.googlesource.com/c/143277
      Run-TryBot: Robert Griesemer <gri@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      34585ba5
    • Clément Chigot's avatar
      runtime: port assembly files for aix/ppc64 · ff99a61e
      Clément Chigot authored
      This commit adds the change on asm_ppc64.s and tls_ppc64.s files for AIX
      operating system.
      
      R2 does not need to be set for aix/ppc64 since it should remain valid
      througout Go execution, except after a call to a C function.
      Moreover, g must always be saved on the tls as syscalls are made with
      C functions.
      
      Some modifications on asm_ppc64.s are due to AIX stack layout.
      
      It also removes a useless part in asmcgocall which was done twice.
      
      Change-Id: Ie037ab73da00562bb978f2d0f17fcdabd4a40aa2
      Reviewed-on: https://go-review.googlesource.com/c/138735
      Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarCarlos Eduardo Seo <cseo@linux.vnet.ibm.com>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      ff99a61e
    • Clément Chigot's avatar
      cmd/internal/xcoff: add new debug package for cmd · 38df4c17
      Clément Chigot authored
      This commit adds a new package in cmd/internal which aims
      to debug and load XCOFF files.
      
      Updates: #25893, #28037
      
      Change-Id: I47db495bedfa43e9129a831b9b8bbc35b703567b
      Reviewed-on: https://go-review.googlesource.com/c/138727
      Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      38df4c17
    • Filippo Valsorda's avatar
      crypto/tls: replace net.Pipe in tests with real TCP connections · be0f3c28
      Filippo Valsorda authored
      crypto/tls is meant to work over network connections with buffering, not
      synchronous connections, as explained in #24198. Tests based on net.Pipe
      are unrealistic as reads and writes are matched one to one. Such tests
      worked just thanks to the implementation details of the tls.Conn
      internal buffering, and would break if for example the flush of the
      first flight of the server was not entirely assimilated by the client
      rawInput buffer before the client attempted to reply to the ServerHello.
      
      Note that this might run into the Darwin network issues at #25696.
      
      Fixed a few test races that were either hidden or synchronized by the
      use of the in-memory net.Pipe.
      
      Also, this gets us slightly more realistic benchmarks, reflecting some
      syscall cost of Read and Write operations.
      
      Change-Id: I5a597b3d7a81b8ccc776030cc837133412bf50f8
      Reviewed-on: https://go-review.googlesource.com/c/142817
      Run-TryBot: Filippo Valsorda <filippo@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      be0f3c28
    • Seebs's avatar
      text/template: drop unused sortKeys function · 628403fd
      Seebs authored
      Recent change golang.org/cl/142737 drops the only call site for the
      sortKeys function. If it's not in use, it should probably not be there in
      the code, lurking and preparing to bite us when someone calls that instead
      of the new key sorter in fmtsort, resulting in strange inconsistencies.
      
      Since the function isn't called, this should have no impact.
      Related to, but does not fix, #21095.
      
      Change-Id: I4695503ef4d5ce90d989ec952f01ea00cc15c79d
      Reviewed-on: https://go-review.googlesource.com/c/143178Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      628403fd
    • Rob Pike's avatar
      flag: return a consistent parse error if the flag value is invalid · ae0c4358
      Rob Pike authored
      Return a consistently formatted error string that reports either
      a parse error or a range error.
      
      Before:
      	invalid boolean value "3" for -debug: strconv.ParseBool: parsing "3": invalid syntax
      
      After:
      	invalid boolean value "3" for -debug: parse error
      
      Fixes #26822
      
      Change-Id: I60992bf23da32a4c0cf32472a8af486a3c9674ad
      Reviewed-on: https://go-review.googlesource.com/c/143257Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      ae0c4358
    • Ben Shi's avatar
      cmd/compile: optimize store combination on 386/amd64 · 95dda75b
      Ben Shi authored
      This CL add 3 rules to combine byte-store to word-store on386 and
      amd64.
      
      Change-Id: Iffd9cda42f1961680c81def4edc773ad58f211b3
      Reviewed-on: https://go-review.googlesource.com/c/143057
      Run-TryBot: Ben Shi <powerman1st@163.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      95dda75b
  2. 18 Oct, 2018 11 commits
  3. 17 Oct, 2018 17 commits
    • Umang Parmar's avatar
      database/sql: remove commented debug prints · 830f424c
      Umang Parmar authored
      Fixes #28234
      
      Change-Id: I89090ffb8285c4936b0c9b5c2475849c0643186a
      GitHub-Last-Rev: 4dd0ec162d0ce1548045d4119fd3295570f65d85
      GitHub-Pull-Request: golang/go#28246
      Reviewed-on: https://go-review.googlesource.com/c/142877Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      830f424c
    • Alan Donovan's avatar
      cmd/go: make go vet query cmd/vet for its flags · 398b54df
      Alan Donovan authored
      Add -flags flag to cmd/vet that causes it to describe its flags as JSON.
      
      go vet's "-vettool" flag has been replaced with an environment
      variable, GOVETTOOL, for two reasons:
      
        1) we need its value before flag processing,
           because we must run vet to discover its flags.
      
        2) users may change the env var to opt in/out of the new vet tool
           during the upcoming transition to vet based on the analysis API.
      
      Change-Id: I5d8f90817623022f4170b88fab3c92c9b2fbdc37
      Reviewed-on: https://go-review.googlesource.com/c/142617
      Run-TryBot: Alan Donovan <adonovan@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBryan C. Mills <bcmills@google.com>
      398b54df
    • Robert Griesemer's avatar
      go/internal/gccgoimporter: backport from x/tools to ensure identical code · 4bea6c65
      Robert Griesemer authored
      This change backports a minor modification of the x/tools version of this
      code back into the std library. It simply ensures that both versions of
      the code are the same and will simplify keeping them in sync down the
      road.
      
      While this is an API change, this is an internal package, so we're ok.
      
      Updates #27891.
      
      Change-Id: Ib153141382f727a2692ca80179ae09c4a383ba4f
      Reviewed-on: https://go-review.googlesource.com/c/142894Reviewed-by: default avatarAlan Donovan <adonovan@google.com>
      4bea6c65
    • Robert Griesemer's avatar
      spec: clarify rules for receiver base types · bb3e2117
      Robert Griesemer authored
      The spec currently provides a syntactic rule for receiver base types,
      and a strict reading of those rules prohibits the use of type aliases
      referring to pointer types as receiver types.
      
      This strict interpretation breaks an assumed rule for aliases, which
      is that a type literal can always be replaced by an alias denoting
      that literal.
      
      Furthermore, cmd/compile always accepted this new formulation of the
      receiver type rules and so this change will simply validate what has
      been implemented all along.
      
      Fixes #27995.
      
      Change-Id: I032289c926a4f070d6f7795431d86635fe64d907
      Reviewed-on: https://go-review.googlesource.com/c/142757Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      Reviewed-by: default avatarRob Pike <r@golang.org>
      Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      bb3e2117
    • Ian Lance Taylor's avatar
      os/signal: wait for goroutine in TestTerminalSignal · dc75744f
      Ian Lance Taylor authored
      Fixes #28169
      
      Change-Id: I187d9effea56357bbb04d4971d284a52ffae61f8
      Reviewed-on: https://go-review.googlesource.com/c/142889
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      dc75744f
    • Ian Lance Taylor's avatar
      cmd/cgo: write a string rather than building an AST · 1d18f66d
      Ian Lance Taylor authored
      This generates the same code as before, but does so directly rather
      than building an AST and printing that. This is in preparation for
      later changes.
      
      Change-Id: Ifec141120bcc74847f0bff8d3d47306bfe69b454
      Reviewed-on: https://go-review.googlesource.com/c/142883
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      1d18f66d
    • Ian Lance Taylor's avatar
      cmd/cgo: split name rewriting out of rewriteRef · af951994
      Ian Lance Taylor authored
      This is in preparation for later changes.
      
      Change-Id: I2b9b77a782cf65a2fcec5e700ec6bb8b1476f6b5
      Reviewed-on: https://go-review.googlesource.com/c/142882
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      af951994
    • Ian Lance Taylor's avatar
      cmd/cgo: mangle names before rewriting calls · 19b264e7
      Ian Lance Taylor authored
      Move name mangling before rewriting calls rather than after.
      This is in preparation for later changes.
      
      Change-Id: I74bc351f4290dad7ebf6d0d361bb684087786053
      Reviewed-on: https://go-review.googlesource.com/c/142881
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      19b264e7
    • Jordan Rhee's avatar
      os: change UserHomeDir to use USERPROFILE on windows · 5ddec248
      Jordan Rhee authored
      Fixes #28182
      
      Change-Id: I49c2117fba6325c234512f937ff2edfa9477f52f
      Reviewed-on: https://go-review.googlesource.com/c/142886Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      5ddec248
    • Matthew Dempsky's avatar
      cmd/compile: remove obsolete "safe" mode · 51857449
      Matthew Dempsky authored
      Nowadays there are better ways to safely run untrusted Go programs, like
      NaCl and gVisor.
      
      Change-Id: I20c45f13a50dbcf35c343438b720eb93e7b4e13a
      Reviewed-on: https://go-review.googlesource.com/c/142717
      Run-TryBot: Matthew Dempsky <mdempsky@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      Reviewed-by: default avatarRuss Cox <rsc@golang.org>
      51857449
    • Josh Bleecher Snyder's avatar
      test: limit runoutput concurrency with -v · f2a67653
      Josh Bleecher Snyder authored
      This appears to have simply been an oversight.
      
      Change-Id: Ia5d1309b3ebc99c9abbf0282397693272d8178aa
      Reviewed-on: https://go-review.googlesource.com/c/142885
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      f2a67653
    • Michael Anthony Knyszek's avatar
      runtime: use only treaps for tracking spans · 07e738ec
      Michael Anthony Knyszek authored
      Currently, mheap tracks spans in both mSpanLists and mTreaps, but
      mSpanLists, while they tend to be smaller, complicate the
      implementation. Here we simplify the implementation by removing
      free and busy from mheap and renaming freelarge -> free and busylarge
      -> busy.
      
      This change also slightly changes the reclamation policy. Previously,
      for allocations under 1MB we would attempt to find a small span of the
      right size. Now, we just try to find any number of spans totaling the
      right size. This may increase heap fragmentation, but that will be dealt
      with using virtual memory tricks in follow-up CLs.
      
      For #14045.
      
      Garbage-heavy benchmarks show very little change, except what appears
      to be a decrease in STW times and peak RSS.
      
      name                      old STW-ns/GC       new STW-ns/GC       delta
      Garbage/benchmem-MB=64-8           263k ±64%           217k ±24%  -17.66%  (p=0.028 n=25+23)
      
      name                      old STW-ns/op       new STW-ns/op       delta
      Garbage/benchmem-MB=64-8          9.39k ±65%          7.80k ±24%  -16.88%  (p=0.037 n=25+23)
      
      name                      old peak-RSS-bytes  new peak-RSS-bytes  delta
      Garbage/benchmem-MB=64-8           281M ± 0%           249M ± 4%  -11.40%  (p=0.000 n=19+18)
      
      https://perf.golang.org/search?q=upload:20181005.1
      
      Go1 benchmarks perform roughly the same, the most notable regression
      being the JSON encode/decode benchmark with worsens by ~2%.
      
      name                     old time/op    new time/op    delta
      BinaryTree17-8              3.02s ± 2%     2.99s ± 2%  -1.18%  (p=0.000 n=25+24)
      Fannkuch11-8                3.05s ± 1%     3.02s ± 2%  -1.20%  (p=0.000 n=25+25)
      FmtFprintfEmpty-8          43.6ns ± 5%    43.4ns ± 3%    ~     (p=0.528 n=25+25)
      FmtFprintfString-8         74.9ns ± 3%    73.4ns ± 1%  -2.03%  (p=0.001 n=25+24)
      FmtFprintfInt-8            79.3ns ± 3%    77.9ns ± 1%  -1.73%  (p=0.003 n=25+25)
      FmtFprintfIntInt-8          119ns ± 6%     116ns ± 0%  -2.68%  (p=0.000 n=25+18)
      FmtFprintfPrefixedInt-8     134ns ± 4%     132ns ± 1%  -1.52%  (p=0.004 n=25+25)
      FmtFprintfFloat-8           240ns ± 1%     241ns ± 1%    ~     (p=0.403 n=24+23)
      FmtManyArgs-8               543ns ± 1%     537ns ± 1%  -1.00%  (p=0.000 n=25+25)
      GobDecode-8                6.88ms ± 1%    6.92ms ± 4%    ~     (p=0.088 n=24+22)
      GobEncode-8                5.92ms ± 1%    5.93ms ± 1%    ~     (p=0.898 n=25+24)
      Gzip-8                      267ms ± 2%     266ms ± 2%    ~     (p=0.213 n=25+24)
      Gunzip-8                   35.4ms ± 1%    35.6ms ± 1%  +0.70%  (p=0.000 n=25+25)
      HTTPClientServer-8          104µs ± 2%     104µs ± 2%    ~     (p=0.686 n=25+25)
      JSONEncode-8               9.67ms ± 1%    9.80ms ± 4%  +1.32%  (p=0.000 n=25+25)
      JSONDecode-8               47.7ms ± 1%    48.8ms ± 5%  +2.33%  (p=0.000 n=25+25)
      Mandelbrot200-8            4.87ms ± 1%    4.91ms ± 1%  +0.79%  (p=0.000 n=25+25)
      GoParse-8                  3.59ms ± 4%    3.55ms ± 1%    ~     (p=0.199 n=25+24)
      RegexpMatchEasy0_32-8      90.3ns ± 1%    89.9ns ± 1%  -0.47%  (p=0.000 n=25+21)
      RegexpMatchEasy0_1K-8       204ns ± 1%     204ns ± 1%    ~     (p=0.914 n=25+24)
      RegexpMatchEasy1_32-8      84.9ns ± 0%    84.6ns ± 1%  -0.36%  (p=0.000 n=24+25)
      RegexpMatchEasy1_1K-8       350ns ± 1%     348ns ± 3%  -0.59%  (p=0.007 n=25+25)
      RegexpMatchMedium_32-8      122ns ± 1%     121ns ± 0%  -1.08%  (p=0.000 n=25+18)
      RegexpMatchMedium_1K-8     36.1µs ± 1%    34.6µs ± 1%  -4.02%  (p=0.000 n=25+25)
      RegexpMatchHard_32-8       1.69µs ± 2%    1.65µs ± 1%  -2.38%  (p=0.000 n=25+25)
      RegexpMatchHard_1K-8       50.8µs ± 1%    49.4µs ± 1%  -2.69%  (p=0.000 n=25+24)
      Revcomp-8                   453ms ± 2%     449ms ± 3%  -0.74%  (p=0.022 n=25+24)
      Template-8                 63.2ms ± 2%    63.4ms ± 1%    ~     (p=0.127 n=25+24)
      TimeParse-8                 313ns ± 1%     315ns ± 3%    ~     (p=0.924 n=24+25)
      TimeFormat-8                294ns ± 1%     292ns ± 2%  -0.65%  (p=0.004 n=23+24)
      [Geo mean]                 49.9µs         49.6µs       -0.65%
      
      name                     old speed      new speed      delta
      GobDecode-8               112MB/s ± 1%   110MB/s ± 4%  -1.00%  (p=0.036 n=24+24)
      GobEncode-8               130MB/s ± 1%   129MB/s ± 1%    ~     (p=0.894 n=25+24)
      Gzip-8                   72.7MB/s ± 2%  73.0MB/s ± 2%    ~     (p=0.208 n=25+24)
      Gunzip-8                  549MB/s ± 1%   545MB/s ± 1%  -0.70%  (p=0.000 n=25+25)
      JSONEncode-8              201MB/s ± 1%   198MB/s ± 3%  -1.29%  (p=0.000 n=25+25)
      JSONDecode-8             40.7MB/s ± 1%  39.8MB/s ± 5%  -2.23%  (p=0.000 n=25+25)
      GoParse-8                16.2MB/s ± 4%  16.3MB/s ± 1%    ~     (p=0.211 n=25+24)
      RegexpMatchEasy0_32-8     354MB/s ± 1%   356MB/s ± 1%  +0.47%  (p=0.000 n=25+21)
      RegexpMatchEasy0_1K-8    5.00GB/s ± 0%  4.99GB/s ± 1%    ~     (p=0.588 n=24+24)
      RegexpMatchEasy1_32-8     377MB/s ± 1%   378MB/s ± 1%  +0.39%  (p=0.000 n=25+25)
      RegexpMatchEasy1_1K-8    2.92GB/s ± 1%  2.94GB/s ± 3%  +0.65%  (p=0.008 n=25+25)
      RegexpMatchMedium_32-8   8.14MB/s ± 1%  8.22MB/s ± 1%  +0.98%  (p=0.000 n=25+24)
      RegexpMatchMedium_1K-8   28.4MB/s ± 1%  29.6MB/s ± 1%  +4.19%  (p=0.000 n=25+25)
      RegexpMatchHard_32-8     18.9MB/s ± 2%  19.4MB/s ± 1%  +2.43%  (p=0.000 n=25+25)
      RegexpMatchHard_1K-8     20.2MB/s ± 1%  20.7MB/s ± 1%  +2.76%  (p=0.000 n=25+24)
      Revcomp-8                 561MB/s ± 2%   566MB/s ± 3%  +0.75%  (p=0.021 n=25+24)
      Template-8               30.7MB/s ± 2%  30.6MB/s ± 1%    ~     (p=0.131 n=25+24)
      [Geo mean]                120MB/s        121MB/s       +0.48%
      
      https://perf.golang.org/search?q=upload:20181004.6
      
      Change-Id: I97f9fee34577961a116a8ddd445c6272253f0f95
      Reviewed-on: https://go-review.googlesource.com/c/139837
      Run-TryBot: Michael Knyszek <mknyszek@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarAustin Clements <austin@google.com>
      07e738ec
    • Michael Anthony Knyszek's avatar
      runtime: de-duplicate span scavenging · e508a5f0
      Michael Anthony Knyszek authored
      Currently, span scavenging was done nearly identically in two different
      locations. This change deduplicates that into one shared routine.
      
      For #14045.
      
      Change-Id: I15006b2c9af0e70b7a9eae9abb4168d3adca3860
      Reviewed-on: https://go-review.googlesource.com/c/139297
      Run-TryBot: Michael Knyszek <mknyszek@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarAustin Clements <austin@google.com>
      e508a5f0
    • Yury Smolsky's avatar
      cmd/compile: make tabs narrow in src column of ssa.html · de31f637
      Yury Smolsky authored
      Too deeply nested code is hard to fit in ssa.html.
      This CL reduces the tab size to 4 characters.
      
      Change-Id: I08643b0868bce3439567084c7d701654655f23d7
      Reviewed-on: https://go-review.googlesource.com/c/142857Reviewed-by: default avatarDavid Chase <drchase@google.com>
      de31f637
    • Rob Pike's avatar
      cmd/doc: fix repeated header bug added in previous CL · a2381f59
      Rob Pike authored
      One too many lines was deleted, and it would print a header multiple times.
      Add a test.
      
      Change-Id: I4906b454dbb66193d515ffacf43849ffdc2dede6
      Reviewed-on: https://go-review.googlesource.com/c/142937Reviewed-by: default avatarRalph Corderoy <ralph@inputplus.co.uk>
      Reviewed-by: default avatarDaniel Martí <mvdan@mvdan.cc>
      Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      a2381f59
    • Rob Pike's avatar
      cmd/doc: add -all flag to print all documentation for package · 101a677e
      Rob Pike authored
      Unlike the one for the old godoc, you need the -u flag to see
      unexported symbols. This seems like the right behavior: it's
      consistent.
      
      For now at least, the argument must be a package, not a symbol.
      This is also different from old godoc.
      
      Required a little refactoring but also cleaned up a few things.
      
      Update #25595
      
      Leaving the bug open for now until we tackle
      	go doc -all symbol
      
      Change-Id: Ibc1975bfa592cb1e92513eb2e5e9e11e01a60095
      Reviewed-on: https://go-review.googlesource.com/c/141977
      Run-TryBot: Rob Pike <r@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarRuss Cox <rsc@golang.org>
      101a677e
    • Filippo Valsorda's avatar
      crypto/tls,crypto/x509: normalize RFC references · ee769922
      Filippo Valsorda authored
      Use the format "RFC XXXX, Section X.X" (or "Appendix Y.X") as it fits
      more properly in prose than a link, is more future-proof, and as there
      are multiple ways to render an RFC. Capital "S" to follow the quoting
      standard of RFCs themselves.
      
      Applied the new goimports grouping to all files in those packages, too.
      
      Change-Id: I01267bb3a3b02664f8f822e97b129075bb14d404
      Reviewed-on: https://go-review.googlesource.com/c/141918Reviewed-by: default avatarDmitri Shuralyov <dmitshur@golang.org>
      ee769922