]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: convert nilcheck elim rules to typed aux
authorJosh Bleecher Snyder <josharian@gmail.com>
Fri, 24 Apr 2020 05:27:23 +0000 (22:27 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Fri, 24 Apr 2020 23:06:48 +0000 (23:06 +0000)
Passes toolstash-check.

Change-Id: Ic7efb0e4778844366f581c6310a1a2f3bfc1868a
Reviewed-on: https://go-review.googlesource.com/c/go/+/229686
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
src/cmd/compile/internal/ssa/gen/generic.rules
src/cmd/compile/internal/ssa/rewrite.go
src/cmd/compile/internal/ssa/rewritegeneric.go

index 30a34da8255dce0b64ecba7f63993b33352931bf..fdd2154c935d4bdb621fd1c431a42a093f737120 100644 (file)
        && mem.Op == OpStaticCall
        && isSameSym(mem.Aux, "runtime.newobject")
        && c == config.ctxt.FixedFrameSize() + config.RegSize // offset of return value
-       -> mem
+       => mem
 (Store (Load (OffPtr [c] (SP)) mem) x mem)
        && isConstZero(x)
        && mem.Op == OpStaticCall
        && isSameSym(mem.Aux, "runtime.newobject")
        && c == config.ctxt.FixedFrameSize() + config.RegSize // offset of return value
-       -> mem
+       => mem
 (Store (OffPtr (Load (OffPtr [c] (SP)) mem)) x mem)
        && isConstZero(x)
        && mem.Op == OpStaticCall
        && isSameSym(mem.Aux, "runtime.newobject")
        && c == config.ctxt.FixedFrameSize() + config.RegSize // offset of return value
-       -> mem
+       => mem
 // nil checks just need to rewrite to something useless.
 // they will be deadcode eliminated soon afterwards.
 (NilCheck (Load (OffPtr [c] (SP)) (StaticCall {sym} _)) _)
-       && isSameSym(sym, "runtime.newobject")
+       && symNamed(sym, "runtime.newobject")
        && c == config.ctxt.FixedFrameSize() + config.RegSize // offset of return value
        && warnRule(fe.Debug_checknil(), v, "removed nil check")
-       -> (Invalid)
+       => (Invalid)
 (NilCheck (OffPtr (Load (OffPtr [c] (SP)) (StaticCall {sym} _))) _)
-       && isSameSym(sym, "runtime.newobject")
+       && symNamed(sym, "runtime.newobject")
        && c == config.ctxt.FixedFrameSize() + config.RegSize // offset of return value
        && warnRule(fe.Debug_checknil(), v, "removed nil check")
-       -> (Invalid)
+       => (Invalid)
 
 // Evaluate constant address comparisons.
 (EqPtr  x x) -> (ConstBool [1])
index ed9b7bd4a164d61fe63710852a9e65a6ad4fc6a1..0e2d7eb5aac306c587c5677087bcf4ce67153db8 100644 (file)
@@ -373,6 +373,11 @@ func canMergeLoad(target, load *Value) bool {
        return true
 }
 
+// symNamed reports whether sym's name is name.
+func symNamed(sym Sym, name string) bool {
+       return sym.String() == name
+}
+
 // isSameSym reports whether sym is the same as the given named symbol
 func isSameSym(sym interface{}, name string) bool {
        s, ok := sym.(fmt.Stringer)
index cbfb17d9d267982e5954f4fc003b4fc5590c4981..8afb74354947eee55e2c2c92be61d5d726a525f8 100644 (file)
@@ -16009,7 +16009,7 @@ func rewriteValuegeneric_OpNilCheck(v *Value) bool {
                return true
        }
        // match: (NilCheck (Load (OffPtr [c] (SP)) (StaticCall {sym} _)) _)
-       // cond: isSameSym(sym, "runtime.newobject") && c == config.ctxt.FixedFrameSize() + config.RegSize && warnRule(fe.Debug_checknil(), v, "removed nil check")
+       // cond: symNamed(sym, "runtime.newobject") && c == config.ctxt.FixedFrameSize() + config.RegSize && warnRule(fe.Debug_checknil(), v, "removed nil check")
        // result: (Invalid)
        for {
                if v_0.Op != OpLoad {
@@ -16020,7 +16020,7 @@ func rewriteValuegeneric_OpNilCheck(v *Value) bool {
                if v_0_0.Op != OpOffPtr {
                        break
                }
-               c := v_0_0.AuxInt
+               c := auxIntToInt64(v_0_0.AuxInt)
                v_0_0_0 := v_0_0.Args[0]
                if v_0_0_0.Op != OpSP {
                        break
@@ -16029,15 +16029,15 @@ func rewriteValuegeneric_OpNilCheck(v *Value) bool {
                if v_0_1.Op != OpStaticCall {
                        break
                }
-               sym := v_0_1.Aux
-               if !(isSameSym(sym, "runtime.newobject") && c == config.ctxt.FixedFrameSize()+config.RegSize && warnRule(fe.Debug_checknil(), v, "removed nil check")) {
+               sym := auxToSym(v_0_1.Aux)
+               if !(symNamed(sym, "runtime.newobject") && c == config.ctxt.FixedFrameSize()+config.RegSize && warnRule(fe.Debug_checknil(), v, "removed nil check")) {
                        break
                }
                v.reset(OpInvalid)
                return true
        }
        // match: (NilCheck (OffPtr (Load (OffPtr [c] (SP)) (StaticCall {sym} _))) _)
-       // cond: isSameSym(sym, "runtime.newobject") && c == config.ctxt.FixedFrameSize() + config.RegSize && warnRule(fe.Debug_checknil(), v, "removed nil check")
+       // cond: symNamed(sym, "runtime.newobject") && c == config.ctxt.FixedFrameSize() + config.RegSize && warnRule(fe.Debug_checknil(), v, "removed nil check")
        // result: (Invalid)
        for {
                if v_0.Op != OpOffPtr {
@@ -16052,7 +16052,7 @@ func rewriteValuegeneric_OpNilCheck(v *Value) bool {
                if v_0_0_0.Op != OpOffPtr {
                        break
                }
-               c := v_0_0_0.AuxInt
+               c := auxIntToInt64(v_0_0_0.AuxInt)
                v_0_0_0_0 := v_0_0_0.Args[0]
                if v_0_0_0_0.Op != OpSP {
                        break
@@ -16061,8 +16061,8 @@ func rewriteValuegeneric_OpNilCheck(v *Value) bool {
                if v_0_0_1.Op != OpStaticCall {
                        break
                }
-               sym := v_0_0_1.Aux
-               if !(isSameSym(sym, "runtime.newobject") && c == config.ctxt.FixedFrameSize()+config.RegSize && warnRule(fe.Debug_checknil(), v, "removed nil check")) {
+               sym := auxToSym(v_0_0_1.Aux)
+               if !(symNamed(sym, "runtime.newobject") && c == config.ctxt.FixedFrameSize()+config.RegSize && warnRule(fe.Debug_checknil(), v, "removed nil check")) {
                        break
                }
                v.reset(OpInvalid)
@@ -21606,7 +21606,7 @@ func rewriteValuegeneric_OpStore(v *Value) bool {
                if v_0_0.Op != OpOffPtr {
                        break
                }
-               c := v_0_0.AuxInt
+               c := auxIntToInt64(v_0_0.AuxInt)
                v_0_0_0 := v_0_0.Args[0]
                if v_0_0_0.Op != OpSP {
                        break
@@ -21634,7 +21634,7 @@ func rewriteValuegeneric_OpStore(v *Value) bool {
                if v_0_0_0.Op != OpOffPtr {
                        break
                }
-               c := v_0_0_0.AuxInt
+               c := auxIntToInt64(v_0_0_0.AuxInt)
                v_0_0_0_0 := v_0_0_0.Args[0]
                if v_0_0_0_0.Op != OpSP {
                        break
@@ -24091,7 +24091,7 @@ func rewriteValuegeneric_OpZero(v *Value) bool {
                if v_0_0.Op != OpOffPtr {
                        break
                }
-               c := v_0_0.AuxInt
+               c := auxIntToInt64(v_0_0.AuxInt)
                v_0_0_0 := v_0_0.Args[0]
                if v_0_0_0.Op != OpSP || mem != v_1 || !(mem.Op == OpStaticCall && isSameSym(mem.Aux, "runtime.newobject") && c == config.ctxt.FixedFrameSize()+config.RegSize) {
                        break