]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: minor writebarrier cleanup
authorJosh Bleecher Snyder <josharian@gmail.com>
Thu, 27 Apr 2017 13:00:18 +0000 (06:00 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Thu, 27 Apr 2017 23:44:49 +0000 (23:44 +0000)
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>
src/cmd/compile/internal/ssa/deadstore.go
src/cmd/compile/internal/ssa/writebarrier.go

index f1b631870841e20c587ecbae12cf6779df90e540..dfbea3f3f4a9f5514f990888be2b26189bfd3d8f 100644 (file)
@@ -64,7 +64,7 @@ func dse(f *Func) {
                                continue
                        }
                        if last != nil {
-                               b.Fatalf("two final stores - simultaneous live stores %s %s", last, v)
+                               b.Fatalf("two final stores - simultaneous live stores %s %s", last.LongString(), v.LongString())
                        }
                        last = v
                }
index c2b2e001523ea8b361f0c0e18a1809a6f6574567..f4f14c8e590d1d637bc1fbdc76cf9cc7b15b55bb 100644 (file)
@@ -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