Note: This is a beta release of Red Hat Bugzilla 5.0. The data contained within is a snapshot of the live data so any changes you make will not be reflected in the production Bugzilla. Also email is disabled so feel free to test any aspect of the site that you want. File any problems you find or give feedback here.
Bug 77279 - Compiler abort with -mfpmath=sse
Summary: Compiler abort with -mfpmath=sse
Keywords:
Status: CLOSED RAWHIDE
Alias: None
Product: Red Hat Linux
Classification: Retired
Component: gcc
Version: 8.0
Hardware: i686
OS: Linux
medium
medium
Target Milestone: ---
Assignee: Jakub Jelinek
QA Contact: Brian Brock
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2002-11-04 17:21 UTC by Valdis Kletnieks
Modified: 2007-04-18 16:48 UTC (History)
1 user (show)

Fixed In Version: gcc-3.3-5
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2003-06-11 03:20:52 UTC


Attachments (Terms of Use)
Source file for -mfpmath=sse abort (deleted)
2002-11-04 17:23 UTC, Valdis Kletnieks
no flags Details | Diff

Description Valdis Kletnieks 2002-11-04 17:21:47 UTC
Description of Problem:
gcc chokes on -mfpmath=sse for certain input files.


Version-Release number of selected component (if applicable):
gcc-3.2-11


How Reproducible:
Compile the attached .c file with '-O3 -march=pentium4 -mfpmath=sse' and watch
it ICE. Compiling with '-O3 -march=pentium4' works.

Steps to Reproduce:
1. 
2. 
3. 

Actual Results:
% gcc -v -c -ansi -pedantic -wall -Wpointer-arith -O3 -march=pentium4 mipmap2.c
Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/3.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 --host=i386-redhat-linux
Thread model: posix
gcc version 3.2 20021021 (Red Hat Linux 8.0 3.2-11)
 /usr/lib/gcc-lib/i386-redhat-linux/3.2/cc1 -lang-c -std=c89 -v -D__GNUC__=3
-D__GNUC_MINOR__=2 -D__GNUC_PATCHLEVEL__=0 -D__GXX_ABI_VERSION=102 -D__ELF__
-D__unix__ -D__gnu_linux__ -D__linux__ -D__unix -D__linux -Asystem=posix
-D__OPTIMIZE__ -D__STDC_HOSTED__=1 -Acpu=i386 -Amachine=i386 -D__i386 -D__i386__
-D__pentium4 -D__pentium4__ -D__tune_pentium4__ -D__SSE__ -D__MMX__ -D__SSE2__
mipmap2.c -quiet -dumpbase mipmap2.c -march=pentium4 -ansi -O3 -Wall
-Wpointer-arith -pedantic -ansi -version -o /tmp/cc4adZ8c.s
GNU CPP version 3.2 20021021 (Red Hat Linux 8.0 3.2-11) (cpplib) (i386 Linux/ELF)
GNU C version 3.2 20021021 (Red Hat Linux 8.0 3.2-11) (i386-redhat-linux)
        compiled by GNU C version 3.2 20021021 (Red Hat Linux 8.0 3.2-11).
ignoring nonexistent directory "/usr/i386-redhat-linux/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /usr/lib/gcc-lib/i386-redhat-linux/3.2/include
 /usr/include
End of search list.
 as -V -Qy -o mipmap2.o /tmp/cc4adZ8c.s
GNU assembler version 2.13.90.0.2 (i386-redhat-linux) using BFD version
2.13.90.0.2 20020802

% gcc -v -c -ansi -pedantic -Wall -Wpointer-arith -O3 -march=pentium4
-mfpmath=sse mipmap2.c
Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/3.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 --host=i386-redhat-linux
Thread model: posix
gcc version 3.2 20021021 (Red Hat Linux 8.0 3.2-11)
 /usr/lib/gcc-lib/i386-redhat-linux/3.2/cc1 -lang-c -std=c89 -v -D__GNUC__=3
-D__GNUC_MINOR__=2 -D__GNUC_PATCHLEVEL__=0 -D__GXX_ABI_VERSION=102 -D__ELF__
-D__unix__ -D__gnu_linux__ -D__linux__ -D__unix -D__linux -Asystem=posix
-D__OPTIMIZE__ -D__STDC_HOSTED__=1 -Acpu=i386 -Amachine=i386 -D__i386 -D__i386__
-D__pentium4 -D__pentium4__ -D__tune_pentium4__ -D__SSE__ -D__MMX__ -D__SSE2__
mipmap2.c -quiet -dumpbase mipmap2.c -march=pentium4 -mfpmath=sse -ansi -O3
-Wall -Wpointer-arith -pedantic -ansi -version -o /tmp/cccoGHwk.s
GNU CPP version 3.2 20021021 (Red Hat Linux 8.0 3.2-11) (cpplib) (i386Linux/ELF)
GNU C version 3.2 20021021 (Red Hat Linux 8.0 3.2-11) (i386-redhat-linux)
        compiled by GNU C version 3.2 20021021 (Red Hat Linux 8.0 3.2-11).
ignoring nonexistent directory "/usr/i386-redhat-linux/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /usr/lib/gcc-lib/i386-redhat-linux/3.2/include
 /usr/include
End of search list.
mipmap2.c: In function `halve1Dimage_float':
mipmap2.c:41: unable to find a register to spill in class `FLOAT_REGS'
mipmap2.c:41: this is the insn:
(insn 108 106 111 (set (subreg:SF (reg/v:DI 22 rxmm1 [73]) 0)
        (float:SF (reg:DI 0 rax [89]))) 170 {*floatdisf2_i387_only} (insn_list
105 (nil))
    (expr_list:REG_DEAD (reg:DI 0 rax [89])
        (nil)))
mipmap2.c:41: confused by earlier errors, bailing out


Expected Results:
Completion of compile.


Additional Information:
Yes, I know it's massive casting abuse.  Tell it to the XFree86 crew ;)  But
even with that, it shouldn't get into a "bailing out" state when optimizing.  If
there's actually an *illegal* cast, it should diagnose with an error even at
lower optimizations.

This *may* be a duplicate of a previous report (which I thought I filed but
can't find now). If so, feel free to mark the original "still broken in 3.2-11".

Comment 1 Valdis Kletnieks 2002-11-04 17:23:08 UTC
Created attachment 83529 [details]
Source file for -mfpmath=sse abort

Comment 2 Jakub Jelinek 2002-11-13 23:08:10 UTC
Simplified into:
/* { dg-do compile } */
/* { dg-options "-O2" } */
/* { dg-options "-O2 -march=pentium4 -mfpmath=sse" { target i?86-*-* } } */

void foo (unsigned x, unsigned char *y, float *z)
{
  int i;

  for (i = 0; i < x; i++)
    {
      float ff[2];
      ff[0] = ((unsigned) y[3]) << 24 | y[0];
      *z = ff[0]/2.0;
      z++;
      y += 10;
    }
}

Fails with gcc-3.2-12 and gcc 3.3 20021113 too.

Comment 3 Valdis Kletnieks 2003-06-11 03:20:52 UTC
No longer reproducible in gcc-3.3-5.


Note You need to log in before you can comment on or make changes to this bug.