ado@NCIFCRF.GOV (Arthur David Olson) (11/13/88)
(We're running SunOS 4.0 on a Sun 3/110.)
Description:
The Gnu C Compiler (version 1.30)'s -fstrength-reduce option sometimes
produces incorrect code.
Repeat-By:
Script started on Sat Nov 12 14:26:28 1988
elsie$ cat try.c
int
main()
{
int i, j;
i = 0;
for ( ; ; ) {
printf("%d\n", i);
++i;
for (j = 0; j < 1; ++j)
++i;
}
}
elsie$ gcc -v -O try.c
gcc version 1.30
/usr/local/lib/gcc-cpp -v -undef -D__GNU__ -D__GNUC__ -Dmc68000 -Dsun -Dunix -D__OPTIMIZE__ -D__HAVE_68881__ -Dmc68020 try.c /tmp/cca19947.cpp
GNU CPP version 1.30
/usr/local/lib/gcc-cc1 /tmp/cca19947.cpp -quiet -dumpbase try.c -O -version -o /tmp/cca19947.s
GNU C version 1.30 (68k, MIT syntax) compiled by GNU C version 1.30.
as -mc68020 /tmp/cca19947.s -o try.o
ld -e start -dc -dp /lib/crt0.o /lib/Mcrt1.o try.o /usr/local/lib/gcc-gnulib -lc
elsie$ a.out | head -2
0
>>>> 2
elsie$ gcc -v -O -fstrength-reduce try.c
gcc version 1.30
/usr/local/lib/gcc-cpp -v -undef -D__GNU__ -D__GNUC__ -Dmc68000 -Dsun -Dunix -D__OPTIMIZE__ -D__HAVE_68881__ -Dmc68020 try.c /tmp/cca19954.cpp
GNU CPP version 1.30
/usr/local/lib/gcc-cc1 /tmp/cca19954.cpp -quiet -dumpbase try.c -fstrength-reduce -O -version -o /tmp/cca19954.s
GNU C version 1.30 (68k, MIT syntax) compiled by GNU C version 1.30.
as -mc68020 /tmp/cca19954.s -o try.o
ld -e start -dc -dp /lib/crt0.o /lib/Mcrt1.o try.o /usr/local/lib/gcc-gnulib -lc
a.elsie$ a.out | head -2
0
>>>> 1
elsie$ exit
script done on Sat Nov 12 14:27:22 1988
Note the changed output on the lines marked with ">>>>" above.
For reference, here's a side-by-side difference listing of the
assembly language produced.
Script started on Sat Nov 12 14:21:59 1988
elsie$ gcc -O -S try.c -o try.s-nostrength
elsie$ gcc -O -S -fstrength-reduce try.c -o try.s-strength
elsie$ sdiff -w80 try.s-nostrength try.s-strength
#NO_APP #NO_APP
.text .text
LC0: LC0:
.ascii "%d\12\0" .ascii "%d\12\0"
.even .even
.globl _main .globl _main
_main: _main:
link a6,#0 link a6,#0
movel d2,sp@- movel d2,sp@-
clrl d2 clrl d2
L2: L2:
movel d2,sp@- movel d2,sp@-
pea LC0 pea LC0
jbsr _printf jbsr _printf
addql #1,d2 addql #1,d2
clrl d0 clrl d0
addqw #8,sp addqw #8,sp
L8: L8:
addql #1,d2 <
addql #1,d0 addql #1,d0
andb #0xc,cc andb #0xc,cc
jle L8 jle L8
jra L2 jra L2
movel a6@(-4),d2 movel a6@(-4),d2
unlk a6 unlk a6
rts rts
elsie$ exit
script done on Sat Nov 12 14:23:06 1988
--
Arthur David Olson ado@ncifcrf.gov ADO is an Ampex trademark.