1. 26 Apr, 2016 14 commits
  2. 25 Apr, 2016 13 commits
  3. 24 Apr, 2016 9 commits
  4. 23 Apr, 2016 4 commits
    • Brad Fitzpatrick's avatar
      cmd/link: add -dumpdep flag to dump linker dependency graph · d224e98d
      Brad Fitzpatrick authored
      This is what led to https://golang.org/cl/20763 and
      https://golang.org/cl/20765 to shrink binary sizes.
      
      Change-Id: Id360d474e6153cfe32a525b0a720810fd113195b
      Reviewed-on: https://go-review.googlesource.com/22392Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
      d224e98d
    • Keith Randall's avatar
      cmd/compile: get rid of most byte and word insns for amd64 · 9e3c68f1
      Keith Randall authored
      Now that we're using 32-bit ops for 8/16-bit logical operations
      (to avoid partial register stalls), there's really no need to
      keep track of the 8/16-bit ops at all.  Convert everything we
      can to 32-bit ops.
      
      This CL is the obvious stuff.  I might think a bit more about
      whether we can get rid of weirder stuff like HMULWU.
      
      The only downside to this CL is that we lose some information
      about constants.  If we had source like:
        var a byte = ...
        a += 128
        a += 128
      We will convert that to a += 256, when we could get rid of the
      add altogether.  This seems like a fairly unusual scenario and
      I'm happy with forgoing that optimization.
      
      Change-Id: Ia7c1e5203d0d110807da69ed646535194a3efba1
      Reviewed-on: https://go-review.googlesource.com/22382Reviewed-by: 's avatarTodd Neal <todd@tneal.org>
      9e3c68f1
    • Keith Randall's avatar
      cmd/compile: combine stores into larger widths · 217c2849
      Keith Randall authored
      Combine stores into larger widths when it is safe to do so.
      
      Add clobber() function so stray dead uses do not impede the
      above rewrites.
      
      Fix bug in loads where all intermediate values depending on
      a small load (not just the load itself) must have no other uses.
      We really need the small load to be dead after the rewrite..
      
      Fixes #14267
      
      Change-Id: Ib25666cb19777f65082c76238fba51a76beb5d74
      Reviewed-on: https://go-review.googlesource.com/22326
      Run-TryBot: Keith Randall <khr@golang.org>
      Reviewed-by: 's avatarTodd Neal <todd@tneal.org>
      217c2849
    • Dmitry Vyukov's avatar
      runtime: use per-goroutine sequence numbers in tracer · a3703618
      Dmitry Vyukov authored
      Currently tracer uses global sequencer and it introduces
      significant slowdown on parallel machines (up to 10x).
      Replace the global sequencer with per-goroutine sequencer.
      
      If we assign per-goroutine sequence numbers to only 3 types
      of events (start, unblock and syscall exit), it is enough to
      restore consistent partial ordering of all events. Even these
      events don't need sequence numbers all the time (if goroutine
      starts on the same P where it was unblocked, then start does
      not need sequence number).
      The burden of restoring the order is put on trace parser.
      Details of the algorithm are described in the comments.
      
      On http benchmark with GOMAXPROCS=48:
      no tracing: 5026 ns/op
      tracing: 27803 ns/op (+453%)
      with this change: 6369 ns/op (+26%, mostly for traceback)
      
      Also trace size is reduced by ~22%. Average event size before: 4.63
      bytes/event, after: 3.62 bytes/event.
      
      Besides running trace tests, I've also tested with manually broken
      cputicks (random skew for each event, per-P skew and episodic random skew).
      In all cases broken timestamps were detected and no test failures.
      
      Change-Id: I078bde421ccc386a66f6c2051ab207bcd5613efa
      Reviewed-on: https://go-review.googlesource.com/21512
      Run-TryBot: Dmitry Vyukov <dvyukov@google.com>
      Reviewed-by: 's avatarAustin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      a3703618