]> Cypherpunks repositories - gostls13.git/commitdiff
8g: fix opt bug
authorRuss Cox <rsc@golang.org>
Sat, 11 Feb 2012 03:32:02 +0000 (22:32 -0500)
committerRuss Cox <rsc@golang.org>
Sat, 11 Feb 2012 03:32:02 +0000 (22:32 -0500)
Was trying to optimize a duplicate float64 move
by registerizing an int64.

Fixes #2588.

R=ken2
CC=golang-dev
https://golang.org/cl/5645086

src/cmd/8g/reg.c
test/fixedbugs/bug411.go [new file with mode: 0644]

index 227628226475d129ca29ee85cb3def505f60c0ca..4ff68625d211fab05499bf637cab549b91d22e41 100644 (file)
@@ -220,6 +220,9 @@ regopt(Prog *firstp)
                 * funny
                 */
                case ALEAL:
+               case AFMOVL: 
+               case AFMOVW:
+               case AFMOVV:
                        setaddrs(bit);
                        break;
 
@@ -741,7 +744,7 @@ addmove(Reg *r, int bn, int rn, int f)
        p1->as = AMOVL;
        switch(v->etype) {
        default:
-               fatal("unknown type\n");
+               fatal("unknown type %E", v->etype);
        case TINT8:
        case TUINT8:
        case TBOOL:
diff --git a/test/fixedbugs/bug411.go b/test/fixedbugs/bug411.go
new file mode 100644 (file)
index 0000000..3ca6a3d
--- /dev/null
@@ -0,0 +1,19 @@
+// $G $D/$F.go
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 2588.  Used to trigger internal compiler error on 8g,
+// because the compiler tried to registerize the int64 being
+// used as a memory operand of a int64->float64 move.
+
+package p
+
+func f1(a int64) {
+       f2(float64(a), float64(a))
+}
+
+func f2(a,b float64) {
+}
+