- 14 Sep, 2016 17 commits
-
-
Brad Fitzpatrick authored
No coverage is gained by running the 1e6 versions of the test over the 1e4 versions. It just adds 140 seconds of race overhead time. Updates #17104 Change-Id: I41408aedae34a8b1a148eebdda20269cdefffba3 Reviewed-on: https://go-review.googlesource.com/29159 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
-
Josh Bleecher Snyder authored
Found by vet. Change-Id: I9dbc6208ddbb5b407f4ddd20efbc166aac852cf7 Reviewed-on: https://go-review.googlesource.com/29162 Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
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: Brad Fitzpatrick <bradfitz@golang.org>
-
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: Keith Randall <khr@golang.org>
-
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: Brad Fitzpatrick <bradfitz@golang.org>
-
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: David Crawshaw <crawshaw@golang.org>
-
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: David Crawshaw <crawshaw@golang.org>
-
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: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
-
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: Keith Randall <khr@golang.org>
-
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: Ian Lance Taylor <iant@golang.org>
-
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: Ian Lance Taylor <iant@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
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: Robert Griesemer <gri@golang.org>
-
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: Ian Lance Taylor <iant@golang.org>
-
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: Michael Hudson-Doyle <michael.hudson@canonical.com> Reviewed-by: Ian Lance Taylor <iant@golang.org>
-
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: Mikio Hara <mikioh.mikioh@gmail.com>
-
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: Andrew Gerrand <adg@golang.org>
-
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: Brad Fitzpatrick <bradfitz@golang.org>
-
- 13 Sep, 2016 18 commits
-
-
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: Ian Lance Taylor <iant@golang.org> Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
David Crawshaw authored
Change-Id: I11899096c71ee0e24e902c87914601fcd7ffd7a9 Reviewed-on: https://go-review.googlesource.com/28967Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
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: Brad Fitzpatrick <bradfitz@golang.org>
-
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: Brad Fitzpatrick <bradfitz@golang.org>
-
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: Adam Langley <agl@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Adam Langley <agl@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
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: Minux Ma <minux@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Minux Ma <minux@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
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: Brad Fitzpatrick <bradfitz@golang.org>
-
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: Keith Randall <khr@golang.org>
-
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: Chris Broadfoot <cbro@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
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: Chris Broadfoot <cbro@golang.org>
-
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: Keith Randall <khr@golang.org>
-
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: Matthew Dempsky <mdempsky@google.com>
-
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: David Chase <drchase@google.com> Run-TryBot: David Chase <drchase@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
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: Rob Pike <r@golang.org> Run-TryBot: Rob Pike <r@golang.org>
-
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: David Crawshaw <crawshaw@golang.org> Run-TryBot: David Crawshaw <crawshaw@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
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: Keith Randall <khr@golang.org>
-
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: Matthew Dempsky <mdempsky@google.com>
-
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: Matthew Dempsky <mdempsky@google.com>
-
- 12 Sep, 2016 5 commits
-
-
Keith Randall authored
No need for it, we can treat calls as (mostly) normal values that take a memory and return a memory. Lowers the number of basic blocks needed to represent a function. "go test -c net/http" uses 27% fewer basic blocks. Probably doesn't affect generated code much, but should help various passes whose running time and/or space depends on the number of basic blocks. Fixes #15631 Change-Id: I0bf21e123f835e2cfa382753955a4f8bce03dfa6 Reviewed-on: https://go-review.googlesource.com/28950 Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
-
Keith Randall authored
Don't break on line number, instead break on the actual call. This makes the test more robust to line numbering changes in the backend. A CL (28950) changed the generated code line numbering slightly. A MOVW $0, R0 instruction at the start of the function changed to line 10 (because several constant zero instructions got CSEd, and one gets picked arbitrarily). That's too fragile for a test. Change-Id: I5d6a8ef0603de7d727585004142780a527e70496 Reviewed-on: https://go-review.googlesource.com/29085 Run-TryBot: Keith Randall <khr@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
Keith Randall authored
If an op generates a tuple, and part of that tuple is of flags type, then treat the op as clobbering flags. Normally this doesn't matter because we do: v1 = ADDS <int32, flags> v2 = Select0 v1 <int32> v3 = Select1 v1 <flags> And v3 will do the right clobbering of flags. But in the rare cases where we issue a tuple-with-flag op and the flag portion is dead, then we never issue a Select1. But v1 still clobbers flags, so we need to respect that. Fixes builder failure in CL 28950. Change-Id: I589089fd81aaeaaa9750bb8d85e7b10199aaa002 Reviewed-on: https://go-review.googlesource.com/29083Reviewed-by: Cherry Zhang <cherryyz@google.com>
-
Quentin Smith authored
Truncate and Round operate on absolute time, which means that Truncate(Hour) may return a time with non-zero Minute(). Document that more clearly, and remove the misleading example which suggests it is safe. Updates #16647 Change-Id: I930584ca030dd12849195d45e49ed2fb74e0c9ac Reviewed-on: https://go-review.googlesource.com/28730Reviewed-by: Ian Lance Taylor <iant@golang.org>
-
Matthew Dempsky authored
This used to be used to give special semantics to the builtin definitions of package runtime and unsafe, but none of those are relevant anymore: - The builtin runtime and unsafe packages do not risk triggering false import cycles since they no longer contain `import "runtime"`. - bimport.go never creates ODCLTYPE, so no need to special case them. - "incannedimport != 0" is only true when "importpkg != nil" anyway, so "incannedimport == 0 && importpkg == nil" is equivalent to just "importpkg == nil". Change-Id: I076f15dd705d4962e7a4c33972e304ef67e7effb Reviewed-on: https://go-review.googlesource.com/29084 Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-