- 21 Feb, 2013 6 commits
-
-
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
-
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
-
Brad Fitzpatrick authored
And add a test too, for Alex. :) Fixes #3734 R=golang-dev, adg CC=golang-dev https://golang.org/cl/7399046
-
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
-
Robert Griesemer authored
Minor simplification of gcimporter, removed TODO. R=adonovan CC=golang-dev https://golang.org/cl/7363044
-
Brad Fitzpatrick authored
Fixes #4852 R=golang-dev, adg CC=golang-dev https://golang.org/cl/7374045
-
- 20 Feb, 2013 25 commits
-
-
Rob Pike authored
R=nigeltao CC=golang-dev https://golang.org/cl/7399044
-
Brad Fitzpatrick authored
Simplifies the contract for Driver.Stmt.Close in the process of fixing issue 3865. Fixes #3865 Update #4459 (maybe fixes it; uninvestigated) R=golang-dev, rsc CC=golang-dev https://golang.org/cl/7363043
-
Russ Cox authored
Fixes #4435. R=golang-dev, iant, alex.brainman, minux.ma, dvyukov CC=golang-dev https://golang.org/cl/7304104
-
Steven Elliot Harris authored
Mimic the Emacs convention of presenting read-only files meant for browsing using view-mode, rather than Fundamental mode which mistakenly allows editing of the "godoc" content. Fixes #4322. R=golang-dev, bradfitz, sameer CC=golang-dev https://golang.org/cl/7231055
-
Brad Fitzpatrick authored
Generated by addca. R=gobot CC=golang-dev https://golang.org/cl/7377045
-
Olivier Saingre authored
Fixes #4112. R=remyoudompheng, daniel.morsing, dave, rsc CC=golang-dev https://golang.org/cl/7085053
-
Brad Fitzpatrick authored
Generated by addca. R=gobot CC=golang-dev https://golang.org/cl/7400045
-
Rob Pike authored
Also close the file when we're done. R=bradfitz CC=golang-dev https://golang.org/cl/7363045
-
Robert Dinu authored
Apply width when using Printf with nil values. Fixes #4772. R=r, adg CC=golang-dev https://golang.org/cl/7314114
-
Rob Pike authored
R=golang-dev, bradfitz CC=golang-dev https://golang.org/cl/7386045
-
Rob Pike authored
R=rsc CC=golang-dev https://golang.org/cl/7385045
-
Rob Pike authored
R=rsc CC=golang-dev https://golang.org/cl/7381046
-
Robert Griesemer authored
(per r's suggestion) R=r CC=golang-dev https://golang.org/cl/7376045
-
Rob Pike authored
Add a new, simple interface for scanning (probably textual) data, based on a new type called Scanner. It does its own internal buffering, so should be plausibly efficient even without injecting a bufio.Reader. The format of the input is defined by a "split function", by default splitting into lines. Other implemented split functions include single bytes, single runes, and space-separated words. Here's the loop to scan stdin as a file of lines: s := bufio.NewScanner(os.Stdin) for s.Scan() { fmt.Printf("%s\n", s.Bytes()) } if s.Err() != nil { log.Fatal(s.Err()) } While we're dealing with spaces, define what space means to strings.Fields. Fixes #4802. R=adg, rogpeppe, bradfitz, rsc CC=golang-dev https://golang.org/cl/7322088
-
Robert Griesemer authored
(Offsetof is a function of Alignof and Sizeof.) - removed IntSize, PtrSize from Context (set Sizeof instead) - GcImporter needs a Context now (it needs to have access to Sizeof/Alignof) - removed exported Size field from Basic (use Sizeof) - added Offset to Field - added Alignment, Size to Struct R=adonovan CC=golang-dev https://golang.org/cl/7357046
-
Dmitriy Vyukov authored
Can not happen ATM. In preparation for the new scheduler. R=golang-dev, rsc CC=golang-dev https://golang.org/cl/7388043
-
Dmitriy Vyukov authored
In preparation for the new scheduler. R=golang-dev, rsc CC=golang-dev https://golang.org/cl/7386044
-
Dmitriy Vyukov authored
This is followup to https://golang.org/cl/7319050/ R=golang-dev, dave CC=golang-dev https://golang.org/cl/7379043
-
Dmitriy Vyukov authored
Fixes #4819. R=golang-dev, rsc CC=golang-dev https://golang.org/cl/7322086
-
Dmitriy Vyukov authored
The removed code leads to the situation when M executes the same locked G again and again. This is https://golang.org/cl/7310096 but with return instead of break in the nested switch. Fixes #4820. R=golang-dev, alex.brainman, rsc CC=golang-dev https://golang.org/cl/7304102
-
Brad Fitzpatrick authored
The Camlistore code tree rearranged after the go tool came out. (I didn't know this link was here until I saw it in some logs.) R=adg CC=golang-dev https://golang.org/cl/7374043
-
Péter Surányi authored
On Windows, directory names in PATH can be fully or partially quoted in double quotes ('"'), but the path names as used by most APIs must be unquoted. In addition, quoted names can contain the semicolon (';') character, which is otherwise used as ListSeparator. This CL changes SplitList in path/filepath and LookPath in os/exec to only treat unquoted semicolons as separators, and to unquote the separated elements. (In addition, fix harmless test bug I introduced for LookPath on Unix.) Related discussion thread: https://groups.google.com/d/msg/golang-nuts/PXCr10DsRb4/sawZBM7scYgJ R=rsc, minux.ma, mccoyst, alex.brainman, iant CC=golang-dev https://golang.org/cl/7181047
-
Brian Dellisanti authored
Fixes #4844. R=golang-dev, alex.brainman CC=golang-dev https://golang.org/cl/7366043
-
Carl Shapiro authored
R=r, golang-dev CC=golang-dev https://golang.org/cl/7327053
-
Akshat Kumar authored
The data file should be opened when a Conn is first established, rather than waiting for the first Read or Write. Upon Close, we now make sure to try to close both, the ctl as well as data files and set both to nil, even in the face of errors, instead of returning early. The Accept call was not setting the remote address of the connection properly. Now, we read the correct file. Make functions that establish Conn use newTCPConn or newUDPConn. R=rsc, rminnich, ality, dave CC=golang-dev https://golang.org/cl/7228068
-
- 19 Feb, 2013 9 commits
-
-
Mikio Hara authored
This CL changes nothing to existing API behavior, just sets up Zone in IPNet and IPAddr structures if possible. Also does small simplification. Update #4234. R=rsc, dave CC=golang-dev https://golang.org/cl/7300081
-
Mikio Hara authored
On Linux point-to-point interface an IFA_ADDRESS attribute represents a peer address. For a correct interface address we should take an IFA_LOCAL attribute instead. Fixes #4839. R=golang-dev, dave, rsc CC=golang-dev https://golang.org/cl/7352045
-
Alan Donovan authored
This avoids ambiguity and makes the diagnostics closer to those issued by gc, but it is more verbose since it qualifies intra-package references. Without extra context---e.g. a 'from *Package' parameter to Type.String()---we are forced to err on one side or the other. Also, cosmetic changes to exp/ssa: - Remove package-qualification workaround in Function.FullName. - Always set go/types.Package.Path field to the import path, since we know the correct path at this point. - In Function.DumpTo, show variadic '...' and result type info, and delete now-redundant "# Type: " line. R=gri CC=golang-dev https://golang.org/cl/7325051
-
Robert Griesemer authored
R=golang-dev, dsymonds, bradfitz CC=golang-dev https://golang.org/cl/7323073
-
Robert Griesemer authored
Also: - faster code for example extraction - simplify handling of command documentation: all "main" packages are treated as commands - various minor cleanups along the way For commands written in Go, any doc.go file containing documentation must now be part of package main (rather then package documentation), otherwise the documentation won't show up in godoc (it will still build, though). For commands written in C, documentation may still be in doc.go files defining package documentation, but the recommended way is to explicitly ignore those files with a +build ignore constraint to define package main. Fixes #4806. R=adg, rsc, dave, bradfitz CC=golang-dev https://golang.org/cl/7333046
-
Kamil Kisiel authored
R=golang-dev, bradfitz, minux.ma CC=golang-dev https://golang.org/cl/7291043
-
Russ Cox authored
This comment matches the one in path. Fixes #4837. R=golang-dev, bradfitz CC=golang-dev https://golang.org/cl/7305100
-
Andrew Wilkins authored
side expression evaluation in assignment operations. R=golang-dev, gri CC=golang-dev https://golang.org/cl/7349046
-
Robin Eklind authored
ref: http://www.dwarfstd.org/doc/DWARF4.pdf Update #4829 R=minux.ma, iant CC=dave, golang-dev https://golang.org/cl/7354043
-