public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c/20494] New: gcc -O causes segfault in code using SSE2 intrinsics
@ 2005-03-16 13:16 isaac at nada dot kth dot se
  2005-03-16 13:19 ` [Bug c/20494] " isaac at nada dot kth dot se
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: isaac at nada dot kth dot se @ 2005-03-16 13:16 UTC (permalink / raw)
  To: gcc-bugs

When the code below is compiled using "-O" flag it segfaults. If
the code is compiled without optimization it works fine. Also the code works
fine when compiled with intels compiler. Note that there are no pointers in the
code. Thus it seems very likely that there is an SSE2 intrinsics related bug in
gcc. 

One explanation could be that the __m128i types in SSE2 need to be 16 bytes
aligned and that gcc missaligns something (maybe the stack) when optimizing.
However, I am far from an expert so I leave it up to you figure that out.

Regards,
Isaac

BELOW:
1) gcc output
2) /proc/cpuinfo
3) the file "bug_creator.c"
(the file "bug_creator.i" is to large to be added)

//***************************************************
> gcc -v -save-temps -march=pentium4 -msse2 -O -I/usr/include bug_creator.c
Reading specs from /usr/lib/gcc/i386-redhat-linux/3.4.2/specs
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man
--infodir=/usr/share/info --enable-shared --enable-threads=posix
--disable-checking --with-system-zlib --enable-__cxa_atexit
--disable-libunwind-exceptions --enable-java-awt=gtk --host=i386-redhat-linux
Thread model: posix
gcc version 3.4.2 20041017 (Red Hat 3.4.2-6.fc3)
 /usr/libexec/gcc/i386-redhat-linux/3.4.2/cc1 -E -quiet -v -I/usr/include
bug_creator.c -march=pentium4 -msse2 -O -o bug_creator.i
ignoring nonexistent directory
"/usr/lib/gcc/i386-redhat-linux/3.4.2/../../../../i386-redhat-linux/include"
ignoring duplicate directory "/usr/include"
  as it is a non-system directory that duplicates a system directory
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /usr/lib/gcc/i386-redhat-linux/3.4.2/include
 /usr/include
End of search list.
 /usr/libexec/gcc/i386-redhat-linux/3.4.2/cc1 -fpreprocessed bug_creator.i
-quiet -dumpbase bug_creator.c -march=pentium4 -msse2 -auxbase bug_creator -O
-version -o bug_creator.s
GNU C version 3.4.2 20041017 (Red Hat 3.4.2-6.fc3) (i386-redhat-linux)
        compiled by GNU C version 3.4.2 20041017 (Red Hat 3.4.2-6.fc3).
GGC heuristics: --param ggc-min-expand=81 --param ggc-min-heapsize=96982
 as -V -Qy -o bug_creator.o bug_creator.s
GNU assembler version 2.15.92.0.2 (i386-redhat-linux) using BFD version
2.15.92.0.2 20040927
 /usr/libexec/gcc/i386-redhat-linux/3.4.2/collect2 --eh-frame-hdr -m elf_i386
-dynamic-linker /lib/ld-linux.so.2
/usr/lib/gcc/i386-redhat-linux/3.4.2/../../../crt1.o
/usr/lib/gcc/i386-redhat-linux/3.4.2/../../../crti.o
/usr/lib/gcc/i386-redhat-linux/3.4.2/crtbegin.o
-L/usr/lib/gcc/i386-redhat-linux/3.4.2 -L/usr/lib/gcc/i386-redhat-linux/3.4.2
-L/usr/lib/gcc/i386-redhat-linux/3.4.2/../../.. bug_creator.o -lgcc --as-needed
-lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed
/usr/lib/gcc/i386-redhat-linux/3.4.2/crtend.o
/usr/lib/gcc/i386-redhat-linux/3.4.2/../../../crtn.o

//*************************************************
//******* /proc/cpuinfo
 
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 15
model           : 2
model name      : Intel(R) Pentium(R) 4 CPU 2.00GHz
stepping        : 4
cpu MHz         : 2020.823
cache size      : 512 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 2
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat
pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm
bogomips        : 3997.69


//**************************************************
// ********  bug_creator.c *********************

#include <stdio.h>
#include <emmintrin.h>

// Compiling with the "-O" flag causes program to segfault. If it is
// compiled without "-0" it runs perfectly.
//
// gcc -v -save-temps -march=pentium4 -msse2 -I/usr/include  bug_creator.c


//------------------------
//Variables
__m128i A1;
__m128i B1;
__m128i BITMASK;

__m128i A2;
__m128i B2;
//--------------------


void
LEVEL_2(){
  
  B1 = _mm_add_epi32(B1,A1);
  A1 = _mm_add_epi32(A1,_mm_add_epi32(_mm_setzero_si128(),
_mm_add_epi32(_mm_setzero_si128(),BITMASK)));
  A2 = _mm_add_epi32(_mm_add_epi32(A1,A1),_mm_add_epi32(_mm_add_epi32(A1,A1),A1));
  
  B2 = _mm_add_epi32(_mm_add_epi32(B1,A1),_mm_add_epi32(_mm_add_epi32(B1,A1),A1));
 

  B1 = _mm_add_epi32(B1,A1);
  A1 = _mm_add_epi32(A1,_mm_add_epi32(_mm_setzero_si128(),
_mm_add_epi32(_mm_setzero_si128(),BITMASK)));
  
  A2 =
_mm_add_epi32(A2,_mm_add_epi32(_mm_add_epi32(A1,BITMASK),_mm_add_epi32(_mm_setzero_si128(),BITMASK)));
  
}

void
LEVEL_3(){
  LEVEL_2();
}

int
main(int argc,
  char **argv){
  

  
  A1 = _mm_setzero_si128();
  B1 = _mm_setzero_si128();
  A2 = _mm_setzero_si128();
  B2 = _mm_setzero_si128();
  BITMASK = _mm_setzero_si128();

  
  LEVEL_3();

  
  //Everything is initialized to zero and "_mm_add_epi32" is the only
  //operation used so everything should be zero.
  printf("A1: %d\n",_mm_extract_epi16(A1,0));
  printf("B1: %d\n",_mm_extract_epi16(B1,0));
  printf("A2: %d\n",_mm_extract_epi16(A2,0));
  printf("B2: %d\n",_mm_extract_epi16(A2,0));
  printf("BITMASK: %d\n",_mm_extract_epi16(BITMASK,0));
  return 1;
}

-- 
           Summary: gcc -O causes segfault in code using SSE2 intrinsics
           Product: gcc
           Version: 3.4.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: isaac at nada dot kth dot se
                CC: gcc-bugs at gcc dot gnu dot org
 GCC build triplet: i386-redhat-linux
  GCC host triplet: i386-redhat-linux
GCC target triplet: i386-redhat-linux


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20494


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug c/20494] gcc -O causes segfault in code using SSE2 intrinsics
  2005-03-16 13:16 [Bug c/20494] New: gcc -O causes segfault in code using SSE2 intrinsics isaac at nada dot kth dot se
  2005-03-16 13:19 ` [Bug c/20494] " isaac at nada dot kth dot se
@ 2005-03-16 13:19 ` isaac at nada dot kth dot se
  2005-03-16 14:13 ` [Bug target/20494] " pinskia at gcc dot gnu dot org
  2005-03-16 14:42 ` pinskia at gcc dot gnu dot org
  3 siblings, 0 replies; 5+ messages in thread
From: isaac at nada dot kth dot se @ 2005-03-16 13:19 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From isaac at nada dot kth dot se  2005-03-16 13:19 -------
Created an attachment (id=8402)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=8402&action=view)
the code causing segfault


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20494


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug c/20494] gcc -O causes segfault in code using SSE2 intrinsics
  2005-03-16 13:16 [Bug c/20494] New: gcc -O causes segfault in code using SSE2 intrinsics isaac at nada dot kth dot se
@ 2005-03-16 13:19 ` isaac at nada dot kth dot se
  2005-03-16 13:19 ` isaac at nada dot kth dot se
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: isaac at nada dot kth dot se @ 2005-03-16 13:19 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From isaac at nada dot kth dot se  2005-03-16 13:17 -------
Created an attachment (id=8401)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=8401&action=view)
bug_creator.i


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20494


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug target/20494] gcc -O causes segfault in code using SSE2 intrinsics
  2005-03-16 13:16 [Bug c/20494] New: gcc -O causes segfault in code using SSE2 intrinsics isaac at nada dot kth dot se
  2005-03-16 13:19 ` [Bug c/20494] " isaac at nada dot kth dot se
  2005-03-16 13:19 ` isaac at nada dot kth dot se
@ 2005-03-16 14:13 ` pinskia at gcc dot gnu dot org
  2005-03-16 14:42 ` pinskia at gcc dot gnu dot org
  3 siblings, 0 replies; 5+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-03-16 14:13 UTC (permalink / raw)
  To: gcc-bugs



-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
          Component|c                           |target


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20494


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug target/20494] gcc -O causes segfault in code using SSE2 intrinsics
  2005-03-16 13:16 [Bug c/20494] New: gcc -O causes segfault in code using SSE2 intrinsics isaac at nada dot kth dot se
                   ` (2 preceding siblings ...)
  2005-03-16 14:13 ` [Bug target/20494] " pinskia at gcc dot gnu dot org
@ 2005-03-16 14:42 ` pinskia at gcc dot gnu dot org
  3 siblings, 0 replies; 5+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-03-16 14:42 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From pinskia at gcc dot gnu dot org  2005-03-16 14:41 -------
Fixed in 4.0.0 and above (after a fix to the installed headers which I am going commit as obvious).

-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
           Keywords|                            |ssemmx, wrong-code
         Resolution|                            |FIXED
   Target Milestone|---                         |4.0.0


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20494


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2005-03-16 14:42 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-03-16 13:16 [Bug c/20494] New: gcc -O causes segfault in code using SSE2 intrinsics isaac at nada dot kth dot se
2005-03-16 13:19 ` [Bug c/20494] " isaac at nada dot kth dot se
2005-03-16 13:19 ` isaac at nada dot kth dot se
2005-03-16 14:13 ` [Bug target/20494] " pinskia at gcc dot gnu dot org
2005-03-16 14:42 ` pinskia at gcc dot gnu dot org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).