1. 14 Feb, 2014 15 commits
    • Dmitriy Vyukov's avatar
      runtime: fix windows cpu profiler · eca55f5a
      Dmitriy Vyukov authored
      Currently it periodically fails with the following message.
      The immediate cause is the wrong base register when obtaining g
      in sys_windows_amd64/386.s.
      But there are several secondary problems as well.
      
      runtime: unknown pc 0x0 after stack split
      panic: invalid memory address or nil pointer dereference
      fatal error: panic during malloc
      [signal 0xc0000005 code=0x0 addr=0x60 pc=0x42267a]
      
      runtime stack:
      runtime.panic(0x7914c0, 0xc862af)
              c:/src/perfer/work/windows-amd64-a15f344a9efa/go/src/pkg/runtime/panic.c:217 +0x2c
      runtime: unexpected return pc for runtime.externalthreadhandler called from 0x0
      
      R=rsc, alex.brainman
      CC=golang-codereviews
      https://golang.org/cl/63310043
      eca55f5a
    • Russ Cox's avatar
      cmd/gc: correct liveness for func ending in panic · ab9e8d06
      Russ Cox authored
      The registerization code needs the function to end in a RET,
      even if that RET is actually unreachable.
      
      The liveness code needs to avoid such unreachable RETs.
      It had a special case for final RET after JMP, but no case
      for final RET after UNDEF. Instead of expanding the special
      cases, let fixjmp - which already knows what is and is not
      reachable definitively - mark the unreachable RET so that
      the liveness code can identify it.
      
      TBR=iant
      CC=golang-codereviews
      https://golang.org/cl/63680043
      ab9e8d06
    • Russ Cox's avatar
      cmd/gc: correct liveness for wrappers containing tail jumps · 02ae91f3
      Russ Cox authored
      A normal RET is treated as using the return values,
      but a tail jump RET does not - it is jumping to the
      function that is going to fill in the return values.
      If a tail jump RET is recorded as using the return values,
      since nothing initializes them they will be marked as
      live on entry to the function, which is clearly wrong.
      
      Found and tested by the new code in plive.c that looks
      for variables that are incorrectly live on entry.
      That code is disabled for now because there are other
      cases remaining to be fixed. But once it is enabled,
      test/live1.go becomes a real test of this CL.
      
      TBR=iant
      CC=golang-codereviews
      https://golang.org/cl/63570045
      02ae91f3
    • Russ Cox's avatar
      cmd/gc: handle variable initialization by block move in liveness · 91b1f7cb
      Russ Cox authored
      Any initialization of a variable by a block copy or block zeroing
      or by multiple assignments (componentwise copying or zeroing
      of a multiword variable) needs to emit a VARDEF. These cases were not.
      
      Fixes #7205.
      
      TBR=iant
      CC=golang-codereviews
      https://golang.org/cl/63650044
      91b1f7cb
    • Russ Cox's avatar
      cmd/5g, cmd/8g: fix build · 7addda68
      Russ Cox authored
      The test added in CL 63630043 fails on 5g and 8g because they
      were not emitting the VARDEF instruction when clearing a fat
      value by clearing the components. 6g had the call in the right place.
      
      Hooray tests.
      
      TBR=iant
      CC=golang-codereviews
      https://golang.org/cl/63660043
      7addda68
    • Mikio Hara's avatar
      syscall: fix system calls with misaligned arguments on freebsd/arm · b0db7e87
      Mikio Hara authored
      This CL enables the current tree to work with FreeBSD 10-STABLE
      on ARM EABI platforms, though there are still a few test fails.
      
      Also updates documentation.
      
      LGTM=iant
      R=iant, dave
      CC=golang-codereviews
      https://golang.org/cl/61060044
      b0db7e87
    • Mikio Hara's avatar
      net: disable TestDNSThreadLimit even in non-short mode by default · 2277e8d3
      Mikio Hara authored
      TestDNSThreadLimit creates tons of DNS queries and it occasionally
      causes an unintentional traffic jam and/or crash of some virtual
      machine software, especially its builtin networking stuff.
      
      We can run TestDNSThreadLimit with -dnsflood flag instead.
      
      LGTM=dave, rsc
      R=rsc, dave
      CC=golang-codereviews
      https://golang.org/cl/63600043
      2277e8d3
    • Russ Cox's avatar
      cmd/gc: rename AFATVARDEF to AVARDEF · 801e40a0
      Russ Cox authored
      The "fat" referred to being used for multiword values only.
      We're going to use it for non-fat values sometimes too.
      
      No change other than the renaming.
      
      TBR=iant
      CC=golang-codereviews
      https://golang.org/cl/63650043
      801e40a0
    • Russ Cox's avatar
      cmd/gc: fix liveness for addressed results · 824e918c
      Russ Cox authored
      Was spuriously marking results live on entry to function.
      
      TBR=iant
      CC=golang-codereviews
      https://golang.org/cl/63640043
      824e918c
    • Shenghou Ma's avatar
      cmd/gc: rephrase the invalid indexing operation error message · 656a4025
      Shenghou Ma authored
      Old:
      prog.go:9: invalid operation: this[i] (index of type int)
      New:
      prog.go:9: invalid operation: this[i] (type int does not support indexing)
      
      LGTM=r
      R=golang-codereviews, r
      CC=golang-codereviews
      https://golang.org/cl/52540043
      656a4025
    • Russ Cox's avatar
      cmd/gc: distinguish unnamed vs blank-named return variables better · a069cf04
      Russ Cox authored
      Before, an unnamed return value turned into an ONAME node n with n->sym
      named ~anon%d, and n->orig == n.
      
      A blank-named return value turned into an ONAME node n with n->sym
      named ~anon%d but n->orig == the original blank n. Code generation and
      printing uses n->orig, so that this node formatted as _.
      
      But some code does not use n->orig. In particular the liveness code does
      not know about the n->orig convention and so mishandles blank identifiers.
      It is possible to fix but seemed better to avoid the confusion entirely.
      
      Now the first kind of node is named ~r%d and the second ~b%d; both have
      n->orig == n, so that it doesn't matter whether code uses n or n->orig.
      
      After this change the ->orig field is only used for other kinds of expressions,
      not for ONAME nodes.
      
      This requires distinguishing ~b from ~r names in a few places that care.
      It fixes a liveness analysis bug without actually changing the liveness code.
      
      TBR=ken2
      CC=golang-codereviews
      https://golang.org/cl/63630043
      a069cf04
    • Russ Cox's avatar
      cmd/gc: relax address-of escape analysis · e5d742fc
      Russ Cox authored
      Make the loop nesting depth of &x depend on where x is declared,
      not on where the &x appears. The latter is only a conservative
      estimate of the former. Being more careful can avoid some
      variables escaping, and it is easier to reason about.
      
      It would have avoided issue 7313, although that was still a bug
      worth fixing.
      
      Not much effect in the tree: one variable in the whole tree
      is saved from a heap allocation (something in x509 parsing).
      
      LGTM=daniel.morsing
      R=daniel.morsing
      CC=golang-codereviews
      https://golang.org/cl/62380043
      e5d742fc
    • Markus Zimmermann's avatar
      container/list: mark must be an element of the list · e0bb5ba5
      Markus Zimmermann authored
      The methods MoveAfter and MoveBefore of the container/list package did silently corrupt the interal structure of the list if a mark element is used which is not an element of the list.
      
      LGTM=gri
      R=golang-codereviews, gobot, gri
      CC=golang-codereviews
      https://golang.org/cl/60980043
      e0bb5ba5
    • Robert Griesemer's avatar
      A+C: Markus Zimmermann (individual CLA) · a9495638
      Robert Griesemer authored
      Generated by addca.
      
      R=gobot
      CC=golang-codereviews
      https://golang.org/cl/63620043
      a9495638
    • Nick Craig-Wood's avatar
      math/big: Optimise ARM assembler · eae09a59
      Nick Craig-Wood authored
      Tweak the ARM assembler to improve its performance.
      
        * Use TEQ instead of CMP which preserves the carry flag.  This means
          we can avoid saving and restoring CPSR which is very slow.
      
        * Use conditional instructions to read the value of the carry flag.
      
        * Use 3 argument ARM instructions to save instructions
      
        * Improve scheduling for MOVW instructions (LDR)
      
        * Use RSB constant to save an instruction in bitLen
      
      Results of -test.bench 'VV|VW|VU|WW|Bit' -test.benchtime 3s on Samsung
      Exynos5 Chromebook.
      
      There are a few small regressions in the benchmarks which I believe to
      be noise, perhaps due to different cacheline alignment.
      
      The changes to bitLen are apparently no faster, however less
      instructions means less I-cache usage which is a win. I suspect it
      will be a win on older ARM processors.
      
      benchmark                 old ns/op    new ns/op    delta
      BenchmarkAddVV_1                 48           14  -70.84%
      BenchmarkAddVV_2                 87           17  -80.25%
      BenchmarkAddVV_3                126           20  -83.97%
      BenchmarkAddVV_4                165           23  -86.00%
      BenchmarkAddVV_5                204           26  -87.21%
      BenchmarkAddVV_1e1              399           41  -89.72%
      BenchmarkAddVV_1e2             3921          315  -91.97%
      BenchmarkAddVV_1e3            39085         2972  -92.40%
      BenchmarkAddVV_1e4           390330        29623  -92.41%
      BenchmarkAddVV_1e5          3935366       343431  -91.27%
      BenchmarkAddVW_1                 20           10  -49.04%
      BenchmarkAddVW_2                 60           14  -76.53%
      BenchmarkAddVW_3                 99           16  -83.38%
      BenchmarkAddVW_4                140           18  -86.50%
      BenchmarkAddVW_5                179           21  -88.04%
      BenchmarkAddVW_1e1              376           33  -91.20%
      BenchmarkAddVW_1e2             3933          256  -93.49%
      BenchmarkAddVW_1e3            39630         2378  -94.00%
      BenchmarkAddVW_1e4           396218        23623  -94.04%
      BenchmarkAddVW_1e5          3972901       238403  -94.00%
      BenchmarkAddMulVVW_1             11           11   -4.27%
      BenchmarkAddMulVVW_2             15           15   +0.00%
      BenchmarkAddMulVVW_3             18           19   +4.37%
      BenchmarkAddMulVVW_4             21           21   +4.29%
      BenchmarkAddMulVVW_5             24           24   -0.82%
      BenchmarkAddMulVVW_1e1           40           39   -2.70%
      BenchmarkAddMulVVW_1e2          329          326   -0.91%
      BenchmarkAddMulVVW_1e3         3200         3098   -3.19%
      BenchmarkAddMulVVW_1e4        38457        40013   +4.05%
      BenchmarkAddMulVVW_1e5       461880       428580   -7.21%
      BenchmarkBitLen0                  5            5   -0.19%
      BenchmarkBitLen1                  5            5   +0.00%
      BenchmarkBitLen2                  5            5   -0.56%
      BenchmarkBitLen3                  5            5   +0.38%
      BenchmarkBitLen4                  5            5   +0.19%
      BenchmarkBitLen5                  5            5   +0.56%
      BenchmarkBitLen8                  5            5   -0.19%
      BenchmarkBitLen9                  5            5   -0.56%
      BenchmarkBitLen16                 5            5   -0.19%
      BenchmarkBitLen17                 5            5   -0.37%
      BenchmarkBitLen31                 5            5   -1.30%
      BenchmarkBitset                  72           70   -2.49%
      BenchmarkBitsetNeg             1584          396  -75.00%
      BenchmarkBitsetOrig            1990         1980   -0.50%
      BenchmarkBitsetNegOrig         4031         2877  -28.63%
      
      benchmark                  old MB/s     new MB/s  speedup
      BenchmarkAddVV_1             657.71      2251.28    3.42x
      BenchmarkAddVV_2             730.65      3700.37    5.06x
      BenchmarkAddVV_3             757.29      4754.30    6.28x
      BenchmarkAddVV_4             772.95      5541.58    7.17x
      BenchmarkAddVV_5             781.30      6125.59    7.84x
      BenchmarkAddVV_1e1           800.33      7814.14    9.76x
      BenchmarkAddVV_1e2           815.98     10129.62   12.41x
      BenchmarkAddVV_1e3           818.73     10767.07   13.15x
      BenchmarkAddVV_1e4           819.82     10802.12   13.18x
      BenchmarkAddVV_1e5           813.14      9317.73   11.46x
      BenchmarkAddVW_1            1539.56      3006.13    1.95x
      BenchmarkAddVW_2            1057.66      4502.20    4.26x
      BenchmarkAddVW_3             960.67      5797.65    6.04x
      BenchmarkAddVW_4             913.19      6776.86    7.42x
      BenchmarkAddVW_5             891.72      7467.82    8.37x
      BenchmarkAddVW_1e1           850.12      9681.85   11.39x
      BenchmarkAddVW_1e2           813.48     12494.27   15.36x
      BenchmarkAddVW_1e3           807.45     13451.80   16.66x
      BenchmarkAddVW_1e4           807.64     13545.64   16.77x
      BenchmarkAddVW_1e5           805.46     13422.64   16.66x
      BenchmarkAddMulVVW_1        2727.29      2847.66    1.04x
      BenchmarkAddMulVVW_2        4162.30      4158.69    1.00x
      BenchmarkAddMulVVW_3        5236.91      5015.98    0.96x
      BenchmarkAddMulVVW_4        6090.27      5837.52    0.96x
      BenchmarkAddMulVVW_5        6549.86      6598.60    1.01x
      BenchmarkAddMulVVW_1e1      7850.72      8068.00    1.03x
      BenchmarkAddMulVVW_1e2      9724.38      9794.40    1.01x
      BenchmarkAddMulVVW_1e3      9997.18     10328.58    1.03x
      BenchmarkAddMulVVW_1e4      8320.88      7997.39    0.96x
      BenchmarkAddMulVVW_1e5      6928.20      7466.50    1.08x
      
      LGTM=gri
      R=golang-codereviews, dave, gri
      CC=golang-codereviews
      https://golang.org/cl/61290043
      eae09a59
  2. 13 Feb, 2014 25 commits