This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/33404] New: Predictive commoning + ivopts possibly introducing extra sign extensions.
- From: "ramana dot radhakrishnan at celunite dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 12 Sep 2007 08:51:45 -0000
- Subject: [Bug tree-optimization/33404] New: Predictive commoning + ivopts possibly introducing extra sign extensions.
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
Hi ,
There's a difference in the code generated between O2 and O3 in the case below.
void fred(long in, short *out1)
{
int i;
for (i=0;i<100;i++)
out1[i+1] = out1[i]*in;
}
With O2 we generate at expand time -
fred (in, out1)
{
unsigned int ivtmp.24;
<bb 2>:
ivtmp.24 = (unsigned int) out1;
<bb 3>:
MEM[index: ivtmp.24, offset: 2] = (short int) (in * (long int) MEM[index:
ivtmp.24]);
ivtmp.24 = ivtmp.24 + 2;
if (ivtmp.24 != (unsigned int) (out1 + 200))
goto <bb 3>;
else
goto <bb 4>;
<bb 4>:
return;
}
With O3 we generate .
fred (in, out1)
{
unsigned int ivtmp.23;
short int D__lsm0.18;
long int D.1212;
<bb 2>:
D__lsm0.18 = *out1;
ivtmp.23 = 1;
<bb 3>:
D.1212 = (long int) D__lsm0.18 * in;
D__lsm0.18 = (short int) D.1212;
MEM[base: out1, index: ivtmp.23 * 2] = D__lsm0.18;
ivtmp.23 = ivtmp.23 + 1;
if (ivtmp.23 != 101)
goto <bb 3>;
else
goto <bb 4>;
<bb 4>:
return;
}
--
Summary: Predictive commoning + ivopts possibly introducing extra
sign extensions.
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: ramana dot radhakrishnan at celunite dot com
GCC build triplet: i686-linux-gnu
GCC host triplet: i686-linux-gnu
GCC target triplet: arm-none-eabi
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33404