From eddd7ff3cd749ecdbc05ed5c190c860c2ac6d161 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5vard=20Haugen?= Date: Thu, 17 Sep 2015 21:01:29 +0200 Subject: [PATCH] cmd/compile/internal/gc: avoid stringsCompare for string literals Passes go build -a -toolexec 'toolstash -cmp' std cmp. Change-Id: I7567355d405c976c5d91a0cd4e9486ebeb348dbb Reviewed-on: https://go-review.googlesource.com/14682 Reviewed-by: Dave Cheney Run-TryBot: Dave Cheney TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick --- src/cmd/compile/internal/gc/const.go | 17 +++++++++-------- src/cmd/compile/internal/gc/walk.go | 2 +- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/cmd/compile/internal/gc/const.go b/src/cmd/compile/internal/gc/const.go index a6428ac427..e7559c206e 100644 --- a/src/cmd/compile/internal/gc/const.go +++ b/src/cmd/compile/internal/gc/const.go @@ -986,37 +986,37 @@ func evconst(n *Node) { goto setfalse case OEQ<<16 | CTSTR: - if cmpslit(nl, nr) == 0 { + if strlit(nl) == strlit(nr) { goto settrue } goto setfalse case ONE<<16 | CTSTR: - if cmpslit(nl, nr) != 0 { + if strlit(nl) != strlit(nr) { goto settrue } goto setfalse case OLT<<16 | CTSTR: - if cmpslit(nl, nr) < 0 { + if strlit(nl) < strlit(nr) { goto settrue } goto setfalse case OLE<<16 | CTSTR: - if cmpslit(nl, nr) <= 0 { + if strlit(nl) <= strlit(nr) { goto settrue } goto setfalse case OGE<<16 | CTSTR: - if cmpslit(nl, nr) >= 0 { + if strlit(nl) >= strlit(nr) { goto settrue } goto setfalse case OGT<<16 | CTSTR: - if cmpslit(nl, nr) > 0 { + if strlit(nl) > strlit(nr) { goto settrue } goto setfalse @@ -1341,8 +1341,9 @@ func defaultlit2(lp **Node, rp **Node, force int) { Convlit(rp, Types[TINT]) } -func cmpslit(l, r *Node) int { - return stringsCompare(l.Val().U.(string), r.Val().U.(string)) +// strlit returns the value of a literal string Node as a string. +func strlit(n *Node) string { + return n.Val().U.(string) } func Smallintconst(n *Node) bool { diff --git a/src/cmd/compile/internal/gc/walk.go b/src/cmd/compile/internal/gc/walk.go index 4ce1db6241..2afa05c66a 100644 --- a/src/cmd/compile/internal/gc/walk.go +++ b/src/cmd/compile/internal/gc/walk.go @@ -1356,7 +1356,7 @@ func walkexpr(np **Node, init **NodeList) { } // s + "badgerbadgerbadger" == "badgerbadgerbadger" - if (n.Etype == OEQ || n.Etype == ONE) && Isconst(n.Right, CTSTR) && n.Left.Op == OADDSTR && count(n.Left.List) == 2 && Isconst(n.Left.List.Next.N, CTSTR) && cmpslit(n.Right, n.Left.List.Next.N) == 0 { + if (n.Etype == OEQ || n.Etype == ONE) && Isconst(n.Right, CTSTR) && n.Left.Op == OADDSTR && count(n.Left.List) == 2 && Isconst(n.Left.List.Next.N, CTSTR) && strlit(n.Right) == strlit(n.Left.List.Next.N) { r := Nod(int(n.Etype), Nod(OLEN, n.Left.List.N, nil), Nodintconst(0)) typecheck(&r, Erv) walkexpr(&r, init)