>Submitter-Id: net >Originator: Rick Younie <[EMAIL PROTECTED]> >Organization: The Debian Project >Confidential: no >Synopsis: >Severity: serious >Priority: medium >Category: optimization >Class: ice-on-legal-code >Release: 3.2.2 (Debian) (Debian unstable) >Environment: System: Debian GNU/Linux (unstable) Architecture: m68k-linux >Description: [ Reported to the Debian BTS as report #177840. Please CC [EMAIL PROTECTED] on replies. Log of report can be found at http://bugs.debian.org/177840 ]
This is a regression compared to gcc-3.0.4 and gcc-2.95.[34]. The following code, extracted from gtk+2.0 ICEs on m68k-linux, reducing to -O1 avoids the ICE. Checked with 3.2 branch 20021231 and 3.3 branch 20030221 $ gcc-3.2 -O2 -pthread -g -Wall -fPIC -c bug-177840-3.i bug-177840-3.i: In function `bilinear_quadrant': bug-177840-3.i:55: unrecognizable insn: (insn 263 69 71 (set (reg:DF 17 %fp1) (const_double:DF 0 [0x0] 0 [0x0] 0 [0x0])) -1 (nil) (nil)) bug-177840-3.i:55: Internal compiler error in extract_insn, at recog.c:2148 Please submit a full bug report, with preprocessed source if appropriate. See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions. $ /scratch/gcc/gcc-snapshot-20030221/build/gcc/xgcc -B/scratch/gcc/gcc-snapshot-20030221/build/gcc/ -O2 -pthread -g -Wall -fPIC -c bug-177840-3.i bug-177840-3.i: In function `bilinear_quadrant': bug-177840-3.i:55: error: unrecognizable insn: (insn 256 67 68 6 (nil) (set (reg:DF 16 %fp0) (const_double:DF 0 [0x0] 0.0 [0x0.0p+0])) -1 (nil) (nil)) bug-177840-3.i:55: internal compiler error: in extract_insn, at recog.c:2175 Please submit a full bug report, with preprocessed source if appropriate. See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions. ------------------------------------------- double bilinear_quadrant (double bx0, double bx1, double by0, double by1) { double ax0, ax1, ay0, ay1; double x0, x1, y0, y1; ax0 = 0.; ax1 = 1.; ay0 = 0.; ay1 = 1.; if (ax0 < bx0) { if (ax1 > bx0) { x0 = bx0; x1 = (((ax1) < (bx1)) ? (ax1) : (bx1)); } else return 0; } else { if (bx1 > ax0) { x0 = ax0; x1 = (((ax1) < (bx1)) ? (ax1) : (bx1)); } else return 0; } if (ay0 < by0) { if (ay1 > by0) { y0 = by0; y1 = (((ay1) < (by1)) ? (ay1) : (by1)); } else return 0; } else { if (by1 > ay0) { y0 = ay0; y1 = (((ay1) < (by1)) ? (ay1) : (by1)); } else return 0; } return 0.25 * (x1*x1 - x0*x0) * (y1*y1 - y0*y0); } ------------------------------------------- >How-To-Repeat: >Fix: