• David Chase's avatar
    cmd/compile: use Block.Likely to put likely branch first · ab48574b
    David Chase authored
    When a neither of a conditional block's successors follows,
    the block must end with a conditional branch followed by a
    an unconditional branch.  If the (conditional) branch is
    "unlikely", invert it and swap successors to make it
    likely instead.
    
    This doesn't matter to most benchmarks on amd64, but in one
    instance on amd64 it caused a 30% improvement, and it is
    otherwise harmless.  The problematic loop is
    
    		for i := 0; i < w; i++ {
    			if pw[i] != 0 {
    				return true
    			}
    		}
    
    compiled under GOEXPERIMENT=preemptibleloops
    This the very worst-case benchmark for that experiment.
    
    Also in this CL is a commoning up of heavily-repeated
    boilerplate, which made it much easier to see that the
    changes were applied correctly.  In the future this should
    allow un-exporting of SSAGenState.Branches once the
    boilerplate-replacement is done everywhere.
    
    Change-Id: I0e5ded6eeb3ab1e3e0138e12d54c7e056bd99335
    Reviewed-on: https://go-review.googlesource.com/104977
    Run-TryBot: David Chase <drchase@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
    ab48574b
Name
Last commit
Last update
..
archive Loading commit data...
bufio Loading commit data...
builtin Loading commit data...
bytes Loading commit data...
cmd Loading commit data...
compress Loading commit data...
container Loading commit data...
context Loading commit data...
crypto Loading commit data...
database/sql Loading commit data...
debug Loading commit data...
encoding Loading commit data...
errors Loading commit data...
expvar Loading commit data...
flag Loading commit data...
fmt Loading commit data...
go Loading commit data...
hash Loading commit data...
html Loading commit data...
image Loading commit data...
index/suffixarray Loading commit data...
internal Loading commit data...
io Loading commit data...
log Loading commit data...
math Loading commit data...
mime Loading commit data...
net Loading commit data...
os Loading commit data...
path Loading commit data...
plugin Loading commit data...
reflect Loading commit data...
regexp Loading commit data...
runtime Loading commit data...
sort Loading commit data...
strconv Loading commit data...
strings Loading commit data...
sync Loading commit data...
syscall Loading commit data...
testing Loading commit data...
text Loading commit data...
time Loading commit data...
unicode Loading commit data...
unsafe Loading commit data...
vendor/golang_org/x Loading commit data...
Make.dist Loading commit data...
all.bash Loading commit data...
all.bat Loading commit data...
all.rc Loading commit data...
androidtest.bash Loading commit data...
bootstrap.bash Loading commit data...
buildall.bash Loading commit data...
clean.bash Loading commit data...
clean.bat Loading commit data...
clean.rc Loading commit data...
cmp.bash Loading commit data...
iostest.bash Loading commit data...
make.bash Loading commit data...
make.bat Loading commit data...
make.rc Loading commit data...
naclmake.bash Loading commit data...
nacltest.bash Loading commit data...
race.bash Loading commit data...
race.bat Loading commit data...
run.bash Loading commit data...
run.bat Loading commit data...
run.rc Loading commit data...