diff options
author | Keith Randall <khr@golang.org> | 2018-10-05 08:54:50 -0700 |
---|---|---|
committer | Keith Randall <khr@golang.org> | 2018-10-14 05:21:00 +0000 |
commit | 389e942745ddd7eef44b71571c463b0dfc3dcac2 (patch) | |
tree | 85787f61381c1f4a546c79f7732f02e106c857a6 /test/uintptrescapes2.go | |
parent | 0e9f8a21f8b6534931f1ab50909161a289a0da3c (diff) | |
download | go-git-389e942745ddd7eef44b71571c463b0dfc3dcac2.tar.gz |
cmd/compile: reuse temporaries in order pass
Instead of allocating a new temporary each time one
is needed, keep a list of temporaries which are free
(have already been VARKILLed on every path) and use
one of them.
Should save a lot of stack space. In a function like this:
func main() {
fmt.Printf("%d %d\n", 2, 3)
fmt.Printf("%d %d\n", 4, 5)
fmt.Printf("%d %d\n", 6, 7)
}
The three [2]interface{} arrays used to hold the ... args
all use the same autotmp, instead of 3 different autotmps
as happened previous to this CL.
Change-Id: I2d728e226f81e05ae68ca8247af62014a1b032d3
Reviewed-on: https://go-review.googlesource.com/c/140301
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Diffstat (limited to 'test/uintptrescapes2.go')
-rw-r--r-- | test/uintptrescapes2.go | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/test/uintptrescapes2.go b/test/uintptrescapes2.go index e7b5d721f5..2c8dfd7102 100644 --- a/test/uintptrescapes2.go +++ b/test/uintptrescapes2.go @@ -32,12 +32,12 @@ func G() { var t int // ERROR "moved to heap" F1(uintptr(unsafe.Pointer(&t))) // ERROR "live at call to F1: .?autotmp" "&t escapes to heap" "stack object .autotmp_[0-9]+ unsafe.Pointer$" var t2 int // ERROR "moved to heap" - F3(uintptr(unsafe.Pointer(&t2))) // ERROR "live at call to F3: .?autotmp" "&t2 escapes to heap" "stack object .autotmp_[0-9]+ unsafe.Pointer$" + F3(uintptr(unsafe.Pointer(&t2))) // ERROR "live at call to F3: .?autotmp" "&t2 escapes to heap" } func H() { var v int // ERROR "moved to heap" F2(0, 1, uintptr(unsafe.Pointer(&v)), 2) // ERROR "live at call to newobject: .?autotmp" "live at call to F2: .?autotmp" "escapes to heap" "stack object .autotmp_[0-9]+ unsafe.Pointer$" var v2 int // ERROR "moved to heap" - F4(0, 1, uintptr(unsafe.Pointer(&v2)), 2) // ERROR "live at call to newobject: .?autotmp" "live at call to F4: .?autotmp" "escapes to heap" "stack object .autotmp_[0-9]+ unsafe.Pointer$" + F4(0, 1, uintptr(unsafe.Pointer(&v2)), 2) // ERROR "live at call to newobject: .?autotmp" "live at call to F4: .?autotmp" "escapes to heap" } |