Shane Harrelson wrote:
You can find the same issue reported for Fedora from a few weeks ago:
http://www.sqlite.org/cvstrac/tktview?tn=3186
Here's the original thread from the mailing list discussion:
http://sqlite.org:8080/cgi-bin/mailman/private/sqlite-dev/2008-June/000172.html
-ffast_math was the culprit in this case as well.
[EMAIL PROTECTED]/tmp/sqlite-amalgamation-3.5.9]>gcc --version
gcc (Debian 4.3.1-4) 4.3.1
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
I ran some tests. I configured with --disable-shared to avoid picking
up the Debian packages shared libsqlite3.so.
1. make CFLAGS="-g -O" clean sqlite3 ; ./sqlite3 foo "select 1.0 /
3.0 ; " yields 0.33333333 as expected.
2. make CFLAGS="-g -O2" clean sqlite3 ; ./sqlite3 foo "select 1.0 /
3.0 ; " yields "" -- the bad situation.
3. The GCC 4.3 manual shows the
http://gcc.gnu.org/onlinedocs/gcc-4.3.0/gcc/Optimize-Options.html#Optimize-Options
gives an explicit list of which optimizations -O2 turns on. I
wrote a simple "foreach" loop to try each additional optimization
by itself. -fschedule-insns seems to cause an internal GCC error.
$ foreach i (`cat opt_options `)
foreach? echo "Optimization: $i"
foreach? make CFLAGS="-g -O $i" clean sqlite3 > /dev/null
foreach? ./sqlite3 foo "select 1.0 / 3.0 ; "
foreach? end
Optimization: -fthread-jumps
0.333333333333333
Optimization: -falign-functions
0.333333333333333
Optimization: -falign-jumps
0.333333333333333
Optimization: -falign-loops
0.333333333333333
Optimization: -falign-labels
0.333333333333333
Optimization: -fcaller-saves
0.333333333333333
Optimization: -fcrossjumping
0.333333333333333
Optimization: -fcse-follow-jumps
0.333333333333333
Optimization: -fcse-skip-blocks
0.333333333333333
Optimization: -fdelete-null-pointer-checks
0.333333333333333
Optimization: -fexpensive-optimizations
0.333333333333333
Optimization: -fgcse
0.333333333333333
Optimization: -fgcse-lm
0.333333333333333
Optimization: -foptimize-sibling-calls
0.333333333333333
Optimization: -fpeephole2
0.333333333333333
Optimization: -fregmove
0.333333333333333
Optimization: -freorder-blocks
0.333333333333333
Optimization: -freorder-functions
0.333333333333333
Optimization: -frerun-cse-after-loop
0.333333333333333
Optimization: -fsched-interblock
0.333333333333333
Optimization: -fsched-spec
0.333333333333333
Optimization: -fschedule-insns
shell.c: In function 'appendText':
shell.c:755: error: unable to find a register to spill in class 'AREG'
shell.c:755: error: this is the insn:
(insn 12 150 2 2 shell.c:723 (parallel [
(set (reg:SI 1 dx [78])
(unspec:SI [
(mem:BLK (reg/f:SI 5 di [orig:80 zAppend ]
[80]) [0 A8]) (reg:QI 3 bx [82])
(const_int 1 [0x1])
(reg:SI 1 dx [81])
] 30))
(clobber (reg/f:SI 5 di [orig:80 zAppend ] [80]))
(clobber (reg:CC 17 flags))
]) 810 {*strlenqi_1} (expr_list:REG_DEAD (reg:QI 3 bx [82])
(expr_list:REG_DEAD (reg:SI 1 dx [81])
(expr_list:REG_DEAD (reg/f:SI 5 di [orig:80 zAppend ]
[80])
(expr_list:REG_UNUSED (reg/f:SI 5 di [orig:80
zAppend ] [80])
(expr_list:REG_UNUSED (reg:CC 17 flags)
(nil)))))))
shell.c:755: confused by earlier errors, bailing out
Preprocessed source stored into /tmp/ccl8qsNd.out file, please
attach this to your bugreport.
make: *** [shell.o] Error 1
./sqlite3: Command not found.
Optimization: -fschedule-insns2
0.333333333333333
Optimization: -fstrict-aliasing
0.333333333333333
Optimization: -fstrict-overflow
0.333333333333333
Optimization: -ftree-pre
0.333333333333333
Optimization: -ftree-vrp
0.333333333333333
$
4. I tried -ffast-math too with make CFLAGS="-g -O -ffast-math" clean
sqlite3 > /dev/null ; ./sqlite3 foo "select 1.0 / 3.0; "
0.333333333333333
it yielded the correct answer
5. According to the GCC 4.3 documentation, the following should be
equivalent to "-g -O2" but it also dies with an internal GCC error.
$ make CFLAGS="-g -O -fthread-jumps -falign-functions
-falign-jumps -falign-loops -falign-labels -fcaller-saves
-fcrossjumping -fcse-follow-jumps -fcse-skip-blocks
-fdelete-null-pointer-checks -fexpensive-optimizations -fgcse
-fgcse-lm -foptimize-sibling-calls -fpeephole2 -fregmove
-freorder-blocks -freorder-functions -frerun-cse-after-loop
-fsched-interblock -fsched-spec -fschedule-insns -fschedule-insns2
-fstrict-aliasing -fstrict-overflow -ftree-pre -ftree-vrp" clean
sqlite3 > /dev/null ; ./sqlite3 foo "select 1.0 / 3.0; "
shell.c: In function 'appendText':
shell.c:755: error: unable to find a register to spill in class 'CREG'
shell.c:755: error: this is the insn:
(insn:HI 12 2 4 2 shell.c:723 (parallel [
(set (reg:SI 0 ax [78])
(unspec:SI [
(mem:BLK (reg/v/f:SI 5 di [orig:74 zAppend
] [74]) [0 A8])
(reg:QI 1 dx [82])
(const_int 1 [0x1])
(reg:SI 4 si [81])
] 30))
(clobber (reg/f:SI 3 bx [orig:80 zAppend ] [80]))
(clobber (reg:CC 17 flags))
]) 810 {*strlenqi_1} (expr_list:REG_UNUSED (reg/f:SI 3 bx
[orig:80 zAppend ] [80])
(expr_list:REG_UNUSED (reg:CC 17 flags)
(expr_list:REG_EQUAL (unspec:SI [
(mem:BLK (reg/v/f:SI 5 di [orig:74 zAppend
] [74]) [0 A8])
(reg:QI 1 dx [82])
(const_int 1 [0x1])
(reg:SI 4 si [81])
] 30)
(nil)))))
shell.c:755: confused by earlier errors, bailing out
Preprocessed source stored into /tmp/ccXOGVKH.out file, please
attach this to your bugreport.
make: *** [shell.o] Error 1
./sqlite3: Command not found.
6. If I drop -fschedule-insns from the list of optimizations, I get
the following:
$ make CFLAGS="-g -O -fthread-jumps -falign-functions
-falign-jumps -falign-loops -falign-labels -fcaller-saves
-fcrossjumping -fcse-follow-jumps -fcse-skip-blocks
-fdelete-null-pointer-checks -fexpensive-optimizations -fgcse
-fgcse-lm -foptimize-sibling-calls -fpeephole2 -fregmove
-freorder-blocks -freorder-functions -frerun-cse-after-loop
-fsched-interblock -fsched-spec -fschedule-insns2
-fstrict-aliasing -fstrict-overflow -ftree-pre -ftree-vrp" clean
sqlite3 > /dev/null ; ./sqlite3 foo "select 1.0 / 3.0; "
0.333333333333333
According to the GCC manual this is supposed to do all the
optimizations that -O2 does except -fschedule-insns.
I am not sure what to make of all this.
Tom
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]