1. 14 Feb, 2015 2 commits
  2. 13 Feb, 2015 30 commits
  3. 12 Feb, 2015 8 commits
    • Josh Bleecher Snyder's avatar
      cmd/gc: evaluate concrete == interface without allocating · 77a21139
      Josh Bleecher Snyder authored
      Consider an interface value i of type I and concrete value c of type C.
      
      Prior to this CL, i==c was evaluated as
      	I(c) == i
      
      Evaluating I(c) can allocate.
      
      This CL changes the evaluation of i==c to
      	x, ok := i.(C); ok && x == c
      
      The new generated code is shorter and does not allocate directly.
      
      If C is small, as it is in every instance in the stdlib,
      the new code also uses less stack space
      and makes one runtime call instead of two.
      
      If C is very large, the original implementation is used.
      The cutoff for "very large" is 1<<16,
      following the stack vs heap cutoff used elsewhere.
      
      This kind of comparison occurs in 38 places in the stdlib,
      mostly in the net and os packages.
      
      benchmark                     old ns/op     new ns/op     delta
      BenchmarkEqEfaceConcrete      29.5          7.92          -73.15%
      BenchmarkEqIfaceConcrete      32.1          7.90          -75.39%
      BenchmarkNeEfaceConcrete      29.9          7.90          -73.58%
      BenchmarkNeIfaceConcrete      35.9          7.90          -77.99%
      
      Fixes #9370.
      
      Change-Id: I7c4555950bcd6406ee5c613be1f2128da2c9a2b7
      Reviewed-on: https://go-review.googlesource.com/2096Reviewed-by: default avatarRuss Cox <rsc@golang.org>
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      77a21139
    • Josh Bleecher Snyder's avatar
      cmd/6g, cmd/8g: make 2/3 word sgen more efficient · 747c8498
      Josh Bleecher Snyder authored
      When compiling the stdlib most of the calls
      to sgen are for exactly 2 or 3 words:
      85% for 6g and 70% for 8g.
      Special case them for performance.
      This optimization is not relevant to 5g and 9g.
      
      6g
      
      benchmark                old ns/op     new ns/op     delta
      BenchmarkCopyFat16       3.25          0.82          -74.77%
      BenchmarkCopyFat24       5.47          0.95          -82.63%
      
      8g
      
      benchmark               old ns/op     new ns/op     delta
      BenchmarkCopyFat8       3.84          2.42          -36.98%
      BenchmarkCopyFat12      4.94          2.15          -56.48%
      
      Change-Id: I8bc60b453f12597dfd916df2d072a7d5fc33ab85
      Reviewed-on: https://go-review.googlesource.com/2607Reviewed-by: default avatarRuss Cox <rsc@golang.org>
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      747c8498
    • Josh Bleecher Snyder's avatar
      cmd/6g: allocate fewer new registers in sgen · c1c3ce6b
      Josh Bleecher Snyder authored
      When possible, generate nodl/nodr directly into DI/SI
      rather than going through a temporary register.
      
      CX has already been saved; use it during trailing bytes cleanup.
      
      Change-Id: I4ec6209bcc5d3bfdc927c5c132009bd8d791ada3
      Reviewed-on: https://go-review.googlesource.com/2608Reviewed-by: default avatarRuss Cox <rsc@golang.org>
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      c1c3ce6b
    • Robert Griesemer's avatar
      math/big: implemented Float.Int64, simplified Float.Uint64 · 9e9ddb00
      Robert Griesemer authored
      Change-Id: Ic270ffa7ec6f6dd4b0a951c64ad965447cce1417
      Reviewed-on: https://go-review.googlesource.com/4571Reviewed-by: default avatarAlan Donovan <adonovan@google.com>
      9e9ddb00
    • Austin Clements's avatar
      runtime: move wbuf-related functions to new gcwork.go · 277d5870
      Austin Clements authored
      No code modifications.
      
      This is in preparation for improving the wbuf abstraction.
      
      Change-Id: I719543a345c34d079b7e39b251eccd5dd8a07826
      Reviewed-on: https://go-review.googlesource.com/4710Reviewed-by: default avatarRick Hudson <rlh@golang.org>
      277d5870
    • Austin Clements's avatar
      runtime: on Plan 9, zero memory returned to the brk by sysFree · 27ed1fcb
      Austin Clements authored
      Plan 9's sysFree has an optimization where if the object being freed
      is the last object allocated, it will roll back the brk to allow the
      memory to be reused by sysAlloc.  However, it does not zero this
      "returned" memory, so as a result, sysAlloc can return non-zeroed
      memory after a sysFree.  This leads to corruption because the runtime
      assumes sysAlloc returns zeroed memory.
      
      Fix this by zeroing the memory returned by sysFree.
      
      Fixes #9846.
      
      Change-Id: Id328c58236eb7c464b31ac1da376a0b757a5dc6a
      Reviewed-on: https://go-review.googlesource.com/4700Reviewed-by: default avatarRuss Cox <rsc@golang.org>
      Reviewed-by: default avatarDavid du Colombier <0intro@gmail.com>
      27ed1fcb
    • Andrew Gerrand's avatar
      doc: update pre-requisites for bootstrapping · 3b67e9c2
      Andrew Gerrand authored
      Change-Id: Id86994c8692e29f9d073b6322733ce9219887dc3
      Reviewed-on: https://go-review.googlesource.com/4520
      Run-TryBot: Andrew Gerrand <adg@golang.org>
      Reviewed-by: default avatarRob Pike <r@golang.org>
      3b67e9c2
    • Dmitry Vyukov's avatar
      cmd/gc: allocate non-escaping maps on stack · b3be360f
      Dmitry Vyukov authored
      Extend escape analysis to make(map[k]v).
      If it does not escape, allocate temp buffer for hmap and one bucket on stack.
      
      There are 75 cases of non-escaping maps in std lib.
      
      benchmark                                    old allocs     new allocs     delta
      BenchmarkConcurrentStmtQuery                 16161          15161          -6.19%
      BenchmarkConcurrentTxQuery                   17658          16658          -5.66%
      BenchmarkConcurrentTxStmtQuery               16157          15156          -6.20%
      BenchmarkConcurrentRandom                    13637          13114          -3.84%
      BenchmarkManyConcurrentQueries               22             20             -9.09%
      BenchmarkDecodeComplex128Slice               250            188            -24.80%
      BenchmarkDecodeFloat64Slice                  250            188            -24.80%
      BenchmarkDecodeInt32Slice                    250            188            -24.80%
      BenchmarkDecodeStringSlice                   2250           2188           -2.76%
      BenchmarkNewEmptyMap                         1              0              -100.00%
      BenchmarkNewSmallMap                         2              0              -100.00%
      
      benchmark                old ns/op     new ns/op     delta
      BenchmarkNewEmptyMap     124           55.7          -55.08%
      BenchmarkNewSmallMap     317           148           -53.31%
      
      benchmark                old allocs     new allocs     delta
      BenchmarkNewEmptyMap     1              0              -100.00%
      BenchmarkNewSmallMap     2              0              -100.00%
      
      benchmark                old bytes     new bytes     delta
      BenchmarkNewEmptyMap     48            0             -100.00%
      BenchmarkNewSmallMap     192           0             -100.00%
      
      Fixes #5449
      
      Change-Id: I24fa66f949d2f138885d9e66a0d160240dc9e8fa
      Reviewed-on: https://go-review.googlesource.com/3508Reviewed-by: default avatarKeith Randall <khr@golang.org>
      Run-TryBot: Dmitry Vyukov <dvyukov@google.com>
      b3be360f