- 10 Mar, 2016 22 commits
-
-
Keith Randall authored
Make sure we do any just-before-return cleanup on all paths out of a function, including when recovering. Each exit path should include deferreturn (if there are any defers) and then the exit code (e.g. copying heap-escaping return values back to the stack). Introduce a Defer SSA block type which has two outgoing edges - one the fallthrough edge (the defer was queued successfully) and one which immediately returns (the defer had a successful recover() call and normal execution should resume at the return point). Fixes #14725 Change-Id: Iad035c9fd25ef8b7a74dafbd7461cf04833d981f Reviewed-on: https://go-review.googlesource.com/20486Reviewed-by:
David Chase <drchase@google.com>
-
Josh Bleecher Snyder authored
Passes toolstash -cmp. Change-Id: I014613985005780d1a622c1981b35a94cda798bb Reviewed-on: https://go-review.googlesource.com/20530 Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> Reviewed-by:
Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
Ian Lance Taylor authored
Change-Id: I055e986c3f27d5c07badcd1684f4fe1d65a917a9 Reviewed-on: https://go-review.googlesource.com/20523 Run-TryBot: Ian Lance Taylor <iant@golang.org> Reviewed-by:
Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
Matthew Dempsky authored
This CL was mostly produced by a one-off automated rewrite tool looking for statements like "for X := T.Type; X != nil; X = X.Down" and a few minor variations. Passes toolstash -cmp. Change-Id: Ib22705e37d078ef97841ee2e08f60bdbcabb94ad Reviewed-on: https://go-review.googlesource.com/20520 Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by:
Ian Lance Taylor <iant@golang.org>
-
Ian Lance Taylor authored
Passes toolstash -cmp. Change-Id: I05322fb5afd213f13fb247ec1a5f655c17a58774 Reviewed-on: https://go-review.googlesource.com/20522 Run-TryBot: Ian Lance Taylor <iant@golang.org> Reviewed-by:
Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
Ian Lance Taylor authored
That was easy. Fixes #14473. Change-Id: I9d1d20a5c5a9b1423e6c72c0460ee4a78130864f Reviewed-on: https://go-review.googlesource.com/20521 Run-TryBot: Ian Lance Taylor <iant@golang.org> Reviewed-by:
David Crawshaw <crawshaw@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
Ian Lance Taylor authored
Fixes #14554. Change-Id: I37ab4e4dc1aee84ac448d437314f8eecbbc02994 Reviewed-on: https://go-review.googlesource.com/20021Reviewed-by:
Brad Fitzpatrick <bradfitz@golang.org>
-
Ian Lance Taylor authored
Passes toolstash -cmp. Update #14473. Change-Id: I2ac5c595d7af7a8da1a7e3945e6a753299446250 Reviewed-on: https://go-review.googlesource.com/20497 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by:
Brad Fitzpatrick <bradfitz@golang.org>
-
Klaus Post authored
If the upstream writer has returned an error, it may not be returned by subsequent calls. This makes sure that if an error has been returned, the Writer will keep returning an error on all subsequent calls, and not silently "swallow" them. Change-Id: I2c9f614df72e1f4786705bf94e119b66c62abe5e Reviewed-on: https://go-review.googlesource.com/20515Reviewed-by:
Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by:
Joe Tsai <thebrokentoaster@gmail.com>
-
Martin Möhrmann authored
The fmt package does not use bytes.Buffer anymore as an internal buffer. Change-Id: I34c7a52506290ccbcb10ea2e85dea49a0a8b8203 Reviewed-on: https://go-review.googlesource.com/20511Reviewed-by:
Brad Fitzpatrick <bradfitz@golang.org>
-
Paul Marks authored
This allows TestDialerFallbackDelay to pass again on machines where IPv6 connections to nowhere fail quickly instead of hanging. This bug appeared last month, when I deleted the slowTimeout constant. Updates #11225 Fixes #14731 Change-Id: I840011eee571aab1041022411541736111c7fad5 Reviewed-on: https://go-review.googlesource.com/20493 Run-TryBot: Paul Marks <pmarks@google.com> Reviewed-by:
Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by:
Mikio Hara <mikioh.mikioh@gmail.com>
-
Lynn Boger authored
The existing implementation uses code written in Go to implement Sqrt; this adds the assembler to use the sqrt instruction for Power and makes the necessary changes to allow it to be inlined. The following tests showed this relative improvement: benchmark delta BenchmarkSqrt -97.91% BenchmarkSqrtIndirect -96.65% BenchmarkSqrtGo -35.93% BenchmarkSqrtPrime -96.94% Fixes #14349 Change-Id: I8074f4dc63486e756587564ceb320aca300bf5fa Reviewed-on: https://go-review.googlesource.com/19515Reviewed-by:
Minux Ma <minux@golang.org>
-
Todd Neal authored
When calling freeValue for possible const values, remove them from the cache as well. Change-Id: I087ed592243e33c58e5db41700ab266fc70196d9 Reviewed-on: https://go-review.googlesource.com/20481 Run-TryBot: Todd Neal <tolchz@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by:
Keith Randall <khr@golang.org>
-
Dave Cheney authored
More cleanups after CL 20089 - copysub, take a bool rather than an int for the f (force) parameter. - copysub returns a bool rather than an int. - prevl, reg is now int16, which reduces type conversion in its callers. - copy1, reduce the scope of t and p variables. - small simplifications in copyau1, copyas, etc. - {mips64,ppc64}/regzer returns a bool. - apply CL 20181 to x86/peep.go which was missed in the last CL. - various comment fixes. Change-Id: Ib73ffb768c979ce86f1614e5366fd576dea50986 Reviewed-on: https://go-review.googlesource.com/20281Reviewed-by:
Matthew Dempsky <mdempsky@google.com> Run-TryBot: Dave Cheney <dave@cheney.net> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
Matthew Dempsky authored
Change-Id: I93b4821254c9b0a3cebd912f447ed58f20adeb58 Reviewed-on: https://go-review.googlesource.com/19937Reviewed-by:
David Crawshaw <crawshaw@golang.org> Reviewed-by:
Brad Fitzpatrick <bradfitz@golang.org>
-
Matthew Dempsky authored
Fixes #13337. Change-Id: Ie74d00390111796619150287d3f7a147750ab456 Reviewed-on: https://go-review.googlesource.com/19932Reviewed-by:
Ian Lance Taylor <iant@golang.org>
-
Matthew Dempsky authored
Change-Id: Ice3aa807169f4fec85745a3991b1084a9f85c1b5 Reviewed-on: https://go-review.googlesource.com/20499 Run-TryBot: Matthew Dempsky <mdempsky@google.com> Reviewed-by:
Ian Lance Taylor <iant@golang.org>
-
Matthew Dempsky authored
Accessing the n'th field of a struct is fairly common, and in particular accessing the 0'th field of the receiver parameter list is very common. Add helper methods for both of these tasks and update code to make use of them. Change-Id: I81f551fecdca306b3800636caebcd0dc106f2ed7 Reviewed-on: https://go-review.googlesource.com/20498 Run-TryBot: Matthew Dempsky <mdempsky@google.com> Reviewed-by:
Dave Cheney <dave@cheney.net>
-
Matthew Dempsky authored
Also, more lazy variable declarations, and make Dijkstra happy by replacing "goto loop" with a for loop. Change-Id: Idf2cd779a92eb3f33bd3394e12c9a0be72002ff4 Reviewed-on: https://go-review.googlesource.com/20496Reviewed-by:
Dave Cheney <dave@cheney.net> Reviewed-by:
Ian Lance Taylor <iant@golang.org>
-
Dave Cheney authored
Follow up to CL 20494 addressing Type.Copy and a few other tiny cleanups. Change-Id: I3d0913a9f50a22ac2fd802858b1a94c15c5cb1bc Reviewed-on: https://go-review.googlesource.com/20501 Run-TryBot: Dave Cheney <dave@cheney.net> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by:
Matthew Dempsky <mdempsky@google.com>
-
Matthew Dempsky authored
Better documentation. Change parameter types from **Type and int to just *Type and bool. Make use of short var declarations. Change-Id: I909846ba0df65cd2bc05ee145b72d60e881588bd Reviewed-on: https://go-review.googlesource.com/20495Reviewed-by:
Dave Cheney <dave@cheney.net>
-
Matthew Dempsky authored
This should is preparatory cleanup to make it easier to use separate types to represent each kind of Go type, rather than a single omnibus Type struct with heavily overloaded fields. Also, add TODO comments marking assignments that change an existing Type's kind, as they need to be removed before we can factor Type. Change-Id: If4b551fdea4ae045b10b1a3de2ee98f5cf32a517 Reviewed-on: https://go-review.googlesource.com/20494Reviewed-by:
Brad Fitzpatrick <bradfitz@golang.org>
-
- 09 Mar, 2016 18 commits
-
-
Andrew Gerrand authored
Change-Id: I142a9f97303e3bfbd9522fd061530c0a91305389 Reviewed-on: https://go-review.googlesource.com/20500Reviewed-by:
Minux Ma <minux@golang.org>
-
Josh Bleecher Snyder authored
With this, the start and end of geneq and genhash are parallel. This removes a few rare nilchecks from generated hash functions, but nothing to write home about. Change-Id: I3b4836111d04daa6f6834a579bbec374a3f42c70 Reviewed-on: https://go-review.googlesource.com/20456 Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by:
David Crawshaw <crawshaw@golang.org>
-
Ian Lance Taylor authored
Mix in several other minor cleanups, including adding some new methods to Nodes: Index, Addr, SetIndex, SetNodes. Passes toolstash -cmp. Update #14473. Change-Id: I8bd4ae3fde7c5e20ba66e7dd1654fbc70c3ddeb8 Reviewed-on: https://go-review.googlesource.com/20491Reviewed-by:
Brad Fitzpatrick <bradfitz@golang.org>
-
David Crawshaw authored
Today the linker keeps all methods of reachable types. This is necessary if a program uses reflect.Value.Call. But while use of reflection is widespread in Go for encoders and decoders, using it to call a method is rare. This CL looks for the use of reflect.Value.Call in a program, and if it is absent, adopts a (reasonably conservative) method pruning strategy as part of dead code elimination. Any method that is directly called is kept, and any method that matches a used interface's method signature is kept. Whether or not a method body is kept is determined by the relocation from its receiver's *rtype to its *rtype. A small change in the compiler marks these relocations as R_METHOD so they can be easily collected and manipulated by the linker. As a bonus, this technique removes the text segment of methods that have been inlined. Looking at the output of building cmd/objdump with -ldflags=-v=2 shows that inlined methods like runtime.(*traceAllocBlockPtr).ptr are removed from the program. Relatively little work is necessary to do this. Linking two examples, jujud and cmd/objdump show no more than +2% link time. Binaries that do not use reflect.Call.Value drop 4 - 20% in size: addr2line: -793KB (18%) asm: -346KB (8%) cgo: -490KB (10%) compile: -564KB (4%) dist: -736KB (17%) fix: -404KB (12%) link: -328KB (7%) nm: -827KB (19%) objdump: -712KB (16%) pack: -327KB (14%) yacc: -350KB (10%) Binaries that do use reflect.Call.Value see a modest size decrease of 2 - 6% thanks to pruning of unexported methods: api: -151KB (3%) cover: -222KB (4%) doc: -106KB (2.5%) pprof: -314KB (3%) trace: -357KB (4%) vet: -187KB (2.7%) jujud: -4.4MB (5.8%) cmd/go: -384KB (3.4%) The trivial Hello example program goes from 2MB to 1.68MB: package main import "fmt" func main() { fmt.Println("Hello, 世界") } Method pruning also helps when building small binaries with "-ldflags=-s -w". The above program goes from 1.43MB to 1.2MB. Unfortunately the linker can only tell if reflect.Value.Call has been statically linked, not if it is dynamically used. And while use is rare, it is linked into a very common standard library package, text/template. The result is programs like cmd/go, which don't use reflect.Value.Call, see limited benefit from this CL. If binary size is important enough it may be possible to address this in future work. For #6853. Change-Id: Iabe90e210e813b08c3f8fd605f841f0458973396 Reviewed-on: https://go-review.googlesource.com/20483Reviewed-by:
Russ Cox <rsc@golang.org>
-
Brad Fitzpatrick authored
Introduced in https://golang.org/cl/20462 Change-Id: I6c55f87228f0980058a10f204b57ead7594e3492 Reviewed-on: https://go-review.googlesource.com/20490Reviewed-by:
Andrew Gerrand <adg@golang.org>
-
Brad Fitzpatrick authored
Drops cmd/binary size from 14.41 MiB to 11.42 MiB. Before: text data bss dec hex filename 8121210 3521696 737960 12380866 bceac2 ../pkg/tool/linux_amd64/compile bradfitz@dev-bradfitz-debian2:~/go/src$ ls -l ../pkg/tool/linux_amd64/compile -rwxr-xr-x 1 bradfitz bradfitz 15111272 Mar 8 23:32 ../pkg/tool/linux_amd64/compile a2afc0 51312 R html.statictmp_0085 6753f0 56592 T cmd/internal/obj/x86.doasm 625480 58080 T cmd/compile/internal/gc.typecheck1 f34c40 65688 D runtime.trace be0a20 133552 D cmd/compile/internal/ppc64.varianttable c013e0 265856 D cmd/compile/internal/arm.progtable c42260 417280 D cmd/compile/internal/amd64.progtable ca8060 417280 D cmd/compile/internal/x86.progtable f44ce0 500640 D cmd/internal/obj/arm64.oprange d0de60 534208 D cmd/compile/internal/ppc64.progtable d90520 667520 D cmd/compile/internal/arm64.progtable e334a0 790368 D cmd/compile/internal/mips64.progtable a3e8c0 1579362 r runtime.pclntab After: text data bss dec hex filename 8128226 375954 246432 8750612 858614 ../pkg/tool/linux_amd64/compile -rwxr-xr-x 1 bradfitz bradfitz 11971432 Mar 8 23:35 ../pkg/tool/linux_amd64/compile 6436d0 43936 T cmd/compile/internal/gc.walkexpr c13ca0 45056 D cmd/compile/internal/ssa.opcodeTable 5d8ea0 50256 T cmd/compile/internal/gc.(*state).expr 818c50 50448 T cmd/compile/internal/ssa.rewriteValueAMD64_OpMove a2d0e0 51312 R html.statictmp_0085 6753d0 56592 T cmd/internal/obj/x86.doasm 625460 58080 T cmd/compile/internal/gc.typecheck1 c38fe0 65688 D runtime.trace a409e0 1578810 r runtime.pclntab Fixes #14703 Change-Id: I2177596d5c7fd67db0a3c423cd90801cf52adb12 Reviewed-on: https://go-review.googlesource.com/20450Reviewed-by:
Matthew Dempsky <mdempsky@google.com> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
Martin Möhrmann authored
Uses a switch statement for direct format function selection similar to other types verb handling in fmt. Applies padding also to nil pointers formatted with %v. Guards against "slice bounds out of range" panic in TestSprintf when a pointer test results in a formatted string s that is shorter than the index i the pointer should appear in. Adds more and rearranges tests. Fixes #14712 Fixes #14714 Change-Id: Iaf5ae37b7e6ba7d27d528d199f2b2eb9d5829b8c Reviewed-on: https://go-review.googlesource.com/20371 Run-TryBot: Rob Pike <r@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by:
Rob Pike <r@golang.org>
-
Alexandru Moșoi authored
Fixes #14721 Change-Id: Id1d5a819e5c242b91a37c4e464ed3f00c691aff5 Reviewed-on: https://go-review.googlesource.com/20482Reviewed-by:
Keith Randall <khr@golang.org> Run-TryBot: Alexandru Moșoi <alexandru@mosoi.ro> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
Matthew Dempsky authored
Change-Id: I5365b94b815bfb4795db643415c2df51fc815ea1 Reviewed-on: https://go-review.googlesource.com/20459 Run-TryBot: Matthew Dempsky <mdempsky@google.com> Reviewed-by:
Dave Cheney <dave@cheney.net>
-
Richard Miller authored
On Plan 9, there's no "kill all threads" system call, so exit is done by sending a "go: exit" note to each OS process. If concurrent GC occurs during this loop, deadlock sometimes results. Prevent this by incrementing m.locks before sending notes. Change-Id: I31aa15134ff6e42d9a82f9f8a308620b3ad1b1b1 Reviewed-on: https://go-review.googlesource.com/20477Reviewed-by:
Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
Richard Miller authored
This prevents a fatal "missing stackmap" error if garbage collection occurs during exit. Also annotate argument sizes for "go vet". Change-Id: I2473e0ef6aef8f26d0bbeaee9bd8f8a52eaaf941 Reviewed-on: https://go-review.googlesource.com/20476Reviewed-by:
Brad Fitzpatrick <bradfitz@golang.org>
-
Alexandru Moșoi authored
* Move lowering into a separate pass. * SliceLen/SliceCap is now available to various intermediate passes which use useful for bounds checking. * Add a second opt pass to handle the new opportunities Decreases the code size of binaries in pkg/tool/linux_amd64 by ~45K. Updates #14564 #14606 Change-Id: I5b2bd6202181c50623a3585fbf15c0d6db6d4685 Reviewed-on: https://go-review.googlesource.com/20172 Run-TryBot: Alexandru Moșoi <alexandru@mosoi.ro> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by:
David Chase <drchase@google.com>
-
Matthew Dempsky authored
It's only used once, so just make the caller responsible for iterating both the receiver and input params. Change-Id: Icb34f3f0cf96e80fbe27f3f49d12eddc26599b92 Reviewed-on: https://go-review.googlesource.com/20454Reviewed-by:
Dave Cheney <dave@cheney.net>
-
Ingo Oeser authored
so the code is more readable. Also use n[i] = val instead of n = append(n, val), because this avoids a function call to append. NOTE: compiles, but I had trouble running toolstash -cmp and need sleep now. @Ian this might save you some grunt work :-) Change-Id: I2a4c70396c58905f7d5aabf83f3020f11dea0e89 Reviewed-on: https://go-review.googlesource.com/20430Reviewed-by:
Ian Lance Taylor <iant@golang.org> Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
Nigel Tao authored
This helps follow-up CLs ensure that the encoding's core computation does not allocate. It is a separate CL because it has a non-trivial effect on the benchmark numbers, even if it's purely an accounting change and not a change to the underlying performance: BenchmarkEncodeDigitsSpeed1e4-4 5.65 19.31 3.42x BenchmarkEncodeDigitsSpeed1e5-4 17.23 26.79 1.55x BenchmarkEncodeDigitsSpeed1e6-4 26.85 27.51 1.02x BenchmarkEncodeDigitsDefault1e4-4 4.41 13.21 3.00x BenchmarkEncodeDigitsDefault1e5-4 5.64 6.28 1.11x BenchmarkEncodeDigitsDefault1e6-4 5.54 5.65 1.02x BenchmarkEncodeDigitsCompress1e4-4 4.31 13.15 3.05x BenchmarkEncodeDigitsCompress1e5-4 5.52 5.91 1.07x BenchmarkEncodeDigitsCompress1e6-4 5.38 5.63 1.05x BenchmarkEncodeTwainSpeed1e4-4 5.45 19.06 3.50x BenchmarkEncodeTwainSpeed1e5-4 17.30 29.25 1.69x BenchmarkEncodeTwainSpeed1e6-4 28.06 30.86 1.10x BenchmarkEncodeTwainDefault1e4-4 4.06 12.36 3.04x BenchmarkEncodeTwainDefault1e5-4 6.15 7.62 1.24x BenchmarkEncodeTwainDefault1e6-4 6.84 6.99 1.02x BenchmarkEncodeTwainCompress1e4-4 4.06 12.27 3.02x BenchmarkEncodeTwainCompress1e5-4 5.29 5.92 1.12x BenchmarkEncodeTwainCompress1e6-4 5.24 5.29 1.01x Change-Id: I7d32866b7e2d478b0154332c1edeefe339af9a28 Reviewed-on: https://go-review.googlesource.com/20467Reviewed-by:
David Symonds <dsymonds@golang.org>
-
Brady Catherman authored
Adds a type of output to Examples that allows tests to have unordered output. This is intended to help clarify when the output of a command will produce a fixed return, but that return might not be in an constant order. Examples where this is useful would be documenting the rand.Perm() call, or perhaps the (os.File).Readdir(), both of which can not guarantee order, but can guarantee the elements of the output. Fixes #10149 Change-Id: Iaf0cf1580b686afebd79718ed67ea744f5ed9fc5 Reviewed-on: https://go-review.googlesource.com/19280Reviewed-by:
Andrew Gerrand <adg@golang.org>
-
Shenghou Ma authored
Change-Id: Ia22f681b0e90876ec87363c50c6a284db050f649 Reviewed-on: https://go-review.googlesource.com/19793Reviewed-by:
Andrew Gerrand <adg@golang.org>
-
Josh Bleecher Snyder authored
Passes toolstash -cmp. Change-Id: I6ec2143a30c1f2c15f8ec74422c954ed6b9b1a0f Reviewed-on: https://go-review.googlesource.com/20452Reviewed-by:
Matthew Dempsky <mdempsky@google.com>
-