1. 13 Sep, 2016 5 commits
    • Paul Borman's avatar
      text/template: improve lexer performance in finding left delimiters. · 07b80113
      Paul Borman authored
      The existing implementation calls l.next for each run up to the next
      instance of the left delimiter ({{).  For ascii text, this is multiple
      function calls per byte.  Change to use strings.Index to find the left
      delimiter.  The performace improvement ranges from 1:1 (no text outside
      of {{}}'s) to multiple times faster (9:1 was seen on 8K of text with no
      {{ }}'s).
      
      Change-Id: I2f82bea63b78b6714f09a725f7b2bbb00a3448a3
      Reviewed-on: https://go-review.googlesource.com/24863Reviewed-by: 's avatarRob Pike <r@golang.org>
      Run-TryBot: Rob Pike <r@golang.org>
      07b80113
    • Michael Hudson-Doyle's avatar
      cmd/link: fix -buildmode=pie / -linkshared combination · 8f9671d1
      Michael Hudson-Doyle authored
      main.main and main.init were not being marked as reachable.
      
      Fixes #17076
      
      Change-Id: Ib3e29bd35ba6252962e6ba89173ca321ed6849b9
      Reviewed-on: https://go-review.googlesource.com/28996Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
      Run-TryBot: David Crawshaw <crawshaw@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      8f9671d1
    • Cherry Zhang's avatar
      cmd/compile, runtime/internal/atomic: intrinsify And8, Or8 on ARM64 · 38d35e71
      Cherry Zhang authored
      Also add assembly implementation, in case intrinsics is disabled.
      
      Change-Id: Iff0a8a8ce326651bd29f6c403f5ec08dd3629993
      Reviewed-on: https://go-review.googlesource.com/28979
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      38d35e71
    • Robert Griesemer's avatar
      cmd/compile: remove another bytes.Buffer use in fmt.go · 09686a58
      Robert Griesemer authored
      Missed in prior commit.
      
      Change-Id: Ib3a41fb4e4d41feeb28c316fe70a329c73e72379
      Reviewed-on: https://go-review.googlesource.com/29088
      Run-TryBot: Robert Griesemer <gri@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarMatthew Dempsky <mdempsky@google.com>
      09686a58
    • Robert Griesemer's avatar
      cmd/compile: reduce allocs to c85b77c2 (pre-fmt.go change) levels · 37d452c3
      Robert Griesemer authored
      Linker and reflect info generation (reflect.go) relies on formatting
      of types (tconv). The fmt.Format based approach introduces extra
      allocations, which matter in those cases. Resurrected sconv and tconv
      code from commit c85b77c2 (fmt.go only); and adjusted it slightly.
      The formatter-based approach is still used throughout the rest of the
      compiler, but reflect.go now uses the tconv method that simply returns
      the desired string.
      
      (The timing data below may not be accurate; I've included it only for
      comparison with the numbers in issue #16897).
      
      name       old time/op     new time/op     delta
      Template       297ms ± 2%      288ms ± 3%  -3.12%        (p=0.000 n=27+29)
      Unicode        155ms ± 5%      150ms ± 5%  -3.26%        (p=0.000 n=30+30)
      GoTypes        1.00s ± 3%      0.95s ± 3%  -4.51%        (p=0.000 n=28+29)
      
      name       old alloc/op    new alloc/op    delta
      Template      46.8MB ± 0%     46.5MB ± 0%  -0.65%        (p=0.000 n=28+30)
      Unicode       37.9MB ± 0%     37.8MB ± 0%  -0.24%        (p=0.000 n=29+30)
      GoTypes        144MB ± 0%      143MB ± 0%  -0.68%        (p=0.000 n=30+30)
      
      name       old allocs/op   new allocs/op   delta
      Template        469k ± 0%       446k ± 0%  -5.01%        (p=0.000 n=29+30)
      Unicode         375k ± 0%       369k ± 0%  -1.62%        (p=0.000 n=30+28)
      GoTypes        1.47M ± 0%      1.37M ± 0%  -6.29%        (p=0.000 n=30+30)
      
      The code for sconv/tconv in fmt.go now closely match the code from c85b77c2
      again; except that the functions are now methods. Removing the use of
      the bytes.Buffer in tconv and special-caseing interface{} has helped a
      small amount as well:
      
      name       old time/op     new time/op     delta
      Template       299ms ± 3%      288ms ± 3%  -3.83%        (p=0.000 n=29+29)
      Unicode        156ms ± 5%      150ms ± 5%  -3.56%        (p=0.000 n=30+30)
      GoTypes        960ms ± 2%      954ms ± 3%  -0.58%        (p=0.037 n=26+29)
      
      name       old alloc/op    new alloc/op    delta
      Template      46.6MB ± 0%     46.5MB ± 0%  -0.22%        (p=0.000 n=30+30)
      Unicode       37.8MB ± 0%     37.8MB ± 0%    ~           (p=0.075 n=30+30)
      GoTypes        143MB ± 0%      143MB ± 0%  -0.31%        (p=0.000 n=30+30)
      
      name       old allocs/op   new allocs/op   delta
      Template        447k ± 0%       446k ± 0%  -0.28%        (p=0.000 n=30+30)
      Unicode         369k ± 0%       369k ± 0%  -0.03%        (p=0.032 n=30+28)
      GoTypes        1.38M ± 0%      1.37M ± 0%  -0.35%        (p=0.000 n=29+30)
      
      Comparison between c85b77c2 and now (see issue #16897):
      
      name       old time/op     new time/op     delta
      Template       307ms ± 4%      288ms ± 3%  -6.24%  (p=0.000 n=29+29)
      Unicode        164ms ± 4%      150ms ± 5%  -8.20%  (p=0.000 n=30+30)
      GoTypes        1.01s ± 3%      0.95s ± 3%  -5.72%  (p=0.000 n=30+29)
      
      name       old alloc/op    new alloc/op    delta
      Template      46.8MB ± 0%     46.5MB ± 0%  -0.66%  (p=0.000 n=29+30)
      Unicode       37.8MB ± 0%     37.8MB ± 0%  -0.13%  (p=0.000 n=30+30)
      GoTypes        143MB ± 0%      143MB ± 0%  -0.11%  (p=0.000 n=30+30)
      
      name       old allocs/op   new allocs/op   delta
      Template        444k ± 0%       446k ± 0%  +0.48%  (p=0.000 n=30+30)
      Unicode         369k ± 0%       369k ± 0%  +0.09%  (p=0.000 n=30+28)
      GoTypes        1.35M ± 0%      1.37M ± 0%  +1.47%  (p=0.000 n=30+30)
      
      There's still a small increase (< 1.5%) for GoTypes but pending a complete
      rewrite of fmt.go, this seems ok again.
      
      Fixes #16897.
      
      Change-Id: I7e0e56cd1b9f981252eded917f5752259d402354
      Reviewed-on: https://go-review.googlesource.com/29087
      Run-TryBot: Robert Griesemer <gri@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarMatthew Dempsky <mdempsky@google.com>
      37d452c3
  2. 12 Sep, 2016 23 commits
  3. 11 Sep, 2016 12 commits