1. 23 Mar, 2017 9 commits
    • Keith Randall's avatar
      cmd/compile: initialize loop depths · 27bc723b
      Keith Randall authored
      Regalloc uses loop depths - make sure they are initialized!
      
      Test to make sure we aren't pushing spills into loops.
      
      This fixes a generated-code performance bug introduced with
      the better spill placement change:
      https://go-review.googlesource.com/c/34822/
      
      Update #19595
      
      Change-Id: Ib9f0da6fb588503518847d7aab51e569fd3fa61e
      Reviewed-on: https://go-review.googlesource.com/38434Reviewed-by: default avatarDavid Chase <drchase@google.com>
      27bc723b
    • Keith Randall's avatar
      cmd/compile: don't merge load+op if other op arg is still live · 86dc86b4
      Keith Randall authored
      We want to merge a load and op into a single instruction
      
          l = LOAD ptr mem
          y = OP x l
      
      into
      
          y = OPload x ptr mem
      
      However, all of our OPload instructions require that y uses
      the same register as x. If x is needed past this instruction, then
      we must copy x somewhere else, losing the whole benefit of merging
      the instructions in the first place.
      
      Disable this optimization if x is live past the OP.
      
      Also disable this optimization if the OP is in a deeper loop than the load.
      
      Update #19595
      
      Change-Id: I87f596aad7e91c9127bfb4705cbae47106e1e77a
      Reviewed-on: https://go-review.googlesource.com/38337Reviewed-by: default avatarIlya Tocar <ilya.tocar@intel.com>
      86dc86b4
    • Ben Shi's avatar
      cmd/internal/obj/arm: Fix wrong assembly in the arm assembler · d0ff9ece
      Ben Shi authored
      As #19357 reported,
      
      TST has 3 different sub forms
      TST $imme, Rx
      TST Ry << imme, Rx
      TST Ry << Rz, Rx
      
      just like CMP/CMN/TEQ has. But current arm assembler assembles all TST
      instructions wrongly. This patch fixes it and adds more tests.
      
      Fixes #19357
      
      Change-Id: Iafedccfaab2cbb2631e7acf259837a782e2e8e2f
      Reviewed-on: https://go-review.googlesource.com/37662
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      d0ff9ece
    • Brad Fitzpatrick's avatar
      net: mark TestDialerDualStack as flaky · c46226a6
      Brad Fitzpatrick authored
      It was already marked flaky for everything but the dashboard.
      Remove that restriction. It's just flaky overall.
      
      It's doing more harm than good.
      
      Updates #13324
      
      Change-Id: I36feff32a1b8681e77700f74b9c70cb4073268eb
      Reviewed-on: https://go-review.googlesource.com/38459
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarJosh Bleecher Snyder <josharian@gmail.com>
      c46226a6
    • Robert Griesemer's avatar
      cmd/compile: don't crash when reporting some syntax errors · b5e1ae46
      Robert Griesemer authored
      Fixes #19667.
      
      Change-Id: Iaa71e2020af123c1bd3ac25e0b760956688e8bdf
      Reviewed-on: https://go-review.googlesource.com/38458
      Run-TryBot: Robert Griesemer <gri@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      b5e1ae46
    • Dave Cheney's avatar
      cmd/compile/internal/gc: remove unused exporter.nesting field · 2ae79d07
      Dave Cheney authored
      exporter.nesting was added in c7b9bd74 to mitigate #16369 which was
      closed in ee272bbf. Remove the exporter.nesting field as it is now unused.
      
      Change-Id: I07873d1a07d6a08b11994b817a1483ffc2f5e45f
      Reviewed-on: https://go-review.googlesource.com/38490
      Run-TryBot: Dave Cheney <dave@cheney.net>
      Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      2ae79d07
    • Dave Cheney's avatar
      cmd/internal/obj/mips: standardize on sys.MIPS and sys.MIPS64 constants · 6f4a4585
      Dave Cheney authored
      CL 38446 introduced the use of the sys.ArchFamily type into the
      cmd/internal/obj/mips package and redefined the mips.Mips32 and
      mips.Mips64 constants in terms of their sys.ArchFamily counterparts.
      This CL removes these local declarations and consolidates on sys.MIPS
      and sys.MIPS64 respectively.
      
      Change-Id: Id7aab6c7fd0de42ff43dde605df6bd4c85a3d895
      Reviewed-on: https://go-review.googlesource.com/38287Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      6f4a4585
    • Martin Möhrmann's avatar
      regexp: add ASCII fast path for context methods · e74c6cd3
      Martin Möhrmann authored
      The step method implementations check directly if the next rune
      only needs one byte to be decoded and avoid calling utf8.DecodeRune
      for such ASCII characters.
      
      Introduce the same fast path optimization for rune decoding
      for the context methods.
      
      Results for regexp benchmarks that use the context methods:
      
      name                            old time/op  new time/op  delta
      AnchoredLiteralShortNonMatch-4  97.5ns ± 1%  94.8ns ± 2%  -2.80%  (p=0.000 n=45+43)
      AnchoredShortMatch-4             163ns ± 1%   160ns ± 1%  -1.84%  (p=0.000 n=46+47)
      NotOnePassShortA-4               742ns ± 2%   742ns ± 2%    ~     (p=0.440 n=49+50)
      NotOnePassShortB-4               535ns ± 1%   533ns ± 2%  -0.37%  (p=0.005 n=46+48)
      OnePassLongPrefix-4              169ns ± 2%   166ns ± 2%  -2.06%  (p=0.000 n=50+49)
      
      Change-Id: Ib302d9e8c63333f02695369fcf9963974362e335
      Reviewed-on: https://go-review.googlesource.com/38256Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      e74c6cd3
    • haya14busa's avatar
      regexp: reduce allocs in regexp.Match for onepass regex · 8a16d7d4
      haya14busa authored
      There were no allocations in regexp.Match for *non* onepass regex
      because m.matchcap length is reset to zero (ncap=0 for regexp.Match).
      
      But, as for onepass regex, m.matchcap length remains as it is even when
      ncap=0 and it leads needless allocations.
      
      benchmark                                    old ns/op      new ns/op      delta
      BenchmarkMatch_onepass_regex/32-4      6465           4628           -28.41%
      BenchmarkMatch_onepass_regex/1K-4      208324         151558         -27.25%
      BenchmarkMatch_onepass_regex/32K-4     7230259        5834492        -19.30%
      BenchmarkMatch_onepass_regex/1M-4      234379810      166310682      -29.04%
      BenchmarkMatch_onepass_regex/32M-4     7903529363     4981119950     -36.98%
      
      benchmark                                    old MB/s     new MB/s     speedup
      BenchmarkMatch_onepass_regex/32-4      4.95         6.91         1.40x
      BenchmarkMatch_onepass_regex/1K-4      4.92         6.76         1.37x
      BenchmarkMatch_onepass_regex/32K-4     4.53         5.62         1.24x
      BenchmarkMatch_onepass_regex/1M-4      4.47         6.30         1.41x
      BenchmarkMatch_onepass_regex/32M-4     4.25         6.74         1.59x
      
      benchmark                                    old allocs     new allocs     delta
      BenchmarkMatch_onepass_regex/32-4      32             0              -100.00%
      BenchmarkMatch_onepass_regex/1K-4      1024           0              -100.00%
      BenchmarkMatch_onepass_regex/32K-4     32768          0              -100.00%
      BenchmarkMatch_onepass_regex/1M-4      1048576        0              -100.00%
      BenchmarkMatch_onepass_regex/32M-4     104559255      0              -100.00%
      
      benchmark                                    old bytes      new bytes     delta
      BenchmarkMatch_onepass_regex/32-4      512            0             -100.00%
      BenchmarkMatch_onepass_regex/1K-4      16384          0             -100.00%
      BenchmarkMatch_onepass_regex/32K-4     524288         0             -100.00%
      BenchmarkMatch_onepass_regex/1M-4      16777216       0             -100.00%
      BenchmarkMatch_onepass_regex/32M-4     2019458128     0             -100.00%
      
      Fixes #19573
      
      Change-Id: I033982d0003ebb0360bb40b92eb3941c781ec74d
      Reviewed-on: https://go-review.googlesource.com/38270
      Run-TryBot: Michael Matloob <matloob@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      8a16d7d4
  2. 22 Mar, 2017 25 commits
    • Richard Musiol's avatar
      syscall: use CLONE_VFORK and CLONE_VM · 9e6b79a5
      Richard Musiol authored
      This greatly improves the latency of starting a child process when
      the Go process is using a lot of memory. Even though the kernel uses
      copy-on-write, preparation for that can take up to several 100ms under
      certain conditions. All other goroutines are suspended while starting
      a subprocess so this latency directly affects total throughput.
      
      With CLONE_VM the child process shares the same memory with the parent
      process. On its own this would lead to conflicting use of the same
      memory, so CLONE_VFORK is used to suspend the parent process until the
      child releases the memory when switching to to the new program binary
      via the exec syscall. When the parent process continues to run, one
      has to consider the changes to memory that the child process did,
      namely the return address of the syscall function needs to be restored
      from a register.
      
      A simple benchmark has shown a difference in latency of 16ms vs. 0.5ms
      at 10GB memory usage. However, much higher latencies of several 100ms
      have been observed in real world scenarios. For more information see
      comments on #5838.
      
      Fixes #5838
      
      Change-Id: I6377d7bd8dcd00c85ca0c52b6683e70ce2174ba6
      Reviewed-on: https://go-review.googlesource.com/37439Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      9e6b79a5
    • Sarah Adams's avatar
      encoding/xml: unmarshal allow empty, non-string values · 0a0186fb
      Sarah Adams authored
      When unmarshaling, if an element is empty, eg. '<tag></tag>', and
      destination type is int, uint, float or bool, do not attempt to parse
      value (""). Set to its zero value instead.
      
      Fixes #13417
      
      Change-Id: I2d79f6d8f39192bb277b1a9129727d5abbb2dd1f
      Reviewed-on: https://go-review.googlesource.com/38386Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      0a0186fb
    • Kenny Grant's avatar
      net/http: improve speed of default mux · 1295b745
      Kenny Grant authored
      The DefaultServeMux included in net/http uses a map to store routes,
      but iterates all keys for every request to allow longer paths.
      
      This change checks the map for an exact match first.
      
      To check performance was better, BenchmarkServeMux has been added -
      this adds >100 routes and checks the matches.
      
      Exact matches are faster and more predictable on this benchmark
      and on most existing package benchmarks.
      
      https://perf.golang.org/search?q=upload:20170312.1
      
      ServeMux-4  2.02ms ± 2%	0.04ms ± 2%  −98.08%  (p=0.004 n=5+6)
      
      https://perf.golang.org/search?q=upload:20170312.2
      
      ReadRequestChrome-4	184MB/s  ± 8%	186MB/s  ± 1%	~
      ReadRequestCurl-4	45.0MB/s ± 1%	46.2MB/s ± 1%	+2.71%
      Read...Apachebench-4	45.8MB/s ±13%	48.7MB/s ± 1%	~
      ReadRequestSiege-4	63.6MB/s ± 5%	69.2MB/s ± 1%	+8.75%
      ReadRequestWrk-4	30.9MB/s ± 9%	34.4MB/s ± 2%	+11.25%
      
      Change-Id: I8afafcb956f07197419d545a9f1c03ecaa307384
      Reviewed-on: https://go-review.googlesource.com/38057Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      1295b745
    • Robert Griesemer's avatar
      cmd/compile/internal/syntax: replace inlined statement lists with syntax.BlockStmt · b5f81eae
      Robert Griesemer authored
      This simplifies the code and removes a premature optimization.
      It increases the amount of allocated syntax.Node space by ~0.4%
      for parsing all of std lib, which is negligible.
      
      Before the change (best of 5 runs):
      
        $ go test -run StdLib -fast
        parsed 1517022 lines (3394 files) in 793.487886ms (1911840 lines/s)
        allocated 387.086Mb (267B/line, 487.828Mb/s)
      
      After the change (best of 5 runs):
      
        $ go test -run StdLib -fast
        parsed 1516911 lines (3392 files) in 805.028655ms (1884294 lines/s)
        allocated 388.466Mb (268B/line, 482.549Mb/s)
      
      Change-Id: Id19d6210fdc62393862ba3b04913352d95c599be
      Reviewed-on: https://go-review.googlesource.com/38439
      Run-TryBot: Robert Griesemer <gri@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      b5f81eae
    • Robert Griesemer's avatar
      cmd/compile/internal/syntax: add position info for { and } braces · e0329248
      Robert Griesemer authored
      This change adds position information for { and } braces in the
      source. There's a 1.9% increase in memory use for syntax.Nodes,
      which is negligible relative to overall compiler memory consumption.
      
      Parsing the std library (using syntax package only) and memory
      consumption before this change (fastest of 5 runs):
      
        $ go test -run StdLib -fast
        parsed 1516827 lines (3392 files) in 780.612335ms (1943124 lines/s)
        allocated 379.903Mb (486.673Mb/s)
      
      After this change (fastest of 5 runs):
      
        $ go test -run StdLib -fast
        parsed 1517022 lines (3394 files) in 793.487886ms (1911840 lines/s)
        allocated 387.086Mb (267B/line, 487.828Mb/s)
      
      While not an exact apples-to-apples comparison (the syntax package
      has changed and is also parsed), the overall impact is small.
      
      Also: Small improvements to nodes_test.go.
      
      Change-Id: Ib8a7f90bbe79de33d83684e33b1bf8dbc32e644a
      Reviewed-on: https://go-review.googlesource.com/38435Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      e0329248
    • Sam Whited's avatar
      encoding/xml: format test output using subtests · ec512340
      Sam Whited authored
      Change-Id: I2d155c838935cd8427abd142a462ff4c56829715
      Reviewed-on: https://go-review.googlesource.com/37948Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      ec512340
    • Josselin Costanzi's avatar
      bytes: fix typo in comment · 0d3cd51c
      Josselin Costanzi authored
      Change-Id: Ia739337dc9961422982912cc6a669022559fb991
      Reviewed-on: https://go-review.googlesource.com/38365Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      0d3cd51c
    • Josh Bleecher Snyder's avatar
      cmd/compile: eliminate Gins and Naddr · 352e19c9
      Josh Bleecher Snyder authored
      Preparation for eliminating Prog-related globals.
      
      Passes toolstash-check -all.
      
      Updates #15756
      
      Change-Id: Ia199fcb282cc3a84903a6e92a3ce342c5faba79c
      Reviewed-on: https://go-review.googlesource.com/38409
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      352e19c9
    • Carlos Eduardo Seo's avatar
      cmd/compile/internal/ppc64, cmd/compile/internal/ssa: Remove OldArch checks · c644a76e
      Carlos Eduardo Seo authored
      Starting in go1.9, the minimum processor requirement for ppc64 is POWER8.
      Therefore, the checks for OldArch and the code enabled by it are not necessary
      anymore.
      
      Updates #19074
      
      Change-Id: I33d6a78b2462c80d57c5dbcba2e13424630afab4
      Reviewed-on: https://go-review.googlesource.com/38404
      Run-TryBot: Lynn Boger <laboger@linux.vnet.ibm.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      c644a76e
    • Carlos Eduardo Seo's avatar
      runtime/internal/atomic: Remove unnecessary checks for GOARCH_ppc64 · 189053ae
      Carlos Eduardo Seo authored
      Starting in go1.9, the minimum processor requirement for ppc64 is POWER8. This
      means the checks for GOARCH_ppc64 in asm_ppc64x.s can be removed, since we can
      assume LBAR and STBCCC instructions (both from ISA 2.06) will always be
      available.
      
      Updates #19074
      
      Change-Id: Ib4418169cd9fc6f871a5ab126b28ee58a2f349e2
      Reviewed-on: https://go-review.googlesource.com/38406Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      Reviewed-by: default avatarLynn Boger <laboger@linux.vnet.ibm.com>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      189053ae
    • Matthew Dempsky's avatar
      cmd/compile/internal/gc: make SSAGenFPJump a method of SSAGenState · 22ea7fc1
      Matthew Dempsky authored
      Change-Id: Ie22a08c93dfcfd4b336e7b158415448dd55b2c11
      Reviewed-on: https://go-review.googlesource.com/38407
      Run-TryBot: Matthew Dempsky <mdempsky@google.com>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      22ea7fc1
    • Josh Bleecher Snyder's avatar
      cmd/internal/obj: eliminate Link.Asmode · cfb3c8df
      Josh Bleecher Snyder authored
      Asmode is always set to p.Mode,
      which is always set based on the arch family.
      Instead, use the arch family directly.
      
      Passes toolstash-check -all.
      
      Change-Id: Id982472dcc8eeb6dd22cac5ad2f116b54a44caee
      Reviewed-on: https://go-review.googlesource.com/38451
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      cfb3c8df
    • Josh Bleecher Snyder's avatar
      cmd/internal/obj: eliminate Ctxt.Mode · a470e5d4
      Josh Bleecher Snyder authored
      Replace Ctxt.Mode with a method, Ctxt.RegWidth,
      which is calculated directly off the arch info.
      
      I believe that Prog.Mode can also be removed; future CL.
      
      This is a step towards obj.Link immutability.
      
      Passes toolstash-check -all.
      
      Updates #15756
      
      Change-Id: Ifd7f8f6ed0a2fdc032d1dd306fcd695a14aa5bc5
      Reviewed-on: https://go-review.googlesource.com/38446
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      a470e5d4
    • Josh Bleecher Snyder's avatar
      cmd/compile: funnel SSA Prog creation through SSAGenState · 0a94daa3
      Josh Bleecher Snyder authored
      Step one in eliminating Prog-related globals.
      
      Passes toolstash-check -all.
      
      Updates #15756
      
      Change-Id: I3b777fb5a7716f2d9da3067fbd94c28ca894a465
      Reviewed-on: https://go-review.googlesource.com/38450
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      0a94daa3
    • Alan Donovan's avatar
      cmd/vet: -lostcancel: fix crash in ill-typed code · 3b39f523
      Alan Donovan authored
      Fixes golang/go#19656
      
      Change-Id: Ied20d3f25b6e147cc693a1dd1aeb9480adc6687e
      Reviewed-on: https://go-review.googlesource.com/38405Reviewed-by: default avatarJosh Bleecher Snyder <josharian@gmail.com>
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      3b39f523
    • Mikio Hara's avatar
      net/http: fix possible nil pointer dereference in TestOnlyWriteTimeout · b029e943
      Mikio Hara authored
      TestOnlyWriteTimeout assumes wrongly that:
      - the Accept method of trackLastConnListener is called only once
      - the shared variable conn never becomes nil
      and crashes on some circumstances.
      
      Updates #19032.
      
      Change-Id: I61de22618cd90b84a2b6401afdb6e5d9b3336b12
      Reviewed-on: https://go-review.googlesource.com/36735
      Run-TryBot: Mikio Hara <mikioh.mikioh@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      b029e943
    • Josh Bleecher Snyder's avatar
      cmd/compile: pass an explicit position to namedAuto · 0b4e8d00
      Josh Bleecher Snyder authored
      To enable this, inline the call to nod and simplify.
      Eliminates a reference to lineno from the backend.
      
      Passes toolstash-check -all.
      
      Updates #15756
      
      Change-Id: I9c4bd77d10d727aa8f5e6c6bb16b0e05de165631
      Reviewed-on: https://go-review.googlesource.com/38441
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      0b4e8d00
    • Josh Bleecher Snyder's avatar
      cmd/internal/obj: clean up brloop · 2f2cd557
      Josh Bleecher Snyder authored
      Add docs.
      Reduce indentation.
      
      Passes toolstash-check -all.
      
      Change-Id: I968d1af25989886ae9945052e05e211a107dde9c
      Reviewed-on: https://go-review.googlesource.com/38443
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      2f2cd557
    • Aliaksandr Valialkin's avatar
      strconv: optimize decimal ints formatting with smallsString · 4c8023bf
      Aliaksandr Valialkin authored
      Benchmark results for GOARCH=amd64:
      
      name                                     old time/op  new time/op  delta
      FormatInt-4                              2.51µs ± 2%  2.40µs ± 2%   -4.51%  (p=0.000 n=9+10)
      AppendInt-4                              1.67µs ± 2%  1.61µs ± 3%   -3.74%  (p=0.000 n=9+9)
      FormatUint-4                              698ns ± 2%   643ns ± 3%   -7.95%  (p=0.000 n=10+8)
      AppendUint-4                              478ns ± 1%   418ns ± 2%  -12.61%  (p=0.000 n=8+10)
      AppendUintVarlen/1-4                     9.30ns ± 6%  9.15ns ± 1%     ~     (p=0.199 n=9+10)
      AppendUintVarlen/12-4                    9.12ns ± 0%  9.16ns ± 2%     ~     (p=0.307 n=9+9)
      AppendUintVarlen/123-4                   18.6ns ± 2%  18.7ns ± 0%     ~     (p=0.091 n=10+6)
      AppendUintVarlen/1234-4                  19.1ns ± 4%  17.7ns ± 1%   -7.35%  (p=0.000 n=10+9)
      AppendUintVarlen/12345-4                 21.5ns ± 3%  20.7ns ± 3%   -3.78%  (p=0.002 n=9+10)
      AppendUintVarlen/123456-4                23.5ns ± 3%  20.9ns ± 1%  -11.14%  (p=0.000 n=10+9)
      AppendUintVarlen/1234567-4               25.0ns ± 2%  23.6ns ± 7%   -5.48%  (p=0.004 n=9+10)
      AppendUintVarlen/12345678-4              26.8ns ± 2%  23.4ns ± 2%  -12.79%  (p=0.000 n=9+10)
      AppendUintVarlen/123456789-4             29.8ns ± 3%  26.5ns ± 5%  -11.03%  (p=0.000 n=10+10)
      AppendUintVarlen/1234567890-4            31.6ns ± 3%  26.9ns ± 3%  -14.95%  (p=0.000 n=10+9)
      AppendUintVarlen/12345678901-4           33.8ns ± 3%  29.3ns ± 5%  -13.21%  (p=0.000 n=10+10)
      AppendUintVarlen/123456789012-4          35.5ns ± 4%  29.2ns ± 4%  -17.82%  (p=0.000 n=10+10)
      AppendUintVarlen/1234567890123-4         37.6ns ± 4%  31.4ns ± 3%  -16.48%  (p=0.000 n=10+10)
      AppendUintVarlen/12345678901234-4        39.8ns ± 6%  32.0ns ± 7%  -19.60%  (p=0.000 n=10+10)
      AppendUintVarlen/123456789012345-4       40.7ns ± 0%  34.4ns ± 4%  -15.55%  (p=0.000 n=6+10)
      AppendUintVarlen/1234567890123456-4      45.4ns ± 6%  35.1ns ± 4%  -22.66%  (p=0.000 n=10+10)
      AppendUintVarlen/12345678901234567-4     45.1ns ± 1%  36.7ns ± 4%  -18.77%  (p=0.000 n=9+10)
      AppendUintVarlen/123456789012345678-4    46.9ns ± 0%  36.4ns ± 3%  -22.49%  (p=0.000 n=9+10)
      AppendUintVarlen/1234567890123456789-4   50.6ns ± 6%  38.8ns ± 3%  -23.28%  (p=0.000 n=10+10)
      AppendUintVarlen/12345678901234567890-4  51.3ns ± 2%  38.4ns ± 0%  -25.00%  (p=0.000 n=9+8)
      
      Benchmark results for GOARCH=386:
      
      name                                     old time/op  new time/op  delta
      FormatInt-4                              6.21µs ± 0%  6.14µs ± 0%  -1.11%  (p=0.008 n=5+5)
      AppendInt-4                              4.95µs ± 0%  4.85µs ± 0%  -1.99%  (p=0.016 n=5+4)
      FormatUint-4                             1.89µs ± 1%  1.83µs ± 1%  -2.94%  (p=0.008 n=5+5)
      AppendUint-4                             1.59µs ± 0%  1.57µs ± 2%  -1.72%  (p=0.040 n=5+5)
      FormatIntSmall-4                         8.48ns ± 0%  8.48ns ± 0%    ~     (p=0.905 n=5+5)
      AppendIntSmall-4                         12.2ns ± 0%  12.2ns ± 0%    ~     (all equal)
      AppendUintVarlen/1-4                     10.6ns ± 1%  10.7ns ± 0%    ~     (p=0.238 n=5+4)
      AppendUintVarlen/12-4                    10.7ns ± 0%  10.7ns ± 1%    ~     (p=0.333 n=4+5)
      AppendUintVarlen/123-4                   29.9ns ± 1%  30.2ns ± 0%  +1.07%  (p=0.016 n=5+4)
      AppendUintVarlen/1234-4                  32.4ns ± 1%  30.4ns ± 0%  -6.30%  (p=0.008 n=5+5)
      AppendUintVarlen/12345-4                 35.1ns ± 2%  34.9ns ± 0%    ~     (p=0.238 n=5+5)
      AppendUintVarlen/123456-4                36.6ns ± 0%  35.3ns ± 0%  -3.55%  (p=0.029 n=4+4)
      AppendUintVarlen/1234567-4               38.9ns ± 0%  39.6ns ± 0%  +1.80%  (p=0.029 n=4+4)
      AppendUintVarlen/12345678-4              41.3ns ± 0%  40.1ns ± 0%  -2.91%  (p=0.000 n=5+4)
      AppendUintVarlen/123456789-4             44.9ns ± 1%  44.8ns ± 0%    ~     (p=0.667 n=5+5)
      AppendUintVarlen/1234567890-4            65.6ns ± 0%  66.2ns ± 1%  +0.88%  (p=0.016 n=4+5)
      AppendUintVarlen/12345678901-4           77.9ns ± 0%  76.3ns ± 0%  -2.00%  (p=0.000 n=4+5)
      AppendUintVarlen/123456789012-4          80.7ns ± 0%  79.1ns ± 1%  -2.01%  (p=0.008 n=5+5)
      AppendUintVarlen/1234567890123-4         83.6ns ± 0%  80.2ns ± 1%  -4.07%  (p=0.008 n=5+5)
      AppendUintVarlen/12345678901234-4        86.2ns ± 1%  83.3ns ± 0%  -3.39%  (p=0.008 n=5+5)
      AppendUintVarlen/123456789012345-4       88.5ns ± 0%  83.7ns ± 0%  -5.42%  (p=0.008 n=5+5)
      AppendUintVarlen/1234567890123456-4      90.6ns ± 0%  88.3ns ± 0%  -2.54%  (p=0.008 n=5+5)
      AppendUintVarlen/12345678901234567-4     92.7ns ± 0%  89.0ns ± 1%  -4.01%  (p=0.008 n=5+5)
      AppendUintVarlen/123456789012345678-4    95.6ns ± 1%  92.6ns ± 0%  -3.18%  (p=0.016 n=5+4)
      AppendUintVarlen/1234567890123456789-4    118ns ± 0%   114ns ± 0%    ~     (p=0.079 n=4+5)
      AppendUintVarlen/12345678901234567890-4   138ns ± 0%   136ns ± 0%  -1.45%  (p=0.008 n=5+5)
      
      Updates #19445
      
      Change-Id: Iafbe5c074898187c150dc3854e5b9fc19c10be05
      Reviewed-on: https://go-review.googlesource.com/38255
      Run-TryBot: Robert Griesemer <gri@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarRobert Griesemer <gri@golang.org>
      4c8023bf
    • Josh Bleecher Snyder's avatar
      cmd/internal/obj: clean up checkaddr · 33266df8
      Josh Bleecher Snyder authored
      Coalesce identical cases.
      Give it a proper doc comment.
      Fix comment locations.
      Update/delete old comments.
      
      Passes toolstash-check -all.
      
      Change-Id: I88d9cf20e6e04b0c1c6583e92cd96335831f183f
      Reviewed-on: https://go-review.googlesource.com/38442
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarDave Cheney <dave@cheney.net>
      Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      33266df8
    • Josh Bleecher Snyder's avatar
      cmd/internal/obj: eliminate AMODE · 3394633d
      Josh Bleecher Snyder authored
      AMODE appears to have been intended to allow
      a Prog to switch between 16 (!), 32, or 64 bit x86.
      It is unused anywhere in the tree.
      
      Passes toolstash-check -all.
      
      Updates #15756
      
      Change-Id: Ic57b257cfe580f29dad81d97e4193bf3c330c598
      Reviewed-on: https://go-review.googlesource.com/38445
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarDave Cheney <dave@cheney.net>
      Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      3394633d
    • Josh Bleecher Snyder's avatar
      cmd/internal/obj: eliminate unnecessary ctxt.Cursym assignment · 88d4ab82
      Josh Bleecher Snyder authored
      None of the following code uses it.
      
      Passes toolstash-check -all.
      
      Updates #15756
      
      Change-Id: Ieeaaca8ba31e5c345c0c8a758d520b24be88e173
      Reviewed-on: https://go-review.googlesource.com/38444
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarDave Cheney <dave@cheney.net>
      88d4ab82
    • Rob Pike's avatar
      cmd/doc: implement "go doc struct.field" · 2c47c3e2
      Rob Pike authored
      By analogy with the handling of methods on types, show the documentation
      for a single field of a struct.
      
      	% go doc ast.structtype.fields
      	struct StructType {
      	    Fields *FieldList  // list of field declarations
      	}
      	%
      
      Fixes #19169.
      
      Change-Id: I002f992e4aa64bee667e2e4bccc7082486149842
      Reviewed-on: https://go-review.googlesource.com/38438Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      2c47c3e2
    • Jason Travis's avatar
      test/bench/go1: fix typo in parserdata_test.go comment · 19040ac8
      Jason Travis authored
      Change-Id: Iaca02660bdc8262db2b003a94aca661b5cec5576
      Reviewed-on: https://go-review.googlesource.com/38437Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      19040ac8
    • Josh Bleecher Snyder's avatar
      cmd/compile: disable typPtr caching in the backend · f9fb4579
      Josh Bleecher Snyder authored
      The only new Types that the backend introduces
      are pointers to Types generated by the frontend.
      Usually, when we generate a *T,
      we cache the resulting Type in T,
      to avoid recreating it later.
      However, that caching is not concurrency safe.
      Rather than add mutexes, this CL disables that
      caching before starting the backend.
      The backend generates few enough new *Ts that the
      performance impact of this is small, particularly
      if we pre-create some commonly used *Ts.
      
      Updates #15756
      
      name       old alloc/op    new alloc/op    delta
      Template      40.3MB ± 0%     40.4MB ± 0%  +0.18%  (p=0.001 n=10+10)
      Unicode       29.8MB ± 0%     29.8MB ± 0%  +0.11%  (p=0.043 n=10+9)
      GoTypes        114MB ± 0%      115MB ± 0%  +0.33%  (p=0.000 n=9+10)
      SSA            855MB ± 0%      859MB ± 0%  +0.40%  (p=0.000 n=10+10)
      Flate         25.7MB ± 0%     25.8MB ± 0%  +0.35%  (p=0.000 n=10+10)
      GoParser      31.9MB ± 0%     32.1MB ± 0%  +0.58%  (p=0.000 n=10+10)
      Reflect       79.6MB ± 0%     79.9MB ± 0%  +0.31%  (p=0.000 n=10+10)
      Tar           26.9MB ± 0%     26.9MB ± 0%  +0.21%  (p=0.000 n=10+10)
      XML           42.5MB ± 0%     42.7MB ± 0%  +0.52%  (p=0.000 n=10+9)
      
      name       old allocs/op   new allocs/op   delta
      Template        394k ± 1%       393k ± 0%    ~     (p=0.529 n=10+10)
      Unicode         319k ± 1%       319k ± 0%    ~     (p=0.720 n=10+9)
      GoTypes        1.15M ± 0%      1.15M ± 0%  +0.14%  (p=0.035 n=10+10)
      SSA            7.53M ± 0%      7.56M ± 0%  +0.45%  (p=0.000 n=9+10)
      Flate           238k ± 0%       238k ± 1%    ~     (p=0.579 n=10+10)
      GoParser        318k ± 1%       320k ± 1%  +0.64%  (p=0.001 n=10+10)
      Reflect        1.00M ± 0%      1.00M ± 0%    ~     (p=0.393 n=10+10)
      Tar             254k ± 0%       254k ± 1%    ~     (p=0.075 n=10+10)
      XML             395k ± 0%       397k ± 0%  +0.44%  (p=0.001 n=10+9)
      
      Change-Id: I6c031ed4f39108f26969c5712b73aa2fc08cd10a
      Reviewed-on: https://go-review.googlesource.com/38417
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      f9fb4579
  3. 21 Mar, 2017 6 commits
    • Brad Fitzpatrick's avatar
      syscall, os: fix FreeBSD 9 build · 2730c17a
      Brad Fitzpatrick authored
      I broke FreeBSD 9 in https://golang.org/cl/38426 by using Pipe2.
      
      We still want to support FreeBSD 9 for one last release (Go 1.9 will
      be the last), and FreeBSD 9 doesn't have Pipe2.
      
      So this still uses Pipe2, but falls back to Pipe on error.
      
      Updates #18854
      Updates #19072
      
      Change-Id: I1de90fb83606c93fb84b4b86fba31e207a702835
      Reviewed-on: https://go-review.googlesource.com/38430Reviewed-by: default avatarRob Pike <r@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      2730c17a
    • Matthew Dempsky's avatar
      cmd/compile/internal/gc: remove unneeded effects cache fields · ee80afe3
      Matthew Dempsky authored
      Must have been lost when rebasing the SSA liveness CLs.
      
      Change-Id: Iaac33158cc7c92ea44a023c242eb914a7d6979c6
      Reviewed-on: https://go-review.googlesource.com/38427
      Run-TryBot: Matthew Dempsky <mdempsky@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      ee80afe3
    • Josselin Costanzi's avatar
      bytes: add optimized countByte for amd64 · 01cd22c6
      Josselin Costanzi authored
      Use SSE/AVX2 when counting a single byte.
      Inspired from runtime indexbyte implementation.
      
      Benchmark against previous implementation, where
      1 byte in every 8 is the one we are looking for:
      
      * On a machine without AVX2
      name               old time/op   new time/op     delta
      CountSingle/10-4    61.8ns ±10%     15.6ns ±11%    -74.83%  (p=0.000 n=10+10)
      CountSingle/32-4     100ns ± 4%       17ns ±10%    -82.54%  (p=0.000 n=10+9)
      CountSingle/4K-4    9.66µs ± 3%     0.37µs ± 6%    -96.21%  (p=0.000 n=10+10)
      CountSingle/4M-4    11.0ms ± 6%      0.4ms ± 4%    -96.04%  (p=0.000 n=10+10)
      CountSingle/64M-4    194ms ± 8%        8ms ± 2%    -95.64%  (p=0.000 n=10+10)
      
      name               old speed     new speed       delta
      CountSingle/10-4   162MB/s ±10%    645MB/s ±10%   +297.00%  (p=0.000 n=10+10)
      CountSingle/32-4   321MB/s ± 5%   1844MB/s ± 9%   +474.79%  (p=0.000 n=10+9)
      CountSingle/4K-4   424MB/s ± 3%  11169MB/s ± 6%  +2533.10%  (p=0.000 n=10+10)
      CountSingle/4M-4   381MB/s ± 7%   9609MB/s ± 4%  +2421.88%  (p=0.000 n=10+10)
      CountSingle/64M-4  346MB/s ± 7%   7924MB/s ± 2%  +2188.78%  (p=0.000 n=10+10)
      
      * On a machine with AVX2
      name               old time/op   new time/op     delta
      CountSingle/10-8    37.1ns ± 3%      8.2ns ± 1%    -77.80%  (p=0.000 n=10+10)
      CountSingle/32-8    66.1ns ± 3%      9.8ns ± 2%    -85.23%  (p=0.000 n=10+10)
      CountSingle/4K-8    7.36µs ± 3%     0.11µs ± 1%    -98.54%  (p=0.000 n=10+10)
      CountSingle/4M-8    7.46ms ± 2%     0.15ms ± 2%    -97.95%  (p=0.000 n=10+9)
      CountSingle/64M-8    124ms ± 2%        6ms ± 4%    -95.09%  (p=0.000 n=10+10)
      
      name               old speed     new speed       delta
      CountSingle/10-8   269MB/s ± 3%   1213MB/s ± 1%   +350.32%  (p=0.000 n=10+10)
      CountSingle/32-8   484MB/s ± 4%   3277MB/s ± 2%   +576.66%  (p=0.000 n=10+10)
      CountSingle/4K-8   556MB/s ± 3%  37933MB/s ± 1%  +6718.36%  (p=0.000 n=10+10)
      CountSingle/4M-8   562MB/s ± 2%  27444MB/s ± 3%  +4783.43%  (p=0.000 n=10+9)
      CountSingle/64M-8  543MB/s ± 2%  11054MB/s ± 3%  +1935.81%  (p=0.000 n=10+10)
      
      Fixes #19411
      
      Change-Id: Ieaf20b1fabccabe767c55c66e242e86f3617f883
      Reviewed-on: https://go-review.googlesource.com/38258
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      01cd22c6
    • Brad Fitzpatrick's avatar
      syscall, os: use pipe2 syscall on FreeBSD instead of pipe · 0ebaca6b
      Brad Fitzpatrick authored
      The pipe2 syscall exists in all officially supported FreeBSD
      versions: 10, 11 and future 12.
      The pipe syscall no longer exists in 11 and 12. To build and
      run Go on these versions, kernel needs COMPAT_FREEBSD10 option.
      
      Based on Gleb Smirnoff's https://golang.org/cl/38422
      
      Fixes #18854
      
      Change-Id: I8e201ee1b15dca10427c3093b966025d160aaf61
      Reviewed-on: https://go-review.googlesource.com/38426
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      Reviewed-by: default avatarRob Pike <r@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      0ebaca6b
    • Matthew Dempsky's avatar
      cmd/compile: add regress test for issue 19632 · 051cbf3f
      Matthew Dempsky authored
      Updates #19632.
      
      Change-Id: I1411dd997c8c6a789d17d0dcc0bfbd2281447b16
      Reviewed-on: https://go-review.googlesource.com/38401
      Run-TryBot: Matthew Dempsky <mdempsky@google.com>
      Reviewed-by: default avatarJosh Bleecher Snyder <josharian@gmail.com>
      Reviewed-by: default avatarDaniel Martí <mvdan@mvdan.cc>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      051cbf3f
    • Josh Bleecher Snyder's avatar
      cmd/compile: remove function-name-based debuglive tweaks · 10fdf769
      Josh Bleecher Snyder authored
      It's easier to grep output than recompile the compiler anyway.
      
      For concurrent compilation.
      
      Updates #15756
      
      Change-Id: I151cb5dc77056469cd9019d516f86454e931a197
      Reviewed-on: https://go-review.googlesource.com/38424
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      10fdf769