From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8154 invoked by alias); 23 Mar 2005 19:04:02 -0000 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org Received: (qmail 8136 invoked by uid 48); 23 Mar 2005 19:03:58 -0000 Date: Wed, 23 Mar 2005 19:04:00 -0000 From: "Ganesh dot Sittampalam at arm dot com" To: gcc-bugs@gcc.gnu.org Message-ID: <20050323190354.20607.Ganesh.Sittampalam@arm.com> Reply-To: gcc-bugzilla@gcc.gnu.org Subject: [Bug c++/20607] New: -fstrict-aliasing causes incorrect scheduling on Sparc Solaris X-Bugzilla-Reason: CC X-SW-Source: 2005-03/txt/msg02743.txt.bz2 List-Id: On Sparc Solaris, the attached code leads to the following assembly sequence being produced at the beginning of a function. Stack slot %fp-32 is read before it is written. Turning off either -fstrict-aliasing or -fsched-insns causes the problem to go away. I'm relying on the GCC extension that allows type punning via unions, and assuming a big endian layout of all the datatypes. As specified by the -fstrict-aliasing documentation, I'm copying the value out of the union rather than taking an address of a union member. 0: 9d e3 bf 80 save %sp, -128, %sp 4: d6 07 bf e4 ld [ %fp + -28 ], %o3 8: c2 07 bf e0 ld [ %fp + -32 ], %g1 c: c2 27 bf e8 st %g1, [ %fp + -24 ] 10: 19 00 00 20 sethi %hi(0x8000), %o4 14: 1b 3f ff ff sethi %hi(0xfffffc00), %o5 18: 9a 13 63 ff or %o5, 0x3ff, %o5 ! ffffffff 1c: d8 3f bf e0 std %o4, [ %fp + -32 ] g++-3_4_3 -v -save-temps -O1 -c -o u64solrs.o u64solrs.c -fschedule-insns -fstrict-aliasing Reading specs from /arm/eda/tools/gnu/gcc/3_4_3/solaris_2_9-sparc/lib/gcc/sparc-sun-solaris2.9/3.4.3/specs Configured with: ./configure --prefix=/arm/eda/tools/gnu/gcc/3_4_3 --exec-prefix=/arm/eda/tools/gnu/gcc/3_4_3/solaris_2_9-sparc --program-suffix=-3_4_3 --enable-languages=c,c++ -v --with-dwarf2 --enable-version-specific-runtime-libs --with-gnu-as --with-as=/arm/eda/tools/gnu/binutils/2_15/solaris_2_9-sparc/bin/as-2_15 --with-gnu-ld --with-ld=/arm/eda/tools/gnu/binutils/2_15/solaris_2_9-sparc/bin/ld-2_15 Thread model: posix gcc version 3.4.3 /arm/eda/tools/gnu/gcc/3_4_3/solaris_2_9-sparc/libexec/gcc/sparc-sun-solaris2.9/3.4.3/cc1plus -E -quiet -v u64solrs.c -mcpu=v7 -fschedule-insns -fstrict-aliasing -O1 -o u64solrs.ii ignoring nonexistent directory "/arm/eda/tools/gnu/gcc/3_4_3/solaris_2_9-sparc/lib/gcc/sparc-sun-solaris2.9/3.4.3/../../../../sparc-sun-solaris2.9/include" #include "..." search starts here: #include <...> search starts here: /arm/eda/tools/gnu/gcc/3_4_3/solaris_2_9-sparc/lib/gcc/sparc-sun-solaris2.9/3.4.3/include/c++ /arm/eda/tools/gnu/gcc/3_4_3/solaris_2_9-sparc/lib/gcc/sparc-sun-solaris2.9/3.4.3/include/c++/sparc-sun-solaris2.9 /arm/eda/tools/gnu/gcc/3_4_3/solaris_2_9-sparc/lib/gcc/sparc-sun-solaris2.9/3.4.3/include/c++/backward /usr/local/include /arm/eda/tools/gnu/gcc/3_4_3/include /arm/eda/tools/gnu/gcc/3_4_3/solaris_2_9-sparc/lib/gcc/sparc-sun-solaris2.9/3.4.3/include /usr/include End of search list. /arm/eda/tools/gnu/gcc/3_4_3/solaris_2_9-sparc/libexec/gcc/sparc-sun-solaris2.9/3.4.3/cc1plus -fpreprocessed u64solrs.ii -quiet -dumpbase u64solrs.c -mcpu=v7 -auxbase-strip u64solrs.o -O1 -version -fschedule-insns -fstrict-aliasing -o u64solrs.s GNU C++ version 3.4.3 (sparc-sun-solaris2.9) compiled by GNU C version 3.4.3. GGC heuristics: --param ggc-min-expand=65 --param ggc-min-heapsize=65536 /arm/eda/tools/gnu/binutils/2_15/solaris_2_9-sparc/bin/as-2_15 -V -Qy -s -xarch=v8 -o u64solrs.o u64solrs.s GNU assembler version 2.15 (sparc-sun-solaris2.9) using BFD version 2.15 -- Summary: -fstrict-aliasing causes incorrect scheduling on Sparc Solaris Product: gcc Version: 3.4.3 Status: UNCONFIRMED Severity: normal Priority: P2 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: Ganesh dot Sittampalam at arm dot com CC: gcc-bugs at gcc dot gnu dot org GCC build triplet: sparc-sun-solaris2.9 GCC host triplet: sparc-sun-solaris2.9 GCC target triplet: sparc-sun-solaris2.9 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20607