1. 25 Aug, 2016 14 commits
    • Josh Bleecher Snyder's avatar
      cmd/compile: when inlining ==, don’t take the address of the values · 0bc94a88
      Josh Bleecher Snyder authored
      This CL reworks walkcompare for clarity and concision.
      It also makes one significant functional change.
      (The functional change is hard to separate cleanly
      from the cleanup, so I just did them together.)
      When inlining and unrolling an equality comparison
      for a small struct or array, compare the elements like:
      
      a[0] == b[0] && a[1] == b[1]
      
      rather than
      
      pa := &a
      pb := &b
      pa[0] == pb[0] && pa[1] == pb[1]
      
      The result is the same, but taking the address
      and working through the indirect
      forces the backends to generate less efficient code.
      
      This is only an improvement with the SSA backend.
      However, every port but s390x now has a working
      SSA backend, and switching to the SSA backend
      by default everywhere is a priority for Go 1.8.
      It thus seems reasonable to start to prioritize
      SSA performance over the old backend.
      
      Updates #15303
      
      
      Sample code:
      
      type T struct {
      	a, b int8
      }
      
      func g(a T) bool {
      	return a == T{1, 2}
      }
      
      
      SSA before:
      
      "".g t=1 size=80 args=0x10 locals=0x8
      	0x0000 00000 (badeq.go:7)	TEXT	"".g(SB), $8-16
      	0x0000 00000 (badeq.go:7)	SUBQ	$8, SP
      	0x0004 00004 (badeq.go:7)	FUNCDATA	$0, gclocals·23e8278e2b69a3a75fa59b23c49ed6ad(SB)
      	0x0004 00004 (badeq.go:7)	FUNCDATA	$1, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB)
      	0x0004 00004 (badeq.go:8)	MOVBLZX	"".a+16(FP), AX
      	0x0009 00009 (badeq.go:8)	MOVB	AL, "".autotmp_0+6(SP)
      	0x000d 00013 (badeq.go:8)	MOVBLZX	"".a+17(FP), AX
      	0x0012 00018 (badeq.go:8)	MOVB	AL, "".autotmp_0+7(SP)
      	0x0016 00022 (badeq.go:8)	MOVB	$0, "".autotmp_1+4(SP)
      	0x001b 00027 (badeq.go:8)	MOVB	$1, "".autotmp_1+4(SP)
      	0x0020 00032 (badeq.go:8)	MOVB	$2, "".autotmp_1+5(SP)
      	0x0025 00037 (badeq.go:8)	MOVBLZX	"".autotmp_0+6(SP), AX
      	0x002a 00042 (badeq.go:8)	MOVBLZX	"".autotmp_1+4(SP), CX
      	0x002f 00047 (badeq.go:8)	CMPB	AL, CL
      	0x0031 00049 (badeq.go:8)	JNE	70
      	0x0033 00051 (badeq.go:8)	MOVBLZX	"".autotmp_0+7(SP), AX
      	0x0038 00056 (badeq.go:8)	CMPB	AL, $2
      	0x003a 00058 (badeq.go:8)	SETEQ	AL
      	0x003d 00061 (badeq.go:8)	MOVB	AL, "".~r1+24(FP)
      	0x0041 00065 (badeq.go:8)	ADDQ	$8, SP
      	0x0045 00069 (badeq.go:8)	RET
      	0x0046 00070 (badeq.go:8)	MOVB	$0, AL
      	0x0048 00072 (badeq.go:8)	JMP	61
      
      SSA after:
      
      "".g t=1 size=32 args=0x10 locals=0x0
      	0x0000 00000 (badeq.go:7)	TEXT	"".g(SB), $0-16
      	0x0000 00000 (badeq.go:7)	NOP
      	0x0000 00000 (badeq.go:7)	NOP
      	0x0000 00000 (badeq.go:7)	FUNCDATA	$0, gclocals·23e8278e2b69a3a75fa59b23c49ed6ad(SB)
      	0x0000 00000 (badeq.go:7)	FUNCDATA	$1, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB)
      	0x0000 00000 (badeq.go:8)	MOVBLZX	"".a+8(FP), AX
      	0x0005 00005 (badeq.go:8)	CMPB	AL, $1
      	0x0007 00007 (badeq.go:8)	JNE	25
      	0x0009 00009 (badeq.go:8)	MOVBLZX	"".a+9(FP), CX
      	0x000e 00014 (badeq.go:8)	CMPB	CL, $2
      	0x0011 00017 (badeq.go:8)	SETEQ	AL
      	0x0014 00020 (badeq.go:8)	MOVB	AL, "".~r1+16(FP)
      	0x0018 00024 (badeq.go:8)	RET
      	0x0019 00025 (badeq.go:8)	MOVB	$0, AL
      	0x001b 00027 (badeq.go:8)	JMP	20
      
      
      Change-Id: I120185d58012b7bbcdb1ec01225b5b08d0855d86
      Reviewed-on: https://go-review.googlesource.com/22277
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarMatthew Dempsky <mdempsky@google.com>
      0bc94a88
    • Ian Lance Taylor's avatar
      path/filepath: don't return SkipDir at top · 157fc454
      Ian Lance Taylor authored
      If the walker function called on a top-level file returns SkipDir,
      then (before this change) Walk would return SkipDir, which the
      documentation implies will not happen.
      
      Fixes #16280.
      
      Change-Id: I37d63bdcef7af4b56e342b624cf0d4b42e65c297
      Reviewed-on: https://go-review.googlesource.com/24780
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      157fc454
    • Josh Bleecher Snyder's avatar
      cmd/compile/internal/obj/x86: clean up "is leaf?" check · 307de654
      Josh Bleecher Snyder authored
      Minor code cleanup. No functional changes.
      
      Change-Id: I2e631b43b122174302a182a1a286c0f873851ce6
      Reviewed-on: https://go-review.googlesource.com/24813
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      307de654
    • Josh Bleecher Snyder's avatar
      cmd/internal/obj/x86: remove pointless NOPs · 64e15291
      Josh Bleecher Snyder authored
      They are no longer needed by stkcheck.
      
      Fixes #16057
      
      Change-Id: I57cb55de5b7a7a1d31a3da200a3a2d51576b68f5
      Reviewed-on: https://go-review.googlesource.com/26667
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      Reviewed-by: 's avatarMichael Hudson-Doyle <michael.hudson@canonical.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      64e15291
    • Egon Elbre's avatar
      website: recreate 16px and 32px favicon · ef694a01
      Egon Elbre authored
      Recreated original favicon with svg. Note, the rasterizations are hand
      tweaked for crispness and straight export will not give the same results.
      
      Fixes #6938
      
      Change-Id: I9bf7b59028711361c29365b145932d90af419b69
      Reviewed-on: https://go-review.googlesource.com/26850Reviewed-by: 's avatarChris Broadfoot <cbro@golang.org>
      ef694a01
    • Cherry Zhang's avatar
      cmd/compile: get MIPS64 SSA working · e71e1fe8
      Cherry Zhang authored
      - implement *, /, %, shifts, Zero, Move.
      - fix mistakes in comparison.
      - fix floating point rounding.
      - handle RetJmp in assembler (which was not handled, as a consequence
        Duff's device was disabled in the old backend.)
      
      all.bash now passes with SSA on.
      
      Updates #16359.
      
      Change-Id: Ia14eed0ed1176b5d800592080c8f53dded7fe73f
      Reviewed-on: https://go-review.googlesource.com/27592Reviewed-by: 's avatarDavid Chase <drchase@google.com>
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      e71e1fe8
    • Dave Cheney's avatar
      cmd/{asm,compile/internal}: delete dead code · e90ae90b
      Dave Cheney authored
      Delete unused fields, methods, vars, and funcs. Spotted by
      honnef.co/go/unused.
      
      Change-Id: I0e65484bbd916e59369c4018be46f120b469d610
      Reviewed-on: https://go-review.googlesource.com/27731
      Run-TryBot: Dave Cheney <dave@cheney.net>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
      e90ae90b
    • Ian Lance Taylor's avatar
      runtime: remove unused type sigtabtt · f29ec7d7
      Ian Lance Taylor authored
      The type sigtabtt was introduced by an automated tool in
      https://golang.org/cl/167550043. It was the Go version of the C type
      SigTab. However, when the C code using SigTab was converted to Go in
      https://golang.org/cl/168500044 it was rewritten to use a different Go
      type, sigTabT, rather than sigtabtt (the difference being that sigTabT
      uses string where sigtabtt uses *int8 from the C type char*). So this is
      just a dreg from the conversion that was never actually used.
      
      Change-Id: I2ec6eb4b25613bf5e5ad1dbba1f4b5ff20f80f55
      Reviewed-on: https://go-review.googlesource.com/27691
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      f29ec7d7
    • Josh Bleecher Snyder's avatar
      cmd/compile: optimize integer "in range" expressions · 62861889
      Josh Bleecher Snyder authored
      Use unsigned comparisons to reduce from
      two comparisons to one for integer "in range"
      checks, such as a <= b && b < c.
      We already do this for bounds checks.
      Extend it to user code.
      
      This is much easier to do in the front end than SSA.
      A back end optimization would be more powerful,
      but this is a good start.
      
      This reduces the power of some of SSA prove
      inferences (#16653), but those regressions appear
      to be rare and not worth holding this CL for.
      
      Fixes #15844.
      Fixes #16697.
      
      strconv benchmarks:
      
      name                          old time/op  new time/op   delta
      Atof64Decimal-8               41.4ns ± 3%   38.9ns ± 2%   -5.89%  (p=0.000 n=24+25)
      Atof64Float-8                 48.5ns ± 0%   46.8ns ± 3%   -3.64%  (p=0.000 n=20+23)
      Atof64FloatExp-8              97.7ns ± 4%   93.5ns ± 1%   -4.25%  (p=0.000 n=25+20)
      Atof64Big-8                    187ns ± 8%    162ns ± 2%  -13.54%  (p=0.000 n=24+22)
      Atof64RandomBits-8             250ns ± 6%    233ns ± 5%   -6.76%  (p=0.000 n=25+25)
      Atof64RandomFloats-8           160ns ± 0%    152ns ± 0%   -5.00%  (p=0.000 n=21+22)
      Atof32Decimal-8               41.1ns ± 1%   38.7ns ± 2%   -5.86%  (p=0.000 n=24+24)
      Atof32Float-8                 46.1ns ± 1%   43.5ns ± 3%   -5.63%  (p=0.000 n=21+24)
      Atof32FloatExp-8               101ns ± 4%    100ns ± 2%   -1.59%  (p=0.000 n=24+23)
      Atof32Random-8                 136ns ± 3%    133ns ± 3%   -2.83%  (p=0.000 n=22+22)
      Atoi-8                        33.8ns ± 3%   30.6ns ± 3%   -9.51%  (p=0.000 n=24+25)
      AtoiNeg-8                     31.6ns ± 3%   29.1ns ± 2%   -8.05%  (p=0.000 n=23+24)
      Atoi64-8                      48.6ns ± 1%   43.8ns ± 1%   -9.81%  (p=0.000 n=20+23)
      Atoi64Neg-8                   47.1ns ± 4%   42.0ns ± 2%  -10.83%  (p=0.000 n=25+25)
      FormatFloatDecimal-8           177ns ± 9%    178ns ± 6%     ~     (p=0.460 n=25+25)
      FormatFloat-8                  282ns ± 6%    282ns ± 3%     ~     (p=0.954 n=25+22)
      FormatFloatExp-8               259ns ± 7%    255ns ± 6%     ~     (p=0.089 n=25+24)
      FormatFloatNegExp-8            253ns ± 6%    254ns ± 6%     ~     (p=0.941 n=25+24)
      FormatFloatBig-8               340ns ± 6%    341ns ± 8%     ~     (p=0.600 n=22+25)
      AppendFloatDecimal-8          79.4ns ± 0%   80.6ns ± 6%     ~     (p=0.861 n=20+25)
      AppendFloat-8                  175ns ± 3%    174ns ± 0%     ~     (p=0.722 n=25+20)
      AppendFloatExp-8               142ns ± 4%    142ns ± 2%     ~     (p=0.948 n=25+24)
      AppendFloatNegExp-8            137ns ± 2%    138ns ± 2%   +0.70%  (p=0.001 n=24+25)
      AppendFloatBig-8               218ns ± 3%    218ns ± 4%     ~     (p=0.596 n=25+25)
      AppendFloatBinaryExp-8        80.0ns ± 4%   78.0ns ± 1%   -2.43%  (p=0.000 n=24+21)
      AppendFloat32Integer-8        82.3ns ± 3%   79.3ns ± 4%   -3.69%  (p=0.000 n=24+25)
      AppendFloat32ExactFraction-8   143ns ± 2%    143ns ± 0%     ~     (p=0.177 n=23+19)
      AppendFloat32Point-8           175ns ± 3%    175ns ± 3%     ~     (p=0.062 n=24+25)
      AppendFloat32Exp-8             139ns ± 2%    137ns ± 4%   -1.05%  (p=0.001 n=24+24)
      AppendFloat32NegExp-8          134ns ± 0%    137ns ± 4%   +2.06%  (p=0.000 n=22+25)
      AppendFloat64Fixed1-8         97.8ns ± 0%   98.6ns ± 3%     ~     (p=0.711 n=20+25)
      AppendFloat64Fixed2-8          110ns ± 3%    110ns ± 5%   -0.45%  (p=0.037 n=24+24)
      AppendFloat64Fixed3-8          102ns ± 3%    102ns ± 3%     ~     (p=0.684 n=24+24)
      AppendFloat64Fixed4-8          112ns ± 3%    110ns ± 0%   -1.43%  (p=0.000 n=25+18)
      FormatInt-8                   3.18µs ± 4%   3.10µs ± 6%   -2.54%  (p=0.001 n=24+25)
      AppendInt-8                   1.81µs ± 5%   1.80µs ± 5%     ~     (p=0.648 n=25+25)
      FormatUint-8                   812ns ± 6%    816ns ± 6%     ~     (p=0.777 n=25+25)
      AppendUint-8                   536ns ± 4%    538ns ± 3%     ~     (p=0.798 n=20+22)
      Quote-8                        605ns ± 6%    602ns ± 9%     ~     (p=0.573 n=25+25)
      QuoteRune-8                   99.5ns ± 8%  100.2ns ± 7%     ~     (p=0.432 n=25+25)
      AppendQuote-8                  361ns ± 3%    363ns ± 4%     ~     (p=0.085 n=25+25)
      AppendQuoteRune-8             23.3ns ± 3%   22.4ns ± 2%   -3.79%  (p=0.000 n=25+24)
      UnquoteEasy-8                  146ns ± 4%    145ns ± 5%     ~     (p=0.112 n=24+24)
      UnquoteHard-8                  804ns ± 6%    771ns ± 6%   -4.10%  (p=0.000 n=25+24)
      
      Change-Id: Ibd384e46e90f1cfa40503c8c6352a54c65b72980
      Reviewed-on: https://go-review.googlesource.com/27652
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      Reviewed-by: 's avatarMatthew Dempsky <mdempsky@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      62861889
    • Dave Cheney's avatar
      cmd/link/internal, cmd/internal/obj: introduce ctxt.Logf · d61c07ff
      Dave Cheney authored
      Replace the various calls to Fprintf(ctxt.Bso, ...) with a helper,
      ctxt.Logf. This also addresses the various inconsistent flushing of
      ctxt.Bso.
      
      Because we have two Link structures, add Link.Logf in both places.
      
      Change-Id: I23093f9b9b3bf33089a0ffd7f815f92dcd1a1fa1
      Reviewed-on: https://go-review.googlesource.com/27730Reviewed-by: 's avatarMatthew Dempsky <mdempsky@google.com>
      d61c07ff
    • Dave Cheney's avatar
      cmd/link/internal/ld: move ld.Cpos to coutbuf.Offset · 5f94ff4c
      Dave Cheney authored
      This change moves the ld.Cpos function to a method on coutbuf. This is
      part of a larger change that makes ld.outbuf look more like a bio.Buf in
      an effort to eventually replace the former with the latter.
      
      Change-Id: I506f7131935a2aa903fa302a0fab0c5be50220fd
      Reviewed-on: https://go-review.googlesource.com/27578
      Run-TryBot: Dave Cheney <dave@cheney.net>
      Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
      Reviewed-by: 's avatarMatthew Dempsky <mdempsky@google.com>
      5f94ff4c
    • Michael Munday's avatar
      runtime: use clock_gettime for time.now() on s390x · 61d5daea
      Michael Munday authored
      This should improve the precision of time.now() from microseconds
      to nanoseconds.
      
      Also, modify runtime.nanotime to keep it consistent with cleanup
      done to time.now.
      
      Updates #11222 for s390x.
      
      Change-Id: I27864115ea1fee7299360d9003cd3a8355f624d3
      Reviewed-on: https://go-review.googlesource.com/27710Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      61d5daea
    • Dave Cheney's avatar
      cmd/internal/*: only call ctx.Bso.Flush when something has been written · 3167ff7c
      Dave Cheney authored
      In many places where ctx.Bso.Flush is used as the target for some debug
      logging, ctx.Bso.Flush is called unconditionally. In the majority of
      cases where debug logging is not enabled, this means Flush is called
      many times when there is nothing to be flushed (it will be called anyway
      when ctx.Bso is eventually closed), sometimes in a loop.
      
      Avoid this by moving the ctx.Bso.Flush call into the same condition
      block as the debug print. This pattern was previously applied
      sporadically.
      
      Change-Id: I0444cb235cc8b9bac51a59b2e44e59872db2be06
      Reviewed-on: https://go-review.googlesource.com/27579
      Run-TryBot: Dave Cheney <dave@cheney.net>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
      Reviewed-by: 's avatarMatthew Dempsky <mdempsky@google.com>
      3167ff7c
    • Matthew Dempsky's avatar
      cmd/go: refactor cgo logic · 1472221a
      Matthew Dempsky authored
      Extract "cgo -dynimport" and "ld -r" logic into separate helper
      methods to make (*builder).cgo somewhat more manageable.
      
      Fixes #16650.
      
      Change-Id: I3e4d77ff3791528b1233467060d3ea83cb854acb
      Reviewed-on: https://go-review.googlesource.com/27270
      Run-TryBot: Matthew Dempsky <mdempsky@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      1472221a
  2. 24 Aug, 2016 14 commits
  3. 23 Aug, 2016 12 commits