1. 21 Feb, 2018 5 commits
    • Ahmed W's avatar
      A+C: update my name and spelling · 262b524a
      Ahmed W authored
      GitHub-Last-Rev: ff68319f4c46271ddb927d176756962a3a2b4332
      GitHub-Pull-Request: golang/go#23874
      Change-Id: I7242c5cc35f04e23d807f5e91180c4ef510e7d1a
      Reviewed-on: https://go-review.googlesource.com/94840Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      262b524a
    • Austin Clements's avatar
      runtime: ensure sysStat for mheap_.arenas is aligned · c8231558
      Austin Clements authored
      We don't want to account the memory for mheap_.arenas because most of
      it is never touched, so currently we pass the address of a uint64 on
      the heap. However, at least on mips, it's possible for this uint64 to
      be unaligned, which causes the atomic add in mSysStatInc to crash.
      
      Fix this by instead passing a nil stat pointer.
      
      Fixes #23946.
      
      Change-Id: I091587df1b3066c330b6bb4d834e4596c407910f
      Reviewed-on: https://go-review.googlesource.com/95695
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      c8231558
    • Andrew Bonventre's avatar
      github: update Pull Request template · 16c5d30c
      Andrew Bonventre authored
      + Move from Markdown checklist to text. The first PR comment is
        presented as text when creating it.
      + Add the note about Signed-Off-By: not being required.
      
      Change-Id: I0650891dcf11ed7dd367007148730ba2917784fe
      Reviewed-on: https://go-review.googlesource.com/95696Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      16c5d30c
    • Ilya Tocar's avatar
      archive/zip: make benchmarks more representative · 2629703a
      Ilya Tocar authored
      Currently zip benchmarks spend 60% in the rleBuffer code,
      which is used only to test zip archive/zip itself:
          17.48s 37.02% 37.02%     18.12s 38.37%  archive/zip.(*rleBuffer).ReadAt
           9.51s 20.14% 57.16%     10.43s 22.09%  archive/zip.(*rleBuffer).Write
           9.15s 19.38% 76.54%     10.85s 22.98%  compress/flate.(*compressor).deflate
      
      This means that benchmarks currently test performance of test helper.
      Updating ReadAt/Write methods to be more performant makes benchmarks closer to real world.
      
      name                       old time/op    new time/op    delta
      CompressedZipGarbage-8       2.34ms ± 0%    2.34ms ± 1%     ~     (p=0.684 n=10+10)
      Zip64Test-8                  58.1ms ± 2%    10.7ms ± 1%  -81.54%  (p=0.000 n=10+10)
      Zip64TestSizes/4096-8        4.05µs ± 2%    3.65µs ± 5%   -9.96%  (p=0.000 n=9+10)
      Zip64TestSizes/1048576-8      238µs ± 0%      43µs ± 0%  -82.06%  (p=0.000 n=10+10)
      Zip64TestSizes/67108864-8    15.3ms ± 1%     2.6ms ± 0%  -83.12%  (p=0.000 n=10+9)
      
      name                       old alloc/op   new alloc/op   delta
      CompressedZipGarbage-8       17.9kB ±14%    16.0kB ±24%  -10.48%  (p=0.026 n=9+10)
      
      name                       old allocs/op  new allocs/op  delta
      CompressedZipGarbage-8         44.0 ± 0%      44.0 ± 0%     ~     (all equal)
      
      Change-Id: Idfd920d0e4bed4aec2f5be84dc7e3919d9f1dd2d
      Reviewed-on: https://go-review.googlesource.com/83857Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      2629703a
    • Martin Möhrmann's avatar
      runtime: shorten reflect.unsafe_New call chain · 8999b1d6
      Martin Möhrmann authored
      reflect.unsafe_New is an often called function according
      to profiling in a large production environment.
      
      Since newobject is not inlined currently there
      is call overhead that can be avoided by calling
      mallocgc directly.
      
      name  old time/op  new time/op  delta
      New   32.4ns ± 2%  29.8ns ± 1%  -8.03%  (p=0.000 n=19+20)
      
      Change-Id: I572e4be830ed8e5c0da555dc3a8864c8363112be
      Reviewed-on: https://go-review.googlesource.com/95015Reviewed-by: default avatarAustin Clements <austin@google.com>
      8999b1d6
  2. 20 Feb, 2018 27 commits
    • Ilya Tocar's avatar
      crypto/sha512: speed-up for very small blocks · b43ebce5
      Ilya Tocar authored
      Similar to https://golang.org/cl/54391, but for sha512
      name          old time/op    new time/op    delta
      Hash8Bytes-8     289ns ± 1%     253ns ± 2%  -12.59%  (p=0.000 n=10+10)
      Hash1K-8        1.85µs ± 1%    1.82µs ± 1%   -1.77%  (p=0.000 n=9+10)
      Hash8K-8        12.7µs ± 2%    12.5µs ± 1%     ~     (p=0.075 n=10+10)
      
      name          old speed      new speed      delta
      Hash8Bytes-8  27.6MB/s ± 1%  31.6MB/s ± 2%  +14.43%  (p=0.000 n=10+10)
      Hash1K-8       554MB/s ± 1%   564MB/s ± 1%   +1.81%  (p=0.000 n=9+10)
      Hash8K-8       647MB/s ± 2%   653MB/s ± 1%     ~     (p=0.075 n=10+10)
      
      Change-Id: I437668c96ad55f8dbb62c89c8fc3f433453b5330
      Reviewed-on: https://go-review.googlesource.com/82996
      Run-TryBot: Ilya Tocar <ilya.tocar@intel.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarFilippo Valsorda <hi@filippo.io>
      b43ebce5
    • Ilya Tocar's avatar
      crypto/sha256: speed-up for very small blocks · e476e110
      Ilya Tocar authored
      Similar to https://golang.org/cl/54391, but for sha256
      name          old time/op    new time/op    delta
      Hash8Bytes-8     209ns ± 1%     191ns ± 1%  -8.65%  (p=0.000 n=10+9)
      Hash1K-8        2.49µs ± 1%    2.47µs ± 2%  -0.74%  (p=0.045 n=9+10)
      Hash8K-8        18.4µs ± 1%    18.2µs ± 0%  -0.98%  (p=0.009 n=10+10)
      
      name          old speed      new speed      delta
      Hash8Bytes-8  38.1MB/s ± 1%  41.8MB/s ± 1%  +9.47%  (p=0.000 n=10+9)
      Hash1K-8       412MB/s ± 1%   415MB/s ± 2%    ~     (p=0.051 n=9+10)
      Hash8K-8       445MB/s ± 1%   450MB/s ± 0%  +0.98%  (p=0.009 n=10+10)
      
      Change-Id: I50ca80fc28c279fbb758b7c849f67d8c66391eb6
      Reviewed-on: https://go-review.googlesource.com/82995
      Run-TryBot: Ilya Tocar <ilya.tocar@intel.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarFilippo Valsorda <hi@filippo.io>
      e476e110
    • Heschi Kreinick's avatar
      cmd/compile/internal/ssa: only store relevant slots in pendingEntries · 9c854d65
      Heschi Kreinick authored
      For functions with many local variables, keeping track of every
      LocalSlot for every variable is very expensive. Only track the slots
      that are actually used by a given variable.
      
      Change-Id: Iaafbce030a782b8b8c4a0eb7cf025e59af899ea4
      Reviewed-on: https://go-review.googlesource.com/92400Reviewed-by: default avatarDavid Chase <drchase@google.com>
      9c854d65
    • Heschi Kreinick's avatar
      cmd/compile/internal/ssa: don't store block start states · a306341d
      Heschi Kreinick authored
      Keeping the start state of each block around costs more than just
      recomputing them as necessary, especially because many blocks only have
      one predecessor and don't need any merging at all. Stop storing the
      start state, and reuse predecessors' end states as much as conveniently
      possible.
      
      Change-Id: I549bad9e1a35af76a974e46fe69f74cd4dce873b
      Reviewed-on: https://go-review.googlesource.com/92399Reviewed-by: default avatarDavid Chase <drchase@google.com>
      a306341d
    • Giovanni Bajo's avatar
      cmd/compile: fold LEAQ/ADDQconst into SETx ops · 0cacc4d0
      Giovanni Bajo authored
      This saves an instruction and a register. The new rules
      match ~4900 times during all.bash.
      
      Change-Id: I2f867c5e70262004e31f545f3bb89e939c45b718
      Reviewed-on: https://go-review.googlesource.com/94767Reviewed-by: default avatarKeith Randall <khr@golang.org>
      0cacc4d0
    • Shawn Smith's avatar
      all: fix misspellings · d3beea8c
      Shawn Smith authored
      GitHub-Last-Rev: 468df242d07419c228656985702325aa78952d99
      GitHub-Pull-Request: golang/go#23935
      Change-Id: If751ce3ffa3a4d5e00a3138211383d12cb6b23fc
      Reviewed-on: https://go-review.googlesource.com/95577
      Run-TryBot: Andrew Bonventre <andybons@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarAndrew Bonventre <andybons@golang.org>
      d3beea8c
    • Alberto Donizetti's avatar
      cmd/compile: use | in the most repetitive 386 rules · ec62ee7f
      Alberto Donizetti authored
      For now, limited to the most repetitive rules that are also short and
      simple, so that we can have a substantial conciseness win without
      compromising rules readability.
      
      Ran rulegen, no change in the actual compiler code (as expected).
      
      Change-Id: Ibf157382fb4544c063fbc80406fb9302430728fe
      Reviewed-on: https://go-review.googlesource.com/95595Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      ec62ee7f
    • Alberto Donizetti's avatar
      cmd/compile: use | in the most repetitive boolean rules · f6f1750a
      Alberto Donizetti authored
      For now, limited to a few repetitive boolean rules where the win is
      substantial (4+ variants).
      
      Change-Id: I67bce0d356ca7d71a0f15ff98551fe2caff8abf9
      Reviewed-on: https://go-review.googlesource.com/95535
      Run-TryBot: Alberto Donizetti <alb.donizetti@gmail.com>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      f6f1750a
    • Giovanni Bajo's avatar
      cmd/compile: aggregate rules that fold LEA/ADD into MOVx ops · 0a4c439d
      Giovanni Bajo authored
      No functional changes.
      
      Change-Id: I4a3642d6dedf602a62f5a69cb630d35965ad6b98
      Reviewed-on: https://go-review.googlesource.com/94763Reviewed-by: default avatarKeith Randall <khr@golang.org>
      0a4c439d
    • Giovanni Bajo's avatar
      cmd/compile: aggregate bit-test rules · 20cf2ff8
      Giovanni Bajo authored
      No functional changes.
      
      Change-Id: I4ea186b09a0309dfa1a80ff71208af2223997ffe
      Reviewed-on: https://go-review.googlesource.com/94762Reviewed-by: default avatarKeith Randall <khr@golang.org>
      20cf2ff8
    • Hana Kim's avatar
      cmd/trace: task-oriented view includes child tasks · fdcf4f71
      Hana Kim authored
      R=go1.11
      
      Change-Id: Ibb09e309c745eba811a0b53000c063bc10a055e1
      Reviewed-on: https://go-review.googlesource.com/90218
      Run-TryBot: Hyang-Ah Hana Kim <hyangah@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarPeter Weinberger <pjw@google.com>
      fdcf4f71
    • Hana Kim's avatar
      cmd/trace: extend trace view (/trace) for task-oriented view · d6856036
      Hana Kim authored
      R=go1.11
      
      Change-Id: I2d2db148fed96d0fcb228bee414b050fe4e46e2c
      Reviewed-on: https://go-review.googlesource.com/90217Reviewed-by: default avatarHeschi Kreinick <heschi@google.com>
      d6856036
    • Hana Kim's avatar
      cmd/trace: add analyzeAnnotation and /usertasks view. · d07581f2
      Hana Kim authored
      R=go1.11
      
      Change-Id: I5078ab714c8ac2c652e6ec496e01b063235a014a
      Reviewed-on: https://go-review.googlesource.com/90216
      Run-TryBot: Hyang-Ah Hana Kim <hyangah@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarHeschi Kreinick <heschi@google.com>
      d07581f2
    • Austin Clements's avatar
      cmd/trace: encode selection in trace URL · 21ced9c7
      Austin Clements authored
      This adds the ability to add a #x:y anchor to the trace view URL that
      causes the viewer to initially select from x ms to y ms.
      
      Change-Id: I4a980d8128ecc85dbe41f224e8ae336707a4eaab
      Reviewed-on: https://go-review.googlesource.com/60794
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarHyang-Ah Hana Kim <hyangah@gmail.com>
      21ced9c7
    • Giovanni Bajo's avatar
      cmd/compile: normalize spaces in rewrite rule comments. · 70fd25e4
      Giovanni Bajo authored
      In addition to look nicer to the eye, this allows to reformat
      and indent rules without causing spurious changes to the generated
      file, making it easier to spot functional changes.
      
      After this CL, all CLs that will aggregate rules through
      the new "|" functionality should cause no changes to the
      generated files.
      
      Change-Id: Icec283585ba8d7b91c79d76513c1d83dca4b30aa
      Reviewed-on: https://go-review.googlesource.com/95216
      Run-TryBot: Giovanni Bajo <rasky@develer.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      70fd25e4
    • Ilya Tocar's avatar
      cmd/internal/obj/x86: small refactoring · 4dc25ced
      Ilya Tocar authored
      Replace some ints with bool and use arrays istead of slices where
      possible.
      
      Change-Id: I510bdaec48f9c437685e72c4a3291cffeb7ef5fc
      Reviewed-on: https://go-review.googlesource.com/83859
      Run-TryBot: Ilya Tocar <ilya.tocar@intel.com>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      4dc25ced
    • Ryuma Yoshida's avatar
      all: remove duplicate word "the" · 8fc25b53
      Ryuma Yoshida authored
      Change-Id: Ia5908e94a6bd362099ca3c63f6ffb7e94457131d
      GitHub-Last-Rev: 545a40571a912f433546d8c94a9d63459313515d
      GitHub-Pull-Request: golang/go#23942
      Reviewed-on: https://go-review.googlesource.com/95435Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      8fc25b53
    • Daniel Martí's avatar
      html/template: make more use of stringer · 2e78f2af
      Daniel Martí authored
      The code was maintaining manual versions of it in multiple places -
      replace all of them.
      
      Change-Id: I04c3063877b05ba914de9f5dddb33ffe09f308fe
      Reviewed-on: https://go-review.googlesource.com/95356
      Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      2e78f2af
    • Kunpei Sakai's avatar
      text/template: avoid assiging unnecessary variable · af7fc752
      Kunpei Sakai authored
      This follows up CL95235
      
      Change-Id: I62652654e5bb46d2f8f37af468e1fbcc1835bb8a
      Reviewed-on: https://go-review.googlesource.com/95295Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      af7fc752
    • Daniel Martí's avatar
      regexp/syntax: make Op an fmt.Stringer · d4b2168b
      Daniel Martí authored
      Using stringer.
      
      Fixes #22684.
      
      Change-Id: I62fbde5dcb337cf269686615616bd39a27491ac1
      Reviewed-on: https://go-review.googlesource.com/95355
      Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      d4b2168b
    • Ben Shi's avatar
      cmd/compile: optimize ARM64 code with MNEG · 3c8b8244
      Ben Shi authored
      A pair of MUL/NEG instructions can be combined to a single MNEG on ARM64.
      This CL implements this optimization.
      
      1. A special test case gets big improvement.
      (https://github.com/benshi001/ugo1/blob/master/mneg_test.go)
      name                     old time/op    new time/op    delta
      MNEG-4                      315µs ± 0%     260µs ± 0%  -17.39%  (p=0.000 n=24+25)
      
      2. There is little change in the go1 benchmark, excluding noise.
      name                     old time/op    new time/op    delta
      BinaryTree17-4              42.2s ± 2%     41.9s ± 2%  -0.82%  (p=0.001 n=30+26)
      Fannkuch11-4                32.9s ± 0%     32.9s ± 0%  -0.01%  (p=0.006 n=20+26)
      FmtFprintfEmpty-4           541ns ± 3%     534ns ± 0%  -1.24%  (p=0.003 n=30+26)
      FmtFprintfString-4         1.09µs ± 0%    1.10µs ± 3%    ~     (p=0.142 n=23+30)
      FmtFprintfInt-4            1.14µs ± 0%    1.14µs ± 0%    ~     (p=0.435 n=24+24)
      FmtFprintfIntInt-4         1.76µs ± 0%    1.76µs ± 0%    ~     (p=0.508 n=24+26)
      FmtFprintfPrefixedInt-4    2.20µs ± 3%    2.17µs ± 0%  -1.10%  (p=0.017 n=30+24)
      FmtFprintfFloat-4          3.28µs ± 0%    3.28µs ± 0%    ~     (p=0.579 n=24+24)
      FmtManyArgs-4              7.30µs ± 0%    7.30µs ± 0%    ~     (p=0.662 n=26+27)
      GobDecode-4                94.8ms ± 0%    94.8ms ± 0%  +0.07%  (p=0.010 n=25+23)
      GobEncode-4                80.9ms ± 4%    80.6ms ± 4%    ~     (p=0.901 n=30+30)
      Gzip-4                      4.45s ± 0%     4.49s ± 0%  +0.98%  (p=0.000 n=25+24)
      Gunzip-4                    450ms ± 3%     443ms ± 0%    ~     (p=0.942 n=30+26)
      HTTPClientServer-4          548µs ± 1%     551µs ± 1%  +0.60%  (p=0.000 n=29+30)
      JSONEncode-4                210ms ± 0%     211ms ± 0%  +0.03%  (p=0.000 n=23+25)
      JSONDecode-4                866ms ± 5%     877ms ± 5%    ~     (p=0.187 n=30+30)
      Mandelbrot200-4            51.4ms ± 0%    52.0ms ± 3%  +1.15%  (p=0.001 n=24+30)
      GoParse-4                  42.9ms ± 5%    41.9ms ± 0%  -2.24%  (p=0.000 n=30+26)
      RegexpMatchEasy0_32-4      1.02µs ± 3%    1.01µs ± 0%    ~     (p=0.247 n=30+26)
      RegexpMatchEasy0_1K-4      3.90µs ± 0%    3.90µs ± 0%    ~     (p=0.062 n=24+24)
      RegexpMatchEasy1_32-4       955ns ± 0%     956ns ± 0%  +0.16%  (p=0.000 n=25+23)
      RegexpMatchEasy1_1K-4      6.42µs ± 3%    6.37µs ± 0%  -0.81%  (p=0.012 n=30+24)
      RegexpMatchMedium_32-4     1.77µs ± 3%    1.79µs ± 0%  +1.28%  (p=0.003 n=30+24)
      RegexpMatchMedium_1K-4      561µs ± 0%     569µs ± 3%  +1.50%  (p=0.000 n=25+30)
      RegexpMatchHard_32-4       31.0µs ± 4%    30.8µs ± 0%    ~     (p=1.000 n=26+26)
      RegexpMatchHard_1K-4        945µs ± 3%     945µs ± 3%    ~     (p=0.513 n=30+30)
      Revcomp-4                   7.76s ± 4%     7.68s ± 0%    ~     (p=0.464 n=29+23)
      Template-4                  903ms ± 5%     904ms ± 5%    ~     (p=0.248 n=30+30)
      TimeParse-4                4.80µs ± 0%    4.80µs ± 0%    ~     (p=0.081 n=25+26)
      TimeFormat-4               4.70µs ± 1%    4.70µs ± 1%    ~     (p=0.763 n=24+26)
      [Geo mean]                  709µs          708µs       -0.09%
      
      name                     old speed      new speed      delta
      GobDecode-4              8.10MB/s ± 0%  8.09MB/s ± 0%    ~     (p=0.160 n=25+23)
      GobEncode-4              9.49MB/s ± 4%  9.53MB/s ± 4%    ~     (p=0.360 n=30+30)
      Gzip-4                   4.36MB/s ± 0%  4.32MB/s ± 0%  -0.92%  (p=0.000 n=25+24)
      Gunzip-4                 43.2MB/s ± 3%  43.8MB/s ± 0%    ~     (p=0.980 n=30+26)
      JSONEncode-4             9.22MB/s ± 0%  9.22MB/s ± 0%  -0.04%  (p=0.005 n=23+25)
      JSONDecode-4             2.24MB/s ± 5%  2.21MB/s ± 4%    ~     (p=0.252 n=30+30)
      GoParse-4                1.35MB/s ± 5%  1.38MB/s ± 0%  +2.00%  (p=0.003 n=30+26)
      RegexpMatchEasy0_32-4    31.5MB/s ± 3%  31.8MB/s ± 0%    ~     (p=0.110 n=30+26)
      RegexpMatchEasy0_1K-4     263MB/s ± 0%   263MB/s ± 0%    ~     (p=0.111 n=24+24)
      RegexpMatchEasy1_32-4    33.5MB/s ± 0%  33.4MB/s ± 0%  -0.16%  (p=0.003 n=25+23)
      RegexpMatchEasy1_1K-4     160MB/s ± 3%   161MB/s ± 0%  +0.78%  (p=0.012 n=30+24)
      RegexpMatchMedium_32-4    565kB/s ± 3%   560kB/s ± 0%  -0.83%  (p=0.001 n=30+24)
      RegexpMatchMedium_1K-4   1.83MB/s ± 0%  1.80MB/s ± 3%  -1.56%  (p=0.000 n=25+30)
      RegexpMatchHard_32-4     1.03MB/s ± 3%  1.04MB/s ± 0%  +1.46%  (p=0.000 n=30+26)
      RegexpMatchHard_1K-4     1.08MB/s ± 3%  1.09MB/s ± 3%    ~     (p=0.444 n=30+30)
      Revcomp-4                32.8MB/s ± 4%  33.1MB/s ± 0%    ~     (p=0.858 n=29+23)
      Template-4               2.15MB/s ± 5%  2.15MB/s ± 5%    ~     (p=0.646 n=30+30)
      [Geo mean]               7.79MB/s       7.81MB/s       +0.21%
      
      3. There is no regression in the compilecmp benchmark.
      name        old time/op       new time/op       delta
      Template          2.35s ± 4%        2.33s ± 3%    ~     (p=0.796 n=10+10)
      Unicode           1.35s ± 6%        1.35s ± 5%    ~     (p=1.000 n=9+10)
      GoTypes           8.10s ± 3%        8.14s ± 3%    ~     (p=0.604 n=9+10)
      Compiler          40.5s ± 2%        40.2s ± 2%    ~     (p=0.065 n=10+9)
      SSA                115s ± 2%         115s ± 2%    ~     (p=0.447 n=9+10)
      Flate             1.45s ± 3%        1.45s ± 4%    ~     (p=0.739 n=10+10)
      GoParser          1.85s ± 3%        1.86s ± 2%    ~     (p=0.853 n=10+10)
      Reflect           5.11s ± 2%        5.10s ± 2%    ~     (p=0.971 n=10+10)
      Tar               2.23s ± 5%        2.23s ± 3%    ~     (p=0.796 n=10+10)
      XML               2.67s ± 2%        2.69s ± 2%    ~     (p=0.549 n=9+10)
      [Geo mean]        5.00s             5.00s       +0.02%
      
      name        old user-time/op  new user-time/op  delta
      Template          2.88s ± 2%        2.86s ± 2%    ~     (p=0.529 n=10+10)
      Unicode           1.70s ± 7%        1.69s ± 5%    ~     (p=0.853 n=10+10)
      GoTypes           9.72s ± 1%        9.73s ± 1%    ~     (p=0.684 n=10+10)
      Compiler          49.0s ± 1%        48.9s ± 1%    ~     (p=0.631 n=10+10)
      SSA                144s ± 1%         144s ± 2%    ~     (p=0.684 n=10+10)
      Flate             1.71s ± 4%        1.72s ± 4%    ~     (p=0.853 n=10+10)
      GoParser          2.23s ± 2%        2.23s ± 2%    ~     (p=0.971 n=10+10)
      Reflect           5.98s ± 2%        5.96s ± 2%    ~     (p=0.481 n=10+10)
      Tar               2.68s ± 3%        2.67s ± 2%    ~     (p=0.393 n=10+10)
      XML               3.21s ± 3%        3.22s ± 1%    ~     (p=0.604 n=10+9)
      [Geo mean]        6.05s             6.05s       -0.04%
      
      name        old text-bytes    new text-bytes    delta
      HelloSize         641kB ± 0%        641kB ± 0%    ~     (all equal)
      
      name        old data-bytes    new data-bytes    delta
      HelloSize        9.46kB ± 0%       9.46kB ± 0%    ~     (all equal)
      
      name        old bss-bytes     new bss-bytes     delta
      HelloSize         125kB ± 0%        125kB ± 0%    ~     (all equal)
      
      name        old exe-bytes     new exe-bytes     delta
      HelloSize        1.24MB ± 0%       1.24MB ± 0%    ~     (all equal)
      
      Change-Id: I9ed9128f0114e0f1ebb08ca2d042c90fcb2b1dcd
      Reviewed-on: https://go-review.googlesource.com/95075Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      3c8b8244
    • Richard Miller's avatar
      syscall: ensure Mkdir(path) on Plan 9 fails if path exists · a156fc08
      Richard Miller authored
      On Plan 9, the underlying create() syscall with DMDIR flag, which is
      used to implement Mkdir, will fail silently if the path exists and
      is not a directory.  Work around this by checking for existence
      first and rejecting Mkdir with error EEXIST if the path is found.
      
      Fixes #23918
      
      Change-Id: I439115662307923c9f498d3e7b1f32c6d205e1ad
      Reviewed-on: https://go-review.googlesource.com/94777Reviewed-by: default avatarDavid du Colombier <0intro@gmail.com>
      a156fc08
    • Mikio Hara's avatar
      net: adjust the test for IPv4 loopback address block · 9b7f221a
      Mikio Hara authored
      We live in the era of virtualization and isolation.
      There is no reason to hesitate to use IPv4 loopback address block for
      umbrella-type customer accommodating services.
      
      Fixes #23903
      
      Change-Id: I990dd98e2651a993dac1b105c0bc771f8631cb93
      Reviewed-on: https://go-review.googlesource.com/95336Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      9b7f221a
    • philhofer's avatar
      cmd/compile/internal/ssa: emit csel on arm64 · 2d0172c3
      philhofer authored
      Introduce a new SSA pass to generate CondSelect intstrutions,
      and add CondSelect lowering rules for arm64.
      
      In order to make the CSEL instruction easier to optimize,
      and to simplify the introduction of CSNEG, CSINC, and CSINV
      in the future, modify the CSEL instruction to accept a condition
      code in the aux field.
      
      Notably, this change makes the go1 Gzip benchmark
      more than 10% faster.
      
      Benchmarks on a Cavium ThunderX:
      
      name                      old time/op    new time/op    delta
      BinaryTree17-96              15.9s ± 6%     16.0s ± 4%     ~     (p=0.968 n=10+9)
      Fannkuch11-96                7.17s ± 0%     7.00s ± 0%   -2.43%  (p=0.000 n=8+9)
      FmtFprintfEmpty-96           208ns ± 1%     207ns ± 0%     ~     (p=0.152 n=10+8)
      FmtFprintfString-96          379ns ± 0%     375ns ± 0%   -0.95%  (p=0.000 n=10+9)
      FmtFprintfInt-96             385ns ± 0%     383ns ± 0%   -0.52%  (p=0.000 n=9+10)
      FmtFprintfIntInt-96          591ns ± 0%     586ns ± 0%   -0.85%  (p=0.006 n=7+9)
      FmtFprintfPrefixedInt-96     656ns ± 0%     667ns ± 0%   +1.71%  (p=0.000 n=10+10)
      FmtFprintfFloat-96           967ns ± 0%     984ns ± 0%   +1.78%  (p=0.000 n=10+10)
      FmtManyArgs-96              2.35µs ± 0%    2.25µs ± 0%   -4.63%  (p=0.000 n=9+8)
      GobDecode-96                31.0ms ± 0%    30.8ms ± 0%   -0.36%  (p=0.006 n=9+9)
      GobEncode-96                24.4ms ± 0%    24.5ms ± 0%   +0.30%  (p=0.000 n=9+9)
      Gzip-96                      1.60s ± 0%     1.43s ± 0%  -10.58%  (p=0.000 n=9+10)
      Gunzip-96                    167ms ± 0%     169ms ± 0%   +0.83%  (p=0.000 n=8+9)
      HTTPClientServer-96          311µs ± 1%     308µs ± 0%   -0.75%  (p=0.000 n=10+10)
      JSONEncode-96               65.0ms ± 0%    64.8ms ± 0%   -0.25%  (p=0.000 n=9+8)
      JSONDecode-96                262ms ± 1%     261ms ± 1%     ~     (p=0.579 n=10+10)
      Mandelbrot200-96            18.0ms ± 0%    18.1ms ± 0%   +0.17%  (p=0.000 n=8+10)
      GoParse-96                  14.0ms ± 0%    14.1ms ± 1%   +0.42%  (p=0.003 n=9+10)
      RegexpMatchEasy0_32-96       644ns ± 2%     645ns ± 2%     ~     (p=0.836 n=10+10)
      RegexpMatchEasy0_1K-96      3.70µs ± 0%    3.49µs ± 0%   -5.58%  (p=0.000 n=10+10)
      RegexpMatchEasy1_32-96       662ns ± 2%     657ns ± 2%     ~     (p=0.137 n=10+10)
      RegexpMatchEasy1_1K-96      4.47µs ± 0%    4.31µs ± 0%   -3.48%  (p=0.000 n=10+10)
      RegexpMatchMedium_32-96      844ns ± 2%     849ns ± 1%     ~     (p=0.208 n=10+10)
      RegexpMatchMedium_1K-96      179µs ± 0%     182µs ± 0%   +1.20%  (p=0.000 n=10+10)
      RegexpMatchHard_32-96       10.0µs ± 0%    10.1µs ± 0%   +0.48%  (p=0.000 n=10+9)
      RegexpMatchHard_1K-96        297µs ± 0%     297µs ± 0%   -0.14%  (p=0.000 n=10+10)
      Revcomp-96                   3.08s ± 0%     3.13s ± 0%   +1.56%  (p=0.000 n=9+9)
      Template-96                  276ms ± 2%     275ms ± 1%     ~     (p=0.393 n=10+10)
      TimeParse-96                1.37µs ± 0%    1.36µs ± 0%   -0.53%  (p=0.000 n=10+7)
      TimeFormat-96               1.40µs ± 0%    1.42µs ± 0%   +0.97%  (p=0.000 n=10+10)
      [Geo mean]                   264µs          262µs        -0.77%
      
      Change-Id: Ie54eee4b3092af53e6da3baa6d1755098f57f3a2
      Reviewed-on: https://go-review.googlesource.com/55670
      Run-TryBot: Philip Hofer <phofer@umich.edu>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      2d0172c3
    • Ian Lance Taylor's avatar
      test: add test case where gccgo incorrectly rejected aliases · 9fba5054
      Ian Lance Taylor authored
      Updates #23912
      
      Change-Id: I50d06506a8ac91ed99a761a9ff3fd0b03d4c8121
      Reviewed-on: https://go-review.googlesource.com/94995
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      9fba5054
    • David Url's avatar
      net/http: use RFC 723x as normative reference in docs · 7662e658
      David Url authored
      Replace references to the obsoleted RFC 2616 with references to RFC
      7230 through 7235, to avoid unnecessary confusion.
      Obvious inconsistencies are marked with todo comments.
      
      Updates #21974
      
      Change-Id: I8fb4fcdd1333fc5193b93a2f09598f18c45e7a00
      Reviewed-on: https://go-review.googlesource.com/94095Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      7662e658
    • Keith Randall's avatar
      cmd/compile: reset branch prediction when deleting a branch · 4313d776
      Keith Randall authored
      When we go from a branch block to a plain block, reset the
      branch prediction bit. Downstream passes asssume that if the
      branch prediction is set, then the block has 2 successors.
      
      Fixes #23504
      
      Change-Id: I2898ec002228b2e34fe80ce420c6939201c0a5aa
      Reviewed-on: https://go-review.googlesource.com/88955Reviewed-by: default avatarJosh Bleecher Snyder <josharian@gmail.com>
      4313d776
  3. 19 Feb, 2018 8 commits
    • Alberto Donizetti's avatar
      encoding/xml: simplify slice-growing logic in rawToken · 252ee909
      Alberto Donizetti authored
      It appears that old code (from 2009) in xml.(*Decoder).rawToken
      replicates append's slice-growing functionality by allocating a new,
      bigger backing array and then calling copy.
      
      Simplifying the code by replacing it with a single append call does
      not seem to hurt performance:
      
      name         old time/op    new time/op    delta
      Marshal-4      11.2µs ± 1%    11.3µs ±10%    ~     (p=0.069 n=19+17)
      Unmarshal-4    28.6µs ± 1%    28.4µs ± 1%  -0.60%  (p=0.000 n=20+18)
      
      name         old alloc/op   new alloc/op   delta
      Marshal-4      5.78kB ± 0%    5.78kB ± 0%    ~     (all equal)
      Unmarshal-4    8.61kB ± 0%    8.27kB ± 0%  -3.90%  (p=0.000 n=20+20)
      
      name         old allocs/op  new allocs/op  delta
      Marshal-4        23.0 ± 0%      23.0 ± 0%    ~     (all equal)
      Unmarshal-4       189 ± 0%       190 ± 0%  +0.53%  (p=0.000 n=20+20)
      
      Change-Id: Ie580d1216a44760e611e63dee2c339af5465aea5
      Reviewed-on: https://go-review.googlesource.com/86655Reviewed-by: default avatarDaniel Martí <mvdan@mvdan.cc>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      252ee909
    • Ahmet Soormally's avatar
      regexp: dont use builtin type as variable name · bb355ed5
      Ahmet Soormally authored
      The existing implementation declares a variable error which collides
      with builting type error.
      
      This change simply renames error variable to err.
      
      Change-Id: Ib56c2530f37f53ec70fdebb825a432d4c550cd04
      Reviewed-on: https://go-review.googlesource.com/87775Reviewed-by: default avatarDaniel Martí <mvdan@mvdan.cc>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
      bb355ed5
    • Daniel Martí's avatar
      text/template: remove associate's error return · eb5925f5
      Daniel Martí authored
      It's always nil, so simplify its signature. Found with unparam.
      
      Change-Id: I45dd0f868ec2f5de98a970776be686417c8d73b6
      Reviewed-on: https://go-review.googlesource.com/95235
      Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      eb5925f5
    • Keith Randall's avatar
      cmd/compile: add | operator to make rewrite rules more succinct · b657c002
      Keith Randall authored
      Instead of
      
      (And64 x x) -> x
      (And32 x x) -> x
      (And16 x x) -> x
      (And8  x x) -> x
      
      we can now do:
      
      (And(64|32|16|8) x x) -> x
      
      Any part of an opcode can have a parenthesized, |-separated list of possibilites.
      The rule is then expanded using each piece of the | combo.
      If there are multiple | clauses, they get expanded in tandem.
      (All the first positions, then all the second positions, etc.)
      All places | opcodes appear must have the same count.
      
      A more complicated example:
      
      (MOV(L|SS)load [off1] {sym1} (LEAQ4 [off2] {sym2} ptr idx) mem) && is32Bit(off1+off2) && canMergeSym(sym1, sym2) ->
      	(MOV(L|SS)loadidx4 [off1+off2] {mergeSym(sym1,sym2)} ptr idx mem)
      
      This meta-rule generates 2 rules, a MOVL and a MOVSS rule.
      
      This CL is carefully orchestrated to not change the generated rules file at all.
      In some cases, this means we can't align the rules nicely because it changes
      the whitespace in the generated code.  I'll clean that up as a separate step.
      
      There are many more opportunites to compactify rules using this new mechanism.
      I've just done some examples, there's more to do.
      
      Change-Id: I8a5e748cd0761ccbb12d09b01925b2f1f4b2f608
      Reviewed-on: https://go-review.googlesource.com/86595
      Run-TryBot: Keith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      b657c002
    • Daniel Martí's avatar
      all: add more uses of stringer · 60cf9ec6
      Daniel Martí authored
      By grepping for ]string{$, one can find many manual implementations of
      stringer. The debug/dwarf ones needed the new -trimprefix flag, too.
      
      html/template was fairly simple, just implementing the fallback as
      stringer would. The changes there are trivial.
      
      The ones in debug/dwarf needed a bit of extra logic since the GoString
      wants to use its own format, depending on whether or not the value is
      one of the known constants.
      
      Change-Id: I501ea7deaa538fa425c8e9c2bb895f480169273f
      Reviewed-on: https://go-review.googlesource.com/77253
      Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      60cf9ec6
    • Daniel Martí's avatar
      text/template: differentiate nil from missing arg · 3cb54c86
      Daniel Martí authored
      reflect.Value is a struct and does not have a kind nor any flag for
      untyped nils. As a result, it is tricky to differentiate when we're
      missing a value, from when we have one but it is untyped nil.
      
      We could start using *reflect.Value instead, to add one level of
      indirection, using nil for missing values and new(reflect.Value) for
      untyped nils. However, that is a fairly invasive change, and would also
      mean unnecessary allocations.
      
      Instead, use a special reflect.Value that depicts when a value is
      missing. This is the case for the "final" reflect.Value in multiple
      scenarios, such as the start of a pipeline. Give it a specific,
      unexported type too, to make sure it cannot be mistaken for any other
      valid value.
      
      Finally, replace "final.IsValid()" with "final != missingVal", since
      final.IsValid() will be false when final is an untyped nil.
      
      Also add a few test cases, all different variants of the untyped nil
      versus missing value scenario.
      
      Fixes #18716.
      
      Change-Id: Ia9257a84660ead5a7007fd1cced7782760b62d9d
      Reviewed-on: https://go-review.googlesource.com/95215
      Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarRob Pike <r@golang.org>
      3cb54c86
    • Daniel Martí's avatar
      html/template: remove unused func · a95c5f04
      Daniel Martí authored
      Noticed while reading some code.
      
      Change-Id: I63f8c7a453d4895583a8ffc13bec57385b6944aa
      Reviewed-on: https://go-review.googlesource.com/95195
      Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      a95c5f04
    • Martin Möhrmann's avatar
      runtime: avoid clearing memory during byte slice allocation in gobytes · dfb0e4f6
      Martin Möhrmann authored
      Avoid using make in gobytes which clears the byte slice backing
      array unnecessarily since the content is overwritten immediately again.
      
      Check that the user provided length is positive and below the maximum
      allowed allocation size explicitly in gobytes as this was done in makeslice
      before this change.
      
      Fixes #23634
      
      Change-Id: Id852619e932aabfc468871c42ad07d34da91f45c
      Reviewed-on: https://go-review.googlesource.com/94760
      Run-TryBot: Martin Möhrmann <moehrmann@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      dfb0e4f6