1. 31 Aug, 2017 9 commits
  2. 30 Aug, 2017 18 commits
    • Chris Ball's avatar
      runtime: add symbols for Linux syscall numbers on 386/amd64 · 4d269ad1
      Chris Ball authored
      Matches other architectures by using names for syscalls instead of
      numbers directly.
      
      Fixes #20499.
      
      Change-Id: I63d606b0b1fe6fb517fd994a7542a3f38d80dd54
      Reviewed-on: https://go-review.googlesource.com/44213
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      4d269ad1
    • Carlos Eduardo Seo's avatar
      runtime: fix regression in BenchmarkCompareBytes* for ppc64x · 4641d78a
      Carlos Eduardo Seo authored
      Between go1.7 and go1.8, a performance regression was introduced in some of the
      BenchmarkCompareBytes benchmarks.
      
      Go1.7 vs Go1.8:
      BenchmarkCompareBytesToNil-8               7.44          8.44          +13.44%
      BenchmarkCompareBytesIdentical-8           6.96          11.5          +65.23%
      BenchmarkCompareBytesBigIdentical-8        6.65          47112         +708351.13%
      
      This change fixes the problem by optimizing the case where the byte slices being
      compared are equal:
      
      Go1.9 vs current:
      BenchmarkCompareBytesToNil-8               7.35          7.00          -4.76%
      BenchmarkCompareBytesIdentical-8           11.4          6.81          -40.26%
      BenchmarkCompareBytesBigIdentical-8        48396         9.26          -99.98%
      
      runtime.cmpstring can benefit from the same approach and is also changed.
      
      Change-Id: I3cb25f59d8b940a83a2cf687eea764cfeff90688
      Reviewed-on: https://go-review.googlesource.com/59650
      Run-TryBot: Lynn Boger <laboger@linux.vnet.ibm.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarLynn Boger <laboger@linux.vnet.ibm.com>
      4641d78a
    • Hiroshi Ioka's avatar
      cmd/cgo: support niladic function-like macros · 03876af9
      Hiroshi Ioka authored
      Currently, cgo supports only macros which can be reduced to constants
      or variables. The CL addresses remaining parts, macros which can be
      represented as niladic functions.
      
      The basic idea is simple:
        1. make a thin wrapper function per macros.
        2. replace macro expansions with function calls.
      
      Fixes #10715
      Fixes #18720
      
      Change-Id: I150b4fb48e9dc4cc34466ef6417c04ac93d4bc1a
      Reviewed-on: https://go-review.googlesource.com/43970
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      03876af9
    • Joe Tsai's avatar
      archive/tar: minor doc fixes · c1679286
      Joe Tsai authored
      Use "file" consistently instead of "entry".
      
      Change-Id: Ia81c9665d0d956adb78f7fa49de40cdb87fba000
      Reviewed-on: https://go-review.googlesource.com/60150Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      c1679286
    • Joe Tsai's avatar
      archive/tar: require opt-in to PAX or GNU format for time features · f85dc050
      Joe Tsai authored
      Nearly every Header obtained from FileInfoHeader via the FS has
      timestamps with sub-second resolution and the AccessTime
      and ChangeTime fields populated. This forces the PAX format
      to almost always be used, which has the following problems:
      * PAX is still not as widely supported compared to USTAR
      * The PAX headers will occupy at minimum 1KiB for every entry
      
      The old behavior of tar Writer had no support for sub-second resolution
      nor any support for AccessTime or ChangeTime, so had neither problem.
      Instead the Writer would just truncate sub-second information and
      ignore the AccessTime and ChangeTime fields.
      
      In this CL, we preserve the behavior such that the *default* behavior
      would output a USTAR header for most cases by truncating sub-second
      time measurements and ignoring AccessTime and ChangeTime.
      To use either of the features, users will need to explicitly specify
      that the format is PAX or GNU.
      
      The exact policy chosen is this:
      * USTAR and GNU may still be chosen even if sub-second measurements
      are present; they simply truncate the timestamp to the nearest second.
      As before, PAX uses sub-second resolutions.
      * If the Format is unspecified, then WriteHeader ignores AccessTime
      and ChangeTime when using the USTAR format.
      
      This ensures that USTAR may still be chosen for a vast majority of
      file entries obtained through FileInfoHeader.
      
      Updates #11171
      Updates #17876
      
      Change-Id: Icc5274d4245922924498fd79b8d3ae94d5717271
      Reviewed-on: https://go-review.googlesource.com/59230
      Run-TryBot: Joe Tsai <thebrokentoaster@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      f85dc050
    • Marvin Stenger's avatar
      runtime/internal/sys: use standard generated code header · 0592a1a3
      Marvin Stenger authored
      This change implements the convention for generated code header agreed upon in https://golang.org/s/generatedcode.
      Additionally run go generate.
      Also update some comments.
      
      Updates #13560
      
      Change-Id: If45f91b93aaa0d43280c2c4630823bc4d2dc7d3a
      Reviewed-on: https://go-review.googlesource.com/60250
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      0592a1a3
    • Michael Stapelberg's avatar
      context: fix lint warning “drop = 0 from declaration” · 2915e44d
      Michael Stapelberg authored
      Previously, the suggested code would result in the following golint warning:
      “should drop = 0 from declaration of var errorsOnlyKey; it is the zero value”
      
      Change-Id: I1a302c1e40ca89acbc76897e39097ecd04865460
      Reviewed-on: https://go-review.googlesource.com/60290Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      2915e44d
    • Ilya Tocar's avatar
      cmd/compile/internal/ssa: remove redundant zeroextensions on amd64 · 782ee238
      Ilya Tocar authored
      Some instructions operating on <= 32 bits also zero out upper 32bits.
      Remove zeroextensions of such values. Triggers a few times during
      all.bash. Also removes ugly code like:
      MOVL CX,CX
      
      Change-Id: I66a46c190dd6929b7e3c52f3fe6b967768d00638
      Reviewed-on: https://go-review.googlesource.com/58090
      Run-TryBot: Ilya Tocar <ilya.tocar@intel.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      782ee238
    • griesemer's avatar
      doc: minor clarification regarding the sharing of underlying arrays · 2ac43d5b
      griesemer authored
      The last sentence in the section on slice expressions could be read
      as if it might apply to strings. Changed the sentence a bit to
      emphasize its applicability to slices only. See also the issue for
      more background.
      
      Fixes #19220.
      
      Change-Id: I8551f34230e4ed93f951e7b871cc81f54a5874a9
      Reviewed-on: https://go-review.googlesource.com/59890Reviewed-by: default avatarRob Pike <r@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      2ac43d5b
    • Ben Shi's avatar
      cmd/compile: optimize ARM with MULS · 64607dbd
      Ben Shi authored
      MULS was introduced in ARMv7 and corresponding to MULA. This patch
      duplicated all MULA related SSA rules with MULS.
      
      Here was the contrast test result against the original go compiler.
      There was no improvement in total, but big improvement in special cases.
      
      1. A specific test case accelerated 18.62%.
      (https://github.com/benshi001/ugo1/blob/master/mulsub_test.go)
      name                     old time/op    new time/op    delta
      MulSub-4                    270µs ± 0%     219µs ± 0%  -18.62%  (p=0.000 n=35+40)
      
      2. Total size of all .a files in pkg/ shrank by 0.002%.
      
      3. The compilecmp benchmark showed no decline.
      name        old time/op       new time/op       delta
      Template          2.37s ± 3%        2.36s ± 1%    ~     (p=0.233 n=19+18)
      Unicode           1.32s ± 2%        1.34s ± 5%  +1.32%  (p=0.011 n=20+18)
      GoTypes           7.88s ± 1%        7.87s ± 1%    ~     (p=0.758 n=20+20)
      Compiler          37.5s ± 1%        37.6s ± 1%    ~     (p=0.194 n=20+19)
      SSA               83.7s ± 2%        83.5s ± 2%    ~     (p=0.569 n=20+19)
      Flate             1.46s ± 3%        1.45s ± 1%    ~     (p=0.619 n=20+17)
      GoParser          1.87s ± 2%        1.85s ± 1%  -0.58%  (p=0.048 n=20+18)
      Reflect           5.10s ± 2%        5.11s ± 2%    ~     (p=0.365 n=19+20)
      Tar               1.78s ± 2%        1.78s ± 2%    ~     (p=0.531 n=19+20)
      XML               2.62s ± 1%        2.61s ± 2%    ~     (p=0.057 n=17+19)
      [Geo mean]        4.68s             4.67s       -0.07%
      
      name        old user-time/op  new user-time/op  delta
      Template          2.80s ± 1%        2.79s ± 2%    ~     (p=0.686 n=17+20)
      Unicode           1.61s ± 4%        1.63s ± 6%    ~     (p=0.222 n=20+20)
      GoTypes           9.59s ± 1%        9.60s ± 1%    ~     (p=0.482 n=17+20)
      Compiler          46.1s ± 1%        46.2s ± 1%    ~     (p=0.373 n=20+18)
      SSA                108s ± 1%         108s ± 2%    ~     (p=0.784 n=20+20)
      Flate             1.68s ± 3%        1.69s ± 3%    ~     (p=0.335 n=20+19)
      GoParser          2.20s ± 4%        2.19s ± 2%    ~     (p=0.844 n=20+18)
      Reflect           5.97s ± 3%        6.01s ± 2%    ~     (p=0.184 n=20+20)
      Tar               2.11s ± 2%        2.11s ± 4%    ~     (p=0.961 n=19+20)
      XML               3.07s ± 1%        3.07s ± 3%    ~     (p=0.786 n=16+19)
      [Geo mean]        5.61s             5.62s       +0.19%
      
      name        old text-bytes    new text-bytes    delta
      HelloSize         586kB ± 0%        586kB ± 0%    ~     (all equal)
      
      name        old data-bytes    new data-bytes    delta
      HelloSize        5.46kB ± 0%       5.46kB ± 0%    ~     (all equal)
      
      name        old bss-bytes     new bss-bytes     delta
      HelloSize        72.9kB ± 0%       72.9kB ± 0%    ~     (all equal)
      
      name        old exe-bytes     new exe-bytes     delta
      HelloSize        1.03MB ± 0%       1.03MB ± 0%    ~     (all equal)
      
      4. The go1 benchmark showed no decline in total.
      name                     old time/op    new time/op    delta
      BinaryTree17-4              41.7s ± 1%     41.7s ± 1%    ~     (p=0.966 n=40+40)
      Fannkuch11-4                23.6s ± 0%     23.6s ± 1%  -0.23%  (p=0.000 n=40+40)
      FmtFprintfEmpty-4           844ns ± 1%     834ns ± 1%  -1.23%  (p=0.000 n=40+40)
      FmtFprintfString-4         1.39µs ± 1%    1.40µs ± 1%  +0.71%  (p=0.000 n=40+40)
      FmtFprintfInt-4            1.44µs ± 1%    1.45µs ± 1%  +0.70%  (p=0.000 n=40+40)
      FmtFprintfIntInt-4         2.10µs ± 1%    2.10µs ± 1%  +0.30%  (p=0.000 n=40+40)
      FmtFprintfPrefixedInt-4    2.49µs ± 0%    2.50µs ± 1%  +0.66%  (p=0.000 n=32+40)
      FmtFprintfFloat-4          4.42µs ± 1%    4.46µs ± 2%  +0.94%  (p=0.000 n=40+40)
      FmtManyArgs-4              8.31µs ± 1%    8.22µs ± 1%  -1.09%  (p=0.000 n=40+40)
      GobDecode-4                 105ms ± 1%     102ms ± 1%  -2.30%  (p=0.000 n=39+39)
      GobEncode-4                90.2ms ± 1%    88.7ms ± 1%  -1.66%  (p=0.000 n=40+39)
      Gzip-4                      4.17s ± 1%     4.16s ± 1%    ~     (p=0.785 n=40+40)
      Gunzip-4                    608ms ± 1%     608ms ± 1%    ~     (p=0.481 n=40+40)
      HTTPClientServer-4          697µs ± 2%     684µs ± 3%  -1.89%  (p=0.000 n=37+40)
      JSONEncode-4                255ms ± 1%     256ms ± 1%  +0.35%  (p=0.000 n=40+40)
      JSONDecode-4                920ms ± 1%     926ms ± 1%  +0.64%  (p=0.000 n=40+39)
      Mandelbrot200-4            49.3ms ± 1%    49.3ms ± 0%  +0.07%  (p=0.005 n=40+40)
      GoParse-4                  46.8ms ± 2%    46.7ms ± 1%    ~     (p=1.000 n=40+40)
      RegexpMatchEasy0_32-4      1.27µs ± 0%    1.27µs ± 1%    ~     (p=0.057 n=40+40)
      RegexpMatchEasy0_1K-4      7.97µs ± 7%    7.92µs ± 5%    ~     (p=0.094 n=40+40)
      RegexpMatchEasy1_32-4      1.28µs ± 1%    1.28µs ± 1%    ~     (p=0.406 n=40+40)
      RegexpMatchEasy1_1K-4      10.5µs ± 4%    10.5µs ± 3%    ~     (p=0.855 n=40+40)
      RegexpMatchMedium_32-4     2.04µs ± 0%    2.04µs ± 1%  -0.22%  (p=0.000 n=39+40)
      RegexpMatchMedium_1K-4      541µs ± 0%     540µs ± 1%  -0.25%  (p=0.000 n=40+38)
      RegexpMatchHard_32-4       29.3µs ± 1%    29.3µs ± 0%    ~     (p=0.149 n=40+40)
      RegexpMatchHard_1K-4        878µs ± 1%     880µs ± 0%  +0.14%  (p=0.005 n=36+35)
      Revcomp-4                  81.8ms ± 2%    81.4ms ± 2%  -0.43%  (p=0.015 n=38+39)
      Template-4                  1.05s ± 1%     1.05s ± 1%    ~     (p=0.302 n=40+35)
      TimeParse-4                7.18µs ± 1%    7.26µs ± 1%  +1.05%  (p=0.000 n=40+36)
      TimeFormat-4               13.1µs ± 1%    13.1µs ± 1%    ~     (p=0.698 n=37+40)
      [Geo mean]                  733µs          732µs       -0.16%
      
      name                     old speed      new speed      delta
      GobDecode-4              7.34MB/s ± 1%  7.51MB/s ± 1%  +2.36%  (p=0.000 n=39+39)
      GobEncode-4              8.51MB/s ± 1%  8.65MB/s ± 1%  +1.69%  (p=0.000 n=40+39)
      Gzip-4                   4.66MB/s ± 1%  4.66MB/s ± 1%    ~     (p=0.783 n=40+40)
      Gunzip-4                 31.9MB/s ± 1%  31.9MB/s ± 1%    ~     (p=0.466 n=40+40)
      JSONEncode-4             7.61MB/s ± 1%  7.58MB/s ± 1%  -0.35%  (p=0.001 n=40+40)
      JSONDecode-4             2.11MB/s ± 1%  2.10MB/s ± 1%  -0.52%  (p=0.000 n=38+39)
      GoParse-4                1.24MB/s ± 2%  1.24MB/s ± 1%    ~     (p=0.556 n=40+39)
      RegexpMatchEasy0_32-4    25.1MB/s ± 0%  25.1MB/s ± 1%    ~     (p=0.064 n=40+40)
      RegexpMatchEasy0_1K-4     129MB/s ± 8%   129MB/s ± 5%    ~     (p=0.094 n=40+40)
      RegexpMatchEasy1_32-4    25.0MB/s ± 1%  25.1MB/s ± 1%    ~     (p=0.331 n=40+40)
      RegexpMatchEasy1_1K-4    97.7MB/s ± 4%  97.8MB/s ± 3%    ~     (p=0.851 n=40+40)
      RegexpMatchMedium_32-4    490kB/s ± 0%   490kB/s ± 0%    ~     (all equal)
      RegexpMatchMedium_1K-4   1.89MB/s ± 0%  1.90MB/s ± 1%  +0.12%  (p=0.031 n=40+40)
      RegexpMatchHard_32-4     1.09MB/s ± 1%  1.09MB/s ± 1%    ~     (p=0.597 n=40+40)
      RegexpMatchHard_1K-4     1.16MB/s ± 1%  1.16MB/s ± 1%    ~     (p=0.565 n=40+35)
      Revcomp-4                31.1MB/s ± 2%  31.2MB/s ± 2%  +0.44%  (p=0.018 n=38+39)
      Template-4               1.85MB/s ± 1%  1.85MB/s ± 1%    ~     (p=0.873 n=40+40)
      [Geo mean]               6.66MB/s       6.67MB/s       +0.26%
      
      Change-Id: Icc972d8a78ea06c32c3aa15733ff0537c82c2dc7
      Reviewed-on: https://go-review.googlesource.com/58950Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      64607dbd
    • Martin Möhrmann's avatar
      cmd/compile: rename mapbucket to bmap · dcef97e0
      Martin Möhrmann authored
      This makes the name of the function to construct the map bucket type
      consistent with runtimes naming and the existing hmap function.
      
      Change-Id: If4d8b4a54c92ab914d4adcb96022b48d8b5db631
      Reviewed-on: https://go-review.googlesource.com/59915
      Run-TryBot: Martin Möhrmann <moehrmann@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      dcef97e0
    • Martin Möhrmann's avatar
      cmd/compile: avoid padding for indirect map key or value on amd64p32 · 4c9989a3
      Martin Möhrmann authored
      Padding needed for map buckets is dependent on the types used to
      construct the map bucket. In case of indirect keys or values pointers
      are used in the map bucket to the keys or values.
      
      Change the map bucket padding calculation to take the alignment of
      the key and value types used to construct the map bucket into account
      instead of the original key and value type.
      
      Since pointers are always 32bit aligned on amd64p32 this prevents
      adding unneeded padding in case the key or value would have needed
      64bit alignment without indirect referencing.
      
      Change-Id: I7943448e882d269b5cff7e921a2a6f3430c50878
      Reviewed-on: https://go-review.googlesource.com/60030Reviewed-by: default avatarKeith Randall <khr@golang.org>
      4c9989a3
    • Martin Möhrmann's avatar
      cmd/compile: simplify check for pointers in map bucket · 2548d36c
      Martin Möhrmann authored
      Change-Id: Ie5e977c54f50274421962a7ca268ae71a6f19cef
      Reviewed-on: https://go-review.googlesource.com/60050
      Run-TryBot: Martin Möhrmann <moehrmann@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      2548d36c
    • Martin Möhrmann's avatar
      runtime: move dynamic makemap checks into cmd/compile · 54125d19
      Martin Möhrmann authored
      Check map invariants, type size and alignments during compile time.
      
      Keep runtime checks for reflect by adding them to reflect_makemap.
      
      Change-Id: Ia28610626591bf7fafb7d5a1ca318da272e54879
      Reviewed-on: https://go-review.googlesource.com/59914
      Run-TryBot: Martin Möhrmann <moehrmann@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      54125d19
    • Alex Brainman's avatar
      cmd/link: unexport all peSection fields · d77d4f50
      Alex Brainman authored
      Change-Id: I83e168f0d1dd1897a0c02c0f1233e1054e93fb0f
      Reviewed-on: https://go-review.googlesource.com/59791Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      d77d4f50
    • Alex Brainman's avatar
      cmd/link: introduce and use peFile.addDWARF · 3bd79713
      Alex Brainman authored
      Change-Id: I2c217e03779772605aa0b5a33ef80459333eeebc
      Reviewed-on: https://go-review.googlesource.com/59790Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      3bd79713
    • Hiroshi Ioka's avatar
      cmd/link: refactor container() · 0e2cde7c
      Hiroshi Ioka authored
      * rename to emitPcln because I'd like to skip not only container types,
        but also something like "go.buildid" in the future.
      * return bool instead of int.
      
      Change-Id: I029adb81292f7dd2fe98e69f3877c5c27f32ec30
      Reviewed-on: https://go-review.googlesource.com/59415Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      0e2cde7c
    • Joe Tsai's avatar
      archive/tar: populate uname/gname/devmajor/devminor in FileInfoHeader · 0564e304
      Joe Tsai authored
      We take a best-effort approach since information for these fields
      are not well supported on all platforms.
      
      user.LookupId+user.LookupGroupId is currently 15x slower than os.Stat.
      For performance reasons, we perpetually cache username and groupname
      with a sync.Map. As a result, this function will not be updated whenever
      the user or group names are renamed in the OS. However, this is a better
      situation than before, where those fields were not populated at all.
      
      Change-Id: I3cec8291aed7675dea89ee1cbda92bd493c8831f
      Reviewed-on: https://go-review.googlesource.com/59531
      Run-TryBot: Joe Tsai <thebrokentoaster@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      0564e304
  3. 29 Aug, 2017 13 commits