]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/[568]g: recycle ONAME nodes used in regopt to denote registers.
authorRémy Oudompheng <oudomphe@phare.normalesup.org>
Sun, 9 Dec 2012 18:10:52 +0000 (19:10 +0100)
committerRémy Oudompheng <oudomphe@phare.normalesup.org>
Sun, 9 Dec 2012 18:10:52 +0000 (19:10 +0100)
The reported decrease in memory usage is about 5%.

R=golang-dev, dave, rsc
CC=golang-dev
https://golang.org/cl/6902064

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

index 0181ba4ba4560cf39f49b7ef842eceb16bc1141c..100cff2dee199a39743f79997672bdb79374b6ee 100644 (file)
@@ -170,6 +170,8 @@ static char* regname[] = {
        ".F15",
 };
 
+static Node* regnodes[NREGVAR];
+
 void
 regopt(Prog *firstp)
 {
@@ -216,8 +218,11 @@ regopt(Prog *firstp)
         */
        nvar = NREGVAR;
        memset(var, 0, NREGVAR*sizeof var[0]);
-       for(i=0; i<NREGVAR; i++)
-               var[i].node = newname(lookup(regname[i]));
+       for(i=0; i<NREGVAR; i++) {
+               if(regnodes[i] == N)
+                       regnodes[i] = newname(lookup(regname[i]));
+               var[i].node = regnodes[i];
+       }
 
        regbits = RtoB(REGSP)|RtoB(REGLINK)|RtoB(REGPC);
        for(z=0; z<BITS; z++) {
index f9d0b11aecedb33d9c7294412db335dcd0951594..c92630f07c84506264e7656011f85f0e4ff97c18 100644 (file)
@@ -151,6 +151,8 @@ static char* regname[] = {
        ".X15",
 };
 
+static Node* regnodes[NREGVAR];
+
 static void fixjmp(Prog*);
 
 void
@@ -191,8 +193,11 @@ regopt(Prog *firstp)
         */
        nvar = NREGVAR;
        memset(var, 0, NREGVAR*sizeof var[0]);
-       for(i=0; i<NREGVAR; i++)
-               var[i].node = newname(lookup(regname[i]));
+       for(i=0; i<NREGVAR; i++) {
+               if(regnodes[i] == N)
+                       regnodes[i] = newname(lookup(regname[i]));
+               var[i].node = regnodes[i];
+       }
 
        regbits = RtoB(D_SP);
        for(z=0; z<BITS; z++) {
index bb942a16d2d406598490978938901b3da270da21..aa2f6fde180abe8f49eb3498dfb4e74677d23d40 100644 (file)
@@ -121,6 +121,8 @@ setaddrs(Bits bit)
 
 static char* regname[] = { ".ax", ".cx", ".dx", ".bx", ".sp", ".bp", ".si", ".di" };
 
+static Node* regnodes[NREGVAR];
+
 void
 regopt(Prog *firstp)
 {
@@ -159,8 +161,11 @@ regopt(Prog *firstp)
         */
        nvar = NREGVAR;
        memset(var, 0, NREGVAR*sizeof var[0]);
-       for(i=0; i<NREGVAR; i++)
-               var[i].node = newname(lookup(regname[i]));
+       for(i=0; i<NREGVAR; i++) {
+               if(regnodes[i] == N)
+                       regnodes[i] = newname(lookup(regname[i]));
+               var[i].node = regnodes[i];
+       }
 
        regbits = RtoB(D_SP);
        for(z=0; z<BITS; z++) {