summaryrefslogtreecommitdiff
path: root/test/uintptrescapes2.go
diff options
context:
space:
mode:
authorKeith Randall <khr@golang.org>2018-10-05 08:54:50 -0700
committerKeith Randall <khr@golang.org>2018-10-14 05:21:00 +0000
commit389e942745ddd7eef44b71571c463b0dfc3dcac2 (patch)
tree85787f61381c1f4a546c79f7732f02e106c857a6 /test/uintptrescapes2.go
parent0e9f8a21f8b6534931f1ab50909161a289a0da3c (diff)
downloadgo-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.go4
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"
}