aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/ssa/writebarrier.go
diff options
context:
space:
mode:
authorJosh Bleecher Snyder <josharian@gmail.com>2017-04-27 06:00:18 -0700
committerJosh Bleecher Snyder <josharian@gmail.com>2017-04-27 23:44:49 +0000
commit12c286c149583edbb08045cc8f518f0c90c7dc85 (patch)
tree0c01e5313a6b76f2494989ae1605a8552593f3d4 /src/cmd/compile/internal/ssa/writebarrier.go
parentfc08a19cef1b54cf6aad2fc1f8a298458d2e8d95 (diff)
downloadgo-12c286c149583edbb08045cc8f518f0c90c7dc85.tar.gz
go-12c286c149583edbb08045cc8f518f0c90c7dc85.zip
cmd/compile: minor writebarrier cleanup
This CL mainly moves some work to the switch on w.Op, to make a follow-up change simpler and clearer. Updates #19838 Change-Id: I86f3181c380dd60960afcc24224f655276b8956c Reviewed-on: https://go-review.googlesource.com/42010 Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
Diffstat (limited to 'src/cmd/compile/internal/ssa/writebarrier.go')
-rw-r--r--src/cmd/compile/internal/ssa/writebarrier.go13
1 files changed, 6 insertions, 7 deletions
diff --git a/src/cmd/compile/internal/ssa/writebarrier.go b/src/cmd/compile/internal/ssa/writebarrier.go
index c2b2e00152..f4f14c8e59 100644
--- a/src/cmd/compile/internal/ssa/writebarrier.go
+++ b/src/cmd/compile/internal/ssa/writebarrier.go
@@ -172,15 +172,12 @@ func writebarrier(f *Func) {
memThen := mem
memElse := mem
for _, w := range stores {
- var val *Value
ptr := w.Args[0]
- var typ interface{}
- if w.Op != OpStoreWB {
- typ = &ExternSymbol{Sym: w.Aux.(Type).Symbol()}
- }
- pos = w.Pos
+ pos := w.Pos
var fn *obj.LSym
+ var typ *ExternSymbol
+ var val *Value
switch w.Op {
case OpStoreWB:
fn = writebarrierptr
@@ -188,8 +185,10 @@ func writebarrier(f *Func) {
case OpMoveWB:
fn = typedmemmove
val = w.Args[1]
+ typ = &ExternSymbol{Sym: w.Aux.(Type).Symbol()}
case OpZeroWB:
fn = typedmemclr
+ typ = &ExternSymbol{Sym: w.Aux.(Type).Symbol()}
}
// then block: emit write barrier call
@@ -255,7 +254,7 @@ func writebarrier(f *Func) {
// wbcall emits write barrier runtime call in b, returns memory.
// if valIsVolatile, it moves val into temp space before making the call.
-func wbcall(pos src.XPos, b *Block, fn *obj.LSym, typ interface{}, ptr, val, mem, sp, sb *Value, valIsVolatile bool) *Value {
+func wbcall(pos src.XPos, b *Block, fn *obj.LSym, typ *ExternSymbol, ptr, val, mem, sp, sb *Value, valIsVolatile bool) *Value {
config := b.Func.Config
var tmp GCNode