]>
Cypherpunks repositories - gostls13.git/log
Brad Fitzpatrick [Thu, 4 May 2017 02:49:23 +0000 (02:49 +0000)]
crypto: revise wording about cryptographically broken algorithms
Updates text from https://golang.org/cl/42511
Updates #14395
Change-Id: I711100525e074ab360e577520280c37645db1c95
Reviewed-on: https://go-review.googlesource.com/42614
Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com>
Reviewed-by: Rob Pike <r@golang.org>
Brad Fitzpatrick [Thu, 4 May 2017 02:39:56 +0000 (02:39 +0000)]
spec: remove an unnecessary semicolon from code example
Change-Id: Ie4c92da0e3cbb97d3d7e03c7d15196c34f58a2cd
Reviewed-on: https://go-review.googlesource.com/42613
Reviewed-by: Robert Griesemer <gri@golang.org>
Josh Bleecher Snyder [Wed, 3 May 2017 23:37:03 +0000 (16:37 -0700)]
cmd/compile: prevent panic while formatting func(...T) with unknown T
Compile:
package p
var f = func(...A)
Before this CL:
x.go:3:13: type %!v(PANIC=runtime error: invalid memory address or nil pointer dereference) is not an expression
x.go:3:17: undefined: A
After this CL:
x.go:3:13: type func(...<T>) is not an expression
x.go:3:17: undefined: A
Found with go-fuzz.
Fixes #20233
Change-Id: Ibb232b3954c4091071440eba48b44c4022a8083f
Reviewed-on: https://go-review.googlesource.com/42610
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Andreas Auernhammer [Tue, 2 May 2017 23:08:31 +0000 (01:08 +0200)]
crypto: document insecure algorithms
This change explicitly documents that DES, MD5, RC4 and SHA-1 are
insecure / broken - at all or at least within a commonly used scenario.
Fixes #14395
Change-Id: Id1d543c85d67968ba64ed7495313501953c3ef3a
Reviewed-on: https://go-review.googlesource.com/42511
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Brad Fitzpatrick [Wed, 3 May 2017 12:24:04 +0000 (12:24 +0000)]
net/http: update bundled http2
Updates bundled http2 to x/net/http2 git rev
feeb485 for:
http2: add all bad ciphers, use package constants
https://golang.org/cl/42510
Updates #20213
Change-Id: I851453e3785e6b126db7a5c5eec2ebbbf61358ae
Reviewed-on: https://go-review.googlesource.com/42494
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Dmitry Savintsev <dsavints@gmail.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Steven Hartland [Thu, 2 Feb 2017 00:34:06 +0000 (00:34 +0000)]
crypto/x509: load certs from env vars + extra locations
Add the ability to override the default file and directory from
which certificates are loaded by setting the OpenSSL compatible
environment variables: SSL_CERT_FILE, SSL_CERT_DIR.
If the variables are set the default locations are not checked.
Added new default file "/usr/local/etc/ssl/cert.pem" for FreeBSD.
Certificates in the first valid location found for both file and
directory are added, instead of only the first file location if
a valid one was found, which is consistent with OpenSSL.
Fixes #3905
Fixes #14022
Fixes #14311
Fixes #16920
Fixes #18813 - If user sets SSL_CERT_FILE.
Change-Id: Ia24fb7c1c2ffff4338b4cf214bd040326ce27bb0
Reviewed-on: https://go-review.googlesource.com/36093
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Shenghou Ma [Wed, 16 Nov 2016 06:05:34 +0000 (01:05 -0500)]
cmd/link/internal/ld: always show output from external linker
Fixes #17935.
Change-Id: I49b0f6cee29ea76ed62b8faa5d6d1f51be41bf84
Reviewed-on: https://go-review.googlesource.com/33301
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Josh Bleecher Snyder [Wed, 3 May 2017 14:45:20 +0000 (07:45 -0700)]
cmd/compile: avoid panic when printing *<N>
When compiling the program:
package p
func _(){
*;:=
}
Before:
x.go:4:3: syntax error: unexpected semicolon, expecting expression
x.go:4:4: non-name *%!v(PANIC=runtime error: invalid memory address or nil pointer dereference) on left side of :=
x.go:5:1: syntax error: unexpected }, expecting expression
After:
x.go:4:3: syntax error: unexpected semicolon, expecting expression
x.go:4:4: non-name *<N> on left side of :=
x.go:5:1: syntax error: unexpected }, expecting expression
No test because:
(1) we don't have a good mechanism to check for the
absence of the string "PANIC" in an error message
(2) the string "*<N>", while better, is itself ugly enough
that I don't want to actively check for it
(3) the bug isn't very important, the kind of thing only fuzzers encounter
(4) the fix is obvious and trivial
Fixes #20220
Change-Id: I35faa986b60b671414ee999d6264b06937f250e3
Reviewed-on: https://go-review.googlesource.com/42498
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
Reviewed-by: Robert Griesemer <gri@golang.org>
Reviewed-by: David Crawshaw <crawshaw@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Martin Möhrmann [Wed, 3 May 2017 08:00:38 +0000 (10:00 +0200)]
vendor/golang_org/x/crypto/chacha20poly1305: revendor
Brings in chacha20poly1305 directory from golang.org/x/crypto revision
12e9ca725de4806fbda1610fd95aacad15bd6810 , adding:
CL 41862: chacha20poly1305: add runtime internal independent cpu feature detection
CL 39952: add import comment
Change-Id: Ic46ff24b081bc1c66b6317334d33180e33bfd318
Reviewed-on: https://go-review.googlesource.com/42513
Run-TryBot: Martin Möhrmann <moehrmann@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
feilengcui008 [Wed, 3 May 2017 06:08:43 +0000 (14:08 +0800)]
runtime: clean redundant call of environ function
Change-Id: Ica7179d225c1fb79381f82f58ea5050ac6418b9c
Reviewed-on: https://go-review.googlesource.com/42493
Reviewed-by: Daniel Martí <mvdan@mvdan.cc>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Filip Gruszczyński [Sun, 9 Apr 2017 17:44:39 +0000 (10:44 -0700)]
encoding/gob: use MakeMapWithSize when decoding map
This allows to pre-allocate the final size of the hashmap and avoid
re-allocating as we insert entries. Furthermore for the current
implementation of the hashmap it allows avoiding several rounds of
evacuating hashmap entries after each re-allocation.
DecodeComplex128Slice-8 51.9µs ± 1% 51.9µs ± 2% ~ (p=0.797 n=30+29)
DecodeFloat64Slice-8 31.5µs ± 2% 31.6µs ± 2% ~ (p=0.050 n=28+28)
DecodeInt32Slice-8 32.0µs ± 2% 31.9µs ± 3% ~ (p=0.666 n=29+28)
DecodeStringSlice-8 57.7µs ± 2% 57.8µs ± 3% ~ (p=0.780 n=27+30)
DecodeInterfaceSlice-8 498µs ± 2% 495µs ± 2% ~ (p=0.070 n=28+29)
DecodeMap-8 300µs ± 2% 230µs ± 5% -23.31% (p=0.000 n=27+27)
Updates #19525
Change-Id: Ia7233da49f05bae7a86c064d9ecebca966f5f2f7
Reviewed-on: https://go-review.googlesource.com/40113
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Filip Gruszczynski [Sat, 15 Apr 2017 22:17:29 +0000 (15:17 -0700)]
runtime: don't panic for bad size hint in hashmap
Because the hint parameter is supposed to be treated
purely as a hint, if it doesn't meet the requirements
we disregard it and continue as if there was no hint
at all.
Fixes #19926
Change-Id: I86e7f99472fad6b99ba4e2fd33e4a9e55d55115e
Reviewed-on: https://go-review.googlesource.com/40854
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
Alberto Donizetti [Tue, 2 May 2017 10:38:59 +0000 (12:38 +0200)]
doc/contribute: directly link to the Agreements page
There's no Settings->Agreement path for PolyGerrit users, but if we
link directly to the page in the instructions, Gerrit will inform them
that they can access the page by switching to the old UI.
Fixes #20207
Change-Id: I0887ee854e4ac5975b5f305adb6259b81b41618f
Reviewed-on: https://go-review.googlesource.com/42412
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Brad Fitzpatrick [Tue, 2 May 2017 17:41:24 +0000 (17:41 +0000)]
api: update next.txt
Change-Id: Ifbfd71a9c0d447e22c369c9d1209063b2a5c657b
Reviewed-on: https://go-review.googlesource.com/42490
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Michael Munday [Sun, 30 Apr 2017 18:25:57 +0000 (14:25 -0400)]
cmd/{asm,compile}: avoid zeroAuto clobbering flags on s390x
This CL modifies how MOV[DWHB] instructions that store a constant to
memory are assembled to avoid them clobbering the condition code
(flags). It also modifies zeroAuto to use MOVD instructions instead of
CLEAR (which is assembled as XC).
MOV[DWHB]storeconst ops also no longer clobbers flags.
Note: this CL modifies the assembler so that it can no longer handle
immediates outside the range of an int16 or offsets from SB, which
reflects what the machine instructions support. The compiler doesn't
need this capability any more and I don't think this affects any existing
assembly, but it is easy to workaround if it does.
Fixes #20187.
Change-Id: Ie54947ff38367bd6a19962bf1a6d0296a4accffb
Reviewed-on: https://go-review.googlesource.com/42179
Reviewed-by: David Chase <drchase@google.com>
Run-TryBot: David Chase <drchase@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Bryan C. Mills [Sun, 30 Apr 2017 23:23:45 +0000 (19:23 -0400)]
expvar: reduce sync.Map overhead for (*Map).Set
Use Load instead of LoadOrStore in the fast path to save 1 alloc/op
for existing keys.
name old time/op new time/op delta
IntAdd 6.39ns ± 7% 6.97ns ±19% ~ (p=0.105 n=8+8)
IntAdd-6 12.3ns ± 1% 12.2ns ± 1% ~ (p=0.396 n=7+7)
IntSet 6.41ns ± 6% 6.94ns ±21% ~ (p=0.168 n=8+8)
IntSet-6 12.1ns ± 3% 11.7ns ± 9% ~ (p=0.496 n=7+8)
FloatAdd 14.3ns ± 9% 14.7ns ± 4% ~ (p=0.088 n=8+8)
FloatAdd-6 36.5ns ± 1% 36.6ns ± 0% ~ (p=0.709 n=7+6)
FloatSet 6.59ns ± 7% 6.47ns ± 7% ~ (p=0.397 n=8+7)
FloatSet-6 12.2ns ± 1% 12.2ns ± 2% ~ (p=0.748 n=7+7)
StringSet 67.8ns ± 6% 68.7ns ± 6% ~ (p=0.342 n=8+8)
StringSet-6 41.8ns ± 5% 41.7ns ± 5% ~ (p=0.979 n=8+8)
MapSet 294ns ± 6% 234ns ± 4% -20.35% (p=0.000 n=8+8)
MapSet-6 95.8ns ± 2% 89.4ns ± 3% -6.73% (p=0.000 n=8+8)
MapSetDifferent 1.31µs ± 5% 1.07µs ± 4% -18.21% (p=0.000 n=8+8)
MapSetDifferent-6 260ns ± 8% 210ns ± 9% -19.44% (p=0.000 n=8+8)
MapSetString 294ns ± 6% 236ns ± 4% -19.92% (p=0.000 n=8+8)
MapSetString-6 95.6ns ± 2% 89.9ns ± 2% -5.97% (p=0.000 n=7+8)
MapAddSame 1.46µs ± 3% 1.46µs ± 5% ~ (p=0.721 n=8+8)
MapAddSame-6 328ns ± 6% 330ns ± 4% ~ (p=0.776 n=8+8)
MapAddDifferent 4.89µs ± 7% 4.98µs ± 6% ~ (p=0.505 n=8+8)
MapAddDifferent-6 1.02µs ± 3% 1.01µs ± 4% ~ (p=0.352 n=7+8)
MapAddSameSteadyState 62.1ns ± 7% 60.8ns ± 4% ~ (p=0.521 n=8+8)
MapAddSameSteadyState-6 38.1ns ± 3% 37.7ns ± 0% ~ (p=0.185 n=7+6)
MapAddDifferentSteadyState 290ns ± 5% 293ns ± 4% ~ (p=0.515 n=8+8)
MapAddDifferentSteadyState-6 63.0ns ± 7% 63.7ns ±11% ~ (p=0.482 n=7+8)
RealworldExpvarUsage 7.39µs ± 5% 7.51µs ± 5% ~ (p=0.382 n=8+8)
RealworldExpvarUsage-6 3.07µs ±28% 3.04µs ±43% ~ (p=0.798 n=8+8)
name old alloc/op new alloc/op delta
IntAdd 0.00B 0.00B ~ (all equal)
IntAdd-6 0.00B 0.00B ~ (all equal)
IntSet 0.00B 0.00B ~ (all equal)
IntSet-6 0.00B 0.00B ~ (all equal)
FloatAdd 0.00B 0.00B ~ (all equal)
FloatAdd-6 0.00B 0.00B ~ (all equal)
FloatSet 0.00B 0.00B ~ (all equal)
FloatSet-6 0.00B 0.00B ~ (all equal)
StringSet 16.0B ± 0% 16.0B ± 0% ~ (all equal)
StringSet-6 16.0B ± 0% 16.0B ± 0% ~ (all equal)
MapSet 48.0B ± 0% 32.0B ± 0% -33.33% (p=0.000 n=8+8)
MapSet-6 48.0B ± 0% 32.0B ± 0% -33.33% (p=0.000 n=8+8)
MapSetDifferent 192B ± 0% 128B ± 0% -33.33% (p=0.000 n=8+8)
MapSetDifferent-6 192B ± 0% 128B ± 0% -33.33% (p=0.000 n=8+8)
MapSetString 48.0B ± 0% 32.0B ± 0% -33.33% (p=0.000 n=8+8)
MapSetString-6 48.0B ± 0% 32.0B ± 0% -33.33% (p=0.000 n=8+8)
MapAddSame 480B ± 0% 480B ± 0% ~ (all equal)
MapAddSame-6 480B ± 0% 480B ± 0% ~ (all equal)
MapAddDifferent 1.09kB ± 0% 1.09kB ± 0% ~ (all equal)
MapAddDifferent-6 1.09kB ± 0% 1.09kB ± 0% ~ (all equal)
MapAddSameSteadyState 0.00B 0.00B ~ (all equal)
MapAddSameSteadyState-6 0.00B 0.00B ~ (all equal)
MapAddDifferentSteadyState 0.00B 0.00B ~ (all equal)
MapAddDifferentSteadyState-6 0.00B 0.00B ~ (all equal)
RealworldExpvarUsage 0.00B 0.00B ~ (all equal)
RealworldExpvarUsage-6 0.00B 0.00B ~ (all equal)
name old allocs/op new allocs/op delta
IntAdd 0.00 0.00 ~ (all equal)
IntAdd-6 0.00 0.00 ~ (all equal)
IntSet 0.00 0.00 ~ (all equal)
IntSet-6 0.00 0.00 ~ (all equal)
FloatAdd 0.00 0.00 ~ (all equal)
FloatAdd-6 0.00 0.00 ~ (all equal)
FloatSet 0.00 0.00 ~ (all equal)
FloatSet-6 0.00 0.00 ~ (all equal)
StringSet 1.00 ± 0% 1.00 ± 0% ~ (all equal)
StringSet-6 1.00 ± 0% 1.00 ± 0% ~ (all equal)
MapSet 3.00 ± 0% 2.00 ± 0% -33.33% (p=0.000 n=8+8)
MapSet-6 3.00 ± 0% 2.00 ± 0% -33.33% (p=0.000 n=8+8)
MapSetDifferent 12.0 ± 0% 8.0 ± 0% -33.33% (p=0.000 n=8+8)
MapSetDifferent-6 12.0 ± 0% 8.0 ± 0% -33.33% (p=0.000 n=8+8)
MapSetString 3.00 ± 0% 2.00 ± 0% -33.33% (p=0.000 n=8+8)
MapSetString-6 3.00 ± 0% 2.00 ± 0% -33.33% (p=0.000 n=8+8)
MapAddSame 11.0 ± 0% 11.0 ± 0% ~ (all equal)
MapAddSame-6 11.0 ± 0% 11.0 ± 0% ~ (all equal)
MapAddDifferent 31.0 ± 0% 31.0 ± 0% ~ (all equal)
MapAddDifferent-6 31.0 ± 0% 31.0 ± 0% ~ (all equal)
MapAddSameSteadyState 0.00 0.00 ~ (all equal)
MapAddSameSteadyState-6 0.00 0.00 ~ (all equal)
MapAddDifferentSteadyState 0.00 0.00 ~ (all equal)
MapAddDifferentSteadyState-6 0.00 0.00 ~ (all equal)
RealworldExpvarUsage 0.00 0.00 ~ (all equal)
RealworldExpvarUsage-6 0.00 0.00 ~ (all equal)
https://perf.golang.org/search?q=upload:
20170501 .1
Change-Id: I28fc3906473f2b7307f6d1ae05a8d9b01ef8a6f8
Reviewed-on: https://go-review.googlesource.com/42211
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Chris Manghane [Tue, 2 May 2017 05:34:37 +0000 (01:34 -0400)]
net/http: bgErr is unused; remove it
Fixes #20196.
Change-Id: Ib87f6e9e27a38f21f860b7150c818d77be653dd3
Reviewed-on: https://go-review.googlesource.com/42370
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Josh Bleecher Snyder [Tue, 2 May 2017 12:35:55 +0000 (05:35 -0700)]
cmd/dist: spin up fewer test dir runners
5 shards, each of which spins up NumCPU processes,
each of which is running at GOMAXPROCS=NumCPU,
is too much for one machine. It makes my laptop unusable.
It might also be in part responsible for test flakes
that require a moderately responsive system,
like #18589 (backedge scheduling) and #19276 (locklinear).
It's possible that Go should be a better neighbor in general;
that's #17969. In the meantime, fix this corner of the world.
Builders snapshot the world and run shards on different
machines, so keeping sharding high for them is good.
This is a partial reversion of CL 18199.
Fixes #20141.
Change-Id: I123cf9436f4f4da3550372896265c38117b78071
Reviewed-on: https://go-review.googlesource.com/42431
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Josh Bleecher Snyder [Sun, 16 Apr 2017 15:22:44 +0000 (08:22 -0700)]
cmd/internal/obj: fix LSym.Type during compilation, not linking
Prior to this CL, the compiler and assembler
were sloppy about the LSym.Type for LSyms
containing static data.
The linker then fixed this up, converting
Sxxx and SBSS to SDATA, and SNOPTRBSS to SNOPTRDATA
if it noticed that the symbol had associated data.
It is preferable to just get this right in cmd/compile
and cmd/asm, because it removes an unnecessary traversal
of the symbol table from the linker (see #14624).
Do this by touching up the LSym.Type fixes in
LSym.prepwrite and Link.Globl.
I have confirmed by instrumenting the linker
that the now-eliminated code paths were unreached.
And an additional check in the object file writing code
will help preserve that invariant.
There was a case in the Windows linker,
with internal linking and cgo,
where we were generating SNOPTRBSS symbols with data.
For now, convert those at the site at which they occur
into SNOPTRDATA, just like they were.
Does not pass toolstash-check,
but does generate identical linked binaries.
No compiler performance changes.
Change-Id: I77b071ab103685ff8e042cee9abb864385488872
Reviewed-on: https://go-review.googlesource.com/40864
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
Reviewed-by: Michael Hudson-Doyle <michael.hudson@canonical.com>
Elias Naur [Mon, 1 May 2017 18:35:08 +0000 (20:35 +0200)]
misc/android: don't let the Android exec wrapper hang indefinitely
On Android, the exec wrapper passes on output from adb to its parent
process by passing on os.Stderr and os.Stdout to adb. If the adb
process somehow hangs, it will keep stderr and stdout will open, in turn
blocking go test from ever returning from its cmd.Wait() even though
it has killed the exec wrapper process.
Break the short circuit by introducing a wrapper between adb and the
exec wrapper, preventing os/exec.Run from passing along the raw
file descriptors for os.Stdout and os.Stderr.
(Hopefully) fixes occasional indefinite hangs on the Android builder.
Change-Id: I1188211fbde79b4a66bf93ff8e9d0091abf34560
Reviewed-on: https://go-review.googlesource.com/42271
Run-TryBot: Elias Naur <elias.naur@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Martin Möhrmann [Fri, 24 Mar 2017 07:13:17 +0000 (08:13 +0100)]
cmd/compile: use MOVL instead of MOVQ for small constants on amd64
The encoding of MOVL to a register is 2 bytes shorter than for MOVQ.
The upper 32bit are automatically zeroed when MOVL to a register is used.
Replaces 1657 MOVQ by MOVL in the go binary.
Reduces go binary size by 4 kilobyte.
name old time/op new time/op delta
BinaryTree17 1.93s ± 0% 1.93s ± 0% -0.32% (p=0.000 n=9+9)
Fannkuch11 2.66s ± 0% 2.48s ± 0% -6.60% (p=0.000 n=9+9)
FmtFprintfEmpty 31.8ns ± 0% 31.6ns ± 0% -0.63% (p=0.000 n=10+10)
FmtFprintfString 52.0ns ± 0% 51.9ns ± 0% -0.19% (p=0.000 n=10+10)
FmtFprintfInt 55.6ns ± 0% 54.6ns ± 0% -1.80% (p=0.002 n=8+10)
FmtFprintfIntInt 87.7ns ± 0% 84.8ns ± 0% -3.31% (p=0.000 n=9+9)
FmtFprintfPrefixedInt 98.9ns ± 0% 102.0ns ± 0% +3.10% (p=0.000 n=10+10)
FmtFprintfFloat 165ns ± 0% 164ns ± 0% -0.61% (p=0.000 n=10+10)
FmtManyArgs 368ns ± 0% 361ns ± 0% -1.98% (p=0.000 n=8+10)
GobDecode 4.53ms ± 0% 4.58ms ± 0% +1.08% (p=0.000 n=9+10)
GobEncode 3.74ms ± 0% 3.73ms ± 0% -0.27% (p=0.000 n=10+10)
Gzip 164ms ± 0% 163ms ± 0% -0.48% (p=0.000 n=10+10)
Gunzip 26.7ms ± 0% 26.6ms ± 0% -0.13% (p=0.000 n=9+10)
HTTPClientServer 30.4µs ± 1% 30.3µs ± 1% -0.41% (p=0.016 n=10+10)
JSONEncode 10.9ms ± 0% 11.0ms ± 0% +0.70% (p=0.000 n=10+10)
JSONDecode 36.8ms ± 0% 37.0ms ± 0% +0.59% (p=0.000 n=9+10)
Mandelbrot200 3.20ms ± 0% 3.21ms ± 0% +0.44% (p=0.000 n=9+10)
GoParse 2.35ms ± 0% 2.35ms ± 0% +0.26% (p=0.000 n=10+9)
RegexpMatchEasy0_32 58.3ns ± 0% 58.4ns ± 0% +0.17% (p=0.000 n=10+10)
RegexpMatchEasy0_1K 138ns ± 0% 142ns ± 0% +2.68% (p=0.000 n=10+10)
RegexpMatchEasy1_32 55.1ns ± 0% 55.6ns ± 1% ~ (p=0.104 n=10+10)
RegexpMatchEasy1_1K 242ns ± 0% 243ns ± 0% +0.41% (p=0.000 n=10+10)
RegexpMatchMedium_32 87.4ns ± 0% 89.9ns ± 0% +2.86% (p=0.000 n=10+10)
RegexpMatchMedium_1K 27.4µs ± 0% 27.4µs ± 0% +0.15% (p=0.000 n=10+10)
RegexpMatchHard_32 1.30µs ± 0% 1.32µs ± 1% +1.91% (p=0.000 n=10+10)
RegexpMatchHard_1K 39.0µs ± 0% 39.5µs ± 0% +1.38% (p=0.000 n=10+10)
Revcomp 316ms ± 0% 319ms ± 0% +1.13% (p=0.000 n=9+8)
Template 40.6ms ± 0% 40.6ms ± 0% ~ (p=0.123 n=10+10)
TimeParse 224ns ± 0% 224ns ± 0% ~ (all equal)
TimeFormat 230ns ± 0% 225ns ± 0% -2.17% (p=0.000 n=10+10)
Change-Id: I32a099b65f9e6d4ad7288ed48546655c534757d8
Reviewed-on: https://go-review.googlesource.com/38630
Run-TryBot: Martin Möhrmann <moehrmann@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
Martin Möhrmann [Thu, 27 Apr 2017 06:30:27 +0000 (08:30 +0200)]
runtime: refactor cpu feature detection for 386 & amd64
Changes all cpu features to be detected and stored in bools in rt0_go.
Updates: #15403
Change-Id: I5a9961cdec789b331d09c44d86beb53833d5dc3e
Reviewed-on: https://go-review.googlesource.com/41950
Run-TryBot: Martin Möhrmann <moehrmann@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ilya Tocar <ilya.tocar@intel.com>
Reviewed-by: Keith Randall <khr@golang.org>
Michael Hudson-Doyle [Wed, 26 Apr 2017 23:56:42 +0000 (11:56 +1200)]
cmd/internal/obj/x86: use LEAx rather than ADDx when calling DUFFxxxx via GOT
DUFFZERO on 386 is not marked as clobbering flags, but rewriteToUseGot rewrote
"ADUFFZERO $offset" to "MOVL runtime.duffxxx@GOT, CX; ADDL $offset, CX; CALL CX"
which does. Luckily the fix is easier than figuring out what the problem was:
replace the ADDL $offset, CX with LEAL $offset(CX), CX.
On amd64 DUFFZERO clobbers flags, on arm, arm64 and ppc64 ADD does not clobber
flags and s390x does not use the duff functions, so I'm fairly confident this
is the only fix required.
I don't know how to write a test though.
Change-Id: I69b0958f5f45771d61db5f5ecb4ded94e8960d4d
Reviewed-on: https://go-review.googlesource.com/41821
Run-TryBot: Michael Hudson-Doyle <michael.hudson@canonical.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
Damien Lespiau [Fri, 28 Apr 2017 14:20:38 +0000 (15:20 +0100)]
cmd/internal/obj/x86: fix ANDPS encoding
ANDPS, like all others PS (Packed Single precision floats) instructions,
need Ym: they don't use the 0x66 prefix.
From the manual:
NP 0F 54 /r ANDPS xmm1, xmm2/m128
NP meaning, quoting the manual:
NP - Indicates the use of 66/F2/F3 prefixes (beyond those already part
of the instructions opcode) are not allowed with the instruction.
And indeed, the same instruction prefixed by 0x66 is ANDPD.
Updates #14069
Change-Id: If312a6f1e77113ab8c0febe66bdb1b4171e41e0a
Reviewed-on: https://go-review.googlesource.com/42090
Reviewed-by: Keith Randall <khr@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Josh Bleecher Snyder [Mon, 24 Apr 2017 00:31:15 +0000 (17:31 -0700)]
cmd/compile: avoid giant init functions due to many user inits
We generate code that calls each user init function one at a time.
When there are lots of user init functions,
usually due to generated code, like test/rotate* or
github.com/juju/govmomi/vim25/types,
we can end up with a giant function,
which can be slow to compile.
This CL puts in an escape valve.
When there are more than 500 functions, instead of doing:
init.0()
init.1()
// ...
we construct a static array of functions:
var fns = [...]func(){init.0, init.1, ... }
and call them in a loop.
This generates marginally bigger, marginally worse code,
so we restrict it to cases in which it might start to matter.
500 was selected as a mostly arbitrary threshold for "lots".
Each call uses two Progs, one for PCDATA and one for the call,
so at 500 calls we use ~1000 Progs.
At concurrency==8, we get a Prog cache of about
1000 Progs per worker.
So a threshold of 500 should more or less avoid
exhausting the Prog cache in most cases.
Change-Id: I276b887173ddbf65b2164ec9f9b5eb04d8c753c2
Reviewed-on: https://go-review.googlesource.com/41500
Reviewed-by: Keith Randall <khr@golang.org>
Josh Bleecher Snyder [Mon, 1 May 2017 14:36:43 +0000 (07:36 -0700)]
runtime: use 64 bit calculation in overLoadFactor
overLoadFactor used a uintptr for its calculations.
When the number of potential buckets was large,
perhaps due to a coding error or corrupt/malicious user input
leading to a very large map size hint,
this led to overflow on 32 bit systems.
This overflow resulted in an infinite loop.
Prevent it by always using a 64 bit calculation.
Updates #20195
Change-Id: Iaabc710773cd5da6754f43b913478cc5562d89a2
Reviewed-on: https://go-review.googlesource.com/42185
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 [Tue, 25 Apr 2017 22:55:52 +0000 (15:55 -0700)]
cmd/compile: add minor bit twiddling optimizations
Noticed while adding to the bitset implementation
in cmd/compile/internal/gc.
The (Com (Const)) optimizations were already present
in the AMD64 lowered optimizations.
They trigger 118, 44, 262, and 108 times
respectively for int sizes 8, 16, 32, and 64
in a run of make.bash.
The (Or (And)) optimization is new.
It triggers 3 times for int size 8
and once for int size 64 during make.bash,
in packages internal/poll, reflect,
encoding/asn1, and go/types,
so there is a bit of natural test coverage.
Change-Id: I44072864ff88831d5ec7dce37c516d29df056e98
Reviewed-on: https://go-review.googlesource.com/41758
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 [Mon, 1 May 2017 15:06:48 +0000 (08:06 -0700)]
cmd/compile: add comments to trackAllTypes
Per gri's suggestion on CL 41623,
add a comment to trackAllTypes
about the trade-offs of enabling it.
Change-Id: Iec42b0da7933543200729003d1b2c6e0d9dcc5f0
Reviewed-on: https://go-review.googlesource.com/42186
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Damien Lespiau [Mon, 1 May 2017 13:49:06 +0000 (14:49 +0100)]
cmd/asm: enable CMPPS, CMPPD, CMPSS and CMPSD encoding tests
The generated test cases had their arguments reversed, putting them back
in order makes those tests pass.
CMPPS SRC, DEST, CC
Change-Id: Ie15021edc533d5681a6a78d10d88b665e3de9017
Reviewed-on: https://go-review.googlesource.com/42097
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Michael Hudson-Doyle [Mon, 1 May 2017 00:56:09 +0000 (00:56 +0000)]
Revert "cmd/link: replace SHIDDEN bit in SymKind with a bit of Attribute"
This reverts commit
a69222d949bcc2c4453248ee233b63b75d79967e .
Reason for revert: broke ppc64le
Change-Id: I57d275177e90f036caf7dbade9669b8121dfa437
Reviewed-on: https://go-review.googlesource.com/42194
Reviewed-by: Michael Hudson-Doyle <michael.hudson@canonical.com>
Michael Hudson-Doyle [Fri, 28 Apr 2017 00:43:06 +0000 (12:43 +1200)]
cmd/link: replace SHIDDEN bit in SymKind with a bit of Attribute
Change-Id: I02dab81393cc9339895f0076df41a652aded5b60
Reviewed-on: https://go-review.googlesource.com/42025
Run-TryBot: Michael Hudson-Doyle <michael.hudson@canonical.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Michael Hudson-Doyle [Fri, 28 Apr 2017 00:22:50 +0000 (12:22 +1200)]
cmd/link: rename AttrHidden to AttrNotInSymbolTable
I want to move the SHIDDEN type bit into Attribute, but AttrHidden is already
there and means something completely different, so rename it. (I'll give the
SHIDDEN bit a better name when it moves too).
Change-Id: I075403d9542b7626d4c1f6db9094329c4181aad3
Reviewed-on: https://go-review.googlesource.com/42024
Run-TryBot: Michael Hudson-Doyle <michael.hudson@canonical.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Michael Hudson-Doyle [Fri, 28 Apr 2017 00:03:33 +0000 (12:03 +1200)]
cmd/link: document the various Attribute values
Change-Id: I11c14111b6c72eab5fc11e9e28cd8b37ad99b401
Reviewed-on: https://go-review.googlesource.com/42019
Run-TryBot: Michael Hudson-Doyle <michael.hudson@canonical.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Todd Neal [Sun, 30 Apr 2017 17:06:27 +0000 (12:06 -0500)]
cmd/compile: fix error when typeswitching on untyped
Fixes #20185
Fixes #19977
Change-Id: I8434713d20616ff0c0bc8f33f017e2548a5cccfa
Reviewed-on: https://go-review.googlesource.com/42210
Run-TryBot: Todd Neal <todd@tneal.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
Josh Bleecher Snyder [Sun, 30 Apr 2017 16:14:52 +0000 (09:14 -0700)]
cmd/compile: make Class a Stringer
Change-Id: I7fd137d01ab5a0690773ca6e47d2bd796f0e393e
Reviewed-on: https://go-review.googlesource.com/42177
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Ingo Oeser [Sun, 30 Apr 2017 12:47:04 +0000 (14:47 +0200)]
sync: really test DeepCopyMap
since there current version suffers from a copy'n'paste error.
Change-Id: I1ef97a4413198dde10c5c926a2a9806724cd6d44
Reviewed-on: https://go-review.googlesource.com/42095
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Alex Brainman [Sun, 30 Apr 2017 05:51:55 +0000 (15:51 +1000)]
os: skip TestNetworkSymbolicLink if Server service is not started
Fixes #20179
Change-Id: I2b405c9a212a75aae628ad51885616d33c054191
Reviewed-on: https://go-review.googlesource.com/42190
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Josh Bleecher Snyder [Sat, 29 Apr 2017 21:27:55 +0000 (14:27 -0700)]
cmd/compile: checkwidth T when constructing *T
Without this, T can sneak through to the backend
with its width unknown.
Fixes #20174
Change-Id: I9b21e0e2641f75e360cc5e45dcb4eefe8255b675
Reviewed-on: https://go-review.googlesource.com/42175
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Emmanuel Odeke [Sat, 29 Apr 2017 17:50:34 +0000 (11:50 -0600)]
cmd/compile: add test for blank field in composite literal
Updates #18089.
Test for that issue; it was inadvertently fixed
by CL 34988. Ensure that we don't regress on the fix.
Change-Id: Icb85fc20dbb0a47f028f088281319b552b16759d
Reviewed-on: https://go-review.googlesource.com/42173
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Bryan C. Mills [Thu, 16 Feb 2017 22:33:08 +0000 (17:33 -0500)]
archive/zip: replace RWMutex with sync.Map
This change replaces the compressors and decompressors maps with
instances of sync.Map, eliminating the need for Mutex locking in
NewReader and NewWriter.
The impact for encoding large payloads is miniscule, but as the
payload size decreases, the reduction in setup costs becomes
measurable.
updates #17973
updates #18177
name old time/op new time/op delta
CompressedZipGarbage 13.6ms ± 3% 13.8ms ± 4% ~ (p=0.275 n=14+16)
CompressedZipGarbage-6 2.81ms ±10% 2.80ms ± 9% ~ (p=0.616 n=16+16)
CompressedZipGarbage-48 606µs ± 4% 600µs ± 3% ~ (p=0.110 n=16+15)
Zip64Test 88.7ms ± 5% 87.5ms ± 5% ~ (p=0.150 n=14+14)
Zip64Test-6 88.6ms ± 8% 94.5ms ±13% ~ (p=0.070 n=14+16)
Zip64Test-48 102ms ±19% 101ms ±19% ~ (p=0.599 n=16+15)
Zip64TestSizes/4096 21.7µs ±10% 23.0µs ± 2% ~ (p=0.076 n=14+12)
Zip64TestSizes/4096-6 7.58µs ±13% 7.49µs ±18% ~ (p=0.752 n=16+16)
Zip64TestSizes/4096-48 19.5µs ± 8% 18.0µs ± 4% -7.74% (p=0.000 n=16+15)
Zip64TestSizes/
1048576 1.36ms ± 9% 1.40ms ± 8% +2.79% (p=0.029 n=24+25)
Zip64TestSizes/
1048576 -6 262µs ±11% 260µs ±10% ~ (p=0.506 n=24+24)
Zip64TestSizes/
1048576 -48 120µs ± 7% 116µs ± 7% -3.05% (p=0.006 n=24+25)
Zip64TestSizes/
67108864 86.8ms ± 6% 85.1ms ± 5% ~ (p=0.149 n=14+17)
Zip64TestSizes/
67108864 -6 15.9ms ± 2% 16.1ms ± 6% ~ (p=0.279 n=14+17)
Zip64TestSizes/
67108864 -48 4.51ms ± 5% 4.53ms ± 4% ~ (p=0.766 n=15+17)
name old alloc/op new alloc/op delta
CompressedZipGarbage 5.63kB ± 0% 5.63kB ± 0% ~ (all equal)
CompressedZipGarbage-6 15.4kB ± 0% 15.4kB ± 0% ~ (all equal)
CompressedZipGarbage-48 25.5kB ± 3% 25.6kB ± 2% ~ (p=0.450 n=16+16)
Zip64Test 20.0kB ± 0% 20.0kB ± 0% ~ (p=0.060 n=16+13)
Zip64Test-6 20.0kB ± 0% 20.0kB ± 0% ~ (p=0.136 n=16+14)
Zip64Test-48 20.0kB ± 0% 20.0kB ± 0% ~ (p=1.000 n=16+16)
Zip64TestSizes/4096 20.0kB ± 0% 20.0kB ± 0% ~ (all equal)
Zip64TestSizes/4096-6 20.0kB ± 0% 20.0kB ± 0% ~ (all equal)
Zip64TestSizes/4096-48 20.0kB ± 0% 20.0kB ± 0% -0.00% (p=0.002 n=16+13)
Zip64TestSizes/
1048576 20.0kB ± 0% 20.0kB ± 0% ~ (all equal)
Zip64TestSizes/
1048576 -6 20.0kB ± 0% 20.0kB ± 0% ~ (all equal)
Zip64TestSizes/
1048576 -48 20.1kB ± 0% 20.1kB ± 0% ~ (p=0.775 n=24+25)
Zip64TestSizes/
67108864 20.0kB ± 0% 20.0kB ± 0% ~ (all equal)
Zip64TestSizes/
67108864 -6 20.0kB ± 0% 20.0kB ± 0% ~ (p=0.272 n=16+17)
Zip64TestSizes/
67108864 -48 20.1kB ± 0% 20.1kB ± 0% ~ (p=0.098 n=14+15)
name old allocs/op new allocs/op delta
CompressedZipGarbage 44.0 ± 0% 44.0 ± 0% ~ (all equal)
CompressedZipGarbage-6 44.0 ± 0% 44.0 ± 0% ~ (all equal)
CompressedZipGarbage-48 44.0 ± 0% 44.0 ± 0% ~ (all equal)
Zip64Test 53.0 ± 0% 53.0 ± 0% ~ (all equal)
Zip64Test-6 53.0 ± 0% 53.0 ± 0% ~ (all equal)
Zip64Test-48 53.0 ± 0% 53.0 ± 0% ~ (all equal)
Zip64TestSizes/4096 53.0 ± 0% 53.0 ± 0% ~ (all equal)
Zip64TestSizes/4096-6 53.0 ± 0% 53.0 ± 0% ~ (all equal)
Zip64TestSizes/4096-48 53.0 ± 0% 53.0 ± 0% ~ (all equal)
Zip64TestSizes/
1048576 53.0 ± 0% 53.0 ± 0% ~ (all equal)
Zip64TestSizes/
1048576 -6 53.0 ± 0% 53.0 ± 0% ~ (all equal)
Zip64TestSizes/
1048576 -48 53.0 ± 0% 53.0 ± 0% ~ (all equal)
Zip64TestSizes/
67108864 53.0 ± 0% 53.0 ± 0% ~ (all equal)
Zip64TestSizes/
67108864 -6 53.0 ± 0% 53.0 ± 0% ~ (all equal)
Zip64TestSizes/
67108864 -48 53.0 ± 0% 53.0 ± 0% ~ (all equal)
https://perf.golang.org/search?q=upload:
20170428 .4
Change-Id: Idb7bec091a210aba833066f8d083d66e27788286
Reviewed-on: https://go-review.googlesource.com/42113
Run-TryBot: Bryan Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Josh Bleecher Snyder [Thu, 27 Apr 2017 20:15:24 +0000 (13:15 -0700)]
cmd/compile: move writebarrier pass after dse
This avoids generating writeBarrier.enabled
blocks for dead stores.
Change-Id: Ib11d8e2ba952f3f1f01d16776e40a7200a7683cf
Reviewed-on: https://go-review.googlesource.com/42012
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Emmanuel Odeke [Sat, 29 Apr 2017 07:42:19 +0000 (01:42 -0600)]
net/http: enable TestRequestDoesntBodyCloseDoesntBlock
Fixes #7121.
CL 31173 inadvertently fixed this issue in the Go1.8 cycle.
This CL enables the test for that issue.
Change-Id: I8e73b41f646fa89c75bff833c1b07e1cdb2b1e62
Reviewed-on: https://go-review.googlesource.com/42149
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Austin Clements [Tue, 21 Mar 2017 20:45:12 +0000 (16:45 -0400)]
runtime: reduce Windows timer resolution when idle
Currently Go sets the system-wide timer resolution to 1ms the whole
time it's running. This has negative affects on system performance and
power consumption. Unfortunately, simply reducing the timer resolution
to the default 15ms interferes with several sleeps in the runtime
itself, including sysmon's ability to interrupt goroutines.
This commit takes a hybrid approach: it only reduces the timer
resolution when the Go process is entirely idle. When the process is
idle, nothing needs a high resolution timer. When the process is
non-idle, it's already consuming CPU so it doesn't really matter if
the OS also takes timer interrupts more frequently.
Updates #8687.
Change-Id: I0652564b4a36d61a80e045040094a39c19da3b06
Reviewed-on: https://go-review.googlesource.com/38403
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
Reviewed-by: Dmitry Vyukov <dvyukov@google.com>
Hiroshi Ioka [Sat, 8 Apr 2017 04:16:26 +0000 (13:16 +0900)]
mime: re-accept empty encoded-text
https://go-review.googlesource.com/37812 prohibits empty encoded-text.
This CL accepts it again for backward compatibility.
Change-Id: I0e0840b501927f147160b999bb59d2d029ea314c
Reviewed-on: https://go-review.googlesource.com/40051
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Ben Shi [Tue, 25 Apr 2017 10:53:10 +0000 (10:53 +0000)]
cmd/compile/internal/ssa: more constant folding rules for ARM
(ADDconst [c] x) && !isARMImmRot(uint32(c)) && isARMImmRot(uint32(-c)) -> (SUBconst [int64(int32(-c))] x)
(SUBconst [c] x) && !isARMImmRot(uint32(c)) && isARMImmRot(uint32(-c)) -> (ADDconst [int64(int32(-c))] x)
Currently
a = a + 0xfffffff1 is compiled to (variable a is in R0)
MVN $14, R11
ADD R11, R0, R0
After applying the above 2 rules, it becomes
SUB $15, R0, R0
(BICconst [c] (BICconst [d] x)) -> (BICconst [int64(int32(c|d))] x)
This rule also optimizes the generated ARM code.
The other rules are added to avoid to generate less optimized ARM code
when substitutions ADD->SUB happen.
Change-Id: I3ead9aae2b446b674e2ab42d37259d38ceb93a4d
Reviewed-on: https://go-review.googlesource.com/41679
Reviewed-by: Keith Randall <khr@golang.org>
Josh Bleecher Snyder [Fri, 28 Apr 2017 00:18:02 +0000 (17:18 -0700)]
cmd/compile: checkwidthj all expressions in walk
Instead of playing whack-a-mole finding all
the non-dowidth'd expressions that can sneak
out of the frontend and then deciding on
just the right place to handle them,
use a big hammer.
Fixes #20152
Change-Id: Id452d9e8c4e9585216bd8bf0e0004c85aba4f9f7
Reviewed-on: https://go-review.googlesource.com/42021
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Austin Clements [Thu, 20 Apr 2017 20:10:59 +0000 (16:10 -0400)]
runtime/pprof: use symbol information already in profile in tests
Currently the pprof tests re-symbolize PCs in profiles, and do so in a
way that can't handle inlining. Proto profiles already contain full
symbol information, so this modifies the tests to use the symbol
information already present in the profile.
Change-Id: I63cd491de7197080fd158b1e4f782630f1bbbb56
Reviewed-on: https://go-review.googlesource.com/41255
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Michael Matloob <matloob@golang.org>
Daniel Theophanes [Fri, 28 Apr 2017 21:24:31 +0000 (14:24 -0700)]
database/sql: ensure releaseConn is defined before a possible close
When running a Query on Stmt a dependency is added to the stmt and
rows. To do that it needs a reference to Rows, so the releaseConn
function is defined after the definition. However the
rows.initContextClose was set to run before the releaseConn was
set on rows, setting up a situation where the connection could
be canceled before the releaseConn was set and resulting in
a segfault.
Fixes #20160
Change-Id: I5592e7db2cf653dfc48d42cbc2b03ca20501b1a0
Reviewed-on: https://go-review.googlesource.com/42139
Run-TryBot: Daniel Theophanes <kardianos@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Austin Clements [Fri, 17 Jun 2016 13:33:33 +0000 (09:33 -0400)]
runtime: make _TinySizeClass an int8 to prevent use as spanClass
Currently _TinySizeClass is untyped, which means it can accidentally
be used as a spanClass (not that I would know this from experience or
anything). Make it an int8 to avoid this mix up.
This is a cherry-pick of dev.garbage commit
81b74bf9c5 .
Change-Id: I1e69eccee436ea5aa45e9a9828a013e369e03f1a
Reviewed-on: https://go-review.googlesource.com/41254
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rick Hudson <rlh@golang.org>
Austin Clements [Thu, 2 Jun 2016 15:09:20 +0000 (11:09 -0400)]
runtime: eliminate heapBitsSetTypeNoScan
It's no longer necessary to maintain the bitmap of noscan objects
since we now use the span metadata to determine that they're noscan
instead of the bitmap.
The combined effect of segregating noscan spans and the follow-on
optimizations is roughly a 1% improvement in performance across the
go1 benchmarks and the x/benchmarks, with no increase in heap size.
Benchmark details: https://perf.golang.org/search?q=upload:
20170420 .1
name old time/op new time/op delta
Garbage/benchmem-MB=64-12 2.27ms ± 0% 2.25ms ± 1% -0.96% (p=0.000 n=15+18)
name old time/op new time/op delta
BinaryTree17-12 2.53s ± 2% 2.55s ± 1% +0.68% (p=0.001 n=17+16)
Fannkuch11-12 3.02s ± 0% 3.01s ± 0% -0.15% (p=0.000 n=16+16)
FmtFprintfEmpty-12 47.1ns ± 7% 47.0ns ± 5% ~ (p=0.886 n=20+17)
FmtFprintfString-12 73.6ns ± 3% 73.8ns ± 1% +0.30% (p=0.026 n=19+17)
FmtFprintfInt-12 80.3ns ± 2% 80.2ns ± 1% ~ (p=0.994 n=20+18)
FmtFprintfIntInt-12 124ns ± 0% 124ns ± 0% ~ (all samples are equal)
FmtFprintfPrefixedInt-12 172ns ± 1% 171ns ± 1% -0.72% (p=0.003 n=20+18)
FmtFprintfFloat-12 217ns ± 1% 216ns ± 1% -0.27% (p=0.019 n=18+19)
FmtManyArgs-12 490ns ± 1% 488ns ± 0% -0.36% (p=0.014 n=18+18)
GobDecode-12 6.71ms ± 1% 6.73ms ± 1% +0.42% (p=0.000 n=20+20)
GobEncode-12 5.25ms ± 0% 5.24ms ± 0% -0.20% (p=0.001 n=18+20)
Gzip-12 227ms ± 0% 226ms ± 1% ~ (p=0.107 n=20+19)
Gunzip-12 38.8ms ± 0% 38.8ms ± 0% ~ (p=0.221 n=19+18)
HTTPClientServer-12 75.4µs ± 1% 76.3µs ± 1% +1.26% (p=0.000 n=20+19)
JSONEncode-12 14.7ms ± 0% 14.7ms ± 1% -0.14% (p=0.002 n=18+17)
JSONDecode-12 57.6ms ± 0% 55.2ms ± 0% -4.13% (p=0.000 n=19+19)
Mandelbrot200-12 3.73ms ± 0% 3.73ms ± 0% -0.09% (p=0.000 n=19+17)
GoParse-12 3.18ms ± 1% 3.15ms ± 1% -0.90% (p=0.000 n=18+20)
RegexpMatchEasy0_32-12 73.3ns ± 2% 73.2ns ± 1% ~ (p=0.994 n=20+18)
RegexpMatchEasy0_1K-12 236ns ± 2% 234ns ± 1% -0.70% (p=0.002 n=19+17)
RegexpMatchEasy1_32-12 69.7ns ± 2% 69.9ns ± 2% ~ (p=0.416 n=20+20)
RegexpMatchEasy1_1K-12 366ns ± 1% 365ns ± 1% ~ (p=0.376 n=19+17)
RegexpMatchMedium_32-12 109ns ± 1% 108ns ± 1% ~ (p=0.461 n=17+18)
RegexpMatchMedium_1K-12 35.2µs ± 1% 35.2µs ± 3% ~ (p=0.238 n=19+20)
RegexpMatchHard_32-12 1.77µs ± 1% 1.77µs ± 1% +0.33% (p=0.007 n=17+16)
RegexpMatchHard_1K-12 53.2µs ± 0% 53.3µs ± 0% +0.26% (p=0.001 n=17+17)
Revcomp-12 1.13s ±117% 0.87s ±184% ~ (p=0.813 n=20+19)
Template-12 63.9ms ± 1% 64.6ms ± 1% +1.18% (p=0.000 n=19+20)
TimeParse-12 313ns ± 5% 312ns ± 0% ~ (p=0.114 n=20+19)
TimeFormat-12 336ns ± 0% 333ns ± 0% -0.97% (p=0.000 n=18+16)
[Geo mean] 50.6µs 50.1µs -1.04%
This is a cherry-pick of dev.garbage commit
edb54c300f , with updated
benchmark results.
Change-Id: Ic77faaa15cdac3bfbbb0032dde5c204e05a0fd8e
Reviewed-on: https://go-review.googlesource.com/41253
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rick Hudson <rlh@golang.org>
Austin Clements [Thu, 2 Jun 2016 15:07:41 +0000 (11:07 -0400)]
runtime: eliminate heapBits.hasPointers
This is no longer necessary now that we can more efficiently consult
the span's noscan bit.
This is a cherry-pick of dev.garbage commit
312aa09996 .
Change-Id: Id0b00b278533660973f45eb6efa5b00f373d58af
Reviewed-on: https://go-review.googlesource.com/41252
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rick Hudson <rlh@golang.org>
Austin Clements [Tue, 9 Feb 2016 22:53:07 +0000 (17:53 -0500)]
runtime: separate spans of noscan objects
Currently, we mix objects with pointers and objects without pointers
("noscan" objects) together in memory. As a result, for every object
we grey, we have to check that object's heap bits to find out if it's
noscan, which adds to the per-object cost of GC. This also hurts the
TLB footprint of the garbage collector because it decreases the
density of scannable objects at the page level.
This commit improves the situation by using separate spans for noscan
objects. This will allow a much simpler noscan check (in a follow up
CL), eliminate the need to clear the bitmap of noscan objects (in a
follow up CL), and improves TLB footprint by increasing the density of
scannable objects.
This is also a step toward eliminating dead bits, since the current
noscan check depends on checking the dead bit of the first word.
This has no effect on the heap size of the garbage benchmark.
We'll measure the performance change of this after the follow-up
optimizations.
This is a cherry-pick from dev.garbage commit
d491e550c3 . The only
non-trivial merge conflict was in updatememstats in mstats.go, where
we now have to separate the per-spanclass stats from the per-sizeclass
stats.
Change-Id: I13bdc4869538ece5649a8d2a41c6605371618e40
Reviewed-on: https://go-review.googlesource.com/41251
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rick Hudson <rlh@golang.org>
Austin Clements [Mon, 24 Apr 2017 17:47:03 +0000 (10:47 -0700)]
runtime: document runtime.Frames better
In particular, this says that Frames.Function uniquely identifies a
function within a program. We depend on this in various places that
use runtime.Frames in std, but it wasn't actually written down.
Change-Id: Ie7ede348c17673e11ae513a094862b60c506abc5
Reviewed-on: https://go-review.googlesource.com/41610
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Bryan C. Mills [Thu, 16 Feb 2017 22:44:16 +0000 (17:44 -0500)]
expvar: replace RWMutex usage with sync.Map and atomics
Int and Float already used atomics.
When many goroutines on many CPUs concurrently update a StringSet or a
Map with different keys per goroutine, this change results in dramatic
steady-state speedups.
This change does add some overhead for single-CPU and ephemeral maps.
I believe that is mostly due to an increase in allocations per call
(to pack the map keys and values into interface{} values that may
escape into the heap). With better inlining and/or escape analysis,
the single-CPU penalty may decline somewhat.
There are still two RWMutexes in the package: one for the keys in the
global "vars" map, and one for the keys in individual Map variables.
Those RWMutexes could also be eliminated, but avoiding excessive
allocations when adding new keys would require care. The remaining
RWMutexes are only acquired in Do functions, which I believe are not
typically on the fast path.
updates #17973
updates #18177
name old time/op new time/op delta
StringSet 65.9ns ± 8% 55.7ns ± 1% -15.46% (p=0.000 n=8+7)
StringSet-6 416ns ±22% 127ns ±19% -69.37% (p=0.000 n=8+8)
StringSet-48 309ns ± 8% 94ns ± 3% -69.43% (p=0.001 n=7+7)
name old alloc/op new alloc/op delta
StringSet 0.00B 16.00B ± 0% +Inf% (p=0.000 n=8+8)
StringSet-6 0.00B 16.00B ± 0% +Inf% (p=0.000 n=8+8)
StringSet-48 0.00B 16.00B ± 0% +Inf% (p=0.000 n=8+8)
name old allocs/op new allocs/op delta
StringSet 0.00 1.00 ± 0% +Inf% (p=0.000 n=8+8)
StringSet-6 0.00 1.00 ± 0% +Inf% (p=0.000 n=8+8)
StringSet-48 0.00 1.00 ± 0% +Inf% (p=0.000 n=8+8)
https://perf.golang.org/search?q=upload:
20170427 .3
name old time/op new time/op delta
IntAdd 5.64ns ± 3% 5.58ns ± 1% ~ (p=0.185 n=8+8)
IntAdd-6 18.6ns ±32% 21.4ns ±21% ~ (p=0.078 n=8+8)
IntAdd-48 19.6ns ±13% 20.6ns ±19% ~ (p=0.702 n=8+8)
IntSet 5.50ns ± 1% 5.48ns ± 0% ~ (p=0.222 n=7+8)
IntSet-6 18.5ns ±16% 20.4ns ±30% ~ (p=0.314 n=8+8)
IntSet-48 19.7ns ±12% 20.4ns ±16% ~ (p=0.522 n=8+8)
FloatAdd 14.5ns ± 1% 14.6ns ± 2% ~ (p=0.237 n=7+8)
FloatAdd-6 69.9ns ±13% 68.4ns ± 7% ~ (p=0.557 n=7+7)
FloatAdd-48 110ns ± 9% 109ns ± 6% ~ (p=0.667 n=8+8)
FloatSet 7.62ns ± 3% 7.64ns ± 5% ~ (p=0.939 n=8+8)
FloatSet-6 20.7ns ±22% 21.0ns ±23% ~ (p=0.959 n=8+8)
FloatSet-48 20.4ns ±24% 20.8ns ±19% ~ (p=0.899 n=8+8)
MapSet 88.1ns ±15% 200.9ns ± 7% +128.11% (p=0.000 n=8+8)
MapSet-6 453ns ±12% 202ns ± 8% -55.43% (p=0.000 n=8+8)
MapSet-48 432ns ±12% 240ns ±15% -44.49% (p=0.000 n=8+8)
MapSetDifferent 349ns ± 1% 876ns ± 2% +151.08% (p=0.001 n=6+7)
MapSetDifferent-6 1.74µs ±32% 0.25µs ±17% -85.71% (p=0.000 n=8+8)
MapSetDifferent-48 1.77µs ±10% 0.14µs ± 2% -91.84% (p=0.000 n=8+8)
MapSetString 88.1ns ± 7% 205.3ns ± 5% +132.98% (p=0.001 n=7+7)
MapSetString-6 438ns ±30% 205ns ± 9% -53.15% (p=0.000 n=8+8)
MapSetString-48 419ns ±14% 241ns ±15% -42.39% (p=0.000 n=8+8)
MapAddSame 686ns ± 9% 1010ns ± 5% +47.41% (p=0.000 n=8+8)
MapAddSame-6 238ns ±10% 300ns ±11% +26.22% (p=0.000 n=8+8)
MapAddSame-48 366ns ± 4% 483ns ± 3% +32.06% (p=0.000 n=8+8)
MapAddDifferent 1.96µs ± 4% 3.24µs ± 6% +65.58% (p=0.000 n=8+8)
MapAddDifferent-6 553ns ± 3% 948ns ± 8% +71.43% (p=0.000 n=7+8)
MapAddDifferent-48 548ns ± 4% 1242ns ±10% +126.81% (p=0.000 n=8+8)
MapAddSameSteadyState 31.5ns ± 7% 41.7ns ± 6% +32.61% (p=0.000 n=8+8)
MapAddSameSteadyState-6 239ns ± 7% 101ns ±30% -57.53% (p=0.000 n=7+8)
MapAddSameSteadyState-48 152ns ± 4% 85ns ±13% -43.84% (p=0.000 n=8+7)
MapAddDifferentSteadyState 151ns ± 5% 177ns ± 1% +17.32% (p=0.001 n=8+6)
MapAddDifferentSteadyState-6 861ns ±15% 62ns ±23% -92.85% (p=0.000 n=8+8)
MapAddDifferentSteadyState-48 617ns ± 2% 20ns ±14% -96.75% (p=0.000 n=8+8)
RealworldExpvarUsage 4.33µs ± 4% 4.48µs ± 6% ~ (p=0.336 n=8+7)
RealworldExpvarUsage-6 2.12µs ±20% 2.28µs ±10% ~ (p=0.228 n=8+6)
RealworldExpvarUsage-48 1.23µs ±19% 1.36µs ±16% ~ (p=0.152 n=7+8)
name old alloc/op new alloc/op delta
IntAdd 0.00B 0.00B ~ (all equal)
IntAdd-6 0.00B 0.00B ~ (all equal)
IntAdd-48 0.00B 0.00B ~ (all equal)
IntSet 0.00B 0.00B ~ (all equal)
IntSet-6 0.00B 0.00B ~ (all equal)
IntSet-48 0.00B 0.00B ~ (all equal)
FloatAdd 0.00B 0.00B ~ (all equal)
FloatAdd-6 0.00B 0.00B ~ (all equal)
FloatAdd-48 0.00B 0.00B ~ (all equal)
FloatSet 0.00B 0.00B ~ (all equal)
FloatSet-6 0.00B 0.00B ~ (all equal)
FloatSet-48 0.00B 0.00B ~ (all equal)
MapSet 0.00B 48.00B ± 0% +Inf% (p=0.000 n=8+8)
MapSet-6 0.00B 48.00B ± 0% +Inf% (p=0.000 n=8+8)
MapSet-48 0.00B 48.00B ± 0% +Inf% (p=0.000 n=8+8)
MapSetDifferent 0.00B 192.00B ± 0% +Inf% (p=0.000 n=8+8)
MapSetDifferent-6 0.00B 192.00B ± 0% +Inf% (p=0.000 n=8+8)
MapSetDifferent-48 0.00B 192.00B ± 0% +Inf% (p=0.000 n=8+8)
MapSetString 0.00B 48.00B ± 0% +Inf% (p=0.000 n=8+8)
MapSetString-6 0.00B 48.00B ± 0% +Inf% (p=0.000 n=8+8)
MapSetString-48 0.00B 48.00B ± 0% +Inf% (p=0.000 n=8+8)
MapAddSame 456B ± 0% 480B ± 0% +5.26% (p=0.000 n=8+8)
MapAddSame-6 456B ± 0% 480B ± 0% +5.26% (p=0.000 n=8+8)
MapAddSame-48 456B ± 0% 480B ± 0% +5.26% (p=0.000 n=8+8)
MapAddDifferent 672B ± 0% 1088B ± 0% +61.90% (p=0.000 n=8+8)
MapAddDifferent-6 672B ± 0% 1088B ± 0% +61.90% (p=0.000 n=8+8)
MapAddDifferent-48 672B ± 0% 1088B ± 0% +61.90% (p=0.000 n=8+8)
MapAddSameSteadyState 0.00B 0.00B ~ (all equal)
MapAddSameSteadyState-6 0.00B 0.00B ~ (all equal)
MapAddSameSteadyState-48 0.00B 0.00B ~ (all equal)
MapAddDifferentSteadyState 0.00B 0.00B ~ (all equal)
MapAddDifferentSteadyState-6 0.00B 0.00B ~ (all equal)
MapAddDifferentSteadyState-48 0.00B 0.00B ~ (all equal)
RealworldExpvarUsage 0.00B 0.00B ~ (all equal)
RealworldExpvarUsage-6 0.00B 0.00B ~ (all equal)
RealworldExpvarUsage-48 0.00B 0.00B ~ (all equal)
name old allocs/op new allocs/op delta
IntAdd 0.00 0.00 ~ (all equal)
IntAdd-6 0.00 0.00 ~ (all equal)
IntAdd-48 0.00 0.00 ~ (all equal)
IntSet 0.00 0.00 ~ (all equal)
IntSet-6 0.00 0.00 ~ (all equal)
IntSet-48 0.00 0.00 ~ (all equal)
FloatAdd 0.00 0.00 ~ (all equal)
FloatAdd-6 0.00 0.00 ~ (all equal)
FloatAdd-48 0.00 0.00 ~ (all equal)
FloatSet 0.00 0.00 ~ (all equal)
FloatSet-6 0.00 0.00 ~ (all equal)
FloatSet-48 0.00 0.00 ~ (all equal)
MapSet 0.00 3.00 ± 0% +Inf% (p=0.000 n=8+8)
MapSet-6 0.00 3.00 ± 0% +Inf% (p=0.000 n=8+8)
MapSet-48 0.00 3.00 ± 0% +Inf% (p=0.000 n=8+8)
MapSetDifferent 0.00 12.00 ± 0% +Inf% (p=0.000 n=8+8)
MapSetDifferent-6 0.00 12.00 ± 0% +Inf% (p=0.000 n=8+8)
MapSetDifferent-48 0.00 12.00 ± 0% +Inf% (p=0.000 n=8+8)
MapSetString 0.00 3.00 ± 0% +Inf% (p=0.000 n=8+8)
MapSetString-6 0.00 3.00 ± 0% +Inf% (p=0.000 n=8+8)
MapSetString-48 0.00 3.00 ± 0% +Inf% (p=0.000 n=8+8)
MapAddSame 6.00 ± 0% 11.00 ± 0% +83.33% (p=0.000 n=8+8)
MapAddSame-6 6.00 ± 0% 11.00 ± 0% +83.33% (p=0.000 n=8+8)
MapAddSame-48 6.00 ± 0% 11.00 ± 0% +83.33% (p=0.000 n=8+8)
MapAddDifferent 14.0 ± 0% 31.0 ± 0% +121.43% (p=0.000 n=8+8)
MapAddDifferent-6 14.0 ± 0% 31.0 ± 0% +121.43% (p=0.000 n=8+8)
MapAddDifferent-48 14.0 ± 0% 31.0 ± 0% +121.43% (p=0.000 n=8+8)
MapAddSameSteadyState 0.00 0.00 ~ (all equal)
MapAddSameSteadyState-6 0.00 0.00 ~ (all equal)
MapAddSameSteadyState-48 0.00 0.00 ~ (all equal)
MapAddDifferentSteadyState 0.00 0.00 ~ (all equal)
MapAddDifferentSteadyState-6 0.00 0.00 ~ (all equal)
MapAddDifferentSteadyState-48 0.00 0.00 ~ (all equal)
RealworldExpvarUsage 0.00 0.00 ~ (all equal)
RealworldExpvarUsage-6 0.00 0.00 ~ (all equal)
RealworldExpvarUsage-48 0.00 0.00 ~ (all equal)
https://perf.golang.org/search?q=upload:
20170427 .1
Change-Id: I388b2e8a3cadb84fc1418af8acfc27338f799273
Reviewed-on: https://go-review.googlesource.com/41930
Run-TryBot: Bryan Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Brad Fitzpatrick [Fri, 28 Apr 2017 21:16:03 +0000 (21:16 +0000)]
Revert "build: fail nicely if somebody runs all.bash from a binary tarball package"
This reverts commit
3d86d45dd60358636c569e9cf06b23b5e0e04e8a .
Reason for revert: Fixing a different way. See #20008.
Change-Id: I6f4382ffdfff83a4504b013ba37100319b2c1aad
Reviewed-on: https://go-review.googlesource.com/42138
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Bryan C. Mills [Thu, 16 Feb 2017 22:59:53 +0000 (17:59 -0500)]
mime: use sync.Map instead of RWMutex for type lookups
This provides a significant speedup for TypeByExtension and
ExtensionsByType when using many CPU cores.
updates #17973
updates #18177
name old time/op new time/op delta
QEncodeWord 526ns ± 3% 525ns ± 3% ~ (p=0.990 n=15+28)
QEncodeWord-6 945ns ± 7% 913ns ±20% ~ (p=0.220 n=14+28)
QEncodeWord-48 1.02µs ± 2% 1.00µs ± 6% -2.22% (p=0.036 n=13+27)
QDecodeWord 311ns ±18% 323ns ±20% ~ (p=0.107 n=16+28)
QDecodeWord-6 595ns ±12% 612ns ±11% ~ (p=0.093 n=15+27)
QDecodeWord-48 592ns ± 6% 606ns ± 8% +2.39% (p=0.045 n=16+26)
QDecodeHeader 389ns ± 4% 394ns ± 8% ~ (p=0.161 n=12+26)
QDecodeHeader-6 685ns ±12% 674ns ±20% ~ (p=0.773 n=14+27)
QDecodeHeader-48 658ns ±13% 669ns ±14% ~ (p=0.457 n=16+28)
TypeByExtension/.html 77.4ns ±15% 55.5ns ±13% -28.35% (p=0.000 n=8+8)
TypeByExtension/.html-6 263ns ± 9% 10ns ±21% -96.29% (p=0.000 n=8+8)
TypeByExtension/.html-48 175ns ± 5% 2ns ±16% -98.88% (p=0.000 n=8+8)
TypeByExtension/.HTML 113ns ± 6% 97ns ± 6% -14.37% (p=0.000 n=8+8)
TypeByExtension/.HTML-6 273ns ± 7% 17ns ± 4% -93.93% (p=0.000 n=7+8)
TypeByExtension/.HTML-48 175ns ± 4% 4ns ± 4% -97.73% (p=0.000 n=8+8)
TypeByExtension/.unused 116ns ± 4% 90ns ± 4% -22.89% (p=0.001 n=7+7)
TypeByExtension/.unused-6 262ns ± 5% 15ns ± 4% -94.17% (p=0.000 n=8+8)
TypeByExtension/.unused-48 176ns ± 4% 3ns ±10% -98.10% (p=0.000 n=8+8)
ExtensionsByType/text/html 630ns ± 5% 522ns ± 5% -17.19% (p=0.000 n=8+7)
ExtensionsByType/text/html-6 314ns ±20% 136ns ± 6% -56.80% (p=0.000 n=8+8)
ExtensionsByType/text/html-48 298ns ± 4% 104ns ± 6% -65.06% (p=0.000 n=8+8)
ExtensionsByType/text/html;_charset=utf-8 1.12µs ± 3% 1.05µs ± 7% -6.19% (p=0.004 n=8+7)
ExtensionsByType/text/html;_charset=utf-8-6 402ns ±11% 307ns ± 4% -23.77% (p=0.000 n=8+8)
ExtensionsByType/text/html;_charset=utf-8-48 422ns ± 3% 309ns ± 4% -26.86% (p=0.000 n=8+8)
ExtensionsByType/application/octet-stream 810ns ± 2% 747ns ± 5% -7.74% (p=0.000 n=8+8)
ExtensionsByType/application/octet-stream-6 289ns ± 9% 185ns ± 8% -36.15% (p=0.000 n=7+8)
ExtensionsByType/application/octet-stream-48 267ns ± 6% 94ns ± 2% -64.91% (p=0.000 n=8+7)
name old alloc/op new alloc/op delta
QEncodeWord 48.0B ± 0% 48.0B ± 0% ~ (all equal)
QEncodeWord-6 48.0B ± 0% 48.0B ± 0% ~ (all equal)
QEncodeWord-48 48.0B ± 0% 48.0B ± 0% ~ (all equal)
QDecodeWord 48.0B ± 0% 48.0B ± 0% ~ (all equal)
QDecodeWord-6 48.0B ± 0% 48.0B ± 0% ~ (all equal)
QDecodeWord-48 48.0B ± 0% 48.0B ± 0% ~ (all equal)
QDecodeHeader 48.0B ± 0% 48.0B ± 0% ~ (all equal)
QDecodeHeader-6 48.0B ± 0% 48.0B ± 0% ~ (all equal)
QDecodeHeader-48 48.0B ± 0% 48.0B ± 0% ~ (all equal)
TypeByExtension/.html 0.00B 0.00B ~ (all equal)
TypeByExtension/.html-6 0.00B 0.00B ~ (all equal)
TypeByExtension/.html-48 0.00B 0.00B ~ (all equal)
TypeByExtension/.HTML 0.00B 0.00B ~ (all equal)
TypeByExtension/.HTML-6 0.00B 0.00B ~ (all equal)
TypeByExtension/.HTML-48 0.00B 0.00B ~ (all equal)
TypeByExtension/.unused 0.00B 0.00B ~ (all equal)
TypeByExtension/.unused-6 0.00B 0.00B ~ (all equal)
TypeByExtension/.unused-48 0.00B 0.00B ~ (all equal)
ExtensionsByType/text/html 192B ± 0% 176B ± 0% -8.33% (p=0.000 n=8+8)
ExtensionsByType/text/html-6 192B ± 0% 176B ± 0% -8.33% (p=0.000 n=8+8)
ExtensionsByType/text/html-48 192B ± 0% 176B ± 0% -8.33% (p=0.000 n=8+8)
ExtensionsByType/text/html;_charset=utf-8 480B ± 0% 464B ± 0% -3.33% (p=0.000 n=8+8)
ExtensionsByType/text/html;_charset=utf-8-6 480B ± 0% 464B ± 0% -3.33% (p=0.000 n=8+8)
ExtensionsByType/text/html;_charset=utf-8-48 480B ± 0% 464B ± 0% -3.33% (p=0.000 n=8+8)
ExtensionsByType/application/octet-stream 160B ± 0% 160B ± 0% ~ (all equal)
ExtensionsByType/application/octet-stream-6 160B ± 0% 160B ± 0% ~ (all equal)
ExtensionsByType/application/octet-stream-48 160B ± 0% 160B ± 0% ~ (all equal)
name old allocs/op new allocs/op delta
QEncodeWord 1.00 ± 0% 1.00 ± 0% ~ (all equal)
QEncodeWord-6 1.00 ± 0% 1.00 ± 0% ~ (all equal)
QEncodeWord-48 1.00 ± 0% 1.00 ± 0% ~ (all equal)
QDecodeWord 2.00 ± 0% 2.00 ± 0% ~ (all equal)
QDecodeWord-6 2.00 ± 0% 2.00 ± 0% ~ (all equal)
QDecodeWord-48 2.00 ± 0% 2.00 ± 0% ~ (all equal)
QDecodeHeader 2.00 ± 0% 2.00 ± 0% ~ (all equal)
QDecodeHeader-6 2.00 ± 0% 2.00 ± 0% ~ (all equal)
QDecodeHeader-48 2.00 ± 0% 2.00 ± 0% ~ (all equal)
TypeByExtension/.html 0.00 0.00 ~ (all equal)
TypeByExtension/.html-6 0.00 0.00 ~ (all equal)
TypeByExtension/.html-48 0.00 0.00 ~ (all equal)
TypeByExtension/.HTML 0.00 0.00 ~ (all equal)
TypeByExtension/.HTML-6 0.00 0.00 ~ (all equal)
TypeByExtension/.HTML-48 0.00 0.00 ~ (all equal)
TypeByExtension/.unused 0.00 0.00 ~ (all equal)
TypeByExtension/.unused-6 0.00 0.00 ~ (all equal)
TypeByExtension/.unused-48 0.00 0.00 ~ (all equal)
ExtensionsByType/text/html 3.00 ± 0% 3.00 ± 0% ~ (all equal)
ExtensionsByType/text/html-6 3.00 ± 0% 3.00 ± 0% ~ (all equal)
ExtensionsByType/text/html-48 3.00 ± 0% 3.00 ± 0% ~ (all equal)
ExtensionsByType/text/html;_charset=utf-8 4.00 ± 0% 4.00 ± 0% ~ (all equal)
ExtensionsByType/text/html;_charset=utf-8-6 4.00 ± 0% 4.00 ± 0% ~ (all equal)
ExtensionsByType/text/html;_charset=utf-8-48 4.00 ± 0% 4.00 ± 0% ~ (all equal)
ExtensionsByType/application/octet-stream 2.00 ± 0% 2.00 ± 0% ~ (all equal)
ExtensionsByType/application/octet-stream-6 2.00 ± 0% 2.00 ± 0% ~ (all equal)
ExtensionsByType/application/octet-stream-48 2.00 ± 0% 2.00 ± 0% ~ (all equal)
https://perf.golang.org/search?q=upload:
20170427 .4
Change-Id: I35438be087ad6eb3d5da9119b395723ea5babaf6
Reviewed-on: https://go-review.googlesource.com/41990
Run-TryBot: Bryan Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Bryan C. Mills [Thu, 16 Feb 2017 23:07:29 +0000 (18:07 -0500)]
net/rpc: use a sync.Map for serviceMap instead of RWMutex
This has no measurable impact on performance, but somewhat simplifies
the code.
updates #18177
name old time/op new time/op delta
EndToEnd 54.3µs ±10% 55.7µs ±12% ~ (p=0.505 n=8+8)
EndToEnd-6 31.4µs ± 9% 32.7µs ± 6% ~ (p=0.130 n=8+8)
EndToEnd-48 25.5µs ±12% 26.4µs ± 6% ~ (p=0.195 n=8+8)
EndToEndHTTP 53.7µs ± 8% 51.2µs ±15% ~ (p=0.463 n=7+8)
EndToEndHTTP-6 30.9µs ±18% 31.2µs ±14% ~ (p=0.959 n=8+8)
EndToEndHTTP-48 24.9µs ±11% 25.7µs ± 6% ~ (p=0.382 n=8+8)
EndToEndAsync 23.6µs ± 7% 24.2µs ± 6% ~ (p=0.383 n=7+7)
EndToEndAsync-6 21.0µs ±23% 22.0µs ±20% ~ (p=0.574 n=8+8)
EndToEndAsync-48 22.8µs ±16% 23.3µs ±13% ~ (p=0.721 n=8+8)
EndToEndAsyncHTTP 25.8µs ± 7% 24.7µs ±14% ~ (p=0.161 n=8+8)
EndToEndAsyncHTTP-6 22.1µs ±19% 22.6µs ±12% ~ (p=0.645 n=8+8)
EndToEndAsyncHTTP-48 22.9µs ±13% 22.1µs ±20% ~ (p=0.574 n=8+8)
name old alloc/op new alloc/op delta
EndToEnd 320B ± 0% 321B ± 0% ~ (p=1.000 n=8+8)
EndToEnd-6 320B ± 0% 321B ± 0% +0.20% (p=0.037 n=8+7)
EndToEnd-48 326B ± 0% 326B ± 0% ~ (p=0.124 n=8+8)
EndToEndHTTP 320B ± 0% 320B ± 0% ~ (all equal)
EndToEndHTTP-6 320B ± 0% 321B ± 0% ~ (p=0.077 n=8+8)
EndToEndHTTP-48 324B ± 0% 324B ± 0% ~ (p=1.000 n=8+8)
EndToEndAsync 227B ± 0% 227B ± 0% ~ (p=0.154 n=8+7)
EndToEndAsync-6 226B ± 0% 226B ± 0% ~ (all equal)
EndToEndAsync-48 230B ± 1% 229B ± 1% ~ (p=0.072 n=8+8)
EndToEndAsyncHTTP 227B ± 0% 227B ± 0% ~ (all equal)
EndToEndAsyncHTTP-6 226B ± 0% 226B ± 0% ~ (p=0.400 n=8+7)
EndToEndAsyncHTTP-48 228B ± 0% 228B ± 0% ~ (p=0.949 n=8+6)
name old allocs/op new allocs/op delta
EndToEnd 9.00 ± 0% 9.00 ± 0% ~ (all equal)
EndToEnd-6 9.00 ± 0% 9.00 ± 0% ~ (all equal)
EndToEnd-48 9.00 ± 0% 9.00 ± 0% ~ (all equal)
EndToEndHTTP 9.00 ± 0% 9.00 ± 0% ~ (all equal)
EndToEndHTTP-6 9.00 ± 0% 9.00 ± 0% ~ (all equal)
EndToEndHTTP-48 9.00 ± 0% 9.00 ± 0% ~ (all equal)
EndToEndAsync 8.00 ± 0% 8.00 ± 0% ~ (all equal)
EndToEndAsync-6 8.00 ± 0% 8.00 ± 0% ~ (all equal)
EndToEndAsync-48 8.00 ± 0% 8.00 ± 0% ~ (all equal)
EndToEndAsyncHTTP 8.00 ± 0% 8.00 ± 0% ~ (all equal)
EndToEndAsyncHTTP-6 8.00 ± 0% 8.00 ± 0% ~ (all equal)
EndToEndAsyncHTTP-48 8.00 ± 0% 8.00 ± 0% ~ (all equal)
https://perf.golang.org/search?q=upload:
20170428 .2
Change-Id: I8ef7f71a7602302aa78c144327270dfce9211539
Reviewed-on: https://go-review.googlesource.com/42112
Run-TryBot: Bryan Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Bryan C. Mills [Thu, 16 Feb 2017 22:41:13 +0000 (17:41 -0500)]
encoding/json: replace encoderCache RWMutex with a sync.Map
This provides a moderate speedup for encoding when using many CPU cores.
name old time/op new time/op delta
CodeEncoder 14.1ms ±10% 13.5ms ± 4% ~ (p=0.867 n=8+7)
CodeEncoder-6 2.58ms ± 8% 2.72ms ± 6% ~ (p=0.065 n=8+8)
CodeEncoder-48 629µs ± 1% 629µs ± 1% ~ (p=0.867 n=8+7)
CodeMarshal 14.9ms ± 5% 14.9ms ± 5% ~ (p=0.721 n=8+8)
CodeMarshal-6 3.28ms ±11% 3.24ms ±12% ~ (p=0.798 n=8+8)
CodeMarshal-48 739µs ± 1% 745µs ± 2% ~ (p=0.328 n=8+8)
CodeDecoder 49.7ms ± 4% 49.2ms ± 4% ~ (p=0.463 n=7+8)
CodeDecoder-6 10.1ms ± 8% 10.4ms ± 3% ~ (p=0.232 n=7+8)
CodeDecoder-48 2.60ms ± 3% 2.61ms ± 2% ~ (p=1.000 n=8+8)
DecoderStream 352ns ± 5% 344ns ± 4% ~ (p=0.077 n=8+8)
DecoderStream-6 485ns ± 8% 503ns ± 6% ~ (p=0.123 n=8+8)
DecoderStream-48 522ns ± 7% 520ns ± 5% ~ (p=0.959 n=8+8)
CodeUnmarshal 52.2ms ± 5% 54.4ms ±18% ~ (p=0.955 n=7+8)
CodeUnmarshal-6 12.4ms ± 6% 12.3ms ± 6% ~ (p=0.878 n=8+8)
CodeUnmarshal-48 3.46ms ± 7% 3.40ms ± 9% ~ (p=0.442 n=8+8)
CodeUnmarshalReuse 48.9ms ± 6% 50.3ms ± 7% ~ (p=0.279 n=8+8)
CodeUnmarshalReuse-6 10.3ms ±11% 10.3ms ±10% ~ (p=0.959 n=8+8)
CodeUnmarshalReuse-48 2.68ms ± 3% 2.67ms ± 4% ~ (p=0.878 n=8+8)
UnmarshalString 476ns ± 7% 474ns ± 7% ~ (p=0.644 n=8+8)
UnmarshalString-6 164ns ± 9% 160ns ±10% ~ (p=0.556 n=8+8)
UnmarshalString-48 181ns ± 0% 177ns ± 2% -2.36% (p=0.001 n=7+7)
UnmarshalFloat64 414ns ± 4% 418ns ± 4% ~ (p=0.382 n=8+8)
UnmarshalFloat64-6 147ns ± 9% 143ns ±16% ~ (p=0.457 n=8+8)
UnmarshalFloat64-48 176ns ± 2% 174ns ± 2% ~ (p=0.118 n=8+8)
UnmarshalInt64 369ns ± 4% 354ns ± 1% -3.85% (p=0.005 n=8+7)
UnmarshalInt64-6 132ns ±11% 132ns ±10% ~ (p=0.982 n=8+8)
UnmarshalInt64-48 177ns ± 3% 174ns ± 2% -1.84% (p=0.028 n=8+7)
Issue10335 540ns ± 5% 535ns ± 0% ~ (p=0.330 n=7+7)
Issue10335-6 159ns ± 8% 164ns ± 8% ~ (p=0.246 n=8+8)
Issue10335-48 186ns ± 1% 182ns ± 2% -1.89% (p=0.010 n=8+8)
Unmapped 1.74µs ± 2% 1.76µs ± 6% ~ (p=0.181 n=6+8)
Unmapped-6 414ns ± 5% 402ns ±10% ~ (p=0.244 n=7+8)
Unmapped-48 226ns ± 2% 224ns ± 2% ~ (p=0.144 n=7+8)
NumberIsValid 20.1ns ± 4% 19.7ns ± 3% ~ (p=0.204 n=8+8)
NumberIsValid-6 20.4ns ± 8% 22.2ns ±16% ~ (p=0.129 n=7+8)
NumberIsValid-48 23.1ns ±12% 23.8ns ± 8% ~ (p=0.104 n=8+8)
NumberIsValidRegexp 629ns ± 5% 622ns ± 0% ~ (p=0.148 n=7+7)
NumberIsValidRegexp-6 757ns ± 2% 725ns ±14% ~ (p=0.351 n=8+7)
NumberIsValidRegexp-48 757ns ± 2% 723ns ±13% ~ (p=0.521 n=8+8)
SkipValue 13.2ms ± 9% 13.3ms ± 1% ~ (p=0.130 n=8+8)
SkipValue-6 15.1ms ±10% 14.8ms ± 2% ~ (p=0.397 n=7+8)
SkipValue-48 13.9ms ±12% 14.3ms ± 1% ~ (p=0.694 n=8+7)
EncoderEncode 433ns ± 4% 410ns ± 3% -5.48% (p=0.001 n=8+8)
EncoderEncode-6 221ns ±15% 75ns ± 5% -66.15% (p=0.000 n=7+8)
EncoderEncode-48 161ns ± 4% 19ns ± 7% -88.29% (p=0.000 n=7+8)
name old speed new speed delta
CodeEncoder 139MB/s ±10% 144MB/s ± 4% ~ (p=0.844 n=8+7)
CodeEncoder-6 756MB/s ± 8% 714MB/s ± 6% ~ (p=0.065 n=8+8)
CodeEncoder-48 3.08GB/s ± 1% 3.09GB/s ± 1% ~ (p=0.867 n=8+7)
CodeMarshal 130MB/s ± 5% 130MB/s ± 5% ~ (p=0.721 n=8+8)
CodeMarshal-6 594MB/s ±10% 601MB/s ±11% ~ (p=0.798 n=8+8)
CodeMarshal-48 2.62GB/s ± 1% 2.60GB/s ± 2% ~ (p=0.328 n=8+8)
CodeDecoder 39.0MB/s ± 4% 39.5MB/s ± 4% ~ (p=0.463 n=7+8)
CodeDecoder-6 189MB/s ±13% 187MB/s ± 3% ~ (p=0.505 n=8+8)
CodeDecoder-48 746MB/s ± 2% 745MB/s ± 2% ~ (p=1.000 n=8+8)
CodeUnmarshal 37.2MB/s ± 5% 35.9MB/s ±16% ~ (p=0.955 n=7+8)
CodeUnmarshal-6 157MB/s ± 6% 158MB/s ± 6% ~ (p=0.878 n=8+8)
CodeUnmarshal-48 561MB/s ± 7% 572MB/s ±10% ~ (p=0.442 n=8+8)
SkipValue 141MB/s ±10% 139MB/s ± 1% ~ (p=0.130 n=8+8)
SkipValue-6 131MB/s ± 3% 133MB/s ± 2% ~ (p=0.662 n=6+8)
SkipValue-48 138MB/s ±11% 132MB/s ± 1% ~ (p=0.281 n=8+7)
name old alloc/op new alloc/op delta
CodeEncoder 45.9kB ± 0% 45.9kB ± 0% -0.02% (p=0.002 n=7+8)
CodeEncoder-6 55.1kB ± 0% 55.1kB ± 0% -0.01% (p=0.002 n=7+8)
CodeEncoder-48 110kB ± 0% 110kB ± 0% -0.00% (p=0.030 n=7+8)
CodeMarshal 4.59MB ± 0% 4.59MB ± 0% -0.00% (p=0.000 n=8+8)
CodeMarshal-6 4.59MB ± 0% 4.59MB ± 0% -0.00% (p=0.000 n=8+8)
CodeMarshal-48 4.59MB ± 0% 4.59MB ± 0% -0.00% (p=0.001 n=7+8)
CodeDecoder 2.28MB ± 5% 2.21MB ± 0% ~ (p=0.257 n=8+7)
CodeDecoder-6 2.43MB ±11% 2.51MB ± 0% ~ (p=0.473 n=8+8)
CodeDecoder-48 2.93MB ± 0% 2.93MB ± 0% ~ (p=0.554 n=7+8)
DecoderStream 16.0B ± 0% 16.0B ± 0% ~ (all equal)
DecoderStream-6 16.0B ± 0% 16.0B ± 0% ~ (all equal)
DecoderStream-48 16.0B ± 0% 16.0B ± 0% ~ (all equal)
CodeUnmarshal 3.28MB ± 0% 3.28MB ± 0% ~ (p=1.000 n=7+7)
CodeUnmarshal-6 3.28MB ± 0% 3.28MB ± 0% ~ (p=0.593 n=8+8)
CodeUnmarshal-48 3.28MB ± 0% 3.28MB ± 0% ~ (p=0.670 n=8+8)
CodeUnmarshalReuse 1.87MB ± 0% 1.88MB ± 1% +0.48% (p=0.011 n=7+8)
CodeUnmarshalReuse-6 1.90MB ± 1% 1.90MB ± 1% ~ (p=0.589 n=8+8)
CodeUnmarshalReuse-48 1.96MB ± 0% 1.96MB ± 0% +0.00% (p=0.002 n=7+8)
UnmarshalString 304B ± 0% 304B ± 0% ~ (all equal)
UnmarshalString-6 304B ± 0% 304B ± 0% ~ (all equal)
UnmarshalString-48 304B ± 0% 304B ± 0% ~ (all equal)
UnmarshalFloat64 292B ± 0% 292B ± 0% ~ (all equal)
UnmarshalFloat64-6 292B ± 0% 292B ± 0% ~ (all equal)
UnmarshalFloat64-48 292B ± 0% 292B ± 0% ~ (all equal)
UnmarshalInt64 289B ± 0% 289B ± 0% ~ (all equal)
UnmarshalInt64-6 289B ± 0% 289B ± 0% ~ (all equal)
UnmarshalInt64-48 289B ± 0% 289B ± 0% ~ (all equal)
Issue10335 312B ± 0% 312B ± 0% ~ (all equal)
Issue10335-6 312B ± 0% 312B ± 0% ~ (all equal)
Issue10335-48 312B ± 0% 312B ± 0% ~ (all equal)
Unmapped 344B ± 0% 344B ± 0% ~ (all equal)
Unmapped-6 344B ± 0% 344B ± 0% ~ (all equal)
Unmapped-48 344B ± 0% 344B ± 0% ~ (all equal)
NumberIsValid 0.00B 0.00B ~ (all equal)
NumberIsValid-6 0.00B 0.00B ~ (all equal)
NumberIsValid-48 0.00B 0.00B ~ (all equal)
NumberIsValidRegexp 0.00B 0.00B ~ (all equal)
NumberIsValidRegexp-6 0.00B 0.00B ~ (all equal)
NumberIsValidRegexp-48 0.00B 0.00B ~ (all equal)
SkipValue 0.00B 0.00B ~ (all equal)
SkipValue-6 0.00B 0.00B ~ (all equal)
SkipValue-48 15.0B ±167% 0.0B ~ (p=0.200 n=8+8)
EncoderEncode 8.00B ± 0% 0.00B -100.00% (p=0.000 n=8+8)
EncoderEncode-6 8.00B ± 0% 0.00B -100.00% (p=0.000 n=8+8)
EncoderEncode-48 8.00B ± 0% 0.00B -100.00% (p=0.000 n=8+8)
name old allocs/op new allocs/op delta
CodeEncoder 1.00 ± 0% 0.00 -100.00% (p=0.000 n=8+8)
CodeEncoder-6 1.00 ± 0% 0.00 -100.00% (p=0.000 n=8+8)
CodeEncoder-48 1.00 ± 0% 0.00 -100.00% (p=0.000 n=8+8)
CodeMarshal 17.0 ± 0% 16.0 ± 0% -5.88% (p=0.000 n=8+8)
CodeMarshal-6 17.0 ± 0% 16.0 ± 0% -5.88% (p=0.000 n=8+8)
CodeMarshal-48 17.0 ± 0% 16.0 ± 0% -5.88% (p=0.000 n=8+8)
CodeDecoder 89.6k ± 0% 89.5k ± 0% ~ (p=0.154 n=8+7)
CodeDecoder-6 89.8k ± 0% 89.9k ± 0% ~ (p=0.467 n=8+8)
CodeDecoder-48 90.5k ± 0% 90.5k ± 0% ~ (p=0.533 n=8+7)
DecoderStream 2.00 ± 0% 2.00 ± 0% ~ (all equal)
DecoderStream-6 2.00 ± 0% 2.00 ± 0% ~ (all equal)
DecoderStream-48 2.00 ± 0% 2.00 ± 0% ~ (all equal)
CodeUnmarshal 105k ± 0% 105k ± 0% ~ (all equal)
CodeUnmarshal-6 105k ± 0% 105k ± 0% ~ (all equal)
CodeUnmarshal-48 105k ± 0% 105k ± 0% ~ (all equal)
CodeUnmarshalReuse 89.5k ± 0% 89.6k ± 0% ~ (p=0.246 n=7+8)
CodeUnmarshalReuse-6 89.8k ± 0% 89.8k ± 0% ~ (p=1.000 n=8+8)
CodeUnmarshalReuse-48 90.5k ± 0% 90.5k ± 0% ~ (all equal)
UnmarshalString 2.00 ± 0% 2.00 ± 0% ~ (all equal)
UnmarshalString-6 2.00 ± 0% 2.00 ± 0% ~ (all equal)
UnmarshalString-48 2.00 ± 0% 2.00 ± 0% ~ (all equal)
UnmarshalFloat64 2.00 ± 0% 2.00 ± 0% ~ (all equal)
UnmarshalFloat64-6 2.00 ± 0% 2.00 ± 0% ~ (all equal)
UnmarshalFloat64-48 2.00 ± 0% 2.00 ± 0% ~ (all equal)
UnmarshalInt64 2.00 ± 0% 2.00 ± 0% ~ (all equal)
UnmarshalInt64-6 2.00 ± 0% 2.00 ± 0% ~ (all equal)
UnmarshalInt64-48 2.00 ± 0% 2.00 ± 0% ~ (all equal)
Issue10335 3.00 ± 0% 3.00 ± 0% ~ (all equal)
Issue10335-6 3.00 ± 0% 3.00 ± 0% ~ (all equal)
Issue10335-48 3.00 ± 0% 3.00 ± 0% ~ (all equal)
Unmapped 4.00 ± 0% 4.00 ± 0% ~ (all equal)
Unmapped-6 4.00 ± 0% 4.00 ± 0% ~ (all equal)
Unmapped-48 4.00 ± 0% 4.00 ± 0% ~ (all equal)
NumberIsValid 0.00 0.00 ~ (all equal)
NumberIsValid-6 0.00 0.00 ~ (all equal)
NumberIsValid-48 0.00 0.00 ~ (all equal)
NumberIsValidRegexp 0.00 0.00 ~ (all equal)
NumberIsValidRegexp-6 0.00 0.00 ~ (all equal)
NumberIsValidRegexp-48 0.00 0.00 ~ (all equal)
SkipValue 0.00 0.00 ~ (all equal)
SkipValue-6 0.00 0.00 ~ (all equal)
SkipValue-48 0.00 0.00 ~ (all equal)
EncoderEncode 1.00 ± 0% 0.00 -100.00% (p=0.000 n=8+8)
EncoderEncode-6 1.00 ± 0% 0.00 -100.00% (p=0.000 n=8+8)
EncoderEncode-48 1.00 ± 0% 0.00 -100.00% (p=0.000 n=8+8)
https://perf.golang.org/search?q=upload:
20170427 .2
updates #17973
updates #18177
Change-Id: I5881c7a2bfad1766e6aa3444bb630883e0be467b
Reviewed-on: https://go-review.googlesource.com/41931
Run-TryBot: Bryan Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Josh Bleecher Snyder [Fri, 28 Apr 2017 14:28:49 +0000 (07:28 -0700)]
cmd/compile: check width of embedded interfaces in expandiface
The code in #20162 contains an embedded interface.
It didn't get dowidth'd by the frontend,
and during DWARF generation, ngotype asked
for a string description of it,
which triggered a request for the number of fields
in the interface, which triggered a dowidth,
which is disallowed in the backend.
The other changes in this CL are to support the test.
Fixes #20162
Change-Id: I4d0be5bd949c361d4cdc89a8ed28b10977e40cf9
Reviewed-on: https://go-review.googlesource.com/42131
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Michael Hudson-Doyle [Thu, 27 Apr 2017 20:11:21 +0000 (08:11 +1200)]
cmd/link/internal/ld: unexport ReadOnly and RelROMap
Change-Id: I08e33b92dd8a22e28ec15aa5753904aa8e1c71f5
Reviewed-on: https://go-review.googlesource.com/42031
Run-TryBot: Michael Hudson-Doyle <michael.hudson@canonical.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Michael Hudson-Doyle [Thu, 27 Apr 2017 20:07:56 +0000 (08:07 +1200)]
cmd/internal/objabi: shrink SymType down to a uint8
Now that it only takes small values.
Change-Id: I08086d392529d8775b470d65afc2475f8d0e7f4a
Reviewed-on: https://go-review.googlesource.com/42030
Run-TryBot: Michael Hudson-Doyle <michael.hudson@canonical.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Michael Hudson-Doyle [Wed, 19 Apr 2017 03:30:08 +0000 (15:30 +1200)]
cmd/internal: remove SymKind values that are only checked for, never set
Change-Id: Id152767c033c12966e9e12ae303b99f38776f919
Reviewed-on: https://go-review.googlesource.com/40987
Run-TryBot: Michael Hudson-Doyle <michael.hudson@canonical.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Josh Bleecher Snyder [Thu, 27 Apr 2017 23:27:47 +0000 (16:27 -0700)]
cmd/compile: use a map to track liveness variable indices
It is not safe to modify Node.Opt in the backend.
Instead of using Node.Opt to store liveness variable indices, use a map.
This simplifies the code and makes it much more clearly race-free.
There are generally few such variables, so the maps are not a significant
source of allocations; this also remove some allocations from putting
int32s into interfaces.
Because map lookups are more expensive than interface value extraction,
reorder valueEffects to do the map lookup last.
The only remaining use of Node.Opt is now in esc.go.
Passes toolstash-check.
Fixes #20144
name old alloc/op new alloc/op delta
Template 37.8MB ± 0% 37.9MB ± 0% ~ (p=0.548 n=5+5)
Unicode 28.9MB ± 0% 28.9MB ± 0% ~ (p=0.548 n=5+5)
GoTypes 110MB ± 0% 110MB ± 0% +0.16% (p=0.008 n=5+5)
Compiler 461MB ± 0% 462MB ± 0% +0.08% (p=0.008 n=5+5)
SSA 1.11GB ± 0% 1.11GB ± 0% +0.11% (p=0.008 n=5+5)
Flate 24.7MB ± 0% 24.7MB ± 0% ~ (p=0.690 n=5+5)
GoParser 31.1MB ± 0% 31.1MB ± 0% ~ (p=0.841 n=5+5)
Reflect 73.7MB ± 0% 73.8MB ± 0% +0.23% (p=0.008 n=5+5)
Tar 25.8MB ± 0% 25.7MB ± 0% ~ (p=0.690 n=5+5)
XML 41.2MB ± 0% 41.2MB ± 0% ~ (p=0.841 n=5+5)
[Geo mean] 71.9MB 71.9MB +0.06%
name old allocs/op new allocs/op delta
Template 385k ± 0% 384k ± 0% ~ (p=0.548 n=5+5)
Unicode 344k ± 0% 343k ± 1% ~ (p=0.421 n=5+5)
GoTypes 1.16M ± 0% 1.16M ± 0% ~ (p=0.690 n=5+5)
Compiler 4.43M ± 0% 4.42M ± 0% ~ (p=0.095 n=5+5)
SSA 9.86M ± 0% 9.84M ± 0% -0.19% (p=0.008 n=5+5)
Flate 238k ± 0% 238k ± 0% ~ (p=1.000 n=5+5)
GoParser 321k ± 0% 320k ± 0% ~ (p=0.310 n=5+5)
Reflect 956k ± 0% 956k ± 0% ~ (p=1.000 n=5+5)
Tar 252k ± 0% 251k ± 0% ~ (p=0.056 n=5+5)
XML 402k ± 1% 400k ± 1% -0.57% (p=0.032 n=5+5)
[Geo mean] 740k 739k -0.19%
Change-Id: Id5916c9def76add272e89c59fe10968f0a6bb01d
Reviewed-on: https://go-review.googlesource.com/42135
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Brad Fitzpatrick [Fri, 28 Apr 2017 16:46:18 +0000 (16:46 +0000)]
net/http: re-simplify HTTP/1.x status line writing
It used to be simple, and then it got complicated for speed (to reduce
allocations, mostly), but that involved a mutex and hurt multi-core
performance, contending on the mutex.
A change was sent to try to improve that mutex contention in
https://go-review.googlesource.com/c/42110/2/src/net/http/server.go
but that introduced its own allocations (the string->interface{}
boxing for the sync.Map key), which runs counter to the whole point of
that statusLine function: to remove allocations.
Instead, make the code simple again and not have a mutex. It's a bit
slower for the single-core case, but nobody with a single-user HTTP
server cares about 50 nanoseconds:
name old time/op new time/op delta
ResponseStatusLine 37.5ns ± 2% 87.1ns ± 2% +132.42% (p=0.029 n=4+4)
ResponseStatusLine-2 63.1ns ± 1% 43.1ns ±12% -31.67% (p=0.029 n=4+4)
ResponseStatusLine-4 53.8ns ± 8% 40.2ns ± 2% -25.29% (p=0.029 n=4+4)
name old alloc/op new alloc/op delta
ResponseStatusLine 0.00B ±NaN% 0.00B ±NaN% ~ (all samples are equal)
ResponseStatusLine-2 0.00B ±NaN% 0.00B ±NaN% ~ (all samples are equal)
ResponseStatusLine-4 0.00B ±NaN% 0.00B ±NaN% ~ (all samples are equal)
name old allocs/op new allocs/op delta
ResponseStatusLine 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal)
ResponseStatusLine-2 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal)
ResponseStatusLine-4 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal)
(Note the code could be even simpler with fmt.Fprintf, but that is
relatively slow and involves a bunch of allocations getting arguments
into interface{} for the call)
Change-Id: I1fa119132dbbf97a8e7204ce3e0707d433060da2
Reviewed-on: https://go-review.googlesource.com/42133
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Bryan Mills <bcmills@google.com>
Daniel Martí [Thu, 27 Apr 2017 17:25:43 +0000 (18:25 +0100)]
cmd/go: error on space-separated list with comma
Using 'go build -tags "foo,bar"' might seem to work when you wanted
-tags "foo bar", since they make up a single tag that doesn't exist and
the build is unaffected.
Instead, error on any tag that contains a comma.
Fixes #18800.
Change-Id: I6641e03e2ae121c8878d6301c4311aef97026b73
Reviewed-on: https://go-review.googlesource.com/41951
Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Ian Lance Taylor [Fri, 28 Apr 2017 17:52:10 +0000 (10:52 -0700)]
cmd/go: don't run TestTestRaceInstall in short mode
Fixes #20158
Change-Id: Iefa9a33569eb805f5ab678d17c37787835bc7efa
Reviewed-on: https://go-review.googlesource.com/42134
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Justin Nuß [Fri, 28 Apr 2017 10:04:45 +0000 (12:04 +0200)]
os/exec: document that non-comparable writers may race
The comment for Cmd.Stdout and Cmd.Stderr says that it's safe to
set both to the same writer, but it doesn't say that this only
works when both writers are comparable.
This change updates the comment to explain that using a
non-comparable writer may still lead to a race.
Fixes #19804
Change-Id: I63b420034666209a2b6fab48b9047c9d07b825e2
Reviewed-on: https://go-review.googlesource.com/42052
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Michael Matloob [Wed, 5 Apr 2017 17:50:52 +0000 (13:50 -0400)]
runtime/pprof: propagate profile labels into profile proto
Profile labels added by the user using pprof.Do, if present will
be in a *labelMap stored in the unsafe.Pointer 'tag' field of
the profile map entry. This change extracts the labels from the tag
field and writes them to the profile proto.
Change-Id: Ic40fdc58b66e993ca91d5d5effe0e04ffbb5bc46
Reviewed-on: https://go-review.googlesource.com/39613
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
Russ Cox [Fri, 28 Apr 2017 16:45:46 +0000 (12:45 -0400)]
runtime: fix profile handling of labels for race detector
If g1 sets its labels and then they are copied into a profile buffer
and then g2 reads the profile buffer and inspects the labels,
the race detector must understand that g1's recording of the labels
happens before g2's use of the labels. Make that so.
Fixes race test failure in CL 39613.
Change-Id: Id7cda1c2aac6f8eef49213b5ca414f7154b4acfa
Reviewed-on: https://go-review.googlesource.com/42111
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Michael Matloob <matloob@golang.org>
Robert Griesemer [Fri, 28 Apr 2017 00:54:49 +0000 (17:54 -0700)]
spec: clarify admissible argument types for print, println
Fixes #19885.
Change-Id: I55420aace1b0f714df2d6460d2d1595f6863dd06
Reviewed-on: https://go-review.googlesource.com/42023
Reviewed-by: Rob Pike <r@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
Robert Griesemer [Thu, 27 Apr 2017 23:55:47 +0000 (16:55 -0700)]
bytes: clarify documentation for UnreadByte/Rune
Fixes #19522.
Change-Id: Ib3cf0336e0bf91580d533704ec1a9d45eb0bf62d
Reviewed-on: https://go-review.googlesource.com/42020
Reviewed-by: Rob Pike <r@golang.org>
Josh Bleecher Snyder [Fri, 28 Apr 2017 14:23:26 +0000 (07:23 -0700)]
cmd/compile: prevent infinite recursion printing types in Fatalf
Updates #20162
Change-Id: Ie289bae0d0be8430e492ac73fd6e6bf36991d4a1
Reviewed-on: https://go-review.googlesource.com/42130
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Dmitri Shuralyov [Wed, 26 Apr 2017 23:07:15 +0000 (19:07 -0400)]
cmd/go/internal/get: allow go get on github.com/ import paths with Unicode letters
More specifically, allow Unicode letters in the directories of GitHub
repositories, which can occur and don't have a valid reason to be
disallowed by go get.
Do so by using a predefined character class, the Unicode character
property class \p{L} that describes the Unicode characters that are
letters:
http://www.regular-expressions.info/unicode.html#category
Since it's not possible to create GitHub usernames or repositories
containing Unicode letters at this time, those parts of the import path
are still restricted to ASCII letters only.
Fix name of tested func in t.Errorf messages.
Fixes #18660.
Change-Id: Ia0ef4742bfd8317d989ef1eb1d7065e382852fe2
Reviewed-on: https://go-review.googlesource.com/41822
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Daniel Martí <mvdan@mvdan.cc>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Bryan C. Mills [Thu, 16 Feb 2017 22:42:32 +0000 (17:42 -0500)]
encoding/xml: replace tinfoMap RWMutex with sync.Map
This simplifies the code a bit and provides a modest speedup for
Marshal with many CPUs.
updates #17973
updates #18177
name old time/op new time/op delta
Marshal 15.8µs ± 1% 15.9µs ± 1% +0.67% (p=0.021 n=8+7)
Marshal-6 5.76µs ±11% 5.17µs ± 2% -10.36% (p=0.002 n=8+8)
Marshal-48 9.88µs ± 5% 7.31µs ± 6% -26.04% (p=0.000 n=8+8)
Unmarshal 44.7µs ± 3% 45.1µs ± 5% ~ (p=0.645 n=8+8)
Unmarshal-6 12.1µs ± 7% 11.8µs ± 8% ~ (p=0.442 n=8+8)
Unmarshal-48 18.7µs ± 3% 18.2µs ± 4% ~ (p=0.054 n=7+8)
name old alloc/op new alloc/op delta
Marshal 5.78kB ± 0% 5.78kB ± 0% ~ (all equal)
Marshal-6 5.78kB ± 0% 5.78kB ± 0% ~ (all equal)
Marshal-48 5.78kB ± 0% 5.78kB ± 0% ~ (all equal)
Unmarshal 8.58kB ± 0% 8.58kB ± 0% ~ (all equal)
Unmarshal-6 8.58kB ± 0% 8.58kB ± 0% ~ (all equal)
Unmarshal-48 8.58kB ± 0% 8.58kB ± 0% ~ (p=1.000 n=8+8)
name old allocs/op new allocs/op delta
Marshal 23.0 ± 0% 23.0 ± 0% ~ (all equal)
Marshal-6 23.0 ± 0% 23.0 ± 0% ~ (all equal)
Marshal-48 23.0 ± 0% 23.0 ± 0% ~ (all equal)
Unmarshal 189 ± 0% 189 ± 0% ~ (all equal)
Unmarshal-6 189 ± 0% 189 ± 0% ~ (all equal)
Unmarshal-48 189 ± 0% 189 ± 0% ~ (all equal)
https://perf.golang.org/search?q=upload:
20170427 .5
Change-Id: I4ee95a99540d3e4e47e056fff18357efd2cd340a
Reviewed-on: https://go-review.googlesource.com/41991
Run-TryBot: Bryan Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Alberto Donizetti [Fri, 21 Apr 2017 12:32:58 +0000 (14:32 +0200)]
cmd/go: reject buildmode=pie when -race is enabled
Fixes #20038
Change-Id: Id692790ea406892bbe29090d461356bac28b6150
Reviewed-on: https://go-review.googlesource.com/41333
Reviewed-by: Daniel Martí <mvdan@mvdan.cc>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Kevin Burke [Mon, 24 Apr 2017 05:19:35 +0000 (22:19 -0700)]
regexp: speed up QuoteMeta with a lookup table
This is the same technique used in CL 24466. By adding a little bit of
size to the binary, we can remove a function call and gain a lot of
performance.
A raw array ([128]bool) would be faster, but is also be 128 bytes
instead of 16.
Running tip on a Mac:
name old time/op new time/op delta
QuoteMetaAll-4 192ns ±12% 120ns ±11% -37.27% (p=0.000 n=10+10)
QuoteMetaNone-4 186ns ± 6% 64ns ± 6% -65.52% (p=0.000 n=10+10)
name old speed new speed delta
QuoteMetaAll-4 73.2MB/s ±11% 116.6MB/s ±10% +59.21% (p=0.000 n=10+10)
QuoteMetaNone-4 139MB/s ± 6% 405MB/s ± 6% +190.74% (p=0.000 n=10+10)
Change-Id: I68ce9fe2ef1c28e2274157789b35b0dd6ae3efb5
Reviewed-on: https://go-review.googlesource.com/41495
Run-TryBot: Kevin Burke <kev@inburke.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Nigel Tao [Fri, 28 Apr 2017 01:07:16 +0000 (11:07 +1000)]
compress/lzw: fix hi code overflow.
Change-Id: I2d3c3c715d857305944cd96c45554a16cb7967e9
Reviewed-on: https://go-review.googlesource.com/42032
Reviewed-by: David Symonds <dsymonds@golang.org>
Tommy Schaefer [Fri, 28 Apr 2017 04:53:58 +0000 (23:53 -0500)]
syscall: fix typo in documentation for StringToUTF16Ptr
Fixes #20133
Change-Id: Ic1a6eb35de1f9ddac9527335eb49bf0b52963b6a
Reviewed-on: https://go-review.googlesource.com/41992
Reviewed-by: Rob Pike <r@golang.org>
Josh Bleecher Snyder [Thu, 27 Apr 2017 23:37:25 +0000 (16:37 -0700)]
cmd/compile: add sizeCalculationDisabled flag
Use it to ensure that dowidth is not called
from the backend on a type whose size
has not yet been calculated.
This is an alternative to CL 42016.
Change-Id: I8c7b4410ee4c2a68573102f6b9b635f4fdcf392e
Reviewed-on: https://go-review.googlesource.com/42018
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Josh Bleecher Snyder [Fri, 28 Apr 2017 00:19:49 +0000 (00:19 +0000)]
Revert "cmd/compile: add Type.MustSize and Type.MustAlignment"
This reverts commit
94d540a4b6bf68ec472bf4469037955e3133fcf7 .
Reason for revert: prefer something along the lines of CL 42018.
Change-Id: I876fe32e98f37d8d725fe55e0fd0ea429c0198e0
Reviewed-on: https://go-review.googlesource.com/42022
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Mikio Hara [Thu, 27 Apr 2017 09:58:37 +0000 (18:58 +0900)]
net: simplify probeWindowsIPStack
Change-Id: Ia45f05c63611ade4fe605b389c404953a7afbd1d
Reviewed-on: https://go-review.googlesource.com/41837
Run-TryBot: Mikio Hara <mikioh.mikioh@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Mikio Hara [Thu, 27 Apr 2017 10:00:09 +0000 (19:00 +0900)]
net: make zone helpers into methods of ipv6ZoneCache
Change-Id: Id93e78f0c8bef125f124a0a919053208e24a63cd
Reviewed-on: https://go-review.googlesource.com/41836
Run-TryBot: Mikio Hara <mikioh.mikioh@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Mikio Hara [Thu, 27 Apr 2017 09:57:10 +0000 (18:57 +0900)]
syscall: stylistic cleanup and typo fixes in syscall_dragonfly.go
Now it's not very different from syscall_dragonfly.go in
golang.org/x/sys/unix repository.
Change-Id: I8dfd22e1ebce9dc2cc71ab9ab7f0c92d93b2b762
Reviewed-on: https://go-review.googlesource.com/41835
Run-TryBot: Mikio Hara <mikioh.mikioh@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Josh Bleecher Snyder [Thu, 27 Apr 2017 13:00:18 +0000 (06:00 -0700)]
cmd/compile: minor writebarrier cleanup
This CL mainly moves some work to the switch on w.Op,
to make a follow-up change simpler and clearer.
Updates #19838
Change-Id: I86f3181c380dd60960afcc24224f655276b8956c
Reviewed-on: https://go-review.googlesource.com/42010
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Josh Bleecher Snyder [Thu, 27 Apr 2017 22:17:57 +0000 (15:17 -0700)]
cmd/compile: move Used from gc.Node to gc.Name
Node.Used was written to from the backend
concurrently with reads of Node.Class
for the same ONAME Nodes.
I do not know why it was not failing consistently
under the race detector, but it is a race.
This is likely also a problem with Node.HasVal and Node.HasOpt.
They will be handled in a separate CL.
Fix Used by moving it to gc.Name and making it a separate bool.
There was one non-Name use of Used, marking OLABELs as used.
That is no longer needed, now that goto and label checking
happens early in the front end.
Leave the getters and setters in place,
to ease changing the representation in the future
(or changing to an interface!).
Updates #20144
Change-Id: I9bec7c6d33dcb129a4cfa9d338462ea33087f9f7
Reviewed-on: https://go-review.googlesource.com/42015
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Josh Bleecher Snyder [Thu, 27 Apr 2017 22:30:31 +0000 (15:30 -0700)]
cmd/compile: add Type.MustSize and Type.MustAlignment
Type.Size and Type.Alignment are for the front end:
They calculate size and alignment if needed.
Type.MustSize and Type.MustAlignment are for the back end:
They call Fatal if size and alignment are not already calculated.
Most uses are of MustSize and MustAlignment,
but that's because the back end is newer,
and this API was added to support it.
This CL was mostly generated with sed and selective reversion.
The only mildly interesting bit is the change of the ssa.Type interface
and the supporting ssa dummy types.
Follow-up to review feedback on CL 41970.
Passes toolstash-check.
Change-Id: I0d9b9505e57453dae8fb6a236a07a7a02abd459e
Reviewed-on: https://go-review.googlesource.com/42016
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Josh Bleecher Snyder [Thu, 27 Apr 2017 16:27:52 +0000 (09:27 -0700)]
cmd/compile: dowidth more in the front end
dowidth is fundamentally unsafe to call from the back end;
it will cause data races.
Replace all calls to dowidth in the backend with
assertions that the width has been calculated.
Then fix all the cases in which that was not so,
including the cases from #20145.
Fixes #20145.
Change-Id: Idba3d19d75638851a30ec2ebcdb703c19da3e92b
Reviewed-on: https://go-review.googlesource.com/41970
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Michael Hudson-Doyle [Wed, 19 Apr 2017 03:15:35 +0000 (15:15 +1200)]
cmd/internal/objabi, cmd/link: move linker-only symkind values into linker
Many (most!) of the values of objapi.SymKind are used only in the linker, so
this creates a separate cmd/link/internal/ld.SymKind type, removes most values
from SymKind and maps one to the other when reading object files in the linker.
Two of the remaining objapi.SymKind values are only checked for, never set and
so will never be actually found but I wanted to keep this to the most
mechanical change possible.
Change-Id: I4bbc5aed6713cab3e8de732e6e288eb77be0474c
Reviewed-on: https://go-review.googlesource.com/40985
Run-TryBot: Michael Hudson-Doyle <michael.hudson@canonical.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Hana Kim [Wed, 26 Apr 2017 21:58:31 +0000 (17:58 -0400)]
dwarf: add marker for embedded fields in dwarf
Currently, the following two codes generate the identical dwarf info
for type Foo.
prog 1)
type Foo struct {
Bar
}
prog 2)
type Foo struct {
Bar Bar
}
This change adds a go-specific attribute DW_AT_go_embedded_field
to annotate each member entry. Its absence or false value indicates
the corresponding member is not an embedded field.
Update #20037
Change-Id: Ibcbd2714f3e4d97c7b523d7398f29ab2301cc897
Reviewed-on: https://go-review.googlesource.com/41873
Reviewed-by: David Chase <drchase@google.com>
Josh Bleecher Snyder [Thu, 27 Apr 2017 14:37:40 +0000 (07:37 -0700)]
cmd/compile: randomize compilation order when race-enabled
There's been one failure on the race builder so far,
before we started sorting functions by length.
The race detector can only detect actual races,
and ordering functions by length might reduce the odds
of catching some kinds of races. Give it more to chew on.
Updates #20144
Change-Id: I0206ac182cb98b70a729dea9703ecb0fef54d2d0
Reviewed-on: https://go-review.googlesource.com/41973
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Josh Bleecher Snyder [Thu, 27 Apr 2017 13:41:50 +0000 (06:41 -0700)]
cmd/compile: move nodarg to walk.go
Its sole use is in walk.go. 100% code movement.
gsubr.go increasingly contains backend-y things.
With a few more relocations, it could probably be
fruitfully renamed progs.go.
Change-Id: I61ec5c2bc1f8cfdda64c6d6f580952c154ff60e0
Reviewed-on: https://go-review.googlesource.com/41972
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Josh Bleecher Snyder [Thu, 27 Apr 2017 13:29:07 +0000 (06:29 -0700)]
cmd/compile: move addrescapes and moveToHeap to esc.go
They were used only in esc.go. 100% code movement.
Also, remove the rather outdated comment at the top of gen.go.
It's not really clear what gen.go is for any more.
Change-Id: Iaedfe7015ef6f5c11c49f3e6721b15d779a00faa
Reviewed-on: https://go-review.googlesource.com/41971
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Keith Randall [Mon, 24 Apr 2017 20:48:35 +0000 (13:48 -0700)]
cmd/internal/obj: ARM, use immediates instead of constant pool entries
When a constant doesn't fit in a single instruction, use two
paired instructions instead of the constant pool. For example
ADD $0xaa00bb, R0, R1
Used to rewrite to:
MOV ?(IP), R11
ADD R11, R0, R1
Instead, do:
ADD $0xaa0000, R0, R1
ADD $0xbb, R1, R1
Same number of instructions.
Good:
4 less bytes (no constant pool entry)
One less load.
Bad:
Critical path is one instruction longer.
It's probably worth it to avoid the loads, they are expensive.
Dave Cheney got us some performance numbers: https://perf.golang.org/search?q=upload:
20170426 .1
TL;DR mean 1.37% improvement.
Change-Id: Ib206836161fdc94a3962db6f9caa635c87d57cf1
Reviewed-on: https://go-review.googlesource.com/41612
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Bryan C. Mills [Thu, 16 Feb 2017 22:37:30 +0000 (17:37 -0500)]
encoding/gob: replace RWMutex usage with sync.Map
This provides a significant speedup for encoding and decoding when
using many CPU cores.
name old time/op new time/op delta
EndToEndPipe 5.26µs ± 2% 5.38µs ± 7% ~ (p=0.121 n=8+7)
EndToEndPipe-6 1.86µs ± 5% 1.80µs ±11% ~ (p=0.442 n=8+8)
EndToEndPipe-48 1.39µs ± 2% 1.41µs ± 4% ~ (p=0.645 n=8+8)
EndToEndByteBuffer 1.54µs ± 5% 1.57µs ± 5% ~ (p=0.130 n=8+8)
EndToEndByteBuffer-6 620ns ± 6% 310ns ± 8% -50.04% (p=0.000 n=8+8)
EndToEndByteBuffer-48 506ns ± 4% 110ns ± 3% -78.22% (p=0.000 n=8+8)
EndToEndSliceByteBuffer 149µs ± 3% 153µs ± 5% +2.80% (p=0.021 n=8+8)
EndToEndSliceByteBuffer-6 103µs ±17% 31µs ±12% -70.06% (p=0.000 n=8+8)
EndToEndSliceByteBuffer-48 93.2µs ± 2% 18.0µs ± 5% -80.66% (p=0.000 n=7+8)
EncodeComplex128Slice 20.6µs ± 5% 20.9µs ± 8% ~ (p=0.959 n=8+8)
EncodeComplex128Slice-6 4.10µs ±10% 3.75µs ± 8% -8.58% (p=0.004 n=8+7)
EncodeComplex128Slice-48 1.14µs ± 2% 0.81µs ± 2% -28.98% (p=0.000 n=8+8)
EncodeFloat64Slice 10.2µs ± 7% 10.1µs ± 6% ~ (p=0.694 n=7+8)
EncodeFloat64Slice-6 2.01µs ± 6% 1.80µs ±11% -10.30% (p=0.004 n=8+8)
EncodeFloat64Slice-48 701ns ± 3% 408ns ± 2% -41.72% (p=0.000 n=8+8)
EncodeInt32Slice 11.8µs ± 7% 11.7µs ± 6% ~ (p=0.463 n=8+7)
EncodeInt32Slice-6 2.32µs ± 4% 2.06µs ± 5% -10.89% (p=0.000 n=8+8)
EncodeInt32Slice-48 731ns ± 2% 445ns ± 2% -39.10% (p=0.000 n=7+8)
EncodeStringSlice 9.13µs ± 9% 9.18µs ± 8% ~ (p=0.798 n=8+8)
EncodeStringSlice-6 1.91µs ± 5% 1.70µs ± 5% -11.07% (p=0.000 n=8+8)
EncodeStringSlice-48 679ns ± 3% 397ns ± 3% -41.50% (p=0.000 n=8+8)
EncodeInterfaceSlice 449µs ±11% 461µs ± 9% ~ (p=0.328 n=8+8)
EncodeInterfaceSlice-6 503µs ± 7% 88µs ± 7% -82.51% (p=0.000 n=7+8)
EncodeInterfaceSlice-48 335µs ± 8% 22µs ± 1% -93.55% (p=0.000 n=8+7)
DecodeComplex128Slice 67.2µs ± 4% 67.0µs ± 6% ~ (p=0.721 n=8+8)
DecodeComplex128Slice-6 22.0µs ± 8% 18.9µs ± 5% -14.44% (p=0.000 n=8+8)
DecodeComplex128Slice-48 46.8µs ± 3% 34.9µs ± 3% -25.48% (p=0.000 n=8+8)
DecodeFloat64Slice 39.4µs ± 4% 40.3µs ± 3% ~ (p=0.105 n=8+8)
DecodeFloat64Slice-6 16.1µs ± 2% 11.2µs ± 7% -30.64% (p=0.001 n=6+7)
DecodeFloat64Slice-48 38.1µs ± 3% 24.0µs ± 7% -37.10% (p=0.000 n=8+8)
DecodeInt32Slice 39.1µs ± 4% 40.1µs ± 5% ~ (p=0.083 n=8+8)
DecodeInt32Slice-6 16.3µs ±21% 10.6µs ± 1% -35.17% (p=0.000 n=8+7)
DecodeInt32Slice-48 36.5µs ± 6% 21.9µs ± 9% -39.89% (p=0.000 n=8+8)
DecodeStringSlice 82.9µs ± 6% 85.5µs ± 5% ~ (p=0.121 n=8+7)
DecodeStringSlice-6 32.4µs ±11% 26.8µs ±16% -17.37% (p=0.000 n=8+8)
DecodeStringSlice-48 76.0µs ± 2% 57.0µs ± 5% -25.02% (p=0.000 n=8+8)
DecodeInterfaceSlice 718µs ± 4% 752µs ± 5% +4.83% (p=0.038 n=8+8)
DecodeInterfaceSlice-6 500µs ± 6% 165µs ± 7% -66.95% (p=0.000 n=7+8)
DecodeInterfaceSlice-48 470µs ± 5% 120µs ± 6% -74.55% (p=0.000 n=8+7)
DecodeMap 3.29ms ± 5% 3.34ms ± 5% ~ (p=0.279 n=8+8)
DecodeMap-6 7.73ms ± 8% 7.53ms ±18% ~ (p=0.779 n=7+8)
DecodeMap-48 7.46ms ± 6% 7.71ms ± 3% ~ (p=0.161 n=8+8)
https://perf.golang.org/search?q=upload:
20170426 .4
Change-Id: I335874028ef8d7c991051004f8caadd16c92d5cc
Reviewed-on: https://go-review.googlesource.com/41872
Run-TryBot: Bryan Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Bryan C. Mills [Thu, 16 Feb 2017 23:11:07 +0000 (18:11 -0500)]
reflect: use sync.Map instead of RWMutex for type caches
This provides a significant speedup when using reflection-heavy code
on many CPU cores, such as when marshaling or unmarshaling protocol
buffers.
updates #17973
updates #18177
name old time/op new time/op delta
Call 239ns ±10% 245ns ± 7% ~ (p=0.562 n=10+9)
Call-6 201ns ±38% 48ns ±29% -76.39% (p=0.000 n=10+9)
Call-48 133ns ± 8% 12ns ± 2% -90.92% (p=0.000 n=10+8)
CallArgCopy/size=128 169ns ±12% 197ns ± 2% +16.35% (p=0.000 n=10+7)
CallArgCopy/size=128-6 142ns ± 9% 34ns ± 7% -76.10% (p=0.000 n=10+9)
CallArgCopy/size=128-48 125ns ± 3% 9ns ± 7% -93.01% (p=0.000 n=8+8)
CallArgCopy/size=256 177ns ± 8% 197ns ± 5% +11.24% (p=0.000 n=10+9)
CallArgCopy/size=256-6 148ns ±11% 35ns ± 6% -76.23% (p=0.000 n=10+9)
CallArgCopy/size=256-48 127ns ± 4% 9ns ± 9% -92.66% (p=0.000 n=10+9)
CallArgCopy/size=1024 196ns ± 6% 228ns ± 7% +16.09% (p=0.000 n=10+9)
CallArgCopy/size=1024-6 143ns ± 6% 42ns ± 5% -70.39% (p=0.000 n=8+8)
CallArgCopy/size=1024-48 130ns ± 7% 10ns ± 1% -91.99% (p=0.000 n=10+8)
CallArgCopy/size=4096 330ns ± 9% 351ns ± 5% +6.20% (p=0.004 n=10+9)
CallArgCopy/size=4096-6 173ns ±14% 62ns ± 6% -63.83% (p=0.000 n=10+8)
CallArgCopy/size=4096-48 141ns ± 6% 15ns ± 6% -89.59% (p=0.000 n=10+8)
CallArgCopy/size=65536 7.71µs ±10% 7.74µs ±10% ~ (p=0.859 n=10+9)
CallArgCopy/size=65536-6 1.33µs ± 4% 1.34µs ± 6% ~ (p=0.720 n=10+9)
CallArgCopy/size=65536-48 347ns ± 2% 344ns ± 2% ~ (p=0.202 n=10+9)
PtrTo 30.2ns ±10% 41.3ns ±11% +36.97% (p=0.000 n=10+9)
PtrTo-6 126ns ± 6% 7ns ±10% -94.47% (p=0.000 n=9+9)
PtrTo-48 86.9ns ± 9% 1.7ns ± 9% -98.08% (p=0.000 n=10+9)
FieldByName1 86.6ns ± 5% 87.3ns ± 7% ~ (p=0.737 n=10+9)
FieldByName1-6 19.8ns ±10% 18.7ns ±10% ~ (p=0.073 n=9+9)
FieldByName1-48 7.54ns ± 4% 7.74ns ± 5% +2.55% (p=0.023 n=9+9)
FieldByName2 1.63µs ± 8% 1.70µs ± 4% +4.13% (p=0.020 n=9+9)
FieldByName2-6 481ns ± 6% 490ns ±10% ~ (p=0.474 n=9+9)
FieldByName2-48 723ns ± 3% 736ns ± 2% +1.76% (p=0.045 n=8+8)
FieldByName3 10.5µs ± 7% 10.8µs ± 7% ~ (p=0.234 n=8+8)
FieldByName3-6 2.78µs ± 3% 2.94µs ±10% +5.87% (p=0.031 n=9+9)
FieldByName3-48 3.72µs ± 2% 3.91µs ± 5% +4.91% (p=0.003 n=9+9)
InterfaceBig 10.8ns ± 5% 10.7ns ± 5% ~ (p=0.849 n=9+9)
InterfaceBig-6 9.62ns ±81% 1.79ns ± 4% -81.38% (p=0.003 n=9+9)
InterfaceBig-48 0.48ns ±34% 0.50ns ± 7% ~ (p=0.071 n=8+9)
InterfaceSmall 10.7ns ± 5% 10.9ns ± 4% ~ (p=0.243 n=9+9)
InterfaceSmall-6 1.85ns ± 5% 1.79ns ± 1% -2.97% (p=0.006 n=7+8)
InterfaceSmall-48 0.49ns ±20% 0.48ns ± 5% ~ (p=0.740 n=7+9)
New 28.2ns ±20% 26.6ns ± 3% ~ (p=0.617 n=9+9)
New-6 4.69ns ± 4% 4.44ns ± 3% -5.33% (p=0.001 n=9+9)
New-48 1.10ns ± 9% 1.08ns ± 6% ~ (p=0.285 n=9+8)
name old alloc/op new alloc/op delta
Call 0.00B 0.00B ~ (all equal)
Call-6 0.00B 0.00B ~ (all equal)
Call-48 0.00B 0.00B ~ (all equal)
name old allocs/op new allocs/op delta
Call 0.00 0.00 ~ (all equal)
Call-6 0.00 0.00 ~ (all equal)
Call-48 0.00 0.00 ~ (all equal)
name old speed new speed delta
CallArgCopy/size=128 757MB/s ±11% 649MB/s ± 1% -14.33% (p=0.000 n=10+7)
CallArgCopy/size=128-6 901MB/s ± 9% 3781MB/s ± 7% +319.69% (p=0.000 n=10+9)
CallArgCopy/size=128-48 1.02GB/s ± 2% 14.63GB/s ± 6% +1337.98% (p=0.000 n=8+8)
CallArgCopy/size=256 1.45GB/s ± 9% 1.30GB/s ± 5% -10.17% (p=0.000 n=10+9)
CallArgCopy/size=256-6 1.73GB/s ±11% 7.28GB/s ± 7% +320.76% (p=0.000 n=10+9)
CallArgCopy/size=256-48 2.00GB/s ± 4% 27.46GB/s ± 9% +1270.85% (p=0.000 n=10+9)
CallArgCopy/size=1024 5.21GB/s ± 6% 4.49GB/s ± 8% -13.74% (p=0.000 n=10+9)
CallArgCopy/size=1024-6 7.18GB/s ± 7% 24.17GB/s ± 5% +236.64% (p=0.000 n=9+8)
CallArgCopy/size=1024-48 7.87GB/s ± 7% 98.43GB/s ± 1% +1150.99% (p=0.000 n=10+8)
CallArgCopy/size=4096 12.3GB/s ± 6% 11.7GB/s ± 5% -5.00% (p=0.008 n=9+9)
CallArgCopy/size=4096-6 23.8GB/s ±16% 65.6GB/s ± 5% +175.02% (p=0.000 n=10+8)
CallArgCopy/size=4096-48 29.0GB/s ± 7% 279.6GB/s ± 6% +862.87% (p=0.000 n=10+8)
CallArgCopy/size=65536 8.52GB/s ±11% 8.49GB/s ± 9% ~ (p=0.842 n=10+9)
CallArgCopy/size=65536-6 49.3GB/s ± 4% 49.0GB/s ± 6% ~ (p=0.720 n=10+9)
CallArgCopy/size=65536-48 189GB/s ± 2% 190GB/s ± 2% ~ (p=0.211 n=10+9)
https://perf.golang.org/search?q=upload:
20170426 .3
Change-Id: Iff68f18ef69defb7f30962e21736ac7685a48a27
Reviewed-on: https://go-review.googlesource.com/41871
Run-TryBot: Bryan Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Elias Naur [Thu, 27 Apr 2017 09:37:24 +0000 (11:37 +0200)]
misc/ios: increase iOS test harness timeout
The "lldb start" phase often times out on the iOS builder. Increase
the timeout and see if that helps.
Change-Id: I92fd67cbfa90659600e713198d6b2c5c78dde20f
Reviewed-on: https://go-review.googlesource.com/41863
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Elias Naur <elias.naur@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Weichao Tang [Tue, 18 Apr 2017 02:57:12 +0000 (10:57 +0800)]
net/http: close resp.Body when error occurred during redirection
Fixes #19976
Change-Id: I48486467066784a9dcc24357ec94a1be85265a6f
Reviewed-on: https://go-review.googlesource.com/40940
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Wei Xiao [Fri, 21 Apr 2017 07:59:07 +0000 (15:59 +0800)]
cmd/internal/obj/arm64: fix encoding of condition
The current code treats condition as special register and write
its raw data directly into instruction.
The fix converts the raw data into correct condition encoding.
Also fix the operand catogery of FCCMP.
Add tests to cover all cases.
Change-Id: Ib194041bd9017dd0edbc241564fe983082ac616b
Reviewed-on: https://go-review.googlesource.com/41511
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Ian Lance Taylor [Thu, 27 Apr 2017 04:22:03 +0000 (21:22 -0700)]
os: use kernel limit on pipe size if possible
Fixes #20134
Change-Id: I92699d118c713179961c037a6bbbcbec4efa63ba
Reviewed-on: https://go-review.googlesource.com/41823
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Nigel Tao [Thu, 27 Apr 2017 01:38:10 +0000 (11:38 +1000)]
image/jpeg: fix extended sequential Huffman table selector (Th).
Previously, the package did not distinguish between baseline and
extended sequential images. Both are non-progressive images, but the Th
range differs between the two, as per Annex B of
https://www.w3.org/Graphics/JPEG/itu-t81.pdf
Extended sequential images are often emitted by the Guetzli encoder.
Fixes #19913
Change-Id: I3d0f9e16d5d374ee1c65e3a8fb87519de61cff94
Reviewed-on: https://go-review.googlesource.com/41831
Reviewed-by: David Symonds <dsymonds@golang.org>