Commit eddd7ff3 authored by Håvard Haugen's avatar Håvard Haugen Committed by Brad Fitzpatrick

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/14682Reviewed-by: default avatarDave Cheney <dave@cheney.net>
Run-TryBot: Dave Cheney <dave@cheney.net>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
parent f482a0f0
...@@ -986,37 +986,37 @@ func evconst(n *Node) { ...@@ -986,37 +986,37 @@ func evconst(n *Node) {
goto setfalse goto setfalse
case OEQ<<16 | CTSTR: case OEQ<<16 | CTSTR:
if cmpslit(nl, nr) == 0 { if strlit(nl) == strlit(nr) {
goto settrue goto settrue
} }
goto setfalse goto setfalse
case ONE<<16 | CTSTR: case ONE<<16 | CTSTR:
if cmpslit(nl, nr) != 0 { if strlit(nl) != strlit(nr) {
goto settrue goto settrue
} }
goto setfalse goto setfalse
case OLT<<16 | CTSTR: case OLT<<16 | CTSTR:
if cmpslit(nl, nr) < 0 { if strlit(nl) < strlit(nr) {
goto settrue goto settrue
} }
goto setfalse goto setfalse
case OLE<<16 | CTSTR: case OLE<<16 | CTSTR:
if cmpslit(nl, nr) <= 0 { if strlit(nl) <= strlit(nr) {
goto settrue goto settrue
} }
goto setfalse goto setfalse
case OGE<<16 | CTSTR: case OGE<<16 | CTSTR:
if cmpslit(nl, nr) >= 0 { if strlit(nl) >= strlit(nr) {
goto settrue goto settrue
} }
goto setfalse goto setfalse
case OGT<<16 | CTSTR: case OGT<<16 | CTSTR:
if cmpslit(nl, nr) > 0 { if strlit(nl) > strlit(nr) {
goto settrue goto settrue
} }
goto setfalse goto setfalse
...@@ -1341,8 +1341,9 @@ func defaultlit2(lp **Node, rp **Node, force int) { ...@@ -1341,8 +1341,9 @@ func defaultlit2(lp **Node, rp **Node, force int) {
Convlit(rp, Types[TINT]) Convlit(rp, Types[TINT])
} }
func cmpslit(l, r *Node) int { // strlit returns the value of a literal string Node as a string.
return stringsCompare(l.Val().U.(string), r.Val().U.(string)) func strlit(n *Node) string {
return n.Val().U.(string)
} }
func Smallintconst(n *Node) bool { func Smallintconst(n *Node) bool {
......
...@@ -1356,7 +1356,7 @@ func walkexpr(np **Node, init **NodeList) { ...@@ -1356,7 +1356,7 @@ func walkexpr(np **Node, init **NodeList) {
} }
// s + "badgerbadgerbadger" == "badgerbadgerbadger" // 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)) r := Nod(int(n.Etype), Nod(OLEN, n.Left.List.N, nil), Nodintconst(0))
typecheck(&r, Erv) typecheck(&r, Erv)
walkexpr(&r, init) walkexpr(&r, init)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment