aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/ssa/check.go
diff options
context:
space:
mode:
authorCherry Zhang <cherryyz@google.com>2016-10-13 06:57:00 -0400
committerCherry Zhang <cherryyz@google.com>2016-10-25 21:53:40 +0000
commitf6aec889e1c880316b1989bdc6ce3b926cbe5fe4 (patch)
tree93e8be5693e528cfc887be1c647504349ce07669 /src/cmd/compile/internal/ssa/check.go
parent698bfa17a842890043098b972446e9b8dbc20841 (diff)
downloadgo-f6aec889e1c880316b1989bdc6ce3b926cbe5fe4.tar.gz
go-f6aec889e1c880316b1989bdc6ce3b926cbe5fe4.zip
cmd/compile: add a writebarrier phase in SSA
When the compiler insert write barriers, the frontend makes conservative decisions at an early stage. This may have false positives which result in write barriers for stack writes. A new phase, writebarrier, is added to the SSA backend, to delay the decision and eliminate false positives. The frontend still makes conservative decisions. When building SSA, instead of emitting runtime calls directly, it emits WB ops (StoreWB, MoveWB, etc.), which will be expanded to branches and runtime calls in writebarrier phase. Writes to static locations on stack are detected and write barriers are removed. All write barriers of stack writes found by the script from issue #17330 are eliminated (except two false positives). Fixes #17330. Change-Id: I9bd66333da9d0ceb64dcaa3c6f33502798d1a0f8 Reviewed-on: https://go-review.googlesource.com/31131 Reviewed-by: Austin Clements <austin@google.com> Reviewed-by: David Chase <drchase@google.com> Reviewed-by: Keith Randall <khr@golang.org>
Diffstat (limited to 'src/cmd/compile/internal/ssa/check.go')
-rw-r--r--src/cmd/compile/internal/ssa/check.go2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/cmd/compile/internal/ssa/check.go b/src/cmd/compile/internal/ssa/check.go
index 74b8dd5561..d78e915091 100644
--- a/src/cmd/compile/internal/ssa/check.go
+++ b/src/cmd/compile/internal/ssa/check.go
@@ -149,7 +149,7 @@ func checkFunc(f *Func) {
canHaveAuxInt = true
case auxString, auxSym:
canHaveAux = true
- case auxSymOff, auxSymValAndOff:
+ case auxSymOff, auxSymValAndOff, auxSymSizeAndAlign:
canHaveAuxInt = true
canHaveAux = true
case auxSymInt32: