1. 21 Feb, 2013 13 commits
    • Russ Cox's avatar
      runtime: better error from TestGcSys when gc is disabled · 5833c96b
      Russ Cox authored
      R=golang-dev, bradfitz
      CC=golang-dev
      https://golang.org/cl/7390047
      5833c96b
    • Dmitriy Vyukov's avatar
      runtime: fix heap corruption · 94fab3ca
      Dmitriy Vyukov authored
      R=golang-dev, rsc
      CC=golang-dev
      https://golang.org/cl/7397049
      94fab3ca
    • Russ Cox's avatar
      cmd/5g, cmd/6g: fix node dump formats · 0cdc0b3b
      Russ Cox authored
      lvd changed the old %N to %+hN and these
      never got updated.
      
      R=ken2
      CC=golang-dev
      https://golang.org/cl/7391045
      0cdc0b3b
    • Alan Donovan's avatar
      exp/ssa/interp: (#6 of 5): test interpretation of SSA form of $GOROOT/test/*.go. · aa5aaabb
      Alan Donovan authored
      The interpreter's os.Exit now triggers a special panic rather
      than kill the test process.  (It's semantically dubious, since
      it will run deferred routines.)  Interpret now returns its
      exit code rather than calling os.Exit.
      
      Also:
      - disabled parts of a few $GOROOT/tests via os.Getenv("GOSSAINTERP").
      - remove unnecessary 'slots' param to external functions; they
        are never closures.
      
      Most of the tests are disabled until go/types supports shifts.
      They can be reenabled if you patch this workaround:
      https://golang.org/cl/7312068
      
      R=iant, bradfitz
      CC=golang-dev, gri
      https://golang.org/cl/7313062
      aa5aaabb
    • Russ Cox's avatar
      cmd/fix: delete pre-Go 1 fixes · df93283d
      Russ Cox authored
      Assume people who were going to update to Go 1 have done so.
      Those with pre-Go 1 trees remaining will need to update first
      to Go 1.0 (using its 'go fix') and then to Go 1.1.
      
      Cuts the cmd/fix test time by 99% (3 seconds to 0.03 seconds).
      
      R=golang-dev, bradfitz
      CC=golang-dev
      https://golang.org/cl/7402046
      df93283d
    • Alan Donovan's avatar
      exp/ssa: add dedicated Panic instruction. · 92cbf82f
      Alan Donovan authored
      By avoiding the need for self-loops following calls to panic,
      we reduce the number of basic blocks considerably.
      
      R=gri
      CC=golang-dev, iant
      https://golang.org/cl/7403043
      92cbf82f
    • Mikio Hara's avatar
      net: add benchmarks for network interface identification · 0ad88a48
      Mikio Hara authored
      Current results on linux/amd64:
      BenchmarkInterfaces                      20000             80902 ns/op
      BenchmarkInterfaceByIndex                50000             71591 ns/op
      BenchmarkInterfaceByName                 20000             79908 ns/op
      BenchmarkInterfaceAddrs                   2000            836413 ns/op
      BenchmarkInterfacesAndAddrs               5000            605946 ns/op
      BenchmarkInterfacesAndMulticastAddrs     10000            169029 ns/op
      
      Update #4866.
      
      R=golang-dev, bradfitz
      CC=golang-dev
      https://golang.org/cl/7368046
      0ad88a48
    • Alan Donovan's avatar
      exp/ssa: build fully pruned SSA form. · 86712158
      Alan Donovan authored
      Overview: Function.finish() now invokes the "lifting" pass which replaces local allocs and loads and stores to such cells by SSA registers.  We use very standard machinery:
      
      (1) we build the dominator tree for the function's control flow graph (CFG) using the "Simple" Lengauer-Tarjan algorithm.  (Very "simple" in fact: even simple path compression is not yet implemented.)
      
      In sanity-checking mode, we cross check the dominator tree against an alternative implementation using a simple iterative dataflow algorithm.
      This all lives in dom.go, along with some diagnostic printing routines.
      
      (2) we build the dominance frontier for the entire CFG using the Cytron et al algorithm.  The DF is represented as a slice of slices, keyed by block index.  See buildDomFrontier() in lift.go.
      
      (3) we determine for each Alloc whether it can be lifted: is it only subject to loads and stores?  If so, we traverse the iterated dominance frontier (IDF) creating φ-nodes; they are not prepended to the blocks yet.
      See liftAlloc() in lift.go.
      
      (4) we perform the SSA renaming algorithm from Cytron et al, replacing all loads to lifted Alloc cells by the value stored by the dominating store operation, and deleting the stores and allocs.  See rename() in lift.go.
      
      (5) we eliminate unneeded φ-nodes, then concatenate the remaining ones with the non-deleted instructions of the block into a new slice.  We eliminate any lifted allocs from Function.Locals.
      
      To ease reviewing, I have avoided almost all optimisations at this point, though there are many opportunities to explore.  These will be easier to understand as follow-up changes.
      
      All the existing tests (pending CL 7313062) pass.  (Faster!)
      
      Details:
      
      "NaiveForm" BuilderMode flag suppresses all the new logic.
      Exposed as 'ssadump -build=N'.
      
      BasicBlock:
      - add .Index field (b.Func[b.Index]==b), simplifying
        algorithms such as Kildall-style dataflow with bitvectors.
      - rename the Name field to Comment to better reflect its
        reduced purpose.  It now has a String() method.
      - 'dom' field holds dominator tree node; private for now.
      - new predIndex method.
      - hasPhi is now a method
      
      dom.go:
      - domTree: a new struct for a node in a dominator tree.
      - buildDomTree builds the dominator tree using the simple
        variant Lengauer/Tarjan algorithm with Georgiadis'
        bucket optimizations.
      - sanityCheckDomTree builds dominance relation using
        Kildall-style dataflow and ensures the same result is
        obtained.
      - printDomTreeDot prints the CFG/DomTree in GraphViz format.
      
      blockopt.go:
      - perform a mark/sweep pass to eliminate unreachable
        cycles; the previous prune() opt would only eliminate
        trivially dead blocks.  (Needed for LT algo.)
      - using .Index, fuseblocks can now delete fused blocks directly.
      - delete prune().
      
      sanity.go: more consistency checks:
      - Phi with missing edge value
      - local Alloc instructions must appear in Function.Locals.
      - BasicBlock.Index, Func consistency
      - CFG edges are all intraprocedural.
      - detect nils in BasicBlock.Instrs.
      - detect Function.Locals with Heap flag set.
      - check fn.Blocks is nil if empty.
      
      Also:
      - Phi now has Comment field for debugging.
      - Fixed bug in Select.Operands()
        (took address of temporary copy of field)
      - new Literal constructor zeroLiteral().
      - algorithms steal private fields Alloc.index,
        BasicBlock.gaps to avoid allocating maps.
      - We print Function.Locals in DumpTo.
      - added profiling support to ssadump.
      
      R=iant, gri
      CC=golang-dev
      https://golang.org/cl/7229074
      86712158
    • Dmitriy Vyukov's avatar
      runtime: split minit() to mpreinit() and minit() · a0955a2a
      Dmitriy Vyukov authored
      mpreinit() is called on the parent thread and with mcache (can allocate memory),
      minit() is called on the child thread and can not allocate memory.
      
      R=golang-dev, rsc
      CC=golang-dev
      https://golang.org/cl/7389043
      a0955a2a
    • Brad Fitzpatrick's avatar
      database/sql: clarify that DB.Prepare's stmt is safe for concurrent use · c53fab96
      Brad Fitzpatrick authored
      And add a test too, for Alex. :)
      
      Fixes #3734
      
      R=golang-dev, adg
      CC=golang-dev
      https://golang.org/cl/7399046
      c53fab96
    • Dave Cheney's avatar
      misc/dashboard/builder: various cleanups · 4036d876
      Dave Cheney authored
      * allow commit watcher to be disabled, useful for small slow builders who will never be the first to notice a commit.
      * builders always update their local master working copy before cloning a specific revision.
      * refactor hg repo operations into a new type, Repo.
      
      R=adg, shanemhansen, luitvd
      CC=golang-dev
      https://golang.org/cl/7326053
      4036d876
    • Robert Griesemer's avatar
      go/types: export data result types are always parenthesized · 8473b448
      Robert Griesemer authored
      Minor simplification of gcimporter, removed TODO.
      
      R=adonovan
      CC=golang-dev
      https://golang.org/cl/7363044
      8473b448
    • Brad Fitzpatrick's avatar
      net/http: improve test reliability · a2ade452
      Brad Fitzpatrick authored
      Fixes #4852
      
      R=golang-dev, adg
      CC=golang-dev
      https://golang.org/cl/7374045
      a2ade452
  2. 20 Feb, 2013 25 commits
  3. 19 Feb, 2013 2 commits