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,7 +1356,7 @@ sgen(Node *n, Node *res, int64 w)
return;
}
if(w == 8 || w == 12)
// Avoid taking the address for simple enough types.
if(componentgen(n, res))
return;
......@@ -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.
* nr is N for copy zero
*/
int
componentgen(Node *nr, Node *nl)
......
......@@ -618,7 +618,7 @@ clearfat(Node *nl)
w = nl->type->width;
if(w == 8 || w == 12)
// Avoid taking the address for simple enough types.
if(componentgen(N, nl))
return;
......
......@@ -1254,7 +1254,7 @@ sgen(Node *n, Node *ns, int64 w)
if(w < 0)
fatal("sgen copy %lld", w);
if(w == 16)
// Avoid taking the address for simple enough types.
if(componentgen(n, ns))
return;
......@@ -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.
* nr is N for copy zero
*/
int
componentgen(Node *nr, Node *nl)
......
......@@ -1028,7 +1028,7 @@ clearfat(Node *nl)
w = nl->type->width;
if(w == 16)
// Avoid taking the address for simple enough types.
if(componentgen(N, nl))
return;
......
......@@ -1276,10 +1276,9 @@ sgen(Node *n, Node *res, int64 w)
return;
}
if (w == 8 || w == 12) {
// Avoid taking the address for simple enough types.
if(componentgen(n, res))
return;
}
// offset on the stack
osrc = stkof(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.
* nr is N for copy zero
*/
int
componentgen(Node *nr, Node *nl)
......
......@@ -59,7 +59,7 @@ clearfat(Node *nl)
dump("\nclearfat", nl);
w = nl->type->width;
if(w == 8 || w == 12)
// Avoid taking the address for simple enough types.
if(componentgen(N, nl))
return;
......
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