From: Keith Randall Date: Wed, 16 Mar 2022 16:24:06 +0000 (-0700) Subject: cmd/compile: allow noop conversions when comparing expressions X-Git-Tag: go1.19beta1~1043 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=e5e638e512e1ec27673d5e01e99eb870899be7f7;p=gostls13.git cmd/compile: allow noop conversions when comparing expressions Allows mapclear optimization to trigger in more cases, including some generic instantiations. Fixes #51699 Change-Id: Ic54f7686e5fcb8fbcad640aa77ed326d7338b938 Reviewed-on: https://go-review.googlesource.com/c/go/+/393434 Trust: Keith Randall Run-TryBot: Keith Randall Reviewed-by: Cuong Manh Le TryBot-Result: Gopher Robot --- diff --git a/src/cmd/compile/internal/ir/expr.go b/src/cmd/compile/internal/ir/expr.go index ebb84ad78f..ff3cc8ed6e 100644 --- a/src/cmd/compile/internal/ir/expr.go +++ b/src/cmd/compile/internal/ir/expr.go @@ -973,6 +973,12 @@ var IsIntrinsicCall = func(*CallExpr) bool { return false } // lvalue expression is for OSLICE and OAPPEND optimizations, and it // is correct in those settings. func SameSafeExpr(l Node, r Node) bool { + for l.Op() == OCONVNOP { + l = l.(*ConvExpr).X + } + for r.Op() == OCONVNOP { + r = r.(*ConvExpr).X + } if l.Op() != r.Op() || !types.Identical(l.Type(), r.Type()) { return false } @@ -996,11 +1002,6 @@ func SameSafeExpr(l Node, r Node) bool { r := r.(*UnaryExpr) return SameSafeExpr(l.X, r.X) - case OCONVNOP: - l := l.(*ConvExpr) - r := r.(*ConvExpr) - return SameSafeExpr(l.X, r.X) - case OCONV: l := l.(*ConvExpr) r := r.(*ConvExpr)