1. 11 Apr, 2016 11 commits
  2. 10 Apr, 2016 14 commits
    • Martin Möhrmann's avatar
      runtime: speed up makeslice by avoiding divisions · ad7448fe
      Martin Möhrmann authored
      Only compute the number of maximum allowed elements per slice once.
      
      name         old time/op  new time/op  delta
      MakeSlice-2  55.5ns ± 1%  45.6ns ± 2%  -17.88%  (p=0.000 n=99+100)
      
      Change-Id: I951feffda5d11910a75e55d7e978d306d14da2c5
      Reviewed-on: https://go-review.googlesource.com/21801
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      ad7448fe
    • Andrew Gerrand's avatar
      cmd/go: remove special case that puts godoc in $GOROOT/bin · 5b3e5766
      Andrew Gerrand authored
      Updates golang/go#15106
      
      Change-Id: I4214b841d63bb7e9c3c5ede2abe21a8a68f06c41
      Reviewed-on: https://go-review.googlesource.com/21701Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      5b3e5766
    • Andrew Gerrand's avatar
      text/template: emit field error over nil pointer error where appropriate · 0fd270ab
      Andrew Gerrand authored
      When evaluating "{{.MissingField}}" on a nil *T, Exec returns
      "can't evaluate field MissingField in type *T" instead of
      "nil pointer evaluating *T.MissingField".
      
      Fixes golang/go#15125
      
      Change-Id: I6e73f61b8a72c694179c1f8cdc808766c90b6f57
      Reviewed-on: https://go-review.googlesource.com/21705Reviewed-by: 's avatarRob Pike <r@golang.org>
      0fd270ab
    • Keith Randall's avatar
      cmd/compile: regalloc enforces 2-address instructions · 0004f34c
      Keith Randall authored
      Instead of being a hint, resultInArg0 is now enforced by regalloc.
      This allows us to delete all the code from amd64/ssa.go which
      deals with converting from a semantically three-address instruction
      into some copies plus a two-address instruction.
      
      Change-Id: Id4f39a80be4b678718bfd42a229f9094ab6ecd7c
      Reviewed-on: https://go-review.googlesource.com/21816Reviewed-by: 's avatarJosh Bleecher Snyder <josharian@gmail.com>
      0004f34c
    • Josh Bleecher Snyder's avatar
      cmd/compile: avoid a spill in append fast path · 6b33b0e9
      Josh Bleecher Snyder authored
      Instead of spilling newlen, recalculate it.
      This removes a spill from the fast path,
      at the cost of a cheap recalculation
      on the (rare) growth path.
      This uses 8 bytes less of stack space.
      It generates two more bytes of code,
      but that is due to suboptimal register allocation;
      see far below.
      
      Runtime append microbenchmarks are all over the map,
      presumably due to incidental code movement.
      
      Sample code:
      
      func s(b []byte) []byte {
      	b = append(b, 1, 2, 3)
      	return b
      }
      
      Before:
      
      "".s t=1 size=160 args=0x30 locals=0x48
      	0x0000 00000 (append.go:8)	TEXT	"".s(SB), $72-48
      	0x0000 00000 (append.go:8)	MOVQ	(TLS), CX
      	0x0009 00009 (append.go:8)	CMPQ	SP, 16(CX)
      	0x000d 00013 (append.go:8)	JLS	149
      	0x0013 00019 (append.go:8)	SUBQ	$72, SP
      	0x0017 00023 (append.go:8)	FUNCDATA	$0, gclocals·6432f8c6a0d23fa7bee6c5d96f21a92a(SB)
      	0x0017 00023 (append.go:8)	FUNCDATA	$1, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB)
      	0x0017 00023 (append.go:9)	MOVQ	"".b+88(FP), CX
      	0x001c 00028 (append.go:9)	LEAQ	3(CX), DX
      	0x0020 00032 (append.go:9)	MOVQ	DX, "".autotmp_0+64(SP)
      	0x0025 00037 (append.go:9)	MOVQ	"".b+96(FP), BX
      	0x002a 00042 (append.go:9)	CMPQ	DX, BX
      	0x002d 00045 (append.go:9)	JGT	$0, 86
      	0x002f 00047 (append.go:8)	MOVQ	"".b+80(FP), AX
      	0x0034 00052 (append.go:9)	MOVB	$1, (AX)(CX*1)
      	0x0038 00056 (append.go:9)	MOVB	$2, 1(AX)(CX*1)
      	0x003d 00061 (append.go:9)	MOVB	$3, 2(AX)(CX*1)
      	0x0042 00066 (append.go:10)	MOVQ	AX, "".~r1+104(FP)
      	0x0047 00071 (append.go:10)	MOVQ	DX, "".~r1+112(FP)
      	0x004c 00076 (append.go:10)	MOVQ	BX, "".~r1+120(FP)
      	0x0051 00081 (append.go:10)	ADDQ	$72, SP
      	0x0055 00085 (append.go:10)	RET
      	0x0056 00086 (append.go:9)	LEAQ	type.[]uint8(SB), AX
      	0x005d 00093 (append.go:9)	MOVQ	AX, (SP)
      	0x0061 00097 (append.go:9)	MOVQ	"".b+80(FP), BP
      	0x0066 00102 (append.go:9)	MOVQ	BP, 8(SP)
      	0x006b 00107 (append.go:9)	MOVQ	CX, 16(SP)
      	0x0070 00112 (append.go:9)	MOVQ	BX, 24(SP)
      	0x0075 00117 (append.go:9)	MOVQ	DX, 32(SP)
      	0x007a 00122 (append.go:9)	PCDATA	$0, $0
      	0x007a 00122 (append.go:9)	CALL	runtime.growslice(SB)
      	0x007f 00127 (append.go:9)	MOVQ	40(SP), AX
      	0x0084 00132 (append.go:9)	MOVQ	56(SP), BX
      	0x0089 00137 (append.go:8)	MOVQ	"".b+88(FP), CX
      	0x008e 00142 (append.go:9)	MOVQ	"".autotmp_0+64(SP), DX
      	0x0093 00147 (append.go:9)	JMP	52
      	0x0095 00149 (append.go:9)	NOP
      	0x0095 00149 (append.go:8)	CALL	runtime.morestack_noctxt(SB)
      	0x009a 00154 (append.go:8)	JMP	0
      
      After:
      
      "".s t=1 size=176 args=0x30 locals=0x40
      	0x0000 00000 (append.go:8)	TEXT	"".s(SB), $64-48
      	0x0000 00000 (append.go:8)	MOVQ	(TLS), CX
      	0x0009 00009 (append.go:8)	CMPQ	SP, 16(CX)
      	0x000d 00013 (append.go:8)	JLS	151
      	0x0013 00019 (append.go:8)	SUBQ	$64, SP
      	0x0017 00023 (append.go:8)	FUNCDATA	$0, gclocals·6432f8c6a0d23fa7bee6c5d96f21a92a(SB)
      	0x0017 00023 (append.go:8)	FUNCDATA	$1, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB)
      	0x0017 00023 (append.go:9)	MOVQ	"".b+80(FP), CX
      	0x001c 00028 (append.go:9)	LEAQ	3(CX), DX
      	0x0020 00032 (append.go:9)	MOVQ	"".b+88(FP), BX
      	0x0025 00037 (append.go:9)	CMPQ	DX, BX
      	0x0028 00040 (append.go:9)	JGT	$0, 81
      	0x002a 00042 (append.go:8)	MOVQ	"".b+72(FP), AX
      	0x002f 00047 (append.go:9)	MOVB	$1, (AX)(CX*1)
      	0x0033 00051 (append.go:9)	MOVB	$2, 1(AX)(CX*1)
      	0x0038 00056 (append.go:9)	MOVB	$3, 2(AX)(CX*1)
      	0x003d 00061 (append.go:10)	MOVQ	AX, "".~r1+96(FP)
      	0x0042 00066 (append.go:10)	MOVQ	DX, "".~r1+104(FP)
      	0x0047 00071 (append.go:10)	MOVQ	BX, "".~r1+112(FP)
      	0x004c 00076 (append.go:10)	ADDQ	$64, SP
      	0x0050 00080 (append.go:10)	RET
      	0x0051 00081 (append.go:9)	LEAQ	type.[]uint8(SB), AX
      	0x0058 00088 (append.go:9)	MOVQ	AX, (SP)
      	0x005c 00092 (append.go:9)	MOVQ	"".b+72(FP), BP
      	0x0061 00097 (append.go:9)	MOVQ	BP, 8(SP)
      	0x0066 00102 (append.go:9)	MOVQ	CX, 16(SP)
      	0x006b 00107 (append.go:9)	MOVQ	BX, 24(SP)
      	0x0070 00112 (append.go:9)	MOVQ	DX, 32(SP)
      	0x0075 00117 (append.go:9)	PCDATA	$0, $0
      	0x0075 00117 (append.go:9)	CALL	runtime.growslice(SB)
      	0x007a 00122 (append.go:9)	MOVQ	40(SP), AX
      	0x007f 00127 (append.go:9)	MOVQ	48(SP), CX
      	0x0084 00132 (append.go:9)	MOVQ	56(SP), BX
      	0x0089 00137 (append.go:9)	ADDQ	$3, CX
      	0x008d 00141 (append.go:9)	MOVQ	CX, DX
      	0x0090 00144 (append.go:8)	MOVQ	"".b+80(FP), CX
      	0x0095 00149 (append.go:9)	JMP	47
      	0x0097 00151 (append.go:9)	NOP
      	0x0097 00151 (append.go:8)	CALL	runtime.morestack_noctxt(SB)
      	0x009c 00156 (append.go:8)	JMP	0
      
      Observe that in the following sequence,
      we should use DX directly instead of using
      CX as a temporary register, which would make
      the new code a strict improvement on the old:
      
      	0x007f 00127 (append.go:9)	MOVQ	48(SP), CX
      	0x0084 00132 (append.go:9)	MOVQ	56(SP), BX
      	0x0089 00137 (append.go:9)	ADDQ	$3, CX
      	0x008d 00141 (append.go:9)	MOVQ	CX, DX
      	0x0090 00144 (append.go:8)	MOVQ	"".b+80(FP), CX
      
      Change-Id: I4ee50b18fa53865901d2d7f86c2cbb54c6fa6924
      Reviewed-on: https://go-review.googlesource.com/21812
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      6b33b0e9
    • Josh Bleecher Snyder's avatar
      runtime: avoid unnecessary map iteration write barrier · 974c201f
      Josh Bleecher Snyder authored
      Update #14921
      
      Change-Id: I5c5816d0193757bf7465b1e09c27ca06897df4bf
      Reviewed-on: https://go-review.googlesource.com/21814
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      974c201f
    • Brad Fitzpatrick's avatar
      html: fix typo in UnescapeString string docs · a44c4256
      Brad Fitzpatrick authored
      Fixes #15221
      
      Change-Id: I9e927a2f604213338b4572f1a32d0247c58bdc60
      Reviewed-on: https://go-review.googlesource.com/21798Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      a44c4256
    • Klaus Post's avatar
      compress/flate: improve short writer error test · a56f5a03
      Klaus Post authored
      This improves the short version of the writer test.
      
      First of all, it has a much quicker setup. Previously that
      could take up towards 0.5 second.
      
      Secondly, it will test all compression levels in short mode as well.
      
      Execution time is 1.7s/0.03s for normal/short mode.
      
      Change-Id: I275a21f712daff6f7125cc6a493415e86439cb19
      Reviewed-on: https://go-review.googlesource.com/21800Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      a56f5a03
    • Klaus Post's avatar
      compress/flate: eliminate most common bounds checks · f20b1809
      Klaus Post authored
      This uses the SSA compiler to eliminate various unneeded bounds
      checks in loops and various lookups.
      
      This fixes the low hanging fruit, without any major code changes.
      
      name                       old time/op    new time/op    delta
      EncodeDigitsHuffman1e4-8     49.9µs ± 1%    48.1µs ± 1%  -3.74%   (p=0.000 n=10+9)
      EncodeDigitsHuffman1e5-8      476µs ± 1%     458µs ± 1%  -3.58%  (p=0.000 n=10+10)
      EncodeDigitsHuffman1e6-8     4.80ms ± 2%    4.56ms ± 1%  -5.07%   (p=0.000 n=10+9)
      EncodeDigitsSpeed1e4-8        305µs ± 3%     290µs ± 2%  -5.03%   (p=0.000 n=10+9)
      EncodeDigitsSpeed1e5-8       3.67ms ± 2%    3.49ms ± 2%  -4.78%   (p=0.000 n=9+10)
      EncodeDigitsSpeed1e6-8       38.3ms ± 2%    35.8ms ± 1%  -6.58%   (p=0.000 n=9+10)
      EncodeDigitsDefault1e4-8      361µs ± 2%     346µs ± 3%  -4.12%   (p=0.000 n=10+9)
      EncodeDigitsDefault1e5-8     5.24ms ± 2%    4.96ms ± 3%  -5.38%  (p=0.000 n=10+10)
      EncodeDigitsDefault1e6-8     56.5ms ± 3%    52.2ms ± 2%  -7.68%  (p=0.000 n=10+10)
      EncodeDigitsCompress1e4-8     362µs ± 2%     343µs ± 1%  -5.20%   (p=0.000 n=10+9)
      EncodeDigitsCompress1e5-8    5.26ms ± 3%    4.98ms ± 2%  -5.48%  (p=0.000 n=10+10)
      EncodeDigitsCompress1e6-8    56.0ms ± 4%    52.1ms ± 1%  -7.01%  (p=0.000 n=10+10)
      EncodeTwainHuffman1e4-8      70.9µs ± 3%    64.7µs ± 1%  -8.68%   (p=0.000 n=10+9)
      EncodeTwainHuffman1e5-8       556µs ± 2%     524µs ± 2%  -5.84%  (p=0.000 n=10+10)
      EncodeTwainHuffman1e6-8      5.54ms ± 3%    5.22ms ± 2%  -5.70%  (p=0.000 n=10+10)
      EncodeTwainSpeed1e4-8         294µs ± 3%     284µs ± 1%  -3.71%  (p=0.000 n=10+10)
      EncodeTwainSpeed1e5-8        2.59ms ± 2%    2.48ms ± 1%  -4.14%   (p=0.000 n=10+9)
      EncodeTwainSpeed1e6-8        25.6ms ± 1%    24.3ms ± 1%  -5.28%   (p=0.000 n=9+10)
      EncodeTwainDefault1e4-8       419µs ± 2%     396µs ± 1%  -5.59%   (p=0.000 n=10+9)
      EncodeTwainDefault1e5-8      6.23ms ± 4%    5.75ms ± 1%  -7.83%   (p=0.000 n=10+9)
      EncodeTwainDefault1e6-8      66.2ms ± 2%    61.4ms ± 1%  -7.22%  (p=0.000 n=10+10)
      EncodeTwainCompress1e4-8      426µs ± 1%     405µs ± 1%  -4.97%   (p=0.000 n=9+10)
      EncodeTwainCompress1e5-8     6.80ms ± 1%    6.32ms ± 1%  -6.97%   (p=0.000 n=9+10)
      EncodeTwainCompress1e6-8     74.6ms ± 3%    68.7ms ± 1%  -7.90%   (p=0.000 n=10+9)
      
      name                       old speed      new speed      delta
      EncodeDigitsHuffman1e4-8    200MB/s ± 1%   208MB/s ± 1%  +3.88%   (p=0.000 n=10+9)
      EncodeDigitsHuffman1e5-8    210MB/s ± 1%   218MB/s ± 1%  +3.71%  (p=0.000 n=10+10)
      EncodeDigitsHuffman1e6-8    208MB/s ± 2%   219MB/s ± 1%  +5.32%   (p=0.000 n=10+9)
      EncodeDigitsSpeed1e4-8     32.8MB/s ± 3%  34.5MB/s ± 2%  +5.29%   (p=0.000 n=10+9)
      EncodeDigitsSpeed1e5-8     27.2MB/s ± 2%  28.6MB/s ± 2%  +5.29%  (p=0.000 n=10+10)
      EncodeDigitsSpeed1e6-8     26.1MB/s ± 2%  27.9MB/s ± 1%  +7.02%   (p=0.000 n=9+10)
      EncodeDigitsDefault1e4-8   27.7MB/s ± 2%  28.9MB/s ± 3%  +4.30%   (p=0.000 n=10+9)
      EncodeDigitsDefault1e5-8   19.1MB/s ± 2%  20.2MB/s ± 3%  +5.69%  (p=0.000 n=10+10)
      EncodeDigitsDefault1e6-8   17.7MB/s ± 3%  19.2MB/s ± 2%  +8.31%  (p=0.000 n=10+10)
      EncodeDigitsCompress1e4-8  27.6MB/s ± 2%  29.1MB/s ± 1%  +5.47%   (p=0.000 n=10+9)
      EncodeDigitsCompress1e5-8  19.0MB/s ± 3%  20.1MB/s ± 2%  +5.78%  (p=0.000 n=10+10)
      EncodeDigitsCompress1e6-8  17.9MB/s ± 4%  19.2MB/s ± 1%  +7.50%  (p=0.000 n=10+10)
      EncodeTwainHuffman1e4-8     141MB/s ± 3%   154MB/s ± 1%  +9.46%   (p=0.000 n=10+9)
      EncodeTwainHuffman1e5-8     180MB/s ± 2%   191MB/s ± 2%  +6.19%  (p=0.000 n=10+10)
      EncodeTwainHuffman1e6-8     181MB/s ± 3%   192MB/s ± 2%  +6.02%  (p=0.000 n=10+10)
      EncodeTwainSpeed1e4-8      34.0MB/s ± 3%  35.3MB/s ± 1%  +3.84%  (p=0.000 n=10+10)
      EncodeTwainSpeed1e5-8      38.7MB/s ± 2%  40.3MB/s ± 1%  +4.30%   (p=0.000 n=10+9)
      EncodeTwainSpeed1e6-8      39.1MB/s ± 1%  41.2MB/s ± 1%  +5.57%   (p=0.000 n=9+10)
      EncodeTwainDefault1e4-8    23.9MB/s ± 2%  25.3MB/s ± 1%  +5.91%   (p=0.000 n=10+9)
      EncodeTwainDefault1e5-8    16.0MB/s ± 4%  17.4MB/s ± 1%  +8.47%   (p=0.000 n=10+9)
      EncodeTwainDefault1e6-8    15.1MB/s ± 2%  16.3MB/s ± 1%  +7.76%  (p=0.000 n=10+10)
      EncodeTwainCompress1e4-8   23.5MB/s ± 1%  24.7MB/s ± 1%  +5.24%   (p=0.000 n=9+10)
      EncodeTwainCompress1e5-8   14.7MB/s ± 1%  15.8MB/s ± 1%  +7.50%   (p=0.000 n=9+10)
      EncodeTwainCompress1e6-8   13.4MB/s ± 3%  14.6MB/s ± 1%  +8.57%   (p=0.000 n=10+9)
      
      Change-Id: I5c7e84c2f9ea4d38a2115995705eebb93387e22f
      Reviewed-on: https://go-review.googlesource.com/21759Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      f20b1809
    • Martin Möhrmann's avatar
      all: replace magic 0x80 with named constant utf8.RuneSelf · 012557b3
      Martin Möhrmann authored
      Change-Id: Id1c2e8e9d60588de866e8b6ca59cc83dd28f848f
      Reviewed-on: https://go-review.googlesource.com/21756Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      012557b3
    • Dmitry Vyukov's avatar
      internal/trace: fix a typo in error message · 527ffebb
      Dmitry Vyukov authored
      Change-Id: Id79eaa6d49dae80c334c7243b0a5bbcdcb9397d3
      Reviewed-on: https://go-review.googlesource.com/21758Reviewed-by: 's avatarMikio Hara <mikioh.mikioh@gmail.com>
      527ffebb
    • Marvin Stenger's avatar
      cmd: remove bio.Bread · de7ee57c
      Marvin Stenger authored
      Replace calls to bio.Bread with calls to io.ReadFull.
      
      Change-Id: I2ee8739d01e04a4da9c20b6ce7d1d5b89914b8ad
      Reviewed-on: https://go-review.googlesource.com/21750Reviewed-by: 's avatarDave Cheney <dave@cheney.net>
      de7ee57c
    • Emmanuel Odeke's avatar
      runtime: make execution error panic values implement the Error interface · e4f1d9cf
      Emmanuel Odeke authored
      Make execution panics implement Error as
      mandated by https://golang.org/ref/spec#Run_time_panics,
      instead of panics with strings.
      
      Fixes #14965
      
      Change-Id: I7827f898b9b9c08af541db922cc24fa0800ff18a
      Reviewed-on: https://go-review.googlesource.com/21214Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      e4f1d9cf
    • Wisdom Omuya's avatar
      cmd/go: fix typo in findInternal documentation · 824d8c10
      Wisdom Omuya authored
      Fixes #15217
      
      Change-Id: Ib8f7af714197fd209e743f61f28a5b07c04a7f5c
      Reviewed-on: https://go-review.googlesource.com/21793Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      824d8c10
  3. 09 Apr, 2016 8 commits
  4. 08 Apr, 2016 7 commits