1
0
mirror of https://github.com/golang/go synced 2024-10-03 05:11:21 -06:00

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
This commit is contained in:
Rémy Oudompheng 2012-11-01 14:36:08 +01:00
parent ee26a5e4f2
commit 022b361ae2
6 changed files with 27 additions and 25 deletions

View File

@ -1356,9 +1356,9 @@ sgen(Node *n, Node *res, int64 w)
return;
}
if(w == 8 || w == 12)
if(componentgen(n, res))
return;
// Avoid taking the address for simple enough types.
if(componentgen(n, res))
return;
// determine alignment.
// want to avoid unaligned access, so have to use
@ -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)

View File

@ -618,9 +618,9 @@ clearfat(Node *nl)
w = nl->type->width;
if(w == 8 || w == 12)
if(componentgen(N, nl))
return;
// Avoid taking the address for simple enough types.
if(componentgen(N, nl))
return;
c = w % 4; // bytes
q = w / 4; // quads

View File

@ -1254,9 +1254,9 @@ sgen(Node *n, Node *ns, int64 w)
if(w < 0)
fatal("sgen copy %lld", w);
if(w == 16)
if(componentgen(n, ns))
return;
// Avoid taking the address for simple enough types.
if(componentgen(n, ns))
return;
if(w == 0) {
// evaluate side effects only
@ -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)

View File

@ -1028,9 +1028,9 @@ clearfat(Node *nl)
w = nl->type->width;
if(w == 16)
if(componentgen(N, nl))
return;
// Avoid taking the address for simple enough types.
if(componentgen(N, nl))
return;
c = w % 8; // bytes
q = w / 8; // quads

View File

@ -1276,10 +1276,9 @@ sgen(Node *n, Node *res, int64 w)
return;
}
if (w == 8 || w == 12) {
if(componentgen(n, res))
return;
}
// 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)

View File

@ -59,9 +59,9 @@ clearfat(Node *nl)
dump("\nclearfat", nl);
w = nl->type->width;
if(w == 8 || w == 12)
if(componentgen(N, nl))
return;
// Avoid taking the address for simple enough types.
if(componentgen(N, nl))
return;
c = w % 4; // bytes
q = w / 4; // quads