1. 11 Oct, 2017 12 commits
    • Austin Clements's avatar
      runtime: don't start new threads from locked threads · 2595fe7f
      Austin Clements authored
      Applications that need to manipulate kernel thread state are currently
      on thin ice in Go: they can use LockOSThread to prevent other
      goroutines from running on the manipulated thread, but Go may clone
      this manipulated state into a new thread that's put into the runtime's
      thread pool along with other threads.
      
      Fix this by never starting a new thread from a locked thread or a
      thread that may have been started by C. Instead, the runtime starts a
      "template thread" with a known-good state. If it then needs to start a
      new thread but doesn't know that the current thread is in a good
      state, it forwards the thread creation to the template thread.
      
      Fixes #20676.
      
      Change-Id: I798137a56e04b7723d55997e9c5c085d1d910643
      Reviewed-on: https://go-review.googlesource.com/46033
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      2595fe7f
    • Russ Cox's avatar
      cmd/go: separate compile and link steps in action graph · 9a9780a2
      Russ Cox authored
      To the extent that invoking the compiler and invoking the linker
      have different dependency requirements, representing both steps
      by a single action node leads to confusion.
      
      If we move to having separate .a and .x (import metadata) files
      in the standard builds, then the .a is a link dependency but not
      a compile dependency, and vice versa for .x.
      Today, in shared library builds, the .a is a compile dependency
      and a link dependency, while the .so is only a link dependency.
      
      Also in this CL: change the gccgo link step to extract _cgo_flags
      into root.Objdir, which is private to the link step, instead of into
      b.WorkDir, which is shared by all the link steps that could possibly
      be running in parallel. And attempt to handle the -n and -x flags
      when loading _cgo_flags, instead of dying attempting to read
      an archive that wasn't written.
      
      Also in this CL: create a.Objdir before running a.Func, to avoid
      duplicating the Mkdir(a.Objdir) in every a.Func.
      
      A future CL will update the link action's Deps to be accurate.
      (Right now the link steps search out the true Deps by walking
      the entire action graph.)
      
      Change-Id: I15128ce2bd064887f98abc3a4cf204241f518631
      Reviewed-on: https://go-review.googlesource.com/69830
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarDavid Crawshaw <crawshaw@golang.org>
      9a9780a2
    • David Crawshaw's avatar
      debug/elf: add relocation constants · 0c6fc0d7
      David Crawshaw authored
      Compiled from various tables found around the internet.
      
      Some of these are used by cmd/link.
      
      Change-Id: I258b25e694dbe91a61d675763f2c47ccc928fd70
      Reviewed-on: https://go-review.googlesource.com/69012
      Run-TryBot: David Crawshaw <crawshaw@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      0c6fc0d7
    • Ian Lance Taylor's avatar
      cmd/go: correct directory used in checkNestedVCS test · 862b78e1
      Ian Lance Taylor authored
      This error was not used when using git because nested git is permitted.
      Add test using Mercurial, so that at least we have a test, even though
      the test is not run by default.
      
      Fixes #22157
      Fixes #22201
      
      Change-Id: If521f3c09b0754e00e56fa3cd0364764a57a43ad
      Reviewed-on: https://go-review.googlesource.com/69670
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarRuss Cox <rsc@golang.org>
      862b78e1
    • Ben Shi's avatar
      cmd/compile: optimize ARM code with CMN/TST/TEQ · 1ec78d1d
      Ben Shi authored
      CMN/TST/TEQ were supported since ARMv4, which can be used to
      simplify comparisons.
      
      This patch implements the optimization and here are the benchmark
      results.
      
      1. A special test case got 18.21% improvement.
      name                     old time/op    new time/op    delta
      TSTTEQ-4                    806µs ± 1%     659µs ± 0%  -18.21%  (p=0.000 n=20+18)
      (https://github.com/benshi001/ugo1/blob/master/tstteq_test.go)
      
      2. There is no regression in the compilecmp benchmark.
      name        old time/op       new time/op       delta
      Template          2.31s ± 1%        2.30s ± 1%    ~     (p=0.661 n=10+9)
      Unicode           1.32s ± 3%        1.32s ± 5%    ~     (p=0.280 n=10+10)
      GoTypes           7.69s ± 1%        7.65s ± 0%  -0.52%  (p=0.027 n=10+8)
      Compiler          36.5s ± 1%        36.4s ± 1%    ~     (p=0.546 n=9+9)
      SSA               85.1s ± 2%        84.9s ± 1%    ~     (p=0.529 n=10+10)
      Flate             1.43s ± 2%        1.43s ± 2%    ~     (p=0.661 n=10+9)
      GoParser          1.81s ± 2%        1.81s ± 1%    ~     (p=0.796 n=10+10)
      Reflect           5.10s ± 2%        5.09s ± 1%    ~     (p=0.853 n=10+10)
      Tar               2.47s ± 1%        2.48s ± 1%    ~     (p=0.123 n=10+10)
      XML               2.59s ± 1%        2.58s ± 1%    ~     (p=0.853 n=10+10)
      [Geo mean]        4.78s             4.77s       -0.17%
      
      name        old user-time/op  new user-time/op  delta
      Template          2.72s ± 3%        2.73s ± 2%    ~     (p=0.928 n=10+10)
      Unicode           1.58s ± 4%        1.60s ± 1%    ~     (p=0.087 n=10+9)
      GoTypes           9.41s ± 2%        9.36s ± 1%    ~     (p=0.060 n=10+10)
      Compiler          44.4s ± 2%        44.2s ± 2%    ~     (p=0.289 n=10+10)
      SSA                110s ± 2%         110s ± 1%    ~     (p=0.739 n=10+10)
      Flate             1.67s ± 2%        1.63s ± 3%    ~     (p=0.063 n=10+10)
      GoParser          2.12s ± 1%        2.12s ± 2%    ~     (p=0.840 n=10+10)
      Reflect           5.94s ± 1%        5.98s ± 1%    ~     (p=0.063 n=9+10)
      Tar               3.01s ± 2%        3.02s ± 2%    ~     (p=0.584 n=10+10)
      XML               3.04s ± 3%        3.02s ± 2%    ~     (p=0.696 n=10+10)
      [Geo mean]        5.73s             5.72s       -0.20%
      
      name        old text-bytes    new text-bytes    delta
      HelloSize         579kB ± 0%        579kB ± 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.8kB ± 0%       72.8kB ± 0%    ~     (all equal)
      
      name        old exe-bytes     new exe-bytes     delta
      HelloSize        1.03MB ± 0%       1.03MB ± 0%    ~     (all equal)
      
      3. There is little change in the go1 benchmark (excluding the noise).
      name                     old time/op    new time/op     delta
      BinaryTree17-4              40.3s ± 1%      40.6s ± 1%  +0.80%  (p=0.000 n=30+30)
      Fannkuch11-4                24.2s ± 1%      24.1s ± 0%    ~     (p=0.093 n=30+30)
      FmtFprintfEmpty-4           834ns ± 0%      826ns ± 0%  -0.93%  (p=0.000 n=29+24)
      FmtFprintfString-4         1.39µs ± 1%     1.36µs ± 0%  -2.02%  (p=0.000 n=30+30)
      FmtFprintfInt-4            1.43µs ± 1%     1.44µs ± 1%    ~     (p=0.155 n=30+29)
      FmtFprintfIntInt-4         2.09µs ± 0%     2.11µs ± 0%  +1.16%  (p=0.000 n=28+30)
      FmtFprintfPrefixedInt-4    2.33µs ± 1%     2.36µs ± 0%  +1.25%  (p=0.000 n=30+30)
      FmtFprintfFloat-4          4.27µs ± 1%     4.32µs ± 1%  +1.27%  (p=0.000 n=30+30)
      FmtManyArgs-4              8.18µs ± 0%     8.14µs ± 0%  -0.46%  (p=0.000 n=25+27)
      GobDecode-4                 101ms ± 1%      101ms ± 1%    ~     (p=0.182 n=29+29)
      GobEncode-4                89.6ms ± 1%     87.8ms ± 2%  -2.02%  (p=0.000 n=30+29)
      Gzip-4                      4.07s ± 1%      4.08s ± 1%    ~     (p=0.173 n=30+27)
      Gunzip-4                    602ms ± 1%      600ms ± 1%  -0.29%  (p=0.000 n=29+28)
      HTTPClientServer-4          679µs ± 4%      683µs ± 3%    ~     (p=0.197 n=30+30)
      JSONEncode-4                241ms ± 1%      239ms ± 1%  -0.84%  (p=0.000 n=30+30)
      JSONDecode-4                903ms ± 1%      882ms ± 1%  -2.33%  (p=0.000 n=30+30)
      Mandelbrot200-4            41.8ms ± 0%     41.8ms ± 0%    ~     (p=0.719 n=30+30)
      GoParse-4                  45.5ms ± 1%     45.8ms ± 1%  +0.52%  (p=0.000 n=30+30)
      RegexpMatchEasy0_32-4      1.27µs ± 1%     1.27µs ± 0%  -0.60%  (p=0.000 n=30+30)
      RegexpMatchEasy0_1K-4      7.77µs ± 6%     7.69µs ± 4%  -0.96%  (p=0.040 n=30+30)
      RegexpMatchEasy1_32-4      1.29µs ± 1%     1.28µs ± 1%  -0.54%  (p=0.000 n=30+30)
      RegexpMatchEasy1_1K-4      10.3µs ± 6%     10.2µs ± 3%    ~     (p=0.453 n=30+27)
      RegexpMatchMedium_32-4     1.98µs ± 1%     2.00µs ± 1%  +0.85%  (p=0.000 n=30+29)
      RegexpMatchMedium_1K-4      503µs ± 0%      503µs ± 1%    ~     (p=0.752 n=30+30)
      RegexpMatchHard_32-4       27.1µs ± 1%     26.5µs ± 0%  -1.96%  (p=0.000 n=30+24)
      RegexpMatchHard_1K-4        809µs ± 1%      799µs ± 1%  -1.29%  (p=0.000 n=29+30)
      Revcomp-4                  67.3ms ± 2%     67.2ms ± 1%    ~     (p=0.265 n=29+29)
      Template-4                  1.08s ± 1%      1.07s ± 0%  -1.39%  (p=0.000 n=30+22)
      TimeParse-4                6.93µs ± 1%     6.96µs ± 1%  +0.40%  (p=0.005 n=30+30)
      TimeFormat-4               13.3µs ± 0%     13.3µs ± 1%    ~     (p=0.734 n=30+30)
      [Geo mean]                  709µs           707µs       -0.32%
      
      name                     old speed      new speed       delta
      GobDecode-4              7.59MB/s ± 1%   7.57MB/s ± 1%    ~     (p=0.145 n=29+29)
      GobEncode-4              8.56MB/s ± 1%   8.74MB/s ± 1%  +2.07%  (p=0.000 n=30+29)
      Gzip-4                   4.76MB/s ± 1%   4.75MB/s ± 1%  -0.25%  (p=0.037 n=30+30)
      Gunzip-4                 32.2MB/s ± 1%   32.3MB/s ± 1%  +0.29%  (p=0.000 n=29+28)
      JSONEncode-4             8.04MB/s ± 1%   8.11MB/s ± 1%  +0.85%  (p=0.000 n=30+30)
      JSONDecode-4             2.15MB/s ± 1%   2.20MB/s ± 1%  +2.29%  (p=0.000 n=30+30)
      GoParse-4                1.27MB/s ± 1%   1.26MB/s ± 1%  -0.73%  (p=0.000 n=30+30)
      RegexpMatchEasy0_32-4    25.1MB/s ± 1%   25.3MB/s ± 0%  +0.61%  (p=0.000 n=30+30)
      RegexpMatchEasy0_1K-4     131MB/s ± 6%    133MB/s ± 4%  +1.35%  (p=0.009 n=28+30)
      RegexpMatchEasy1_32-4    24.9MB/s ± 1%   25.0MB/s ± 1%  +0.54%  (p=0.000 n=30+30)
      RegexpMatchEasy1_1K-4    99.2MB/s ± 6%  100.2MB/s ± 3%    ~     (p=0.448 n=30+27)
      RegexpMatchMedium_32-4    503kB/s ± 1%    500kB/s ± 0%  -0.66%  (p=0.002 n=30+24)
      RegexpMatchMedium_1K-4   2.04MB/s ± 0%   2.04MB/s ± 1%    ~     (p=0.358 n=30+30)
      RegexpMatchHard_32-4     1.18MB/s ± 1%   1.20MB/s ± 1%  +1.75%  (p=0.000 n=30+30)
      RegexpMatchHard_1K-4     1.26MB/s ± 1%   1.28MB/s ± 1%  +1.42%  (p=0.000 n=30+30)
      Revcomp-4                37.8MB/s ± 2%   37.8MB/s ± 1%    ~     (p=0.266 n=29+29)
      Template-4               1.80MB/s ± 1%   1.82MB/s ± 1%  +1.46%  (p=0.000 n=30+30)
      [Geo mean]               6.91MB/s        6.96MB/s       +0.70%
      
      fixes #21583
      
      Change-Id: I24065a80588ccae7de3ad732a3cfb0026cf7e214
      Reviewed-on: https://go-review.googlesource.com/67490Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      1ec78d1d
    • Frank Somers's avatar
      runtime: move vdso_linux_amd64.go to vdso_linux.go · 4477107b
      Frank Somers authored
      This is a preparation step for adding vDSO support on linux/386.
      
      In a follow-on change, the vDSO ELF symbol lookup code in this
      file will be refactored so it can be used on multiple architectures.
      
      First, move the file to an architecture-neutral file name so that
      the change history is preserved. Build tags are added so that the
      build behaves as it did before.
      
      vdso_linux_amd64.go will be recreated later, just containing the
      amd64 specifics.
      
      If the move and refactor were combined in a single change, then the
      history to date would be lost because git would see the existing code
      as a new file.
      
      Change-Id: Iddb5da0d7faf141fd7cc835fe6a80c80153897e9
      Reviewed-on: https://go-review.googlesource.com/69710
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      4477107b
    • Daniel Martí's avatar
      cmd/compile: eliminate some lineno uses · 6013052e
      Daniel Martí authored
      Focused on ranges, selects and switches for this one.
      
      While at it, simplify some vars in typecheckselect.
      
      Updates #19683.
      
      Change-Id: Ib6aabe0f6826cb1930483aeb4bb2de1ff8052d9e
      Reviewed-on: https://go-review.googlesource.com/69690
      Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
      Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      6013052e
    • Alberto Donizetti's avatar
      cmd/compile: fix OTYPESW Op comment · 07f7db3e
      Alberto Donizetti authored
      OTYPESW Op comment says
      
        // List = Left.(type)
      
      this seems to be wrong. Adding
      
        fmt.Printf("n: %v\n", cond)
        fmt.Printf("  n.List: %v\n", cond.List)
        fmt.Printf("  n.Left: %v\n", cond.Left)
        fmt.Printf("  n.Right: %v\n", cond.Right)
      
      to (s *typeSwitch) walk(sw *Node), and compiling the following code
      snippet
      
        var y interface{}
        switch x := y.(type) {
        default:
          println(x)
        }
      
      prints
      
        n: <node TYPESW>
          n.List:
          n.Left: x
          n.Right: y
      
      The correct OTYPESW Node field positions are
      
        // Left = Right.(type)
      
      This is confirmed by the fact that, further in the code,
      typeSwitch.walk() checks that Right (and not Left) is of type
      interface:
      
        cond.Right = walkexpr(cond.Right, &sw.Ninit)
        if !cond.Right.Type.IsInterface() {
          yyerror("type switch must be on an interface")
          return
        }
      
      This patch fixes the OTYPESW comment.
      
      Change-Id: Ief1e409cfabb7640d7f7b0d4faabbcffaf605450
      Reviewed-on: https://go-review.googlesource.com/69112Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      07f7db3e
    • Ian Lance Taylor's avatar
      cmd/compile: disable TestNexting in short mode · 0c53b4ec
      Ian Lance Taylor authored
      Updates #22206
      
      Change-Id: If75feddc01f8f86f294929fa7081c70eb15e581d
      Reviewed-on: https://go-review.googlesource.com/69790
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarRuss Cox <rsc@golang.org>
      0c53b4ec
    • griesemer's avatar
      cmd/compile/internal/syntax: consider function nesting for error recovery · 68e39030
      griesemer authored
      This re-enables functionality that inadvertently was disabled in the
      (long) past.
      
      Also, don't perform branch checks if we had errors in a function
      to avoid spurious errors or (worst-case) crashes.
      
      Slightly modified test/fixedbugs/issue14006.go to make sure the
      test still reports invalid label errors (the surrounding function
      must be syntactically correct).
      
      Change-Id: Id5642930877d7cf3400649094ec75c753b5084b7
      Reviewed-on: https://go-review.googlesource.com/69770
      Run-TryBot: Robert Griesemer <gri@golang.org>
      Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      68e39030
    • griesemer's avatar
      cmd/compile/internal/syntax: factor out parsing of func bodies (cleanup) · 39edffb6
      griesemer authored
      Change-Id: If6481a5401940a923fc9a104981dfb90eed0d1ac
      Reviewed-on: https://go-review.googlesource.com/69750
      Run-TryBot: Robert Griesemer <gri@golang.org>
      Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      39edffb6
    • griesemer's avatar
      cmd/compile/internal/syntax: remove some outdated comments (cleanup) · c87fb208
      griesemer authored
      Change-Id: If242bb99d501420827b764c908580f2363e01ac4
      Reviewed-on: https://go-review.googlesource.com/69730Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      c87fb208
  2. 10 Oct, 2017 14 commits
  3. 09 Oct, 2017 12 commits
  4. 08 Oct, 2017 2 commits