]> Cypherpunks repositories - gostls13.git/commitdiff
gc: avoid re-genning ninit in branches involving float comparison.
authorLuuk van Dijk <lvd@golang.org>
Thu, 1 Dec 2011 13:46:32 +0000 (14:46 +0100)
committerLuuk van Dijk <lvd@golang.org>
Thu, 1 Dec 2011 13:46:32 +0000 (14:46 +0100)
R=rsc
CC=golang-dev
https://golang.org/cl/5451050

src/cmd/5g/cgen.c
src/cmd/6g/cgen.c
src/cmd/8g/cgen.c

index 15defaf111eef5f423c5fcc0b91cbd51c8e73180..0616cd366881a66692480591b16ee87e82ad2cb6 100644 (file)
@@ -850,6 +850,7 @@ bgen(Node *n, int true, Prog *to)
        int et, a;
        Node *nl, *nr, *r;
        Node n1, n2, n3, n4, tmp;
+       NodeList *ll;
        Prog *p1, *p2;
 
        USED(n4);                       // in unreachable code below
@@ -950,7 +951,10 @@ bgen(Node *n, int true, Prog *to)
                                p1 = gbranch(AB, T);
                                p2 = gbranch(AB, T);
                                patch(p1, pc);
+                               ll = n->ninit;
+                               n->ninit = nil;
                                bgen(n, 1, p2);
+                               n->ninit = ll;
                                patch(gbranch(AB, T), to);
                                patch(p2, pc);
                                goto ret;
index 43bec00594cf440aa8d6f17c34ad11f3e6bdc1b8..308915f64dd449898a48d9a38a19e775915d6800 100644 (file)
@@ -717,6 +717,7 @@ bgen(Node *n, int true, Prog *to)
        int et, a;
        Node *nl, *nr, *l, *r;
        Node n1, n2, tmp;
+       NodeList *ll;
        Prog *p1, *p2;
 
        if(debug['g']) {
@@ -834,7 +835,10 @@ bgen(Node *n, int true, Prog *to)
                                p1 = gbranch(AJMP, T);
                                p2 = gbranch(AJMP, T);
                                patch(p1, pc);
+                               ll = n->ninit;   // avoid re-genning ninit
+                               n->ninit = nil;
                                bgen(n, 1, p2);
+                               n->ninit = ll;
                                patch(gbranch(AJMP, T), to);
                                patch(p2, pc);
                                goto ret;
index 21b7815fd484c9997b1389c5a73818d43df41219..cf1eacde57de24f2aacbbb3870a35466e618336a 100644 (file)
@@ -787,6 +787,7 @@ bgen(Node *n, int true, Prog *to)
        int et, a;
        Node *nl, *nr, *r;
        Node n1, n2, tmp, t1, t2, ax;
+       NodeList *ll;
        Prog *p1, *p2;
 
        if(debug['g']) {
@@ -902,7 +903,10 @@ bgen(Node *n, int true, Prog *to)
                                p1 = gbranch(AJMP, T);
                                p2 = gbranch(AJMP, T);
                                patch(p1, pc);
+                               ll = n->ninit;  // avoid re-genning ninit
+                               n->ninit = nil;
                                bgen(n, 1, p2);
+                               n->ninit = ll;
                                patch(gbranch(AJMP, T), to);
                                patch(p2, pc);
                                break;