1. 03 Feb, 2017 22 commits
    • Russ Cox's avatar
      cmd/go: split out cmd/go/internal/web · cc03ba32
      Russ Cox authored
      This is one CL in a long sequence of changes to break up the
      go command from one package into a plausible group of packages.
      
      This sequence is concerned only with moving code, not changing
      or cleaning up code. There will still be more cleanup after this sequence.
      
      The entire sequence will be submitted together: it is not a goal
      for the tree to build at every step.
      
      For #18653.
      
      Change-Id: I2f349150659b6ddf6be4c675abba38dfe57ff652
      Reviewed-on: https://go-review.googlesource.com/36201Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
      cc03ba32
    • Russ Cox's avatar
      cmd/go: split out cmd/go/internal/env · 6bc9844b
      Russ Cox authored
      This is one CL in a long sequence of changes to break up the
      go command from one package into a plausible group of packages.
      
      This sequence is concerned only with moving code, not changing
      or cleaning up code. There will still be more cleanup after this sequence.
      
      The entire sequence will be submitted together: it is not a goal
      for the tree to build at every step.
      
      For #18653.
      
      Change-Id: I28b20d53d20dff06eede574eb5c20359db0d3991
      Reviewed-on: https://go-review.googlesource.com/36200Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
      6bc9844b
    • Russ Cox's avatar
      cmd/go: split out cmd/go/internal/fmt · 36ce197c
      Russ Cox authored
      This is one CL in a long sequence of changes to break up the
      go command from one package into a plausible group of packages.
      
      This sequence is concerned only with moving code, not changing
      or cleaning up code. There will still be more cleanup after this sequence.
      
      The entire sequence will be submitted together: it is not a goal
      for the tree to build at every step.
      
      For #18653.
      
      Change-Id: I8e325d75f553b5d0b6224b56a705d2e2cb895de4
      Reviewed-on: https://go-review.googlesource.com/36199Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
      36ce197c
    • Russ Cox's avatar
      cmd/go: split out cmd/go/internal/test · 4efe9250
      Russ Cox authored
      This is one CL in a long sequence of changes to break up the
      go command from one package into a plausible group of packages.
      
      This sequence is concerned only with moving code, not changing
      or cleaning up code. There will still be more cleanup after this sequence.
      
      The entire sequence will be submitted together: it is not a goal
      for the tree to build at every step.
      
      For #18653.
      
      Change-Id: I2d0ccdb84814537ab8b8842aa1b5f5bc0a88a0fc
      Reviewed-on: https://go-review.googlesource.com/36198Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
      4efe9250
    • Russ Cox's avatar
      cmd/go: split out cmd/go/internal/work · 3c667ef4
      Russ Cox authored
      This is one CL in a long sequence of changes to break up the
      go command from one package into a plausible group of packages.
      
      This sequence is concerned only with moving code, not changing
      or cleaning up code. There will still be more cleanup after this sequence.
      
      The entire sequence will be submitted together: it is not a goal
      for the tree to build at every step.
      
      For #18653.
      
      Change-Id: Icdd181098f9f0e81f68bf201e6867cdd8f820300
      Reviewed-on: https://go-review.googlesource.com/36197Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
      3c667ef4
    • Russ Cox's avatar
      cmd/go: split out cmd/go/internal/load · eb93b20c
      Russ Cox authored
      This is one CL in a long sequence of changes to break up the
      go command from one package into a plausible group of packages.
      
      This sequence is concerned only with moving code, not changing
      or cleaning up code. There will still be more cleanup after this sequence.
      
      The entire sequence will be submitted together: it is not a goal
      for the tree to build at every step.
      
      For #18653.
      
      Change-Id: Ic802483e50598def638f1e2e706d5fdf7822d32d
      Reviewed-on: https://go-review.googlesource.com/36196Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
      eb93b20c
    • Russ Cox's avatar
      cmd/go: split out cmd/go/internal/buildid · 461c3e52
      Russ Cox authored
      This is one CL in a long sequence of changes to break up the
      go command from one package into a plausible group of packages.
      
      This sequence is concerned only with moving code, not changing
      or cleaning up code. There will still be more cleanup after this sequence.
      
      The entire sequence will be submitted together: it is not a goal
      for the tree to build at every step.
      
      For #18653.
      
      Change-Id: I20dbc352c3df3c83a75811dd8e78c580a46b2202
      Reviewed-on: https://go-review.googlesource.com/36195Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
      461c3e52
    • Russ Cox's avatar
      cmd/go: split out cmd/go/internal/help · 2cab41d5
      Russ Cox authored
      This is one CL in a long sequence of changes to break up the
      go command from one package into a plausible group of packages.
      
      This sequence is concerned only with moving code, not changing
      or cleaning up code. There will still be more cleanup after this sequence.
      
      The entire sequence will be submitted together: it is not a goal
      for the tree to build at every step.
      
      For #18653.
      
      Change-Id: I4cf05b076d81b780c87a31378523929b5da8964b
      Reviewed-on: https://go-review.googlesource.com/36194Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
      2cab41d5
    • Russ Cox's avatar
      cmd/go: split out cmd/go/internal/base · 6dc9e31f
      Russ Cox authored
      This is one CL in a long sequence of changes to break up the
      go command from one package into a plausible group of packages.
      
      This sequence is concerned only with moving code, not changing
      or cleaning up code. There will still be more cleanup after this sequence.
      
      The entire sequence will be submitted together: it is not a goal
      for the tree to build at every step.
      
      For #18653.
      
      Change-Id: I7c5dde6e7fe4f390e6607303b4d42535c674eac3
      Reviewed-on: https://go-review.googlesource.com/36193Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
      6dc9e31f
    • Russ Cox's avatar
      cmd/dist: move cmd/go z files to cmd/go/internal/cfg · b60e61ab
      Russ Cox authored
      This is one CL in a long sequence of changes to break up the
      go command from one package into a plausible group of packages.
      
      This sequence is concerned only with moving code, not changing
      or cleaning up code. There will still be more cleanup after this sequence.
      
      The entire sequence will be submitted together: it is not a goal
      for the tree to build at every step.
      
      For #18653.
      
      Change-Id: I6ee5b053683034ea9462a9a0a4ea4f5ad24fa5a1
      Reviewed-on: https://go-review.googlesource.com/36192Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
      b60e61ab
    • Russ Cox's avatar
      cmd/go: split out cmd/go/internal/cfg · a918864c
      Russ Cox authored
      This is one CL in a long sequence of changes to break up the
      go command from one package into a plausible group of packages.
      
      This sequence is concerned only with moving code, not changing
      or cleaning up code. There will still be more cleanup after this sequence.
      
      The entire sequence will be submitted together: it is not a goal
      for the tree to build at every step.
      
      For #18653.
      
      Change-Id: Icb3f168ade91e7da5fcab89ac75b768daefff359
      Reviewed-on: https://go-review.googlesource.com/36191Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
      a918864c
    • Russ Cox's avatar
      cmd/go: split out cmd/go/internal/str · 762eb408
      Russ Cox authored
      This is one CL in a long sequence of changes to break up the
      go command from one package into a plausible group of packages.
      
      This sequence is concerned only with moving code, not changing
      or cleaning up code. There will still be more cleanup after this sequence.
      
      The entire sequence will be submitted together: it is not a goal
      for the tree to build at every step.
      
      For #18653.
      
      Change-Id: I63f578f5ac99c707b599ac5659293c46b275567d
      Reviewed-on: https://go-review.googlesource.com/36190Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
      762eb408
    • Russ Cox's avatar
      cmd/go: break a few dependencies · d9e6835b
      Russ Cox authored
      This CL makes a few naming changes to break dependencies
      between different parts of the go command, to make it easier
      to split into different packages.
      
      This is the first CL in a long sequence of changes to break up the
      go command from one package into a plausible group of packages.
      
      This sequence is concerned only with moving code, not changing
      or cleaning up code. There will still be more cleanup after this sequence.
      
      The entire sequence will be submitted together: it is not a goal
      for the tree to build at every step.
      
      For #18653.
      
      Change-Id: I69a98b9ea48e61b1e1cda95273d29860b525415f
      Reviewed-on: https://go-review.googlesource.com/36129Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
      d9e6835b
    • Elias Naur's avatar
      runtime: handle SIGPIPE in c-archive and c-shared programs · 78074f68
      Elias Naur authored
      Before this CL, Go programs in c-archive or c-shared buildmodes
      would not handle SIGPIPE. That leads to surprising behaviour where
      writes on a closed pipe or socket would raise SIGPIPE and terminate
      the program. This CL changes the Go runtime to handle
      SIGPIPE regardless of buildmode. In addition, SIGPIPE from non-Go
      code is forwarded.
      
      This is a refinement of CL 32796 that fixes the case where a non-default
      handler for SIGPIPE is installed by the host C program.
      
      Fixes #17393
      
      Change-Id: Ia41186e52c1ac209d0a594bae9904166ae7df7de
      Reviewed-on: https://go-review.googlesource.com/35960
      Run-TryBot: Elias Naur <elias.naur@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      78074f68
    • Josh Bleecher Snyder's avatar
      cmd/compile: make liveness more efficient · b612ab3a
      Josh Bleecher Snyder authored
      When the number of variables in a function is very large,
      liveness analysis gets less efficient, since every bit vector
      is O(number of variables).
      
      Improve the situation by returning a sparse representation
      from progeffects. In all scenarios, progeffects either
      returns a slice that is shared function-wide, 
      and which is usually small, or a slice that is guaranteed
      to have at most three values.
      
      Reduces compilation time for the code in #8225 Comment 1 by ~10%.
      Minor effects on regular packages (below).
      
      Passes toolstash -cmp.
      
      Updates #8225
      
      name       old time/op      new time/op      delta
      Template        215ms ± 2%       212ms ± 4%  -1.31%  (p=0.001 n=30+30)
      Unicode        98.3ms ± 3%      98.4ms ± 5%    ~     (p=0.971 n=30+30)
      GoTypes         657ms ± 3%       651ms ± 2%  -0.98%  (p=0.001 n=30+27)
      Compiler        2.78s ± 2%       2.77s ± 2%  -0.60%  (p=0.006 n=30+30)
      Flate           130ms ± 4%       130ms ± 4%    ~     (p=0.712 n=29+30)
      GoParser        159ms ± 5%       158ms ± 3%    ~     (p=0.331 n=29+30)
      Reflect         406ms ± 3%       404ms ± 3%  -0.69%  (p=0.041 n=29+30)
      Tar             117ms ± 4%       117ms ± 3%    ~     (p=0.886 n=30+29)
      XML             219ms ± 2%       217ms ± 2%    ~     (p=0.091 n=29+24)
      
      name       old user-ns/op   new user-ns/op   delta
      Template   272user-ms ± 3%  270user-ms ± 3%  -1.03%  (p=0.004 n=30+30)
      Unicode    138user-ms ± 2%  138user-ms ± 3%    ~     (p=0.902 n=29+29)
      GoTypes    891user-ms ± 2%  883user-ms ± 2%  -0.95%  (p=0.000 n=29+29)
      Compiler   3.85user-s ± 2%  3.84user-s ± 2%    ~     (p=0.236 n=30+30)
      Flate      167user-ms ± 2%  166user-ms ± 4%    ~     (p=0.511 n=28+30)
      GoParser   211user-ms ± 4%  210user-ms ± 3%    ~     (p=0.287 n=29+30)
      Reflect    539user-ms ± 3%  536user-ms ± 2%  -0.59%  (p=0.034 n=29+30)
      Tar        154user-ms ± 3%  155user-ms ± 4%    ~     (p=0.786 n=30+30)
      XML        289user-ms ± 3%  288user-ms ± 4%    ~     (p=0.249 n=30+26)
      
      name       old alloc/op     new alloc/op     delta
      Template       40.7MB ± 0%      40.8MB ± 0%  +0.09%  (p=0.001 n=30+30)
      Unicode        30.8MB ± 0%      30.8MB ± 0%    ~     (p=0.112 n=30+30)
      GoTypes         123MB ± 0%       124MB ± 0%  +0.09%  (p=0.000 n=30+30)
      Compiler        473MB ± 0%       473MB ± 0%  +0.05%  (p=0.000 n=30+30)
      Flate          26.5MB ± 0%      26.5MB ± 0%    ~     (p=0.186 n=29+30)
      GoParser       32.3MB ± 0%      32.4MB ± 0%  +0.07%  (p=0.021 n=28+30)
      Reflect        84.4MB ± 0%      84.6MB ± 0%  +0.21%  (p=0.000 n=30+30)
      Tar            27.3MB ± 0%      27.3MB ± 0%  +0.09%  (p=0.010 n=30+28)
      XML            44.7MB ± 0%      44.7MB ± 0%  +0.07%  (p=0.002 n=30+30)
      
      name       old allocs/op    new allocs/op    delta
      Template         401k ± 1%        400k ± 1%    ~     (p=0.321 n=30+30)
      Unicode          331k ± 1%        331k ± 1%    ~     (p=0.357 n=30+28)
      GoTypes         1.24M ± 0%       1.24M ± 1%  -0.19%  (p=0.001 n=30+30)
      Compiler        4.27M ± 0%       4.27M ± 0%  -0.13%  (p=0.000 n=30+30)
      Flate            252k ± 1%        251k ± 1%  -0.30%  (p=0.005 n=30+30)
      GoParser         325k ± 1%        325k ± 1%    ~     (p=0.224 n=28+30)
      Reflect         1.06M ± 0%       1.05M ± 0%  -0.34%  (p=0.000 n=30+30)
      Tar              266k ± 1%        266k ± 1%    ~     (p=0.333 n=30+30)
      XML              416k ± 1%        415k ± 1%    ~     (p=0.144 n=30+29)
      
      
      Change-Id: I6ba67a9203516373062a2618122306da73333d98
      Reviewed-on: https://go-review.googlesource.com/36211
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarMatthew Dempsky <mdempsky@google.com>
      b612ab3a
    • Chris Broadfoot's avatar
      readme: add attribution for the Gopher image · ef259390
      Chris Broadfoot authored
      Change-Id: I3b1317f0ab46e03d8c5a0af74c83183710a75055
      Reviewed-on: https://go-review.googlesource.com/36214Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
      Reviewed-by: 's avatarRob Pike <r@golang.org>
      ef259390
    • Russ Cox's avatar
      time: record monotonic clock reading in time.Now, for more accurate comparisons · 0e335590
      Russ Cox authored
      See https://golang.org/design/12914-monotonic for details.
      
      Fixes #12914.
      
      Change-Id: I80edc2e6c012b4ace7161c84cf067d444381a009
      Reviewed-on: https://go-review.googlesource.com/36255
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarCaleb Spare <cespare@gmail.com>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      0e335590
    • Keith Randall's avatar
      cmd/compile: make sure output params are live if there is a defer · 8179b9b4
      Keith Randall authored
      If there is a defer, and that defer recovers, then the caller
      can see all of the output parameters.  That means that we must
      mark all the output parameters live at any point which might panic.
      
      If there is no defer then this is not necessary.  This is implemented.
      
      We could also detect whether there is a recover in any of the defers.
      If not, we would need to mark only output params that the defer
      actually references (and the closure mechanism already does that).
      This is not implemented.
      
      Fixes #18860.
      
      Change-Id: If984fe6686eddce9408bf25e725dd17fc16b8578
      Reviewed-on: https://go-review.googlesource.com/36030Reviewed-by: 's avatarAustin Clements <austin@google.com>
      Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
      8179b9b4
    • Josh Bleecher Snyder's avatar
      cmd/compile: optimize (ZeroExt (Const [c])) · 12c58bbf
      Josh Bleecher Snyder authored
      These rules trigger 116 times while running make.bash.
      And at least for the sample code at
      https://github.com/golang/go/issues/18906#issuecomment-277174241
      they are providing optimizations not already present
      in amd64.
      
      Updates #18906
      
      Change-Id: I410a480f566f5ab176fc573fb5ac74f9cffec225
      Reviewed-on: https://go-review.googlesource.com/36217
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      12c58bbf
    • Josh Bleecher Snyder's avatar
      cmd/compile: speed up hot phi insertion code · 61fb2f6d
      Josh Bleecher Snyder authored
      This speeds up compilation of the code in #8225 by 25%-30%.
      The complexity of the algorithm is unchanged,
      but this shrinks the constant factor so much that it doesn't matter,
      even the size of the giant type switch gets scaled up dramatically.
      
      name       old time/op      new time/op      delta
      Template        218ms ± 5%       217ms ±10%    ~           (p=0.163 n=27+30)
      Unicode        98.2ms ± 6%      97.7ms ±10%    ~           (p=0.150 n=27+29)
      GoTypes         654ms ± 5%       650ms ± 5%    ~           (p=0.350 n=30+30)
      Compiler        2.70s ± 4%       2.68s ± 3%    ~           (p=0.128 n=30+29)
      
      name       old user-ns/op   new user-ns/op   delta
      Template   276user-ms ± 6%  271user-ms ± 7%  -1.83%        (p=0.003 n=29+28)
      Unicode    138user-ms ± 5%  137user-ms ± 4%    ~           (p=0.071 n=27+27)
      GoTypes    881user-ms ± 4%  877user-ms ± 4%    ~           (p=0.423 n=30+30)
      Compiler   3.76user-s ± 4%  3.72user-s ± 2%  -0.84%        (p=0.028 n=30+29)
      
      name       old alloc/op     new alloc/op     delta
      Template       40.7MB ± 0%      40.7MB ± 0%    ~           (p=0.936 n=30+30)
      Unicode        30.8MB ± 0%      30.8MB ± 0%    ~           (p=0.859 n=28+30)
      GoTypes         123MB ± 0%       123MB ± 0%    ~           (p=0.273 n=30+30)
      Compiler        472MB ± 0%       472MB ± 0%    ~           (p=0.432 n=30+30)
      
      name       old allocs/op    new allocs/op    delta
      Template         401k ± 1%        401k ± 1%    ~           (p=0.859 n=30+30)
      Unicode          331k ± 0%        331k ± 1%    ~           (p=0.823 n=28+30)
      GoTypes         1.24M ± 0%       1.24M ± 0%    ~           (p=0.286 n=30+30)
      Compiler        4.26M ± 0%       4.26M ± 0%    ~           (p=0.359 n=30+30)
      
      Change-Id: Ia850065a9a84c07a5b0b4e23c1758b5679498da7
      Reviewed-on: https://go-review.googlesource.com/36112
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      61fb2f6d
    • Keith Randall's avatar
      runtime: darwin/amd64, don't depend on outarg slots being unmodified · 69e16349
      Keith Randall authored
      sigtramp was calling sigtrampgo and depending on the fact that
      the 3rd argument slot will not be modified on return.  Our calling
      convention doesn't guarantee that.  Avoid that assumption.
      
      There's no actual bug here, as sigtrampgo does not in fact modify its
      argument slots.  But I found this while working on the dead stack slot
      clobbering tool.  https://go-review.googlesource.com/c/23924/
      
      Change-Id: Ia7e791a2b4c1c74fff24cba8169e7840b4b06ffc
      Reviewed-on: https://go-review.googlesource.com/36216
      Run-TryBot: Keith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      69e16349
    • Russ Cox's avatar
      net/http: fix dns hijacking test · 64c52808
      Russ Cox authored
      The name lookups are unrooted; the test should be unrooted too.
      Correctly skips the tests if the DNS config specifies a domain
      suffix that has a wildcard entry causing all unrooted names to resolve.
      
      Change-Id: I80470326a5d332f3b8d64663f765fd304c5e0811
      Reviewed-on: https://go-review.googlesource.com/36253
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      64c52808
  2. 02 Feb, 2017 18 commits
    • Josh Bleecher Snyder's avatar
      cmd/compile: add reusable []Location to ssa.Config · 57546d67
      Josh Bleecher Snyder authored
      name       old time/op      new time/op      delta
      Template        218ms ± 3%       214ms ± 3%  -1.70%  (p=0.000 n=30+30)
      Unicode         100ms ± 3%       100ms ± 4%    ~     (p=0.614 n=29+30)
      GoTypes         657ms ± 1%       660ms ± 3%  +0.46%  (p=0.046 n=29+30)
      Compiler        2.80s ± 2%       2.80s ± 1%    ~     (p=0.451 n=28+29)
      Flate           131ms ± 2%       132ms ± 4%    ~     (p=1.000 n=29+29)
      GoParser        159ms ± 3%       160ms ± 5%    ~     (p=0.341 n=28+30)
      Reflect         406ms ± 3%       408ms ± 4%    ~     (p=0.511 n=28+30)
      Tar             118ms ± 4%       118ms ± 4%    ~     (p=0.827 n=29+30)
      XML             222ms ± 6%       222ms ± 3%    ~     (p=0.532 n=30+30)
      
      name       old user-ns/op   new user-ns/op   delta
      Template   274user-ms ± 3%  272user-ms ± 3%  -0.87%  (p=0.015 n=29+30)
      Unicode    140user-ms ± 4%  140user-ms ± 3%    ~     (p=0.735 n=29+30)
      GoTypes    890user-ms ± 1%  897user-ms ± 2%  +0.88%  (p=0.002 n=29+30)
      Compiler   3.88user-s ± 2%  3.89user-s ± 1%    ~     (p=0.132 n=30+29)
      Flate      168user-ms ± 2%  157user-ms ± 4%  -6.21%  (p=0.000 n=25+28)
      GoParser   211user-ms ± 2%  213user-ms ± 5%    ~     (p=0.086 n=28+30)
      Reflect    539user-ms ± 2%  541user-ms ± 3%    ~     (p=0.267 n=27+29)
      Tar        156user-ms ± 7%  155user-ms ± 5%    ~     (p=0.708 n=30+30)
      XML        291user-ms ± 5%  294user-ms ± 3%  +0.83%  (p=0.029 n=29+30)
      
      name       old alloc/op     new alloc/op     delta
      Template       40.7MB ± 0%      39.4MB ± 0%  -3.26%  (p=0.000 n=29+26)
      Unicode        30.8MB ± 0%      30.7MB ± 0%  -0.40%  (p=0.000 n=28+30)
      GoTypes         123MB ± 0%       119MB ± 0%  -3.47%  (p=0.000 n=30+29)
      Compiler        472MB ± 0%       455MB ± 0%  -3.60%  (p=0.000 n=30+30)
      Flate          26.5MB ± 0%      25.6MB ± 0%  -3.21%  (p=0.000 n=28+30)
      GoParser       32.3MB ± 0%      31.4MB ± 0%  -2.98%  (p=0.000 n=29+30)
      Reflect        84.4MB ± 0%      82.1MB ± 0%  -2.83%  (p=0.000 n=30+30)
      Tar            27.3MB ± 0%      26.5MB ± 0%  -2.70%  (p=0.000 n=29+29)
      XML            44.6MB ± 0%      43.1MB ± 0%  -3.49%  (p=0.000 n=30+30)
      
      name       old allocs/op    new allocs/op    delta
      Template         401k ± 1%        399k ± 0%  -0.35%  (p=0.000 n=30+28)
      Unicode          331k ± 0%        331k ± 1%    ~     (p=0.907 n=28+30)
      GoTypes         1.24M ± 0%       1.23M ± 0%  -0.43%  (p=0.000 n=30+30)
      Compiler        4.26M ± 0%       4.25M ± 0%  -0.34%  (p=0.000 n=29+30)
      Flate            252k ± 1%        251k ± 1%  -0.41%  (p=0.000 n=30+30)
      GoParser         325k ± 1%        324k ± 1%  -0.31%  (p=0.000 n=27+30)
      Reflect         1.06M ± 0%       1.05M ± 0%  -0.69%  (p=0.000 n=30+30)
      Tar              266k ± 1%        265k ± 1%  -0.51%  (p=0.000 n=29+30)
      XML              416k ± 1%        415k ± 1%  -0.36%  (p=0.002 n=30+30)
      
      Change-Id: I8f784001324df83b2764c44f0e83a540e5beab34
      Reviewed-on: https://go-review.googlesource.com/36212
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      57546d67
    • Cherry Zhang's avatar
      runtime: skip flaky TestGdbPythonCgo on MIPS · f69a6def
      Cherry Zhang authored
      It seems the problem is on gdb and the dynamic linker. Skip the
      test for now until we figure out what's going on with the system.
      
      Updates #18784.
      
      Change-Id: Ic9320ffd463f6c231b2c4192652263b1cf7f4231
      Reviewed-on: https://go-review.googlesource.com/36250
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      f69a6def
    • Jaana Burcu Dogan's avatar
      doc: consistently link to the SettingGOPATH page · ecbf9084
      Jaana Burcu Dogan authored
      Change-Id: I4fdd81aa7c9b180cb72ec4af3e7d9d803c99ecac
      Reviewed-on: https://go-review.googlesource.com/36033Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      ecbf9084
    • Cherry Zhang's avatar
      cmd/compile: simplify IsNonNil ConstNil · 6ad2d6aa
      Cherry Zhang authored
      Change-Id: I9ed5a2065cef06708e319b16c801da2eff42004e
      Reviewed-on: https://go-review.googlesource.com/35497
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      6ad2d6aa
    • Cherry Zhang's avatar
      cmd/compile: remove nil check for Zero/Move on 386, AMD64, S390X · fddc0045
      Cherry Zhang authored
      Fixes #18003.
      
      Change-Id: Iadcc5c424c64badecfb5fdbd4dbd9197df56182c
      Reviewed-on: https://go-review.googlesource.com/33421
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      fddc0045
    • Robert Griesemer's avatar
      cmd/compile: provide line number for cgo directive error (fix a TODO) · c1363b2d
      Robert Griesemer authored
      Also: Remove double "go:" prefix in related error message.
      
      Fixes #18882.
      
      Change-Id: Ifbbd8e2f7529b43f035d3dbf7ca4a91f212bc6b6
      Reviewed-on: https://go-review.googlesource.com/36121
      Run-TryBot: Robert Griesemer <gri@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarMatthew Dempsky <mdempsky@google.com>
      c1363b2d
    • Lars Wiegman's avatar
      runtime: use mach_absolute_time for runtime.nanotime · e546b295
      Lars Wiegman authored
      The existing darwin/amd64 implementation of runtime.nanotime returns the
      wallclock time, which results in timers not functioning properly when
      system time runs backwards. By implementing the algorithm used by the
      darwin syscall mach_absolute_time, timers will function as expected.
      
      The algorithm is described at
      https://opensource.apple.com/source/xnu/xnu-3248.60.10/libsyscall/wrappers/mach_absolute_time.s
      
      Fixes #17610
      
      Change-Id: I9c8d35240d48249a6837dca1111b1406e2686f67
      Reviewed-on: https://go-review.googlesource.com/35292Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      e546b295
    • Josh Bleecher Snyder's avatar
      cmd/compile: skip convT2E for empty structs · 8958d8ce
      Josh Bleecher Snyder authored
      Fixes #18402
      
      Change-Id: I5af800857fb2e365ce4224eece9171277106ec7d
      Reviewed-on: https://go-review.googlesource.com/35562
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      8958d8ce
    • Keith Randall's avatar
      cmd/compile: better implementation of Slicemask · 3d5eb4a6
      Keith Randall authored
      Use (-x)>>63 instead of ((x-1)>>63)^-1 to get a mask that
      is 0 when x is 0 and all ones when x is positive.
      
      Saves one instruction when slicing.
      
      Change-Id: Ib46d53d3aac6530ac481fa2f265a6eadf3df0567
      Reviewed-on: https://go-review.googlesource.com/35641
      Run-TryBot: Keith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
      3d5eb4a6
    • Josh Bleecher Snyder's avatar
      cmd/compile, runtime: convert byte-sized values to interfaces without allocation · 03583675
      Josh Bleecher Snyder authored
      Based in part on khr's CL 2500.
      
      Updates #17725
      Updates #18121
      
      Change-Id: I744e1f92fc2104e6c5bd883a898c30b2eea8cc31
      Reviewed-on: https://go-review.googlesource.com/35555
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      03583675
    • Josh Bleecher Snyder's avatar
      cmd/compile: convert constants to interfaces without allocating · c682d323
      Josh Bleecher Snyder authored
      The order pass is responsible for ensuring that
      values passed to runtime functions, including
      convT2E/convT2I, are addressable.
      
      Prior to this CL, this was always accomplished
      by creating a temp, which frequently escaped to
      the heap, causing allocations, perhaps most
      notably in code like:
      
      fmt.Println(1, 2, 3) // allocates three times
      
      None of the runtime routines modify the contents
      of the pointers they receive, so in the case of
      constants, instead of creating a temp value,
      we can create a static value.
      
      (Marking the static value as read-only provides
      protection against accidental attempts by the runtime
      to modify the constant data.)
      
      This improves code generation for code like:
      
      panic("abc")
      c <- 2 // c is a chan int
      
      which can now simply refer to "abc" and 2,
      rather than going by way of a temporary.
      
      It also allows us to optimize convT2E/convT2I,
      by recognizing static readonly values
      and directly constructing the interface.
      
      This CL adds ~0.5% to binary size, despite
      decreasing the size of many functions,
      because it also adds many static symbols.
      
      This binary size regression could be recovered in
      future (but currently unplanned) work.
      
      There is a lot of content-duplication in these
      symbols; this statement generates six new symbols,
      three containing an int 1 and three containing
      a pointer to the string "a":
      
      fmt.Println(1, 1, 1, "a", "a", "a")
      
      These symbols could be made content-addressable.
      
      Furthermore, these symbols are small, so the
      alignment and naming overhead is large.
      As with the go.strings section, these symbols
      could be hidden and have their alignment reduced.
      
      The changes to test/live.go make it impossible
      (at least with current optimization techniques)
      to place the values being passed to the runtime
      in static symbols, preserving autotmp creation.
      
      Fixes #18704
      
      Benchmarks from fmt and go-kit's logging package:
      
      github.com/go-kit/kit/log
      
      name                      old time/op    new time/op    delta
      JSONLoggerSimple-8          1.91µs ± 2%    2.11µs ±22%     ~     (p=1.000 n=9+10)
      JSONLoggerContextual-8      2.60µs ± 6%    2.43µs ± 2%   -6.29%  (p=0.000 n=9+10)
      Discard-8                    101ns ± 2%      34ns ±14%  -66.33%  (p=0.000 n=10+9)
      OneWith-8                    161ns ± 1%     102ns ±16%  -36.78%  (p=0.000 n=10+10)
      TwoWith-8                    175ns ± 3%     106ns ± 7%  -39.36%  (p=0.000 n=10+9)
      TenWith-8                    293ns ± 3%     227ns ±15%  -22.44%  (p=0.000 n=9+10)
      LogfmtLoggerSimple-8         704ns ± 2%     608ns ± 2%  -13.65%  (p=0.000 n=10+9)
      LogfmtLoggerContextual-8     962ns ± 1%     860ns ±17%  -10.57%  (p=0.003 n=9+10)
      NopLoggerSimple-8            188ns ± 1%     120ns ± 1%  -36.39%  (p=0.000 n=9+10)
      NopLoggerContextual-8        379ns ± 1%     243ns ± 0%  -35.77%  (p=0.000 n=9+10)
      ValueBindingTimestamp-8      577ns ± 1%     499ns ± 1%  -13.51%  (p=0.000 n=10+10)
      ValueBindingCaller-8         898ns ± 2%     844ns ± 2%   -6.00%  (p=0.000 n=10+10)
      
      name                      old alloc/op   new alloc/op   delta
      JSONLoggerSimple-8            904B ± 0%      872B ± 0%   -3.54%  (p=0.000 n=10+10)
      JSONLoggerContextual-8      1.20kB ± 0%    1.14kB ± 0%   -5.33%  (p=0.000 n=10+10)
      Discard-8                    64.0B ± 0%     32.0B ± 0%  -50.00%  (p=0.000 n=10+10)
      OneWith-8                    96.0B ± 0%     64.0B ± 0%  -33.33%  (p=0.000 n=10+10)
      TwoWith-8                     160B ± 0%      128B ± 0%  -20.00%  (p=0.000 n=10+10)
      TenWith-8                     672B ± 0%      640B ± 0%   -4.76%  (p=0.000 n=10+10)
      LogfmtLoggerSimple-8          128B ± 0%       96B ± 0%  -25.00%  (p=0.000 n=10+10)
      LogfmtLoggerContextual-8      304B ± 0%      240B ± 0%  -21.05%  (p=0.000 n=10+10)
      NopLoggerSimple-8             128B ± 0%       96B ± 0%  -25.00%  (p=0.000 n=10+10)
      NopLoggerContextual-8         304B ± 0%      240B ± 0%  -21.05%  (p=0.000 n=10+10)
      ValueBindingTimestamp-8       159B ± 0%      127B ± 0%  -20.13%  (p=0.000 n=10+10)
      ValueBindingCaller-8          112B ± 0%       80B ± 0%  -28.57%  (p=0.000 n=10+10)
      
      name                      old allocs/op  new allocs/op  delta
      JSONLoggerSimple-8            19.0 ± 0%      17.0 ± 0%  -10.53%  (p=0.000 n=10+10)
      JSONLoggerContextual-8        25.0 ± 0%      21.0 ± 0%  -16.00%  (p=0.000 n=10+10)
      Discard-8                     3.00 ± 0%      1.00 ± 0%  -66.67%  (p=0.000 n=10+10)
      OneWith-8                     3.00 ± 0%      1.00 ± 0%  -66.67%  (p=0.000 n=10+10)
      TwoWith-8                     3.00 ± 0%      1.00 ± 0%  -66.67%  (p=0.000 n=10+10)
      TenWith-8                     3.00 ± 0%      1.00 ± 0%  -66.67%  (p=0.000 n=10+10)
      LogfmtLoggerSimple-8          4.00 ± 0%      2.00 ± 0%  -50.00%  (p=0.000 n=10+10)
      LogfmtLoggerContextual-8      7.00 ± 0%      3.00 ± 0%  -57.14%  (p=0.000 n=10+10)
      NopLoggerSimple-8             4.00 ± 0%      2.00 ± 0%  -50.00%  (p=0.000 n=10+10)
      NopLoggerContextual-8         7.00 ± 0%      3.00 ± 0%  -57.14%  (p=0.000 n=10+10)
      ValueBindingTimestamp-8       5.00 ± 0%      3.00 ± 0%  -40.00%  (p=0.000 n=10+10)
      ValueBindingCaller-8          4.00 ± 0%      2.00 ± 0%  -50.00%  (p=0.000 n=10+10)
      
      fmt
      
      name                             old time/op    new time/op    delta
      SprintfPadding-8                   88.9ns ± 3%    79.1ns ± 1%   -11.09%  (p=0.000 n=10+7)
      SprintfEmpty-8                     12.6ns ± 3%    12.8ns ± 3%      ~     (p=0.136 n=10+10)
      SprintfString-8                    38.7ns ± 5%    26.9ns ± 6%   -30.65%  (p=0.000 n=10+10)
      SprintfTruncateString-8            56.7ns ± 2%    47.0ns ± 3%   -17.05%  (p=0.000 n=10+10)
      SprintfQuoteString-8                164ns ± 2%     153ns ± 2%    -7.01%  (p=0.000 n=10+10)
      SprintfInt-8                       38.9ns ±15%    26.5ns ± 2%   -31.93%  (p=0.000 n=10+9)
      SprintfIntInt-8                    60.3ns ± 9%    38.2ns ± 1%   -36.67%  (p=0.000 n=10+8)
      SprintfPrefixedInt-8               58.6ns ±13%    51.2ns ±11%   -12.66%  (p=0.001 n=10+10)
      SprintfFloat-8                     71.4ns ± 3%    64.2ns ± 3%   -10.08%  (p=0.000 n=8+10)
      SprintfComplex-8                    175ns ± 3%     159ns ± 2%    -9.03%  (p=0.000 n=10+10)
      SprintfBoolean-8                   33.5ns ± 4%    25.7ns ± 5%   -23.28%  (p=0.000 n=10+10)
      SprintfHexString-8                 65.3ns ± 3%    51.7ns ± 5%   -20.86%  (p=0.000 n=10+9)
      SprintfHexBytes-8                  67.2ns ± 5%    67.9ns ± 4%      ~     (p=0.383 n=10+10)
      SprintfBytes-8                      129ns ± 7%     124ns ± 7%      ~     (p=0.074 n=9+10)
      SprintfStringer-8                   127ns ± 4%     126ns ± 8%      ~     (p=0.506 n=9+10)
      SprintfStructure-8                  357ns ± 3%     359ns ± 3%      ~     (p=0.469 n=10+10)
      ManyArgs-8                          203ns ± 6%     126ns ± 3%   -37.94%  (p=0.000 n=10+10)
      FprintInt-8                         119ns ±10%      74ns ± 3%   -37.54%  (p=0.000 n=10+10)
      FprintfBytes-8                      122ns ± 4%     120ns ± 3%      ~     (p=0.124 n=10+10)
      FprintIntNoAlloc-8                 78.2ns ± 5%    74.1ns ± 3%    -5.28%  (p=0.000 n=10+10)
      ScanInts-8                          349µs ± 1%     349µs ± 0%      ~     (p=0.606 n=9+8)
      ScanRecursiveInt-8                 43.8ms ± 7%    40.1ms ± 2%    -8.42%  (p=0.000 n=10+10)
      ScanRecursiveIntReaderWrapper-8    43.5ms ± 4%    40.4ms ± 2%    -7.16%  (p=0.000 n=10+9)
      
      name                             old alloc/op   new alloc/op   delta
      SprintfPadding-8                    24.0B ± 0%     16.0B ± 0%   -33.33%  (p=0.000 n=10+10)
      SprintfEmpty-8                      0.00B          0.00B           ~     (all equal)
      SprintfString-8                     21.0B ± 0%      5.0B ± 0%   -76.19%  (p=0.000 n=10+10)
      SprintfTruncateString-8             32.0B ± 0%     16.0B ± 0%   -50.00%  (p=0.000 n=10+10)
      SprintfQuoteString-8                48.0B ± 0%     32.0B ± 0%   -33.33%  (p=0.000 n=10+10)
      SprintfInt-8                        16.0B ± 0%      1.0B ± 0%   -93.75%  (p=0.000 n=10+10)
      SprintfIntInt-8                     24.0B ± 0%      3.0B ± 0%   -87.50%  (p=0.000 n=10+10)
      SprintfPrefixedInt-8                72.0B ± 0%     64.0B ± 0%   -11.11%  (p=0.000 n=10+10)
      SprintfFloat-8                      16.0B ± 0%      8.0B ± 0%   -50.00%  (p=0.000 n=10+10)
      SprintfComplex-8                    48.0B ± 0%     32.0B ± 0%   -33.33%  (p=0.000 n=10+10)
      SprintfBoolean-8                    8.00B ± 0%     4.00B ± 0%   -50.00%  (p=0.000 n=10+10)
      SprintfHexString-8                  96.0B ± 0%     80.0B ± 0%   -16.67%  (p=0.000 n=10+10)
      SprintfHexBytes-8                    112B ± 0%      112B ± 0%      ~     (all equal)
      SprintfBytes-8                      96.0B ± 0%     96.0B ± 0%      ~     (all equal)
      SprintfStringer-8                   32.0B ± 0%     32.0B ± 0%      ~     (all equal)
      SprintfStructure-8                   256B ± 0%      256B ± 0%      ~     (all equal)
      ManyArgs-8                          80.0B ± 0%      0.0B       -100.00%  (p=0.000 n=10+10)
      FprintInt-8                         8.00B ± 0%     0.00B       -100.00%  (p=0.000 n=10+10)
      FprintfBytes-8                      32.0B ± 0%     32.0B ± 0%      ~     (all equal)
      FprintIntNoAlloc-8                  0.00B          0.00B           ~     (all equal)
      ScanInts-8                         15.2kB ± 0%    15.2kB ± 0%      ~     (p=0.248 n=9+10)
      ScanRecursiveInt-8                 21.6kB ± 0%    21.6kB ± 0%      ~     (all equal)
      ScanRecursiveIntReaderWrapper-8    21.7kB ± 0%    21.7kB ± 0%      ~     (all equal)
      
      name                             old allocs/op  new allocs/op  delta
      SprintfPadding-8                     2.00 ± 0%      1.00 ± 0%   -50.00%  (p=0.000 n=10+10)
      SprintfEmpty-8                       0.00           0.00           ~     (all equal)
      SprintfString-8                      2.00 ± 0%      1.00 ± 0%   -50.00%  (p=0.000 n=10+10)
      SprintfTruncateString-8              2.00 ± 0%      1.00 ± 0%   -50.00%  (p=0.000 n=10+10)
      SprintfQuoteString-8                 2.00 ± 0%      1.00 ± 0%   -50.00%  (p=0.000 n=10+10)
      SprintfInt-8                         2.00 ± 0%      1.00 ± 0%   -50.00%  (p=0.000 n=10+10)
      SprintfIntInt-8                      3.00 ± 0%      1.00 ± 0%   -66.67%  (p=0.000 n=10+10)
      SprintfPrefixedInt-8                 2.00 ± 0%      1.00 ± 0%   -50.00%  (p=0.000 n=10+10)
      SprintfFloat-8                       2.00 ± 0%      1.00 ± 0%   -50.00%  (p=0.000 n=10+10)
      SprintfComplex-8                     2.00 ± 0%      1.00 ± 0%   -50.00%  (p=0.000 n=10+10)
      SprintfBoolean-8                     2.00 ± 0%      1.00 ± 0%   -50.00%  (p=0.000 n=10+10)
      SprintfHexString-8                   2.00 ± 0%      1.00 ± 0%   -50.00%  (p=0.000 n=10+10)
      SprintfHexBytes-8                    2.00 ± 0%      2.00 ± 0%      ~     (all equal)
      SprintfBytes-8                       2.00 ± 0%      2.00 ± 0%      ~     (all equal)
      SprintfStringer-8                    4.00 ± 0%      4.00 ± 0%      ~     (all equal)
      SprintfStructure-8                   7.00 ± 0%      7.00 ± 0%      ~     (all equal)
      ManyArgs-8                           8.00 ± 0%      0.00       -100.00%  (p=0.000 n=10+10)
      FprintInt-8                          1.00 ± 0%      0.00       -100.00%  (p=0.000 n=10+10)
      FprintfBytes-8                       1.00 ± 0%      1.00 ± 0%      ~     (all equal)
      FprintIntNoAlloc-8                   0.00           0.00           ~     (all equal)
      ScanInts-8                          1.60k ± 0%     1.60k ± 0%      ~     (all equal)
      ScanRecursiveInt-8                  1.71k ± 0%     1.71k ± 0%      ~     (all equal)
      ScanRecursiveIntReaderWrapper-8     1.71k ± 0%     1.71k ± 0%      ~     (all equal)
      
      Change-Id: I7ba72a25fea4140a0ba40a9f443103ed87cc69b5
      Reviewed-on: https://go-review.googlesource.com/35554
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      c682d323
    • David Lazar's avatar
      io: fix test when MultiReader is inlined with -l=3 · f395e878
      David Lazar authored
      This ensures there isn't a live reference to buf1 on our stack
      when MultiReader is inlined.
      
      Fixes #18819.
      
      Change-Id: I96a8cdc1ffad8f8a10c0ddcbf0299005f3176b61
      Reviewed-on: https://go-review.googlesource.com/35931
      Run-TryBot: David Lazar <lazard@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarAustin Clements <austin@google.com>
      Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
      f395e878
    • Josh Bleecher Snyder's avatar
      cmd/compile: reduce slice growth in fuseBlockPlain · 16e430e1
      Josh Bleecher Snyder authored
      Instead of always appending to c.Values,
      choose whichever slice is larger;
      b.Values will be set to nil anyway.
      
      Appending once instead of in a loop also
      limits slice growth to once per function call
      and is more efficient.
      
      Reduces max rss for the program in #18602 by 6.5%,
      and eliminates fuseBlockPlain from the alloc_space
      pprof output. fuseBlockPlain previously accounted
      for 16.74% of allocated memory.
      
      Updates #18602.
      
      Change-Id: I417b03722d011a59a679157da43dc91f4425210e
      Reviewed-on: https://go-review.googlesource.com/35114
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      16e430e1
    • Keith Randall's avatar
      cmd/compile: move rotate instruction generation to SSA · 01c8719f
      Keith Randall authored
      Remove rotate generation from walk.  Remove OLROT and ssa.Lrot* opcodes.
      Generate rotates during SSA lowering for architectures that have them.
      
      This CL will allow rotates to be generated in more situations,
      like when the shift values are determined to be constant
      only after some analysis.
      
      Fixes #18254
      
      Change-Id: I8d6d684ff5ce2511aceaddfda98b908007851079
      Reviewed-on: https://go-review.googlesource.com/34232
      Run-TryBot: Keith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
      01c8719f
    • Keith Randall's avatar
      cmd/compile: allow inlining of functions with intrinsics in them · 8a9dc053
      Keith Randall authored
      Intrinsics are ok to inline as they don't rewrite to actual calls.
      
      Change-Id: Ieb19c834c61579823c62c6d1a1b425d6c4d4de23
      Reviewed-on: https://go-review.googlesource.com/34272
      Run-TryBot: Keith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarDavid Chase <drchase@google.com>
      8a9dc053
    • Keith Randall's avatar
      cmd/compile: use len(s)<=cap(s) to remove more bounds checks · 73f92f9b
      Keith Randall authored
      When we discover a relation x <= len(s), also discover the relation
      x <= cap(s).  That way, in situations like:
      
      a := s[x:]  // tests 0 <= x <= len(s)
      b := s[:x]  // tests 0 <= x <= cap(s)
      
      the second check can be eliminated.
      
      Fixes #16813
      
      Change-Id: Ifc037920b6955e43bac1a1eaf6bac63a89cfbd44
      Reviewed-on: https://go-review.googlesource.com/33633
      Run-TryBot: Keith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarAlexandru Moșoi <alexandru@mosoi.ro>
      Reviewed-by: 's avatarDavid Chase <drchase@google.com>
      73f92f9b
    • Keith Randall's avatar
      cmd/compile: fix CSE with commutative ops · 6317f92f
      Keith Randall authored
      CSE opportunities were being missed for commutative ops. We used to
      order the args of commutative ops (by arg ID) once at the start of CSE.
      But that may not be enough.
      
      i1 = (Load ptr mem)
      i2 = (Load ptr mem)
      x1 = (Add i1 j)
      x2 = (Add i2 j)
      
      Equivalent commutative ops x1 and x2 may not get their args ordered in
      the same way because because at the start of CSE, we don't know that
      the i values will be CSEd. If x1 and x2 get opposite orders we won't
      CSE them.
      
      Instead, (re)order the args of commutative operations by their
      equivalence class IDs each time we partition an equivalence class.
      
      Change-Id: Ic609fa83b85299782a5e85bf93dc6023fccf4b0c
      Reviewed-on: https://go-review.googlesource.com/33632
      Run-TryBot: Keith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarTodd Neal <todd@tneal.org>
      6317f92f
    • Emmanuel Odeke's avatar
      cmd/compile: improve error for wrong type in switch · 34b563f4
      Emmanuel Odeke authored
      Fixes #10561.
      
      Provides a better diagnostic message for failed type switch
      satisfaction in the case that a value receiver is being used
      in place of the pointer receiver that implements and satisfies
      the interface.
      
      Change-Id: If8c13ba13f2a8d81bf44bac7c3a66c12921ba921
      Reviewed-on: https://go-review.googlesource.com/35235Reviewed-by: 's avatarMatthew Dempsky <mdempsky@google.com>
      Run-TryBot: Matthew Dempsky <mdempsky@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      34b563f4