1. 14 Sep, 2016 15 commits
    • Josh Bleecher Snyder's avatar
      cmd/vet/all: update whitelist · d72c2846
      Josh Bleecher Snyder authored
      CL 29110 brought the fix into the main tree.
      
      Change-Id: I7bf02670d40f22d35c63e05173419fdee9f93462
      Reviewed-on: https://go-review.googlesource.com/29161
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      d72c2846
    • Josh Bleecher Snyder's avatar
      cmd/compile/internal/obj/x86: eliminate some function prologues · b92d39ef
      Josh Bleecher Snyder authored
      The standard sort swap method
      
      func (t T) Swap(i, j int) {
        t[i], t[j] = t[j], t[i]
      }
      
      uses no stack space on architectures for which
      FixedFrameSize == 0, currently 386 and amd64.
      
      Nevertheless, we insert a stack check prologue.
      This is because it contains a call to
      runtime.panicindex.
      
      However, for a few common runtime functions,
      we know at compile time that they require
      no arguments. Allow them to pass unnoticed.
      
      Triggers for 380 functions during make.bash.
      Cuts 4k off cmd/go.
      
      encoding/binary benchmarks:
      
      ReadSlice1000Int32s-8     9.49µs ± 3%    9.41µs ± 5%    ~     (p=0.075 n=29+27)
      ReadStruct-8              1.50µs ± 3%    1.48µs ± 2%  -1.49%  (p=0.000 n=30+28)
      ReadInts-8                 599ns ± 3%     600ns ± 3%    ~     (p=0.471 n=30+29)
      WriteInts-8                836ns ± 4%     841ns ± 3%    ~     (p=0.371 n=30+29)
      WriteSlice1000Int32s-8    8.84µs ± 3%    8.69µs ± 5%  -1.71%  (p=0.001 n=30+30)
      PutUvarint32-8            29.6ns ± 1%    28.1ns ± 3%  -5.21%  (p=0.000 n=28+28)
      PutUvarint64-8            82.6ns ± 5%    82.3ns ±10%  -0.43%  (p=0.014 n=27+30)
      
      Swap assembly before:
      
      "".T.Swap t=1 size=74 args=0x28 locals=0x0
      	0x0000 00000 (swap.go:5)	TEXT	"".T.Swap(SB), $0-40
      	0x0000 00000 (swap.go:5)	MOVQ	(TLS), CX
      	0x0009 00009 (swap.go:5)	CMPQ	SP, 16(CX)
      	0x000d 00013 (swap.go:5)	JLS	67
      	0x000f 00015 (swap.go:5)	FUNCDATA	$0, gclocals·3cadd97b66f25a3a642be35e9362338f(SB)
      	0x000f 00015 (swap.go:5)	FUNCDATA	$1, gclocals·69c1753bd5f81501d95132d08af04464(SB)
      	0x000f 00015 (swap.go:5)	MOVQ	"".i+32(FP), AX
      	0x0014 00020 (swap.go:5)	MOVQ	"".t+16(FP), CX
      	0x0019 00025 (swap.go:5)	CMPQ	AX, CX
      	0x001c 00028 (swap.go:5)	JCC	$0, 60
      	0x001e 00030 (swap.go:5)	MOVQ	"".t+8(FP), DX
      	0x0023 00035 (swap.go:5)	MOVBLZX	(DX)(AX*1), BX
      	0x0027 00039 (swap.go:5)	MOVQ	"".j+40(FP), SI
      	0x002c 00044 (swap.go:5)	CMPQ	SI, CX
      	0x002f 00047 (swap.go:5)	JCC	$0, 60
      	0x0031 00049 (swap.go:5)	MOVBLZX	(DX)(SI*1), CX
      	0x0035 00053 (swap.go:5)	MOVB	CL, (DX)(AX*1)
      	0x0038 00056 (swap.go:5)	MOVB	BL, (DX)(SI*1)
      	0x003b 00059 (swap.go:5)	RET
      	0x003c 00060 (swap.go:5)	PCDATA	$0, $1
      	0x003c 00060 (swap.go:5)	CALL	runtime.panicindex(SB)
      	0x0041 00065 (swap.go:5)	UNDEF
      	0x0043 00067 (swap.go:5)	NOP
      	0x0043 00067 (swap.go:5)	CALL	runtime.morestack_noctxt(SB)
      	0x0048 00072 (swap.go:5)	JMP	0
      
      Swap assembly after:
      
      "".T.Swap t=1 size=52 args=0x28 locals=0x0
      	0x0000 00000 (swap.go:5)	TEXT	"".T.Swap(SB), $0-40
      	0x0000 00000 (swap.go:5)	FUNCDATA	$0, gclocals·3cadd97b66f25a3a642be35e9362338f(SB)
      	0x0000 00000 (swap.go:5)	FUNCDATA	$1, gclocals·69c1753bd5f81501d95132d08af04464(SB)
      	0x0000 00000 (swap.go:5)	MOVQ	"".i+32(FP), AX
      	0x0005 00005 (swap.go:5)	MOVQ	"".t+16(FP), CX
      	0x000a 00010 (swap.go:5)	CMPQ	AX, CX
      	0x000d 00013 (swap.go:5)	JCC	$0, 45
      	0x000f 00015 (swap.go:5)	MOVQ	"".t+8(FP), DX
      	0x0014 00020 (swap.go:5)	MOVBLZX	(DX)(AX*1), BX
      	0x0018 00024 (swap.go:5)	MOVQ	"".j+40(FP), SI
      	0x001d 00029 (swap.go:5)	CMPQ	SI, CX
      	0x0020 00032 (swap.go:5)	JCC	$0, 45
      	0x0022 00034 (swap.go:5)	MOVBLZX	(DX)(SI*1), CX
      	0x0026 00038 (swap.go:5)	MOVB	CL, (DX)(AX*1)
      	0x0029 00041 (swap.go:5)	MOVB	BL, (DX)(SI*1)
      	0x002c 00044 (swap.go:5)	RET
      	0x002d 00045 (swap.go:5)	PCDATA	$0, $1
      	0x002d 00045 (swap.go:5)	CALL	runtime.panicindex(SB)
      	0x0032 00050 (swap.go:5)	UNDEF
      
      Change-Id: I57dad14af8aaa5e6112deac407cfadc2bfaf1f54
      Reviewed-on: https://go-review.googlesource.com/24814
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      b92d39ef
    • Josh Bleecher Snyder's avatar
      cmd: add internal/browser package · 33ed3564
      Josh Bleecher Snyder authored
      cmd/cover, cmd/trace, and cmd/pprof all open browsers.
      'go bug' will soon also open a browser.
      It is time to unify the browser-handling code.
      
      Change-Id: Iee6b443e21e938aeaaac366a1aefb1afbc7d9b2c
      Reviewed-on: https://go-review.googlesource.com/29160
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      33ed3564
    • Brad Fitzpatrick's avatar
      bytes: cut 10 seconds off the race builder's benchmark test · 9a7ce41d
      Brad Fitzpatrick authored
      Don't benchmark so many sizes during the race builder's benchmark run.
      
      This package doesn't even use goroutines.
      
      Cuts off 10 seconds.
      
      Updates #17104
      
      Change-Id: Ibb2c7272c18b9014a775949c656a5b930f197cd4
      Reviewed-on: https://go-review.googlesource.com/29158Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
      9a7ce41d
    • Brad Fitzpatrick's avatar
      regexp: don't run slow benchmarks on race builders · f09d0458
      Brad Fitzpatrick authored
      Shave 6.5 minutes off the *-race build time.
      
      The *-race builders run:
      
          go test -short -race -run=^$ -benchtime=.1s -cpu=4 $PKG
      
      ... for each package with benchmarks.
      
      The point isn't to measure the speed of the packages, but rather to
      see if there are any races. (which is why a benchtime of 0.1 seconds
      is used)
      
      But running in race mode makes things slower and our benchmarks aren't
      all very fast to begin with.
      
      The regexp benchmarks in race were taking over 6.5 minutes. With this
      CL, it's now 8 seconds.
      
      Updates #17104
      
      Change-Id: I054528d09b1568d37aac9f9b515d6ed90a5cf5b0
      Reviewed-on: https://go-review.googlesource.com/29156
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
      f09d0458
    • Keith Randall's avatar
      cmd/compile: make ssa compilation unconditional · 167e381f
      Keith Randall authored
      Rip out the code that allows SSA to be used conditionally.
      
      No longer exists:
       ssa=0 flag
       GOSSAHASH
       GOSSAPKG
       SSATEST
      
      GOSSAFUNC now only controls the printing of the IR/html.
      
      Still need to rip out all of the old backend.  It should no longer be
      callable after this CL.
      
      Update #16357
      
      Change-Id: Ib30cc18fba6ca52232c41689ba610b0a94aa74f5
      Reviewed-on: https://go-review.googlesource.com/29155
      Run-TryBot: Keith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      Reviewed-by: 's avatarJosh Bleecher Snyder <josharian@gmail.com>
      167e381f
    • David Chase's avatar
      cmd/compile: enable SSA for PowerPC 64 Big-endian · eed061f8
      David Chase authored
      It passed tests once, if anything's wrong, better to fail
      sooner than later.
      
      Change-Id: Ibb1c5db3f4c5535a4ff4681fd157db77082c5041
      Reviewed-on: https://go-review.googlesource.com/28982
      Run-TryBot: David Chase <drchase@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      eed061f8
    • Brad Fitzpatrick's avatar
      cmd/dist: skip compiling 100 packages without benchmarks in race mode · 3ead4998
      Brad Fitzpatrick authored
      The go_test_bench:* tests run:
      
          go test -short -race -run=^$ -benchtime=.1s -cpu=4 $PKG
      
      ... on each discovered package with any tests. (The same set used for
      the "go_test:*" tests)
      
      That set was 168 packages:
      
      $ go tool dist test -list | grep go_test: | wc -l
      168
      
      But only 76 of those have a "func Benchmark", and running each
      "go_test_bench:" test and compiling it in race mode, just to do
      nothing took 1-2 seconds each.
      
      So stop doing that and filter out the useless packages earlier. Now:
      
      $ go tool dist test -list -race | grep go_test_bench:  | wc -l
      76
      
      Should save 90-180 seconds. (or maybe 45 seconds for trybots, since
      they're sharded)
      
      Updates #17104
      
      Change-Id: I08ccb072a0dc0454ea425540ee8e74b59f83b773
      Reviewed-on: https://go-review.googlesource.com/29153
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      3ead4998
    • Josh Bleecher Snyder's avatar
      cmd/dist: skip broken cgo race tests on darwin · 059ada59
      Josh Bleecher Snyder authored
      CL 26668 exposed #17065.
      Skip the cgo race tests on darwin for now.
      
      Updates #17065
      
      Change-Id: I0ad0ce2ff1af6d515b8ce6184ddeabc49806950f
      Reviewed-on: https://go-review.googlesource.com/29077
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      059ada59
    • Jan Mercl's avatar
      test/float_lit2: fix expressions in comment · 2e675142
      Jan Mercl authored
      The change corrects the values of the largest float32 value (f1) and the
      value of the halfway point between f1 and the next, overflow value (f2).
      
      Fixes #17012
      
      Change-Id: Idaf9997b69d61fafbffdb980d751c9857732e14d
      Reviewed-on: https://go-review.googlesource.com/29171Reviewed-by: 's avatarRobert Griesemer <gri@golang.org>
      2e675142
    • David Crawshaw's avatar
      cmd/dist: re-enable internal PIE test · 7f583a4d
      David Crawshaw authored
      For #17068
      
      Change-Id: I4e3ab166f08100292b779b651a9acfbfb44a55cd
      Reviewed-on: https://go-review.googlesource.com/29119
      Run-TryBot: David Crawshaw <crawshaw@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      7f583a4d
    • David Crawshaw's avatar
      cmd/link: R_ADDR dynamic relocs for internal PIE · 5940a007
      David Crawshaw authored
      This gets -buildmode=pie -ldflags=-linkmode=internal working on
      Ubuntu 16.04.
      
      Fixes #17068
      
      Change-Id: Ice5036199005fb528cc58279a7f057170dc6b73d
      Reviewed-on: https://go-review.googlesource.com/29118
      Run-TryBot: David Crawshaw <crawshaw@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarMichael Hudson-Doyle <michael.hudson@canonical.com>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      5940a007
    • David Stainton's avatar
      syscall: add bounds checking and error returns to ParseNetlinkMessage · 6fd8c006
      David Stainton authored
      Fixes #16681
      
      Change-Id: I6ff7ec81fe48ab06be3aae5b7ff92e9dc70960c3
      Reviewed-on: https://go-review.googlesource.com/26990
      Run-TryBot: Mikio Hara <mikioh.mikioh@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarMikio Hara <mikioh.mikioh@gmail.com>
      6fd8c006
    • Emmanuel Odeke's avatar
      os: add more examples · 33e63ebc
      Emmanuel Odeke authored
      Updates #16360.
      
      Adds examples for:
      + Chmod
      + Chtimes
      + FileMode
      
      Change-Id: I1b61ee0392fa3774593a7f36aaf0fa1e484c778b
      Reviewed-on: https://go-review.googlesource.com/28963
      Run-TryBot: Andrew Gerrand <adg@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarAndrew Gerrand <adg@golang.org>
      33e63ebc
    • Aaron Jacobs's avatar
      net/http: clarify Request.ContentLength behavior on the client. · a562351e
      Aaron Jacobs authored
      While you could argue the previous wording technically said that -1 is
      an acceptable way to indicate "unknown" on the client, it could be read
      as ambiguous. Now it's clear that both 0 and -1 mean unknown.
      
      Change-Id: I3bc5a3fd5afd1999e487296ec121eb548415e6b0
      Reviewed-on: https://go-review.googlesource.com/29130Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      a562351e
  2. 13 Sep, 2016 18 commits
    • David Crawshaw's avatar
      cmd/internal/obj: regenerate stringer values · 6488201b
      David Crawshaw authored
      Created by running 'go generate'.
      
      That made debugging fun today.
      
      Change-Id: I9ffe00877851f2b198275220ad6058b9005daa72
      Reviewed-on: https://go-review.googlesource.com/29117Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      6488201b
    • David Crawshaw's avatar
      cmd/link: address comments from CL 28540 · 567aefd9
      David Crawshaw authored
      Change-Id: I11899096c71ee0e24e902c87914601fcd7ffd7a9
      Reviewed-on: https://go-review.googlesource.com/28967Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      567aefd9
    • Matthew Dempsky's avatar
      cmd/compile: remove two unnecessary Pkg fields · 429eb3c6
      Matthew Dempsky authored
      Exported is no longer used since removing the text-format exporter,
      and Safe is only used within importfile so it can be made into a local
      variable.
      
      Change-Id: I92986f704d7952759c79d9243620a22c24602333
      Reviewed-on: https://go-review.googlesource.com/29115
      Run-TryBot: Matthew Dempsky <mdempsky@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      429eb3c6
    • Matthew Dempsky's avatar
      cmd/compile/internal/gc: eliminate bstdout · 2b5c18c9
      Matthew Dempsky authored
      Just use Ctxt.Bso instead.
      
      Change-Id: I68f1639f0b4c238ae5499ef49e78a5d734417979
      Reviewed-on: https://go-review.googlesource.com/29114
      Run-TryBot: Matthew Dempsky <mdempsky@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      2b5c18c9
    • Hiroshi Ioka's avatar
      encoding/asn1: reduce allocations in Marshal · ae4aac00
      Hiroshi Ioka authored
      Current code uses trees of bytes.Buffer as data representation.
      Each bytes.Buffer takes 4k bytes at least, so it's waste of memory.
      The change introduces trees of lazy-encoder as
      alternative one which reduce allocations.
      
      name       old time/op    new time/op    delta
      Marshal-4    64.7µs ± 2%    42.0µs ± 1%  -35.07%   (p=0.000 n=9+10)
      
      name       old alloc/op   new alloc/op   delta
      Marshal-4    35.1kB ± 0%     7.6kB ± 0%  -78.27%  (p=0.000 n=10+10)
      
      name       old allocs/op  new allocs/op  delta
      Marshal-4       503 ± 0%       293 ± 0%  -41.75%  (p=0.000 n=10+10)
      
      Change-Id: I32b96c20b8df00414b282d69743d71a598a11336
      Reviewed-on: https://go-review.googlesource.com/27030Reviewed-by: 's avatarAdam Langley <agl@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Adam Langley <agl@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      ae4aac00
    • Adam Langley's avatar
      crypto/rsa: ensure that generating toy RSA keys doesn't loop. · ee3f3a60
      Adam Langley authored
      If there are too few primes of the given length then it can be
      impossible to generate an RSA key with n distinct primes.
      
      This change approximates the expected number of candidate primes and
      causes key generation to return an error if it's unlikely to succeed.
      
      Fixes #16596.
      
      Change-Id: I53b60d0cb90e2d0e6f0662befa64d13f24af51a7
      Reviewed-on: https://go-review.googlesource.com/28969Reviewed-by: 's avatarMinux Ma <minux@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Minux Ma <minux@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      ee3f3a60
    • Michael Munday's avatar
      test: re-enable phi optimization test · 7e2b5a10
      Michael Munday authored
      CL 28978 (6ec993ad) accidentally disabled the test (it would only
      run if amd64 AND s390x, whereas it should be amd64 OR s390x).
      
      Change-Id: I23c1ad71724ff55f5808d5896b19b62c8ec5af76
      Reviewed-on: https://go-review.googlesource.com/28981Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      7e2b5a10
    • Michael Munday's avatar
      cmd/compile: add SSA backend for s390x and enable by default · 6ec993ad
      Michael Munday authored
      The new SSA backend modifies the ABI slightly: R0 is now a usable
      general purpose register.
      
      Fixes #16677.
      
      Change-Id: I367435ce921e0c7e79e021c80cf8ef5d1d1466cf
      Reviewed-on: https://go-review.googlesource.com/28978
      Run-TryBot: Michael Munday <munday@ca.ibm.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      6ec993ad
    • Brad Fitzpatrick's avatar
      net/http: make Transport support international domain names · b7e53038
      Brad Fitzpatrick authored
      This CL makes code like this work:
      
           res, err := http.Get("https://фу.бар/баз")
      
      So far, IDNA support is limited to the http1 and http2 Transports.
      The http package is currently responsible for converting domain names
      into Punycode before calling the net layer. The http package also has
      to Punycode-ify the hostname for the Host & :authority headers for
      HTTP/1 and HTTP/2, respectively.
      
      No automatic translation from Punycode back to Unicode is performed,
      per Go's historical behavior. Docs are updated where relevant.  No
      changes needed to the Server package. Things are already in ASCII
      at that point.
      
      No changes to the net package, at least yet.
      
      Updates x/net/http2 to git rev 57c7820 for https://golang.org/cl/29071
      
      Updates #13835
      
      Change-Id: I1e9a74c60d00a197ea951a9505da5c3c3187099b
      Reviewed-on: https://go-review.googlesource.com/29072Reviewed-by: 's avatarChris Broadfoot <cbro@golang.org>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      b7e53038
    • Brad Fitzpatrick's avatar
      net/http: update bundled x/net/http2 · 802cb592
      Brad Fitzpatrick authored
      Updates x/net/http2 (and x/net/lex/httplex) to git rev 749a502 for:
      
         http2: don't sniff first Request.Body byte in Transport until we have a conn
         https://golang.org/cl/29074
         Fixes #17071
      
         http2: add Transport support for unicode domain names
         https://golang.org/cl/29071
         Updates #13835
      
         http2: don't send bogus :path pseudo headers if Request.URL.Opaque is set
         https://golang.org/cl/27632
           +
         http2: fix bug where '*' as a valid :path value in Transport
         https://golang.org/cl/29070
         Updates #16847
      
         http2: fix all vet warnings
         https://golang.org/cl/28344
         Updates #16228
         Updates #11041
      
      Also uses the new -underscore flag to x/tools/cmd/bundle from
      https://golang.org/cl/29086
      
      Change-Id: Ica0f6bf6e33266237e37527a166a783d78c059c4
      Reviewed-on: https://go-review.googlesource.com/29110
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarChris Broadfoot <cbro@golang.org>
      802cb592
    • Josh Bleecher Snyder's avatar
      runtime: limit the number of map overflow buckets · 9980b70c
      Josh Bleecher Snyder authored
      Consider repeatedly adding many items to a map
      and then deleting them all, as in #16070. The map
      itself doesn't need to grow above the high water
      mark of number of items. However, due to random
      collisions, the map can accumulate overflow
      buckets.
      
      Prior to this CL, those overflow buckets were
      never removed, which led to a slow memory leak.
      
      The problem with removing overflow buckets is
      iterators. The obvious approach is to repack
      keys and values and eliminate unused overflow
      buckets. However, keys, values, and overflow
      buckets cannot be manipulated without disrupting
      iterators.
      
      This CL takes a different approach, which is to
      reuse the existing map growth mechanism,
      which is well established, well tested, and
      safe in the presence of iterators.
      When a map has accumulated enough overflow buckets
      we trigger map growth, but grow into a map of the
      same size as before. The old overflow buckets will
      be left behind for garbage collection.
      
      For the code in #16070, instead of climbing
      (very slowly) forever, memory usage now cycles
      between 264mb and 483mb every 15 minutes or so.
      
      To avoid increasing the size of maps,
      the overflow bucket counter is only 16 bits.
      For large maps, the counter is incremented
      stochastically.
      
      Fixes #16070
      
      Change-Id: If551d77613ec6836907efca58bda3deee304297e
      Reviewed-on: https://go-review.googlesource.com/25049
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      9980b70c
    • Robert Griesemer's avatar
      cmd/compile: reduce allocs some more · 0cd3ecb0
      Robert Griesemer authored
      Also: update fmt_test.go.
      
      Together with the previous commits, we are now at or below c85b77c2
      levels in terms of allocation for the benchmark described in #16897
      (old = c85b77c2, new = this commit):
      
      name       old time/op     new time/op     delta
      Template       297ms ± 5%      284ms ± 3%  -4.53%  (p=0.000 n=27+29)
      Unicode        159ms ± 5%      151ms ± 5%  -4.91%  (p=0.000 n=28+30)
      GoTypes        985ms ± 5%      935ms ± 2%  -5.13%  (p=0.000 n=28+29)
      
      name       old alloc/op    new alloc/op    delta
      Template      46.8MB ± 0%     45.7MB ± 0%  -2.37%  (p=0.000 n=30+30)
      Unicode       37.8MB ± 0%     37.9MB ± 0%  +0.29%  (p=0.000 n=29+30)
      GoTypes        143MB ± 0%      138MB ± 0%  -3.64%  (p=0.000 n=29+30)
      
      name       old allocs/op   new allocs/op   delta
      Template        444k ± 0%       440k ± 0%  -0.94%  (p=0.000 n=30+30)
      Unicode         369k ± 0%       369k ± 0%  +0.19%  (p=0.000 n=29+30)
      GoTypes        1.35M ± 0%      1.34M ± 0%  -1.24%  (p=0.000 n=30+30)
      
      For #16897.
      
      Change-Id: Iedbeb408e2f1e68dd4a3201bf8813c8066ebf7ed
      Reviewed-on: https://go-review.googlesource.com/29089Reviewed-by: 's avatarMatthew Dempsky <mdempsky@google.com>
      0cd3ecb0
    • Lynn Boger's avatar
      cmd/asm: ppc64le support for ISEL for use by SSA · b6946fb1
      Lynn Boger authored
      This adds the support for the ppc64le isel instruction so
      it can be used by SSA.
      
      Fixed #16771
      
      Change-Id: Ia2517f0834ff5e7ad927e218b84493e0106ab4a7
      Reviewed-on: https://go-review.googlesource.com/28611Reviewed-by: 's avatarDavid Chase <drchase@google.com>
      Run-TryBot: David Chase <drchase@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      b6946fb1
    • 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
  3. 12 Sep, 2016 7 commits