Commit 022b361a authored by Rémy Oudompheng's avatar Rémy Oudompheng

cmd/5g, cmd/6g, cmd/8g: remove width check for componentgen.

The move to 64-bit ints in 6g made componentgen ineffective.
In componentgen, the code already selects which values it can handle.

On amd64:
benchmark                 old ns/op    new ns/op    delta
BenchmarkBinaryTree17    9477970000   9582314000   +1.10%
BenchmarkFannkuch11      5928750000   5255080000  -11.36%
BenchmarkGobDecode         37103040     31451120  -15.23%
BenchmarkGobEncode         16042490     16844730   +5.00%
BenchmarkGzip             811337400    741373600   -8.62%
BenchmarkGunzip           197928700    192844500   -2.57%
BenchmarkJSONEncode       224164100    140064200  -37.52%
BenchmarkJSONDecode       258346800    231829000  -10.26%
BenchmarkMandelbrot200      7561780      7601615   +0.53%
BenchmarkParse             12970340     11624360  -10.38%
BenchmarkRevcomp         1969917000   1699137000  -13.75%
BenchmarkTemplate         296182000    263117400  -11.16%

R=nigeltao, dave, daniel.morsing
CC=golang-dev
https://golang.org/cl/6821052
parent ee26a5e4
...@@ -1356,9 +1356,9 @@ sgen(Node *n, Node *res, int64 w) ...@@ -1356,9 +1356,9 @@ sgen(Node *n, Node *res, int64 w)
return; return;
} }
if(w == 8 || w == 12) // Avoid taking the address for simple enough types.
if(componentgen(n, res)) if(componentgen(n, res))
return; return;
// determine alignment. // determine alignment.
// want to avoid unaligned access, so have to use // want to avoid unaligned access, so have to use
...@@ -1495,9 +1495,10 @@ cadable(Node *n) ...@@ -1495,9 +1495,10 @@ cadable(Node *n)
} }
/* /*
* copy a structure component by component * copy a composite value by moving its individual components.
* Slices, strings and interfaces are supported.
* nr is N when assigning a zero value.
* return 1 if can do, 0 if cant. * return 1 if can do, 0 if cant.
* nr is N for copy zero
*/ */
int int
componentgen(Node *nr, Node *nl) componentgen(Node *nr, Node *nl)
......
...@@ -618,9 +618,9 @@ clearfat(Node *nl) ...@@ -618,9 +618,9 @@ clearfat(Node *nl)
w = nl->type->width; w = nl->type->width;
if(w == 8 || w == 12) // Avoid taking the address for simple enough types.
if(componentgen(N, nl)) if(componentgen(N, nl))
return; return;
c = w % 4; // bytes c = w % 4; // bytes
q = w / 4; // quads q = w / 4; // quads
......
...@@ -1254,9 +1254,9 @@ sgen(Node *n, Node *ns, int64 w) ...@@ -1254,9 +1254,9 @@ sgen(Node *n, Node *ns, int64 w)
if(w < 0) if(w < 0)
fatal("sgen copy %lld", w); fatal("sgen copy %lld", w);
if(w == 16) // Avoid taking the address for simple enough types.
if(componentgen(n, ns)) if(componentgen(n, ns))
return; return;
if(w == 0) { if(w == 0) {
// evaluate side effects only // evaluate side effects only
...@@ -1378,9 +1378,10 @@ cadable(Node *n) ...@@ -1378,9 +1378,10 @@ cadable(Node *n)
} }
/* /*
* copy a structure component by component * copy a composite value by moving its individual components.
* Slices, strings and interfaces are supported.
* nr is N when assigning a zero value.
* return 1 if can do, 0 if cant. * return 1 if can do, 0 if cant.
* nr is N for copy zero
*/ */
int int
componentgen(Node *nr, Node *nl) componentgen(Node *nr, Node *nl)
......
...@@ -1028,9 +1028,9 @@ clearfat(Node *nl) ...@@ -1028,9 +1028,9 @@ clearfat(Node *nl)
w = nl->type->width; w = nl->type->width;
if(w == 16) // Avoid taking the address for simple enough types.
if(componentgen(N, nl)) if(componentgen(N, nl))
return; return;
c = w % 8; // bytes c = w % 8; // bytes
q = w / 8; // quads q = w / 8; // quads
......
...@@ -1276,10 +1276,9 @@ sgen(Node *n, Node *res, int64 w) ...@@ -1276,10 +1276,9 @@ sgen(Node *n, Node *res, int64 w)
return; return;
} }
if (w == 8 || w == 12) { // Avoid taking the address for simple enough types.
if(componentgen(n, res)) if(componentgen(n, res))
return; return;
}
// offset on the stack // offset on the stack
osrc = stkof(n); osrc = stkof(n);
...@@ -1381,9 +1380,10 @@ cadable(Node *n) ...@@ -1381,9 +1380,10 @@ cadable(Node *n)
} }
/* /*
* copy a structure component by component * copy a composite value by moving its individual components.
* Slices, strings and interfaces are supported.
* nr is N when assigning a zero value.
* return 1 if can do, 0 if cant. * return 1 if can do, 0 if cant.
* nr is N for copy zero
*/ */
int int
componentgen(Node *nr, Node *nl) componentgen(Node *nr, Node *nl)
......
...@@ -59,9 +59,9 @@ clearfat(Node *nl) ...@@ -59,9 +59,9 @@ clearfat(Node *nl)
dump("\nclearfat", nl); dump("\nclearfat", nl);
w = nl->type->width; w = nl->type->width;
if(w == 8 || w == 12) // Avoid taking the address for simple enough types.
if(componentgen(N, nl)) if(componentgen(N, nl))
return; return;
c = w % 4; // bytes c = w % 4; // bytes
q = w / 4; // quads q = w / 4; // quads
......
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