[Bug tree-optimization/19283] New: Bad code generated in final_cleanup
gcc-bugzilla at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Wed Jan 5 23:49:00 GMT 2005
g++ generates bad code for the program below if -O3 is used.
If optimization is off, it works correctly.
$ g++ -o x x.cc
$ ./x
$ g++ -o x x.cc -O3
$ ./x
fail
$
Here is the generated code for main() (with exception-handling labels elided):
main:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
andl $-16, %esp
subl $16, %esp
movl $.LC0, (%esp)
call puts
xorl %eax, %eax
leave
ret
The test has been erroneously optimized out.
Here's main() from x.cc.t66.blocks:
int main() ()
{
<bb 0>:
if ((short int) (short unsigned int) (int) (short unsigned int) rawdata < 0) goto <L1>; else goto <L2>;
<L1>:;
printf (&"fail\n"[0]);
<L2>:;
return 0;
}
This looks ok.
And here it is from x.cc.t67.final_cleanup:
;; Function int main() (main)
Merging blocks 0 and 1
Merging blocks 0 and 2
int main() ()
{
<bb 0>:
printf (&"fail\n"[0]);
return 0;
}
Where the test is gone.
So the problem is in this step.
This looks like it may be related to the previous bug
tree-optimization/18576. However, that one is classified
as missed-optimization, while this is wrong code.
Environment:
System: Linux karma 2.6.8.1 #20 Mon Sep 13 23:48:47 EDT 2004 i686 i686 i386 GNU/Linux
Architecture: i686
<machine, os, target, libraries (multiple lines)>
host: i686-pc-linux-gnu
build: i686-pc-linux-gnu
target: i686-pc-linux-gnu
configured with: /home/sss/gcc/gcc/configure --prefix=/usr/local/gcc --enable-threads=posix --enable-long-long --enable-languages=c,c++,f95
How-To-Repeat:
Compile the following with -O3:
-------------------------------------------------------------------
extern "C" int printf (const char*, ...);
unsigned short int foo(unsigned int* ptr) {
return *ptr;
};
unsigned rawdata = 0;
int main ()
{
if ((foo(&rawdata) & 0x8000) != 0)
printf ("fail\n");
return 0;
}
-------------------------------------------------------------------
------- Additional Comments From snyder at fnal dot gov 2005-01-05 23:49 -------
Fix:
<how to correct or work around the problem, if known (multiple lines)>
--
Summary: Bad code generated in final_cleanup
Product: gcc
Version: 4.0.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: snyder at fnal dot gov
CC: gcc-bugs at gcc dot gnu dot org
GCC build triplet: i686-pc-linux-gnu
GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19283
More information about the Gcc-bugs
mailing list