diff options
author | Josh Bleecher Snyder <josharian@gmail.com> | 2017-04-27 06:00:18 -0700 |
---|---|---|
committer | Josh Bleecher Snyder <josharian@gmail.com> | 2017-04-27 23:44:49 +0000 |
commit | 12c286c149583edbb08045cc8f518f0c90c7dc85 (patch) | |
tree | 0c01e5313a6b76f2494989ae1605a8552593f3d4 /src/cmd/compile/internal/ssa/writebarrier.go | |
parent | fc08a19cef1b54cf6aad2fc1f8a298458d2e8d95 (diff) | |
download | go-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.go | 13 |
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 |