------- Comment #5 from rguenth at gcc dot gnu dot org 2008-11-02 12:04 -------
More reduced:
typedef int Int32;
void use_it(int);
void FindAndReadSignature(int processedSize)
{
int numPrevBytes = 1;
for (;;)
{
int numBytesInBuffer = numPrevBytes + processedSize;
Int32 numTests = numBytesInBuffer - 1;
use_it (numTests);
numPrevBytes = numBytesInBuffer - numTests;
}
}
to not oscillate we rely on numTests _not_ be varying. It happens to be
with the typedef as we forget to strip useless conversions. Otherwise
we oscillate numPrevBytes (loop entry vs. back edge) between 1 and varying.
Which may hint at that the speedup brought up by Danny (not processing a
use further if it got varying) is even a correctness thing...
I have a patch for this particular case.
--
rguenth at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |dberlin at gcc dot gnu dot
| |org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37991