1. 04 Aug, 2016 1 commit
  2. 03 Aug, 2016 1 commit
    • Josh Bleecher Snyder's avatar
      [dev.ssa] cmd/compile: refactor out rulegen value parsing · 6a1153ac
      Josh Bleecher Snyder authored
      Previously, genMatch0 and genResult0 contained
      lots of duplication: locating the op, parsing
      the value, validation, etc.
      Parsing and validation was mixed in with code gen.
      
      Extract a helper, parseValue. It is responsible
      for parsing the value, locating the op, and doing
      shared validation.
      
      As a bonus (and possibly as my original motivation),
      make op selection pay attention to the number
      of args present.
      This allows arch-specific ops to share a name
      with generic ops as long as there is no ambiguity.
      It also detects and reports unresolved ambiguity,
      unlike before, where it would simply always
      pick the generic op, with no warning.
      
      Also use parseValue when generating the top-level
      op dispatch, to ensure its opinion about ops
      matches genMatch0 and genResult0.
      
      The order of statements in the generated code used
      to depend on the exact rule. It is now somewhat
      independent of the rule. That is the source
      of some of the generated code changes in this CL.
      See rewritedec64 and rewritegeneric for examples.
      It is a one-time change.
      
      The op dispatch switch and functions used to be
      sorted by opname without architecture. The sort
      now includes the architecture, leading to further
      generated code changes.
      See rewriteARM and rewriteAMD64 for examples.
      Again, it is a one-time change.
      
      There are no functional changes.
      
      Change-Id: I22c989183ad5651741ebdc0566349c5fd6c6b23c
      Reviewed-on: https://go-review.googlesource.com/24649
      
      
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarDavid Chase <drchase@google.com>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      6a1153ac
  3. 02 Aug, 2016 10 commits
  4. 01 Aug, 2016 1 commit
  5. 29 Jul, 2016 1 commit
    • Cherry Zhang's avatar
      cmd/compile: fix possible spill of invalid pointer with DUFFZERO on AMD64 · 111d590f
      Cherry Zhang authored
      SSA compiler on AMD64 may spill Duff-adjusted address as scalar. If
      the object is on stack and the stack moves, the spilled address become
      invalid.
      
      Making the spill pointer-typed does not work. The Duff-adjusted address
      points to the memory before the area to be zeroed and may be invalid.
      This may cause stack scanning code panic.
      
      Fix it by doing Duff-adjustment in genValue, so the intermediate value
      is not seen by the reg allocator, and will not be spilled.
      
      Add a test to cover both cases. As it depends on allocation, it may
      be not always triggered.
      
      Fixes #16515.
      
      Change-Id: Ia81d60204782de7405b7046165ad063384ede0db
      Reviewed-on: https://go-review.googlesource.com/25309
      
      
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarDavid Chase <drchase@google.com>
      111d590f
  6. 28 Jul, 2016 2 commits
  7. 27 Jul, 2016 4 commits
    • Rhys Hiltner's avatar
      runtime: reduce GC assist extra credit · ccca9c9c
      Rhys Hiltner authored
      Mutator goroutines that allocate memory during the concurrent mark
      phase are required to spend some time assisting the garbage
      collector. The magnitude of this mandatory assistance is proportional
      to the goroutine's allocation debt and subject to the assistance
      ratio as calculated by the pacer.
      
      When assisting the garbage collector, a mutator goroutine will go
      beyond paying off its allocation debt. It will build up extra credit
      to amortize the overhead of the assist.
      
      In fast-allocating applications with high assist ratios, building up
      this credit can take the affected goroutine's entire time slice.
      Reduce the penalty on each goroutine being selected to assist the GC
      in two ways, to spread the responsibility more evenly.
      
      First, do a consistent amount of extra scan work without regard for
      the pacer's assistance ratio. Second, reduce the magnitude of the
      extra scan work so it can be completed within a few hundred
      microseconds.
      
      Commentary on gcOverAssistWork is by Austin Clements, originally in
      https://golang.org/cl/24704
      
      Updates #14812
      Fixes #16432
      
      Change-Id: I436f899e778c20daa314f3e9f0e2a1bbd53b43e1
      Reviewed-on: https://go-review.googlesource.com/25155
      
      
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarAustin Clements <austin@google.com>
      Reviewed-by: default avatarRick Hudson <rlh@golang.org>
      Reviewed-by: default avatarChris Broadfoot <cbro@golang.org>
      ccca9c9c
    • Cherry Zhang's avatar
      [dev.ssa] cmd/compile: fix possible invalid pointer spill in large Zero/Move on ARM · 114c0596
      Cherry Zhang authored
      Instead of comparing the address of the end of the memory to zero/copy,
      comparing the address of the last element, which is a valid pointer.
      Also unify large and unaligned Zero/Move, by passing alignment as AuxInt.
      
      Fixes #16515 for ARM.
      
      Change-Id: I19a62b31c5acf5c55c16a89bea1039c926dc91e5
      Reviewed-on: https://go-review.googlesource.com/25300
      
      
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarDavid Chase <drchase@google.com>
      114c0596
    • Cherry Zhang's avatar
      [dev.ssa] cmd/compile: add more on ARM64 SSA · 83208504
      Cherry Zhang authored
      Support the following:
      - Shifts. ARM64 machine instructions only use lowest 6 bits of the
        shift (i.e. mod 64). Use conditional selection instruction to
        ensure Go semantics.
      - Zero/Move. Alignment is ensured.
      - Hmul, Avg64u, Sqrt.
      - reserve R18 (platform register in ARM64 ABI) and R29 (frame pointer
        in ARM64 ABI).
      
      Everything compiles, all.bash passed (with non-SSA test disabled).
      
      Change-Id: Ia8ed58dae5cbc001946f0b889357b258655078b1
      Reviewed-on: https://go-review.googlesource.com/25290
      
      
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarDavid Chase <drchase@google.com>
      83208504
    • Brad Fitzpatrick's avatar
      net/http: fix data race with concurrent use of Server.Serve · c80e0d37
      Brad Fitzpatrick authored
      Fixes #16505
      
      Change-Id: I0afabcc8b1be3a5dbee59946b0c44d4c00a28d71
      Reviewed-on: https://go-review.googlesource.com/25280
      
      
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarChris Broadfoot <cbro@golang.org>
      c80e0d37
  8. 26 Jul, 2016 8 commits
  9. 25 Jul, 2016 1 commit
  10. 24 Jul, 2016 1 commit
    • David Chase's avatar
      [dev.ssa] cmd/compile: replace storeconst w/ storezero, fold addressing · 806cacc7
      David Chase authored
      Because PPC lacks store-immediate, remove the instruction
      that implies that it exists.  Replace it with storezero for
      the special case of storing zero, because R0 is reserved zero
      for Go (though the assembler knows this, do it in SSA).
      
      Also added address folding for storezero.
      (Now corrected to use right-sized stores in bulk-zero code.)
      
      Hello.go now compiles to
      genssa main
          00000 (...hello.go:7) TEXT "".main(SB), $0
          00001 (...hello.go:7) FUNCDATA $0, "".gcargs·0(SB)
          00002 (...hello.go:7) FUNCDATA $1, "".gclocals·1(SB)
      v23 00003 (...hello.go:8) MOVD $go.string."Hello, World!\n"(SB), R3
      v11 00004 (...hello.go:8) MOVD R3, 32(R1)
      v22 00005 (...hello.go:8) MOVD $14, R3
      v6  00006 (...hello.go:8) MOVD R3, 40(R1)
      v20 00007 (...hello.go:8) MOVD R0, 48(R1)
      v18 00008 (...hello.go:8) MOVD R0, 56(R1)
      v9  00009 (...hello.go:8) MOVD R0, 64(R1)
      v10 00010 (...hello.go:8) CALL fmt.Printf(SB)
      b2  00011 (...hello.go:9) RET
          00012 (<unknown line number>) END
      
      Updates #16010
      
      Change-Id: I33cfd98c21a1617502260ac753fa8cad68c8d85a
      Reviewed-on: https://go-review.googlesource.com/25151
      
      Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      Run-TryBot: David Chase <drchase@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      806cacc7
  11. 23 Jul, 2016 1 commit
  12. 22 Jul, 2016 2 commits
  13. 21 Jul, 2016 7 commits
    • Chris Broadfoot's avatar
      go1.7rc3 · 8707f31c
      Chris Broadfoot authored
      Change-Id: Iaef13003979c68926c260c415d6074a50ae137b2
      Reviewed-on: https://go-review.googlesource.com/25142
      
      
      Run-TryBot: Chris Broadfoot <cbro@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      8707f31c
    • Keith Randall's avatar
      [dev.ssa] cmd/compile: 386 port now works · df2f813b
      Keith Randall authored
      GOARCH=386 SSATEST=1 ./all.bash passes
      
      Caveat: still needs changes to test/ files to use *_ssa.go versions.  I
      won't check those changes in with this CL because the builders will
      complain as they don't have SSATEST=1.
      
      Mostly minor fixes.
      
      Implement float <-> uint32 in assembly.  It seems the simplest option
      for now.
      
      GO386=387 does not work.  That's why I can't make SSA the default for
      386 yet.
      
      Change-Id: Ic4d4402104d32bcfb1fd612f5bb6539f9acb8ae0
      Reviewed-on: https://go-review.googlesource.com/25119
      
      Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      df2f813b
    • Chris Broadfoot's avatar
      all: merge master into release-branch.go1.7 · 16a2af03
      Chris Broadfoot authored
      Change-Id: I2511c3f7583887b641c9b3694aae54789fbc5342
      16a2af03
    • Brad Fitzpatrick's avatar
      misc/trace: disable trace resolution warning · 243d51f0
      Brad Fitzpatrick authored
      It was removed in upstream Chrome https://codereview.chromium.org/2016863004
      
      Rather than update to the latest version, make the minimal change for Go 1.7 and
      change the "showToUser" boolean from true to false.
      
      Tested by hand that it goes away after this change.
      
      Updates #16247
      
      Change-Id: I051f49da878e554b1a34a88e9abc70ab50e18780
      Reviewed-on: https://go-review.googlesource.com/25117
      
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      243d51f0
    • Cherry Zhang's avatar
      [dev.ssa] cmd/compile: simplify MOVWreg on ARM · d8181d5d
      Cherry Zhang authored
      For register-register move, if there is only one use, allocate it in
      the same register so we don't need to emit an instruction.
      
      Updates #15365.
      
      Change-Id: Iad41843854a506c521d577ad93fcbe73e8de8065
      Reviewed-on: https://go-review.googlesource.com/25059
      
      
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarDavid Chase <drchase@google.com>
      d8181d5d
    • David Chase's avatar
      cmd/compile: change phi location to be optimistic at backedges · 846bc6c5
      David Chase authored
      This is:
      
      (1) a simple trick that cuts the number of phi-nodes
      (temporarily) inserted into the ssa representation by a factor
      of 10, and can cut the user time to compile tricky inputs like
      gogo/protobuf tests from 13 user minutes to 9.5, and memory
      allocation from 3.4GB to 2.4GB.
      
      (2) a fix to sparse lookup, that does not rely on
      an assumption proven false by at least one pathological
      input "etldlen".
      
      These two changes fix unrelated compiler performance bugs,
      both necessary to obtain good performance compiling etldlen.
      Without them it takes 20 minutes or longer, with them it
      completes in 2 minutes, without a gigantic memory footprint.
      
      Updates #16407
      
      Change-Id: Iaa8aaa8c706858b3d49de1c4865a7fd79e6f4ff7
      Reviewed-on: https://go-review.googlesource.com/23136
      
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      Run-TryBot: David Chase <drchase@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      846bc6c5
    • Keith Randall's avatar
      cmd/compile: move phi args which are constants closer to the phi · 305a0ac1
      Keith Randall authored
      entry:
         x = MOVQconst [7]
         ...
      b1:
         goto b2
      b2:
         v = Phi(x, y, z)
      
      Transform that program to:
      
      entry:
         ...
      b1:
         x = MOVQconst [7]
         goto b2
      b2:
         v = Phi(x, y, z)
      
      This CL moves constant-generating instructions used by a phi to the
      appropriate immediate predecessor of the phi's block.
      
      We used to put all constants in the entry block.  Unfortunately, in
      large functions we have lots of constants at the start of the
      function, all of which are used by lots of phis throughout the
      function.  This leads to the constants being live through most of the
      function (especially if there is an outer loop).  That's an O(n^2)
      problem.
      
      Note that most of the non-phi uses of constants have already been
      folded into instructions (ADDQconst, MOVQstoreconst, etc.).
      
      This CL may be generally useful for other instances of compiler
      slowness, I'll have to check.  It may cause some programs to run
      slower, but probably not by much, as rematerializeable values like
      these constants are allocated late (not at their originally scheduled
      location) anyway.
      
      This CL is definitely a minimal change that can be considered for 1.7.
      We probably want to do a better job in the tighten pass generally, not
      just for phi args.  Leaving that for 1.8.
      
      Update #16407
      
      Change-Id: If112a8883b4ef172b2f37dea13e44bda9346c342
      Reviewed-on: https://go-review.googlesource.com/25046
      
      
      Run-TryBot: Keith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarJosh Bleecher Snyder <josharian@gmail.com>
      305a0ac1