-> mem
// nil checks just need to rewrite to something useless.
// they will be deadcode eliminated soon afterwards.
-(NilCheck (Load (OffPtr [c] (SP)) mem) mem)
- && mem.Op == OpStaticCall
- && isSameSym(mem.Aux, "runtime.newobject")
+(NilCheck (Load (OffPtr [c] (SP)) (StaticCall {sym} _)) _)
+ && isSameSym(sym, "runtime.newobject")
&& c == config.ctxt.FixedFrameSize() + config.RegSize // offset of return value
&& warnRule(fe.Debug_checknil() && v.Pos.Line() > 1, v, "removed nil check")
-> (Invalid)
-(NilCheck (OffPtr (Load (OffPtr [c] (SP)) mem)) mem)
- && mem.Op == OpStaticCall
- && isSameSym(mem.Aux, "runtime.newobject")
+(NilCheck (OffPtr (Load (OffPtr [c] (SP)) (StaticCall {sym} _))) _)
+ && isSameSym(sym, "runtime.newobject")
&& c == config.ctxt.FixedFrameSize() + config.RegSize // offset of return value
&& warnRule(fe.Debug_checknil() && v.Pos.Line() > 1, v, "removed nil check")
-> (Invalid)
v.AddArg(mem)
return true
}
- // match: (NilCheck (Load (OffPtr [c] (SP)) mem) mem)
- // cond: mem.Op == OpStaticCall && isSameSym(mem.Aux, "runtime.newobject") && c == config.ctxt.FixedFrameSize() + config.RegSize && warnRule(fe.Debug_checknil() && v.Pos.Line() > 1, v, "removed nil check")
+ // match: (NilCheck (Load (OffPtr [c] (SP)) (StaticCall {sym} _)) _)
+ // cond: isSameSym(sym, "runtime.newobject") && c == config.ctxt.FixedFrameSize() + config.RegSize && warnRule(fe.Debug_checknil() && v.Pos.Line() > 1, v, "removed nil check")
// result: (Invalid)
for {
_ = v.Args[1]
if v_0_0_0.Op != OpSP {
break
}
- mem := v_0.Args[1]
- if mem != v.Args[1] {
+ v_0_1 := v_0.Args[1]
+ if v_0_1.Op != OpStaticCall {
break
}
- if !(mem.Op == OpStaticCall && isSameSym(mem.Aux, "runtime.newobject") && c == config.ctxt.FixedFrameSize()+config.RegSize && warnRule(fe.Debug_checknil() && v.Pos.Line() > 1, v, "removed nil check")) {
+ sym := v_0_1.Aux
+ if !(isSameSym(sym, "runtime.newobject") && c == config.ctxt.FixedFrameSize()+config.RegSize && warnRule(fe.Debug_checknil() && v.Pos.Line() > 1, v, "removed nil check")) {
break
}
v.reset(OpInvalid)
return true
}
- // match: (NilCheck (OffPtr (Load (OffPtr [c] (SP)) mem)) mem)
- // cond: mem.Op == OpStaticCall && isSameSym(mem.Aux, "runtime.newobject") && c == config.ctxt.FixedFrameSize() + config.RegSize && warnRule(fe.Debug_checknil() && v.Pos.Line() > 1, v, "removed nil check")
+ // 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.Pos.Line() > 1, v, "removed nil check")
// result: (Invalid)
for {
_ = v.Args[1]
if v_0_0_0_0.Op != OpSP {
break
}
- mem := v_0_0.Args[1]
- if mem != v.Args[1] {
+ v_0_0_1 := v_0_0.Args[1]
+ if v_0_0_1.Op != OpStaticCall {
break
}
- if !(mem.Op == OpStaticCall && isSameSym(mem.Aux, "runtime.newobject") && c == config.ctxt.FixedFrameSize()+config.RegSize && warnRule(fe.Debug_checknil() && v.Pos.Line() > 1, v, "removed nil check")) {
+ sym := v_0_0_1.Aux
+ if !(isSameSym(sym, "runtime.newobject") && c == config.ctxt.FixedFrameSize()+config.RegSize && warnRule(fe.Debug_checknil() && v.Pos.Line() > 1, v, "removed nil check")) {
break
}
v.reset(OpInvalid)