1. 30 Mar, 2016 11 commits
    • Michael Munday's avatar
      cmd/internal/obj/s390x: add s390x support · 13f97ea4
      Michael Munday authored
      Based on the ppc64 port.
      
      s390x supports 2, 4 and 6 byte instructions and Go assembly
      instructions sometimes map to several s390x instructions. The
      assembler loops until a fixed point is reached in order to use
      branch instructions that can only handle a short offset in a
      similar way to other ports.
      
      Change-Id: I4278bf46aca35a96ca9cea0857e6229643c9c1e3
      Reviewed-on: https://go-review.googlesource.com/20942Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      13f97ea4
    • Keith Randall's avatar
      cmd/compile: define high bits of AuxInt · 7fc56219
      Keith Randall authored
      Previously if we were only using the low bits of AuxInt,
      the high bits were ignored and could be junk.  This CL
      changes that behavior to define the high bits to be the
      sign-extended version of the low bits for all cases.
      
      There are 2 main benefits:
      - Deterministic representation.  This helps with CSE.
        (Const8 [0x1]) and (Const8 [0x101]) used to be the same "value"
        but CSE couldn't see them as such.
      - Testability.  We can check that all ops leave AuxInt in a state
        consistent with the new rule.  In the old scheme, it was hard
        to check whether a rule correctly used only the low-order bits.
      Side benefits:
      - ==0 and !=0 tests are easier.
      
      Drawbacks:
      - This differs from the runtime representation in registers,
        where it is important that we allow upper bits to be undefined
        (so we're not sign/zero-extending all the time).
      - Ops that treat AuxInt as unsigned (shifts, mostly) need to be
        a bit more careful.
      
      Change-Id: I9a685ff27e36dc03287c9ab1cecd6c0b4045c819
      Reviewed-on: https://go-review.googlesource.com/21256Reviewed-by: 's avatarJosh Bleecher Snyder <josharian@gmail.com>
      7fc56219
    • Brad Fitzpatrick's avatar
      net/http: reuse HTTP/1 Transport conns more for gzipped responses · 18072adb
      Brad Fitzpatrick authored
      Flip around the composition order of the http.Response.Body's
      gzip.Reader vs. the reader which keeps track of waiting to see the end
      of the HTTP/1 response framing (whether that's a Content-Length or
      HTTP/1.1 chunking).
      
      Previously:
      
      user -> http.Response.Body
           -> bodyEOFSignal
           -> gzipReader
           -> gzip.Reader
           -> bufio.Reader
         [ -> http/1.1 de-chunking reader ]   optional
           -> http1 framing *body
      
      But because bodyEOFSignal was waiting to see an EOF from the
      underlying gzip.Reader before reusing the connection, and gzip.Reader
      (or more specifically: the flate.Reader) wasn't returning an early
      io.EOF with the final chunk, the bodyEOfSignal was never releasing the
      connection, because the EOF from the http1 framing was read by a party
      who didn't care about it yet: the helper bufio.Reader created to do
      byte-at-a-time reading in the flate.Reader.
      
      Flip the read composition around to:
      
      user -> http.Response.Body
           -> gzipReader
           -> gzip.Reader
           -> bufio.Reader
           -> bodyEOFSignal
         [ -> http/1.1 de-chunking reader ]   optional
           -> http1 framing *body
      
      Now when gzip.Reader does its byte-at-a-time reading via the
      bufio.Reader, the bufio.Reader will do its big reads against the
      bodyEOFSignal reader instead, which will then see the underlying http1
      framing EOF, and be able to reuse the connection.
      
      Updates google/go-github#317
      Updates #14867
      And related abandoned fix to flate.Reader: https://golang.org/cl/21290
      
      Change-Id: I3729dfdffe832ad943b84f4734b0f59b0e834749
      Reviewed-on: https://go-review.googlesource.com/21291Reviewed-by: 's avatarDavid Symonds <dsymonds@golang.org>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      18072adb
    • Shahar Kohanim's avatar
      cmd/compile, cmd/link: record lengths in object file · 7f067c87
      Shahar Kohanim authored
      Record total number of relocations, pcdata, automatics, funcdata and files in
      object file and use these numbers in the linker to allocate contiguous
      slices to later be filled by the defined symbols.
      
      name       old secs    new secs    delta
      LinkCmdGo   0.52 ± 3%   0.49 ± 3%  -4.21%   (p=0.000 n=91+92)
      LinkJuju    4.48 ± 4%   4.21 ± 7%  -6.08%  (p=0.000 n=96+100)
      
      name       old MaxRSS  new MaxRSS  delta
      LinkCmdGo   122k ± 2%   120k ± 4%  -1.66%   (p=0.000 n=98+93)
      LinkJuju    799k ± 5%   865k ± 8%  +8.29%   (p=0.000 n=89+99)
      
      GOGC=off
      
      name       old secs    new secs    delta
      LinkCmdGo   0.42 ± 2%   0.41 ± 0%  -2.98%    (p=0.000 n=89+70)
      LinkJuju    3.61 ± 0%   3.52 ± 1%  -2.46%    (p=0.000 n=80+89)
      
      name       old MaxRSS  new MaxRSS  delta
      LinkCmdGo   130k ± 1%   128k ± 1%  -1.33%  (p=0.000 n=100+100)
      LinkJuju   1.00M ± 0%  0.99M ± 0%  -1.70%  (p=0.000 n=100+100)
      
      Change-Id: Ie08f6ccd4311bb78d8950548c678230a58635c73
      Reviewed-on: https://go-review.googlesource.com/21026Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
      Run-TryBot: David Crawshaw <crawshaw@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      7f067c87
    • Ian Lance Taylor's avatar
      cmd/compile: don't skip PPARAMOUT in esccall after varargs · 777a77b4
      Ian Lance Taylor authored
      Fixes bug I introduced in CL 21202.
      
      Fixes #15013.
      
      Change-Id: I2344d7e22b8273425a0a56f4a77588b5c6e4d8c6
      Reviewed-on: https://go-review.googlesource.com/21270
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      777a77b4
    • Austin Clements's avatar
      runtime: print sweep ratio if gcpacertrace>0 · 17f6e539
      Austin Clements authored
      Change-Id: I5217bf4b75e110ca2946e1abecac6310ed84dad5
      Reviewed-on: https://go-review.googlesource.com/21205
      Run-TryBot: Austin Clements <austin@google.com>
      Reviewed-by: 's avatarRick Hudson <rlh@golang.org>
      17f6e539
    • Alex Brainman's avatar
      net: skip TestInterfacesWithNetsh if "netsh help" contains no English words · 9cc22a7f
      Alex Brainman authored
      Fixes #14859
      
      Change-Id: I262d634ee22498ec9855d273afdd409149765294
      Reviewed-on: https://go-review.googlesource.com/21195Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Alex Brainman <alex.brainman@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      9cc22a7f
    • Philip Hofer's avatar
      cmp/compile: rewrite CMP $0 with TEST · c12a0e64
      Philip Hofer authored
      The CMP* family of instructions are longer than their TEST counterparts by one byte.
      
      After this change, my go tool has 13 cmp.*$0x0 instructions, compared to 5612 before.
      
      Change-Id: Ieb87d65657917e494c0e4b711a7ba2918ae27610
      Reviewed-on: https://go-review.googlesource.com/21255Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      Run-TryBot: Keith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      c12a0e64
    • Martin Möhrmann's avatar
      fmt: fix padding for 0 precision 0 integer value formatting · aec8e145
      Martin Möhrmann authored
      Fixes #14924
      
      Change-Id: I098ef973e2cad76a121704492758c2971a9b55f3
      Reviewed-on: https://go-review.googlesource.com/20920
      Run-TryBot: Rob Pike <r@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarRob Pike <r@golang.org>
      aec8e145
    • Martin Möhrmann's avatar
      fmt: improve handling of zero padding · d175a85c
      Martin Möhrmann authored
      Simplify the handling of zero padding in fmt_integer and
      fmt_float to not require any adjustment of the format flags.
      
      Note that f.zero can only be true when padding to the left
      and f.wid is always greater than or equal to 0.
      
      Change-Id: I204b57d103c0eac13d86995992f2b26209196925
      Reviewed-on: https://go-review.googlesource.com/21185
      Run-TryBot: Rob Pike <r@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarRob Pike <r@golang.org>
      d175a85c
    • Aliaksandr Valialkin's avatar
      cmd/vet: allow lock types inside built-in new() · 72a1b53b
      Aliaksandr Valialkin authored
      Updates #14839
      Fixes #14994
      
      Change-Id: I9bb51bad19105a17c80d690c5486e5dd007ac84a
      Reviewed-on: https://go-review.googlesource.com/21222
      Run-TryBot: Rob Pike <r@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarRob Pike <r@golang.org>
      72a1b53b
  2. 29 Mar, 2016 21 commits
    • Josh Bleecher Snyder's avatar
      cmd/compile: add typArray, typSlice, and typDDDArray · eb98e515
      Josh Bleecher Snyder authored
      These are the first of several convenience
      constructors for types.
      
      They are part of type field encapsulation.
      This removes most external writes to TARRAY Type and Bound fields.
      
      substAny still directly fiddles with the .Type field.
      substAny generally needs access to Type internals.
      It will be moved to type.go in a future CL.
      
      bimport still directly writes the .Type field.
      This is hard to change.
      
      Also of note:
      
      * inl.go contains an (apparently irrelevant) bug fix:
        as.Right was given the wrong type.
        vararrtype was previously unused.
      * I believe that aindex (subr.go) never creates slices,
        but it is safer to keep existing behavior.
        The removal of -1 as a constant there is part
        of hiding that implementation detail.
        Future CLs will finish that job.
      
      Passes toolstash -cmp.
      
      Change-Id: If09bf001a874d7dba08e9ad0bcd6722860af4b91
      Reviewed-on: https://go-review.googlesource.com/21249Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarMatthew Dempsky <mdempsky@google.com>
      eb98e515
    • Josh Bleecher Snyder's avatar
      cmd/compile: make only one new Node in defaultlit · f32161da
      Josh Bleecher Snyder authored
      defaultlit and friends sometimes create a new
      OLITERAL node, only to have replace it.
      Thread hints when that is unnecessary.
      
      name       old time/op     new time/op     delta
      Template       318ms ± 6%      322ms ± 4%     ~           (p=0.154 n=24+25)
      Unicode        162ms ± 6%      151ms ± 7%   -6.94%        (p=0.000 n=22+23)
      GoTypes        1.04s ± 1%      1.04s ± 3%     ~           (p=0.136 n=20+25)
      Compiler       5.08s ± 2%      5.10s ± 4%     ~           (p=0.788 n=25+25)
      MakeBash       41.4s ± 1%      41.5s ± 1%     ~           (p=0.084 n=25+25)
      
      name       old user-ns/op  new user-ns/op  delta
      Template        438M ±10%       441M ± 9%     ~           (p=0.418 n=25+25)
      Unicode         272M ± 5%       219M ± 5%  -19.33%        (p=0.000 n=24+21)
      GoTypes        1.51G ± 3%      1.51G ± 3%     ~           (p=0.500 n=25+25)
      Compiler       7.31G ± 3%      7.32G ± 3%     ~           (p=0.572 n=25+24)
      
      name       old alloc/op    new alloc/op    delta
      Template      57.3MB ± 0%     57.2MB ± 0%   -0.16%        (p=0.000 n=25+25)
      Unicode       41.1MB ± 0%     38.7MB ± 0%   -5.81%        (p=0.000 n=25+25)
      GoTypes        191MB ± 0%      191MB ± 0%   -0.06%        (p=0.000 n=25+25)
      Compiler       840MB ± 0%      839MB ± 0%   -0.12%        (p=0.000 n=25+25)
      
      name       old allocs/op   new allocs/op   delta
      Template        500k ± 0%       500k ± 0%   -0.12%        (p=0.000 n=24+25)
      Unicode         400k ± 0%       384k ± 0%   -4.16%        (p=0.000 n=25+25)
      GoTypes        1.50M ± 0%      1.49M ± 0%   -0.05%        (p=0.000 n=25+25)
      Compiler       6.04M ± 0%      6.03M ± 0%   -0.11%        (p=0.000 n=25+25)
      
      Change-Id: I2fda5e072db67ba239848bde827c7deb2ad4abae
      Reviewed-on: https://go-review.googlesource.com/20813Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      Reviewed-by: 's avatarMatthew Dempsky <mdempsky@google.com>
      f32161da
    • Aliaksandr Valialkin's avatar
      cmd/vet: improve detecting printf-like format argument · ee1b90ad
      Aliaksandr Valialkin authored
      Previously format argument was detected via scanning func type args.
      This didn't work when func type couldn't be determined if the func
      is declared in the external package. Fall back to scanning for
      the first string call argument in this case.
      
      Fixes #14754
      
      Change-Id: I571cc29684cc641bc87882002ef474cf1481e9e2
      Reviewed-on: https://go-review.googlesource.com/21023
      Run-TryBot: Rob Pike <r@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarRob Pike <r@golang.org>
      ee1b90ad
    • Michael Munday's avatar
      debug/elf: add s390x relocations · 12fb62a5
      Michael Munday authored
      Change-Id: I8440f69c7f99d65b2f69035c26b4a62104f22bd3
      Reviewed-on: https://go-review.googlesource.com/20874Reviewed-by: 's avatarMinux Ma <minux@golang.org>
      12fb62a5
    • Marvin Stenger's avatar
      all: use &^ operator if possible · d0fb6497
      Marvin Stenger authored
      This is a change improving consistency in the source tree.
      The pattern foo &= ^bar, was only used six times in src/ directory.
      The usage of the supported &^ (bit clear / AND NOT) operator is way more
      common, about factor 10x.
      
      Change-Id: If26a2994fd81d23d42189bee00245eb84e672cf3
      Reviewed-on: https://go-review.googlesource.com/21224Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      d0fb6497
    • Alexandre Cesaro's avatar
      mime: fix maximum length of encoded-words · d733cef7
      Alexandre Cesaro authored
      RFC 2047 recommends a maximum length of 75 characters for
      encoded-words. Due to a bug, encoded-words were limited to 77
      characters instead of 75.
      
      Change-Id: I2ff9d013ab922df6fd542464ace70b1c46dc7ae7
      Reviewed-on: https://go-review.googlesource.com/20918Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      d733cef7
    • Shahar Kohanim's avatar
      cmd/link: remove some more dead fields from Pcln · 1b6402ea
      Shahar Kohanim authored
      Change-Id: Ibb98de29d84a605fb1588c7dc11ad66e3965a137
      Reviewed-on: https://go-review.googlesource.com/21223Reviewed-by: 's avatarMichael Hudson-Doyle <michael.hudson@canonical.com>
      Run-TryBot: Michael Hudson-Doyle <michael.hudson@canonical.com>
      1b6402ea
    • Klaus Post's avatar
      compress/flate: add pure huffman deflater · 42ad1dc0
      Klaus Post authored
      Add a "HuffmanOnly" compression level, where the input is
      only entropy encoded.
      
      The output is fully inflate compatible. Typical compression
      is reduction is about 50% of typical level 1 compression, however
      the compression time is very stable, and does not vary as much as
      nearly as much level 1 compression (or Snappy).
      
      This mode is useful for:
       * HTTP compression in a CPU limited environment.
       * Entropy encoding Snappy compressed data, for archiving, etc.
       * Compression where compression time needs to be predictable.
       * Fast network transfer.
      
      Snappy "usually" performs inbetween this and level 1 compression-wise,
      but at the same speed as "Huffman", so this is not a replacement,
      but a good supplement for Snappy, since it usually can compress
      Snappy output further.
      
      This is implemented as level -2, since this would be too much of a
      compression reduction to replace level 1.
      
      >go test -bench=Encode -cpu=1
      BenchmarkEncodeDigitsHuffman1e4            30000             52334 ns/op         191.08 MB/s
      BenchmarkEncodeDigitsHuffman1e5             3000            518343 ns/op         192.92 MB/s
      BenchmarkEncodeDigitsHuffman1e6              300           5356884 ns/op         186.68 MB/s
      BenchmarkEncodeDigitsSpeed1e4               5000            324214 ns/op          30.84 MB/s
      BenchmarkEncodeDigitsSpeed1e5                500           3952614 ns/op          25.30 MB/s
      BenchmarkEncodeDigitsSpeed1e6                 30          40760350 ns/op          24.53 MB/s
      BenchmarkEncodeDigitsDefault1e4             5000            387056 ns/op          25.84 MB/s
      BenchmarkEncodeDigitsDefault1e5              300           5950614 ns/op          16.80 MB/s
      BenchmarkEncodeDigitsDefault1e6               20          63842195 ns/op          15.66 MB/s
      BenchmarkEncodeDigitsCompress1e4            5000            391859 ns/op          25.52 MB/s
      BenchmarkEncodeDigitsCompress1e5             300           5707112 ns/op          17.52 MB/s
      BenchmarkEncodeDigitsCompress1e6              20          59839465 ns/op          16.71 MB/s
      BenchmarkEncodeTwainHuffman1e4             20000             73498 ns/op         136.06 MB/s
      BenchmarkEncodeTwainHuffman1e5              2000            595892 ns/op         167.82 MB/s
      BenchmarkEncodeTwainHuffman1e6               200           6059016 ns/op         165.04 MB/s
      BenchmarkEncodeTwainSpeed1e4                5000            321212 ns/op          31.13 MB/s
      BenchmarkEncodeTwainSpeed1e5                 500           2823873 ns/op          35.41 MB/s
      BenchmarkEncodeTwainSpeed1e6                  50          27237864 ns/op          36.71 MB/s
      BenchmarkEncodeTwainDefault1e4              3000            454634 ns/op          22.00 MB/s
      BenchmarkEncodeTwainDefault1e5               200           6859537 ns/op          14.58 MB/s
      BenchmarkEncodeTwainDefault1e6                20          71547405 ns/op          13.98 MB/s
      BenchmarkEncodeTwainCompress1e4             3000            462307 ns/op          21.63 MB/s
      BenchmarkEncodeTwainCompress1e5              200           7534992 ns/op          13.27 MB/s
      BenchmarkEncodeTwainCompress1e6               20          80353365 ns/op          12.45 MB/s
      PASS
      ok      compress/flate  55.333s
      
      Change-Id: I8e12ad13220e50d4cf7ddba6f292333efad61b0c
      Reviewed-on: https://go-review.googlesource.com/20982Reviewed-by: 's avatarJoe Tsai <joetsai@digital-static.net>
      Reviewed-by: 's avatarNigel Tao <nigeltao@golang.org>
      42ad1dc0
    • Brad Fitzpatrick's avatar
      net/http/cgi: allow CGI host to configure where child's stderr goes · 45d334ec
      Brad Fitzpatrick authored
      Patch originally from Steven Hartland. Tweaked a bit & added a test.
      
      Fixes #7197
      
      Change-Id: I09012b4674e7c641dba31a24e9758cedb898d3ee
      Reviewed-on: https://go-review.googlesource.com/21196Reviewed-by: 's avatarAndrew Gerrand <adg@golang.org>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      45d334ec
    • Josh Bleecher Snyder's avatar
      cmd/compile: encapsulate map value type · 093a9a1f
      Josh Bleecher Snyder authored
      Passes toolstash -cmp.
      
      Change-Id: I83af544974e1e91e0810e13321afb3e665dcdf12
      Reviewed-on: https://go-review.googlesource.com/21248
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      Reviewed-by: 's avatarMatthew Dempsky <mdempsky@google.com>
      093a9a1f
    • Josh Bleecher Snyder's avatar
      cmd/compile: use t.Key() instead of t.Down · bf5f24b9
      Josh Bleecher Snyder authored
      This was the only unconverted instance.
      
      Change-Id: Ic0ba75824614fcd1e055316e62e26acd06801dd1
      Reviewed-on: https://go-review.googlesource.com/21247
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      Reviewed-by: 's avatarMatthew Dempsky <mdempsky@google.com>
      bf5f24b9
    • Alex Brainman's avatar
      path/filepath: use fsutil with TestEvalSymlinksCanonicalNames · 98047376
      Alex Brainman authored
      TestEvalSymlinksCanonicalNames fails on system where 8dot3 name creation
      is disabled. Add new test that temporarily changes 8dot3 name creation
      file system setting and runs TestEvalSymlinksCanonicalNames under that
      setting. New test requires administrator access and modifies important
      file system setting, so don't run the test unless explicitly requested
      by specifying new test flag.
      
      Updates #13980
      
      Change-Id: I598b5b956e6bd0ed556e79d350cb244808c89c0b
      Reviewed-on: https://go-review.googlesource.com/20863Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      98047376
    • Matthew Dempsky's avatar
      cmd/compile: fix plan9-amd64 build · da19a0cf
      Matthew Dempsky authored
      The previous rules to combine indexed loads produced addresses like:
      
          From: obj.Addr{
              Type:   TYPE_MEM,
              Reg:    REG_CX,
              Name:   NAME_AUTO,
              Offset: 121,
              ...
          }
      
      which are erroneous because NAME_AUTO implies a base register of
      REG_SP, and cmd/internal/obj/x86 makes many assumptions to this
      effect.  Note that previously we were also producing an extra "ADDQ
      SP, CX" instruction, so indexing off of SP was already handled.
      
      The approach taken by this CL to address the problem is to instead
      produce addresses like:
      
          From: obj.Addr{
              Type:   TYPE_MEM,
              Reg:    REG_SP,
              Name:   NAME_AUTO,
              Offset: 121,
              Index:  REG_CX,
              Scale:  1,
          }
      
      and to omit the "ADDQ SP, CX" instruction.
      
      Downside to this approach is it requires adding a lot of new
      MOV[WLQ]loadidx1 instructions that nearly duplicate functionality of
      the existing MOV[WLQ]loadidx[248] instructions, but with a different
      Scale.
      
      Fixes #15001.
      
      Change-Id: Iad9a1a41e5e2552f8d22e3ba975e4ea0862dffd2
      Reviewed-on: https://go-review.googlesource.com/21245
      Run-TryBot: Matthew Dempsky <mdempsky@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      da19a0cf
    • Michel Lespinasse's avatar
      cmd/compile: optimize remaining convT2I calls · 859b63cc
      Michel Lespinasse authored
      See #14874
      Updates #6853
      
      This change adds a compiler optimization for non pointer shaped convT2I.
      Since itab symbols are now emitted by the compiler, the itab address can
      be passed directly to convT2I instead of passing the iface type and a
      cache pointer argument.
      
      Compilebench results for the 5-commits series ending here:
      
      name       old time/op     new time/op     delta
      Template       336ms ± 4%      344ms ± 4%   +2.61%          (p=0.027 n=9+8)
      Unicode        165ms ± 6%      173ms ± 7%   +5.11%          (p=0.014 n=9+9)
      GoTypes        1.09s ± 1%      1.06s ± 2%   -3.29%          (p=0.000 n=9+9)
      Compiler       5.09s ±10%      4.75s ±10%   -6.64%        (p=0.011 n=10+10)
      MakeBash       31.1s ± 5%      30.3s ± 3%     ~           (p=0.089 n=10+10)
      
      name       old text-bytes  new text-bytes  delta
      HelloSize       558k ± 0%       558k ± 0%   +0.02%        (p=0.000 n=10+10)
      CmdGoSize      6.24M ± 0%      6.11M ± 0%   -2.11%        (p=0.000 n=10+10)
      
      name       old data-bytes  new data-bytes  delta
      HelloSize      3.66k ± 0%      3.74k ± 0%   +2.41%        (p=0.000 n=10+10)
      CmdGoSize       134k ± 0%       162k ± 0%  +20.76%        (p=0.000 n=10+10)
      
      name       old bss-bytes   new bss-bytes   delta
      HelloSize       126k ± 0%       126k ± 0%     ~     (all samples are equal)
      CmdGoSize       149k ± 0%       146k ± 0%   -2.17%        (p=0.000 n=10+10)
      
      name       old exe-bytes   new exe-bytes   delta
      HelloSize       924k ± 0%       924k ± 0%   +0.05%        (p=0.000 n=10+10)
      CmdGoSize      9.77M ± 0%      9.62M ± 0%   -1.47%        (p=0.000 n=10+10)
      
      Change-Id: Ib230ddc04988824035c32287ae544a965fedd344
      Reviewed-on: https://go-review.googlesource.com/20902Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
      Run-TryBot: Michel Lespinasse <walken@google.com>
      859b63cc
    • Michel Lespinasse's avatar
      cmd/compile: optimize convT2I as a two-word copy when T is pointer-shaped · 7427f2c4
      Michel Lespinasse authored
      See #14874
      
      This change adds a compiler optimization for pointer shaped convT2I.
      Since itab symbols are now emitted by the compiler, the itab address can
      be directly moved into the iface structure.
      
      Change-Id: I311483af544519ca682c5f872960717ead772f26
      Reviewed-on: https://go-review.googlesource.com/20901Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
      7427f2c4
    • Michel Lespinasse's avatar
      cmd/link: collect itablinks as a slice in moduledata · 79688ca5
      Michel Lespinasse authored
      See #14874
      
      This change tells the linker to collect all the itablink symbols and
      collect them so that moduledata can have a slice of all compiler
      generated itabs.
      
      The logic is shamelessly adapted from what is done with typelink symbols.
      
      Change-Id: Ie93b59acf0fcba908a876d506afbf796f222dbac
      Reviewed-on: https://go-review.googlesource.com/20889Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      79688ca5
    • Michel Lespinasse's avatar
      cmd/compile: emit itabs and itablinks · f00bbd5f
      Michel Lespinasse authored
      See #14874
      
      This change tells the compiler to emit itab and itablink symbols in
      situations where they could be useful; however the compiled code does
      not actually make use of the new symbols yet.
      
      Change-Id: I0db3e6ec0cb1f3b7cebd4c60229e4a48372fe586
      Reviewed-on: https://go-review.googlesource.com/20888Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
      Run-TryBot: Michel Lespinasse <walken@google.com>
      f00bbd5f
    • Michel Lespinasse's avatar
      runtime: insert itabs into hash table during init · 7043d2bb
      Michel Lespinasse authored
      See #14874
      
      This change makes the runtime register all compiler generated itabs
      (as obtained from the moduledata) during init.
      
      Change-Id: I9969a0985b99b8bda820a631f7fe4c78f1174cdf
      Reviewed-on: https://go-review.googlesource.com/20900Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      Run-TryBot: Michel Lespinasse <walken@google.com>
      7043d2bb
    • Matthew Dempsky's avatar
      cmd/compile: remove unused write barrier helpers · deb83d06
      Matthew Dempsky authored
      These have been unused since CL 10316.
      
      Passes toolstash -cmp.
      
      Change-Id: Icc19f3fcc7275fbee1c665f704e10a110ecce2a5
      Reviewed-on: https://go-review.googlesource.com/21242Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      Reviewed-by: 's avatarAustin Clements <austin@google.com>
      deb83d06
    • Josh Bleecher Snyder's avatar
      cmd/compile: encapsulate Type.Argwid · 361b334c
      Josh Bleecher Snyder authored
      Passes toolstash -cmp.
      
      Change-Id: I72fb271052e449a83adfa9bd3b923d40781d6341
      Reviewed-on: https://go-review.googlesource.com/21243
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      361b334c
    • Richard Miller's avatar
      syscall: fix accidental close of exec status pipe in StartProcess · 1f0bebcc
      Richard Miller authored
      In syscall.forkAndExecInChild, blocks of code labelled Pass 1
      and Pass 2 permute the file descriptors (if necessary) which are
      passed to the child process.  If Pass 1 begins with fds = {0,2,1},
      nextfd = 4 and pipe = 4, then the statement labelled "don't stomp
      on pipe" is too late -- the pipe (which will be needed to pass
      exec status back to the parent) will have been closed by the
      preceding DUP call.
      
      Moving the "don't stomp" test earlier ensures that the pipe is
      protected.
      
      Fixes #14979
      
      Change-Id: I890c311527f6aa255be48b3277c1e84e2049ee22
      Reviewed-on: https://go-review.googlesource.com/21184
      Run-TryBot: David du Colombier <0intro@gmail.com>
      Reviewed-by: 's avatarDavid du Colombier <0intro@gmail.com>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      1f0bebcc
  3. 28 Mar, 2016 8 commits