summaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/ir/expr.go
diff options
context:
space:
mode:
authorKeith Randall <khr@golang.org>2022-03-16 09:24:06 -0700
committerKeith Randall <khr@golang.org>2022-03-16 23:03:54 +0000
commite5e638e512e1ec27673d5e01e99eb870899be7f7 (patch)
treeba3233f740d73399345442419906b707b4c72325 /src/cmd/compile/internal/ir/expr.go
parented4db861182456a63b7d837780c146d4e58e63d8 (diff)
downloadgo-git-e5e638e512e1ec27673d5e01e99eb870899be7f7.tar.gz
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 <khr@golang.org> Run-TryBot: Keith Randall <khr@golang.org> Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com> TryBot-Result: Gopher Robot <gobot@golang.org>
Diffstat (limited to 'src/cmd/compile/internal/ir/expr.go')
-rw-r--r--src/cmd/compile/internal/ir/expr.go11
1 files changed, 6 insertions, 5 deletions
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)