[Bug tree-optimization/19701] [4.0 regression] Way too many IVs
pinskia at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Sun Jan 30 01:12:00 GMT 2005
------- Additional Comments From pinskia at gcc dot gnu dot org 2005-01-30 01:12 -------
Here is the .optimizate dump for -fno-ivopts (the most optimial code):
{
<bb 0>:
if (w > 63) goto <L0>; else goto <L2>;
<L0>:;
*(long long unsigned int *) d = 0;
*(long long unsigned int *) (d + 8B) = 0;
*(long long unsigned int *) (d + 16B) = 0;
*(long long unsigned int *) (d + 24B) = 0;
*(long long unsigned int *) (d + 32B) = 0;
*(long long unsigned int *) (d + 40B) = 0;
*(long long unsigned int *) (d + 48B) = 0;
*(long long unsigned int *) (d + 56B) = 0;
w = w - 64;
d = d + 64B;
if (w > 63) goto <L0>; else goto <L2>;
<L2>:;
return;
}
(just like what is in the source, one iv).
The tree dump for ivopts is still on (well the inner loop to show the problem):
<L0>:;
*(long long unsigned int *) d.19 = 0;
*ivtmp.10 = 0;
*ivtmp.11 = 0;
*ivtmp.12 = 0;
*ivtmp.13 = 0;
*ivtmp.14 = 0;
*ivtmp.15 = 0;
*ivtmp.16 = 0;
d.19 = d.19 + 64B;
ivtmp.10 = ivtmp.10 + 64B;
ivtmp.11 = ivtmp.11 + 64B;
ivtmp.12 = ivtmp.12 + 64B;
ivtmp.13 = ivtmp.13 + 64B;
ivtmp.14 = ivtmp.14 + 64B;
ivtmp.15 = ivtmp.15 + 64B;
ivtmp.16 = ivtmp.16 + 64B;
if ((int) ((unsigned int) w + (unsigned int) d - (unsigned int) d.19) > 63) goto <L0>; else goto <L2>;
Some times is better to use only one IV especially for a manually unrolled loop which is what this loop
is.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19701
More information about the Gcc-bugs
mailing list