1. 01 Apr, 2016 11 commits
    • Alexandru Moșoi's avatar
      cmd/compile/internal/ssa: BCE for induction variables · b91cc530
      Alexandru Moșoi authored
      There are 5293 loop in the main go repository.
      A survey of the top most common for loops:
      
           18 for __k__ := 0; i < len(sa.Addr); i++ {
           19 for __k__ := 0; ; i++ {
           19 for __k__ := 0; i < 16; i++ {
           25 for __k__ := 0; i < length; i++ {
           30 for __k__ := 0; i < 8; i++ {
           49 for __k__ := 0; i < len(s); i++ {
           67 for __k__ := 0; i < n; i++ {
          376 for __k__ := range __slice__ {
          685 for __k__, __v__ := range __slice__ {
         2074 for __, __v__ := range __slice__ {
      
      The algorithm to find induction variables handles all cases
      with an upper limit. It currently doesn't find related induction
      variables such as c * ind or c + ind.
      
      842 out of 22954 bound checks are removed for src/make.bash.
      1957 out of 42952 bounds checks are removed for src/all.bash.
      
      Things to do in follow-up CLs:
      * Find the associated pointer for `for _, v := range a {}`
      * Drop the NilChecks on the pointer.
      * Replace the implicit induction variable by a loop over the pointer
      
      Generated garbage can be reduced if we share the sdom between passes.
      
      % benchstat old.txt new.txt
      name       old time/op     new time/op     delta
      Template       337ms ± 3%      333ms ± 3%    ~             (p=0.258 n=9+9)
      GoTypes        1.11s ± 2%      1.10s ± 2%    ~           (p=0.912 n=10+10)
      Compiler       5.25s ± 1%      5.29s ± 2%    ~             (p=0.077 n=9+9)
      MakeBash       33.5s ± 1%      34.1s ± 2%  +1.85%          (p=0.011 n=9+9)
      
      name       old alloc/op    new alloc/op    delta
      Template      63.6MB ± 0%     63.9MB ± 0%  +0.52%         (p=0.000 n=10+9)
      GoTypes        218MB ± 0%      219MB ± 0%  +0.59%         (p=0.000 n=10+9)
      Compiler       978MB ± 0%      985MB ± 0%  +0.69%        (p=0.000 n=10+10)
      
      name       old allocs/op   new allocs/op   delta
      Template        582k ± 0%       583k ± 0%  +0.10%        (p=0.000 n=10+10)
      GoTypes        1.78M ± 0%      1.78M ± 0%  +0.12%        (p=0.000 n=10+10)
      Compiler       7.68M ± 0%      7.69M ± 0%  +0.05%        (p=0.000 n=10+10)
      
      name       old text-bytes  new text-bytes  delta
      HelloSize       581k ± 0%       581k ± 0%  -0.08%        (p=0.000 n=10+10)
      CmdGoSize      6.40M ± 0%      6.39M ± 0%  -0.08%        (p=0.000 n=10+10)
      
      name       old data-bytes  new data-bytes  delta
      HelloSize      3.66k ± 0%      3.66k ± 0%    ~     (all samples are equal)
      CmdGoSize       134k ± 0%       134k ± 0%    ~     (all samples are equal)
      
      name       old bss-bytes   new bss-bytes   delta
      HelloSize       126k ± 0%       126k ± 0%    ~     (all samples are equal)
      CmdGoSize       149k ± 0%       149k ± 0%    ~     (all samples are equal)
      
      name       old exe-bytes   new exe-bytes   delta
      HelloSize       947k ± 0%       946k ± 0%  -0.01%        (p=0.000 n=10+10)
      CmdGoSize      9.92M ± 0%      9.91M ± 0%  -0.06%        (p=0.000 n=10+10)
      
      Change-Id: Ie74bdff46fd602db41bb457333d3a762a0c3dc4d
      Reviewed-on: https://go-review.googlesource.com/20517Reviewed-by: default avatarDavid Chase <drchase@google.com>
      Run-TryBot: Alexandru Moșoi <alexandru@mosoi.ro>
      b91cc530
    • Ian Lance Taylor's avatar
      runtime: support symbolic backtrace of C code in a cgo crash · ea306ae6
      Ian Lance Taylor authored
      The new function runtime.SetCgoTraceback may be used to register stack
      traceback and symbolizer functions, written in C, to do a stack
      traceback from cgo code.
      
      There is a sample implementation of runtime.SetCgoSymbolizer at
      github.com/ianlancetaylor/cgosymbolizer.  Just importing that package is
      sufficient to get symbolic C backtraces.
      
      Currently only supported on linux/amd64.
      
      Change-Id: If96ee2eb41c6c7379d407b9561b87557bfe47341
      Reviewed-on: https://go-review.googlesource.com/17761Reviewed-by: default avatarAustin Clements <austin@google.com>
      ea306ae6
    • David Chase's avatar
      cmd/compile: ignore OXXX nodes in closure captured vars list · b64f549b
      David Chase authored
      Added a debug flag "-d closure" to explain compilation of
      closures (should this be done some other way? Should we
      rewrite the "-m" flag to "-d escapes"?)  Used this to
      discover that cause was an OXXX node in the captured vars
      list, and in turn noticed that OXXX nodes are explicitly
      ignored in all other processing of captured variables.
      
      Couldn't figure out a reproducer, did verify that this OXXX
      was not caused by an unnamed return value (which is one use
      of these).  Verified lack of heap allocation by examining -S
      output.
      
      Assembly:
      (runtime/mgc.go:1371) PCDATA $0, $2
      (runtime/mgc.go:1371) CALL "".notewakeup(SB)
      (runtime/mgc.go:1377) LEAQ "".gcBgMarkWorker.func1·f(SB), AX
      (runtime/mgc.go:1404) MOVQ AX, (SP)
      (runtime/mgc.go:1404) MOVQ "".autotmp_2242+88(SP), CX
      (runtime/mgc.go:1404) MOVQ CX, 8(SP)
      (runtime/mgc.go:1404) LEAQ go.string."GC worker (idle)"(SB), AX
      (runtime/mgc.go:1404) MOVQ AX, 16(SP)
      (runtime/mgc.go:1404) MOVQ $16, 24(SP)
      (runtime/mgc.go:1404) MOVB $20, 32(SP)
      (runtime/mgc.go:1404) MOVQ $0, 40(SP)
      (runtime/mgc.go:1404) PCDATA $0, $2
      (runtime/mgc.go:1404) CALL "".gopark(SB)
      
      Added a check for compiling_runtime to ensure that this is
      caught in the future.  Added a test to test the check.
      Verified that 1.5.3 did NOT reject the test case when
      compiled with -+ flag, so this is not a recently added bug.
      
      Cause of bug is two-part -- there was no leaking closure
      detection ever, and instead it relied on capture-of-variables
      to trigger compiling_runtime test, but closures improved in
      1.5.3 so that mere capture of a value did not also capture
      the variable, which thus allowed closures to escape, as well
      as this case where the escape was spurious.  In
      fixedbugs/issue14999.go, compare messages for f and g;
      1.5.3 would reject g, but not f.  1.4 rejects both because
      1.4 heap-allocates parameter x for both.
      
      Fixes #14999.
      
      Change-Id: I40bcdd27056810628e96763a44f2acddd503aee1
      Reviewed-on: https://go-review.googlesource.com/21322
      Run-TryBot: David Chase <drchase@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      b64f549b
    • Dominik Honnef's avatar
      all: use bytes.Equal, bytes.Contains and strings.Contains · 1cb3044c
      Dominik Honnef authored
      Change-Id: Iba82a5bd3846f7ab038cc10ec72ff6bcd2c0b484
      Reviewed-on: https://go-review.googlesource.com/21377
      Run-TryBot: Dave Cheney <dave@cheney.net>
      Reviewed-by: default avatarDave Cheney <dave@cheney.net>
      1cb3044c
    • Dave Cheney's avatar
      crypto/x509: fix build break on darwin/{arm,arm64} · 42d62946
      Dave Cheney authored
      Fix build error on darwin/{arm,arm64} caused by a62ae9f6.
      
      Change-Id: I7da4d147a529b11b3e71352a9276a57595ec4b05
      Reviewed-on: https://go-review.googlesource.com/21356
      Run-TryBot: Dave Cheney <dave@cheney.net>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      42d62946
    • Brad Fitzpatrick's avatar
      net/http/httputil: deprecate Client+ServerConn harder, use Deprecated syntax · f76b7937
      Brad Fitzpatrick authored
      Also cleans up return parameter stutter and missing periods.
      
      Change-Id: I47f5c230227ddfd1b105d5e06842f89ffea50760
      Reviewed-on: https://go-review.googlesource.com/21362Reviewed-by: default avatarAndrew Gerrand <adg@golang.org>
      f76b7937
    • Brad Fitzpatrick's avatar
      net/http: clean up the Client redirect code, document Body.Close rules more · aecfcd82
      Brad Fitzpatrick authored
      Issue #8633 (and #9134) noted that we didn't document the rules about
      closing the Response.Body when Client.Do returned both a non-nil
      *Response and a non-nil error (which can only happen when the user's
      CheckRedirect returns an error).
      
      In the process of investigating, I cleaned this code up a bunch, but
      no user-visible behavior should have changed, except perhaps some
      better error messages in some cases.
      
      It turns out it's always been the case that when a CheckRedirect error
      occurs, the Response.Body is already closed. Document that.
      
      And the new code makes that more obvious too.
      
      Fixes #8633
      
      Change-Id: Ibc40cc786ad7fc4e0cf470d66bb559c3b931684d
      Reviewed-on: https://go-review.googlesource.com/21364
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarAndrew Gerrand <adg@golang.org>
      aecfcd82
    • Ian Lance Taylor's avatar
      cmd/compile: s.f aliases itself · 92bb694a
      Ian Lance Taylor authored
      The change in 20907 fixed varexpr but broke aliased.  After that change,
      a reference to a field in a struct would not be seen as aliasing itself.
      Before that change, it would, but only because all fields in a struct
      aliased everything.
      
      This CL changes the compiler to consider all references to a field as
      aliasing all other fields in that struct.  This is imperfect--a
      reference to one field does not alias another field--but is a simple fix
      for the immediate problem.  A better fix would require tracking the
      specific fields as well.
      
      Fixes #15042.
      
      Change-Id: I5c95c0dd7b0699e53022fce9bae2e8f50d6d1d04
      Reviewed-on: https://go-review.googlesource.com/21390
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      92bb694a
    • Brad Fitzpatrick's avatar
      net/http/httputil: make ReverseProxy return 502 Bad Gateway instead of 500 · 1bf779a4
      Brad Fitzpatrick authored
      ... when the backend can't be reached.
      
      Fixes #9864
      
      Change-Id: I9e4814824943060e0101b6236d6dfd8d7822b4c7
      Reviewed-on: https://go-review.googlesource.com/21363Reviewed-by: default avatarAndrew Gerrand <adg@golang.org>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      1bf779a4
    • Brad Fitzpatrick's avatar
      net/http: update bundled http2 · a3537522
      Brad Fitzpatrick authored
      Updates x/net/http2 to git rev 31df19d6 for changes since Go 1.6.
      
      The main change was https://go-review.googlesource.com/19726 (move
      merging of HEADERS and CONTINUATION into Framer), but there were a few
      garbage reduction changes too.
      
      Change-Id: I882443d20749f8638f637a2835efe92538c95d31
      Reviewed-on: https://go-review.googlesource.com/21365
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarAndrew Gerrand <adg@golang.org>
      a3537522
    • Brad Fitzpatrick's avatar
      net/http: limit Transport's reading of response header bytes from servers · 36feb1a0
      Brad Fitzpatrick authored
      The default is 10MB, like http2, but can be configured with a new
      field http.Transport.MaxResponseHeaderBytes.
      
      Fixes #9115
      
      Change-Id: I01808ac631ce4794ef2b0dfc391ed51cf951ceb1
      Reviewed-on: https://go-review.googlesource.com/21329
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      Reviewed-by: default avatarEmmanuel Odeke <emm.odeke@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarAndrew Gerrand <adg@golang.org>
      36feb1a0
  2. 31 Mar, 2016 29 commits