Sent from my iPhone
On Feb 27, 2010, at 2:56 AM, "kai dot extern at googlemail dot com" <gcc-bugzi...@gcc.gnu.org
> wrote:
The attached code (which tries to generically load given-endianness
values of
varying width from memory) shows some interesting optimization
quirks. It's
especially pussling why optimization quality varies so greatly with
width, and
is actually worst for the native word width.
You are violating c++ aliasing rules. You access a uint8_t via
different types.
For example:
$ gcc -Wall -Wextra bad.cc -lstdc++ -O3 -###
Using built-in specs.
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu
4.4.1-4ubuntu9'
--with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs
--enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-
shared
--enable-multiarch --enable-linker-build-id --with-system-zlib
--libexecdir=/usr/lib --without-included-gettext --enable-
threads=posix
--with-gxx-include-dir=/usr/include/c++/4.4 --program-suffix=-4.4 --
enable-nls
--enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --
disable-werror
--with-arch-32=i486 --with-tune=generic --enable-checking=release
--build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-
linux-gnu
Thread model: posix
gcc version 4.4.1 (Ubuntu 4.4.1-4ubuntu9)
COLLECT_GCC_OPTIONS='-Wall' '-Wextra' '-O3' '-mtune=generic'
"/usr/lib/gcc/x86_64-linux-gnu/4.4.1/cc1plus" "-quiet" "-D_GNU_SOURCE"
"bad.cc" "-D_FORTIFY_SOURCE=2" "-quiet" "-dumpbase" "bad.cc" "-
mtune=generic"
"-auxbase" "bad" "-O3" "-Wall" "-Wextra" "-fstack-protector" "-o"
"/tmp/ccnHgEb9.s"
COLLECT_GCC_OPTIONS='-Wall' '-Wextra' '-O3' '-mtune=generic'
"as" "-Qy" "-o" "/tmp/cceJWVC8.o" "/tmp/ccnHgEb9.s"
COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.4.1/:/usr/lib/gcc/
x86_64-linux-gnu/4.4.1/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/
x86_64-linux-gnu/4.4.1/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/
x86_64-linux-gnu/4.4.1/:/usr/lib/gcc/x86_64-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.4.1/:/usr/lib/gcc/
x86_64-linux-gnu/4.4.1/:/usr/lib/gcc/x86_64-linux-gnu/
4.4.1/../../../../lib/:/lib/../lib/:/usr/lib/../lib/:/usr/lib/gcc/
x86_64-linux-gnu/4.4.1/../../../:/lib/:/usr/lib/:/usr/lib/x86_64-
linux-gnu/
COLLECT_GCC_OPTIONS='-Wall' '-Wextra' '-O3' '-mtune=generic'
"/usr/lib/gcc/x86_64-linux-gnu/4.4.1/collect2" "--build-id" "--eh-
frame-hdr"
"-m" "elf_x86_64" "--hash-style=both" "-dynamic-linker"
"/lib64/ld-linux-x86-64.so.2" "-z" "relro"
"/usr/lib/gcc/x86_64-linux-gnu/4.4.1/../../../../lib/crt1.o"
"/usr/lib/gcc/x86_64-linux-gnu/4.4.1/../../../../lib/crti.o"
"/usr/lib/gcc/x86_64-linux-gnu/4.4.1/crtbegin.o"
"-L/usr/lib/gcc/x86_64-linux-gnu/4.4.1" "-L/usr/lib/gcc/x86_64-linux-
gnu/4.4.1"
"-L/usr/lib/gcc/x86_64-linux-gnu/4.4.1/../../../../lib" "-L/lib/../
lib"
"-L/usr/lib/../lib" "-L/usr/lib/gcc/x86_64-linux-gnu/4.4.1/../../.."
"-L/usr/lib/x86_64-linux-gnu" "/tmp/cceJWVC8.o" "-lstdc++" "-lgcc"
"--as-needed" "-lgcc_s" "--no-as-needed" "-lc" "-lgcc" "--as-needed"
"-lgcc_s"
"--no-as-needed" "/usr/lib/gcc/x86_64-linux-gnu/4.4.1/crtend.o"
"/usr/lib/gcc/x86_64-linux-gnu/4.4.1/../../../../lib/crtn.o"
$ objdump -d a.out | c++filt | sed -n '/Test_/,/constructors/ p' > out
(See attachments for source and output.)
--
Summary: Endianness and Optimization
Product: gcc
Version: 4.4.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: kai dot extern at googlemail dot com
GCC build triplet: x86_64-linux-gnu
GCC host triplet: x86_64-linux-gnu
GCC target triplet: x86_64-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43197