mirror of
https://github.com/golang/go
synced 2024-11-20 03:04:40 -07: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:
parent
ee26a5e4f2
commit
022b361ae2
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user