1
0
mirror of https://github.com/golang/go synced 2024-11-21 23:44:39 -07:00
The Go programming language
Go to file
Russ Cox e2d326b878 5g, 6g, 8g: fix loop finding bug, squash jmps
The loop recognizer uses the standard dominance
frontiers but gets confused by dead code, which
has a (not explicitly set) rpo number of 0, meaning it
looks like the head of the function, so it dominates
everything.  If the loop recognizer encounters dead
code while tracking backward through the graph
it fails to recognize where it started as a loop, and
then the optimizer does not registerize values loaded
inside that loop.  Fix by checking rpo against rpo2r.

Separately, run a quick pass over the generated
code to squash JMPs to JMP instructions, which
are convenient to emit during code generation but
difficult to read when debugging the -S output.
A side effect of this pass is to eliminate dead code,
so the output files may be slightly smaller and the
optimizer may have less work to do.
There is no semantic effect, because the linkers
flatten JMP chains and delete dead instructions
when laying out the final code.  Doing it here too
just makes the -S output easier to read and more
like what the final binary will contain.

The "dead code breaks loop finding" bug is thus
fixed twice over.  It seemed prudent to fix loopit
separately just in case dead code ever sneaks back
in for one reason or another.

R=ken2
CC=golang-dev
https://golang.org/cl/5190043
2011-10-04 15:06:16 -04:00
doc doc: update tutorial. 2011-10-03 16:18:47 -07:00
include 5a, 5c, 6a, 6c, 8a, 8c: fix Windows file paths 2011-09-07 15:49:56 -04:00
lib codereview: extra repo sanity check 2011-09-26 18:32:16 -04:00
misc vim: Send GoFmt errors to a location list 2011-09-23 09:38:10 +10:00
src 5g, 6g, 8g: fix loop finding bug, squash jmps 2011-10-04 15:06:16 -04:00
test Fix build, disabling flaky registerization test. 2011-10-03 17:25:55 -07:00
.hgignore codereview: save CL messages in $(hg root)/last-change 2011-09-20 14:56:15 -04:00
.hgtags tag weekly.2011-09-21 2011-09-22 15:08:23 +10:00
AUTHORS A&C: Add Paul Sbarra. 2011-09-22 13:05:13 +10:00
CONTRIBUTORS A&C: Add Paul Sbarra. 2011-09-22 13:05:13 +10:00
favicon.ico add a favicon plus a couple of hi-res versions of gordon 2009-10-26 10:13:07 -07:00
LICENSE LICENSE: separate, change PATENTS text 2010-12-06 16:31:59 -05:00
PATENTS LICENSE: separate, change PATENTS text 2010-12-06 16:31:59 -05:00
README build: update, streamline documentation for new $GOBIN 2010-08-24 20:00:50 -04:00
robots.txt godoc: serve robots.txt raw 2011-02-19 05:46:20 +11:00

This is the source code repository for the Go programming language.  

For documentation about how to install and use Go,
visit http://golang.org/ or load doc/install.html in your web browser.

After installing Go, you can view a nicely formatted
doc/install.html by running godoc --http=:6060
and then visiting http://localhost:6060/doc/install.html.

Unless otherwise noted, the Go source files are distributed
under the BSD-style license found in the LICENSE file.

--

Binary Distribution Notes

If you have just untarred a binary Go distribution, you need to set
the environment variable $GOROOT to the full path of the go
directory (the one containing this README).  You can omit the
variable if you unpack it into /usr/local/go, or if you rebuild
from sources by running all.bash (see doc/install.html).
You should also add the Go binary directory $GOROOT/bin
to your shell's path.

For example, if you extracted the tar file into $HOME/go, you might
put the following in your .profile:

    export GOROOT=$HOME/go
    export PATH=$PATH:$GOROOT/bin

See doc/install.html for more details.