Bug 10700

Summary: [3.3/3.4 regression] ICE in copy_to_mode_reg on 64-bit targets
Product: gcc Reporter: rmurray
Component: targetAssignee: Roger Sayle <sayle>
Status: RESOLVED FIXED    
Severity: normal CC: 189365, debian-gcc, falk.hueffner, gcc-bugs
Priority: P3 Keywords: ice-on-valid-code
Version: 3.3   
Target Milestone: 3.3.1   
Host: alpha-linux Target: alpha-linux
Build: alpha-linux Known to work:
Known to fail: Last reconfirmed: 2003-06-05 03:44:49
Attachments: mot_est_mb.i.bz2

Description rmurray 2003-05-09 08:26:01 UTC
gcc -DHAVE_CONFIG_H -I. -I. -I../../.. -I../../../include/quicktime -O3 -funroll-all-loops -fomit-frame-pointer -finline-functions -W -Wall -Wno-unused -Winline -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -c mot_est_mb.c -MT mot_est_mb.lo -MD -MP -MF .deps/mot_est_mb.TPlo  -fPIC -DPIC -o .libs/mot_est_mb.lo
mot_est_mb.c: In function `MBMotionEstimation':
mot_est_mb.c:614: internal compiler error: in copy_to_mode_reg, at explow.c:740
Please submit a full bug report,

This might be related to PR10587.

Release:
3.2.3, 3.3 20030410 (prerelease)

Environment:
Reading specs from /usr/lib/gcc-lib/alpha-linux/3.2.3/specs
Configured with: ../src/configure -v --enable-languages=c,c++,java,f77,objc,ada --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-gxx-include-dir=/usr/include/c++/3.2 --enable-shared --with-system-zlib --enable-nls --without-included-gettext --enable-__cxa_atexit --enable-clocale=gnu --enable-java-gc=boehm --enable-objc-gc alpha-linux
Thread model: posix
Comment 1 falk.hueffner 2003-05-09 19:00:32 UTC
From: Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
To: rmurray@debian.org
Cc: gcc-gnats@gcc.gnu.org, 192576@bugs.debian.org
Subject: Re: target/10700: 3.2/3.3: ICE on alpha while building libquicktime
Date: 09 May 2003 19:00:32 +0200

 rmurray@debian.org writes:
 
 > gcc -DHAVE_CONFIG_H -I. -I. -I../../.. -I../../../include/quicktime -O3 -funroll-all-loops -fomit-frame-pointer -finline-functions -W -Wall -Wno-unused -Winline -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -c mot_est_mb.c -MT mot_est_mb.lo -MD -MP -MF .deps/mot_est_mb.TPlo  -fPIC -DPIC -o .libs/mot_est_mb.lo
 > mot_est_mb.c: In function `MBMotionEstimation':
 > mot_est_mb.c:614: internal compiler error: in copy_to_mode_reg, at explow.c:740
 > Please submit a full bug report,
 
 Here's a testcase.
 
 int SAD_Block(int *);
 void MBMotionEstimation(int *act_block, int block)
 {
     SAD_Block(act_block + (  (8 * (block == 1 || block == 3))
 			   + (8 * (block == 2 || block == 3))));
 }
 
 Still there in gcc 3.4 20030423.
 
 -- 
 	Falk

Comment 2 falk.hueffner 2003-05-10 02:55:32 UTC
From: Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
To: gcc-gnats@gcc.gnu.org, gcc-bugs@gcc.gnu.org
Cc:  
Subject: Re: target/10700: 3.2/3.3: ICE on alpha while building libquicktime
Date: 10 May 2003 02:55:32 +0200

 http://gcc.gnu.org/PR?10700
 
 There's some problem with this tree (on ia64):
 
  <mult_expr 0x2000000000349fb0
     type <integer_type 0x20000000002ec750 int SI
         size <integer_cst 0x20000000002e8930 constant 32>
         unit size <integer_cst 0x20000000002e8a80 constant 4>
         align 32 symtab 0 alias set 3 precision 32 min <integer_cst 0x20000000002e8a20 -2147483648> max <integer_cst 0x20000000002e8a50 2147483647>
         pointer_to_this <pointer_type 0x2000000000316630>>
    
     arg 0 <truth_or_expr 0x2000000000349f50
         type <integer_type 0x20000000002ec9c0 long unsigned int unsigned DI
             size <integer_cst 0x20000000002e8ab0 constant 64>
             unit size <integer_cst 0x20000000002e8c00 constant 8>
             align 64 symtab 0 alias set -1 precision 64 min <integer_cst 0x20000000002e8c90 0> max <integer_cst 0x20000000002e8cc0 18446744073709551615>>
        
         arg 0 <eq_expr 0x2000000000349bf0 type <integer_type 0x20000000002ec9c0 long unsigned int>
             arg 0 <parm_decl 0x20000000003852b0 block>
             arg 1 <integer_cst 0x2000000000349bc0 constant 1>>
         arg 1 <eq_expr 0x2000000000349c50 type <integer_type 0x20000000002ec9c0 long unsigned int>
             arg 0 <parm_decl 0x20000000003852b0 block>
             arg 1 <integer_cst 0x2000000000349c20 constant 3>>>
     arg 1 <integer_cst 0x2000000000349b90 type <integer_type 0x20000000002ec750 int> constant 8>>
 
 expand_mult eventually gets passed (reg:DI XXX) and (const_int 8) and
 doesn't like the result mode being different from arg0's mode. I'm not
 sure whether it is supposed to. Also, shouldn't the type of eq_expr
 and truth_or_expr always be int? Maybe somebody more knowledgeable can
 comment on this...
 
 -- 
 	Falk
Comment 3 Dara Hazeghi 2003-06-05 03:44:49 UTC
Confirmed on powerpc64-linux with gcc 3.2.3, 3.3 branch and mainline (20030604).
Comment 4 Falk Hueffner 2003-06-17 22:09:44 UTC
*** Bug 10587 has been marked as a duplicate of this bug. ***
Comment 5 janis187 2003-06-25 00:59:59 UTC
The (very old) regression in 10700 was introduced with this patch:

Sat Nov 27 08:38:26 1999  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

        * fold-const.c (negate_expr, associate_trees, extract_muldiv): New.
        (split_tree): Completely rework to make more general.
       (make_range, fold): Call negate_expr.
        (fold, case NEGATE_EXPR): Simplify -(a-b) is -ffast-math.
        (fold, associate): Call new split_tree and associate_trees.
        (fold, case MULT_EXPR, case *_{DIV,MOD}_EXPR): Call extract_muldiv.

The test case used an alpha-linux cross cc1 on i686-pc-linux-gnu with
the minimized test case from comment #1 in the PR, compiled with               
"-O3 -funroll-all-loops -fomit-frame-pointer -finline-functions".
Comment 6 Eric Botcazou 2003-06-25 06:42:15 UTC
Roger, please take ownership of the PRs when you have submitted a patch,
especially for high-priority PRs. Thanks.
Comment 7 GCC Commits 2003-07-03 13:08:15 UTC
Subject: Bug 10700

CVSROOT:	/cvs/gcc
Module name:	gcc
Changes by:	sayle@gcc.gnu.org	2003-07-03 13:08:11

Modified files:
	gcc            : ChangeLog fold-const.c 
	gcc/testsuite  : ChangeLog 
Added files:
	gcc/testsuite/gcc.c-torture/compile: 20030703-1.c 

Log message:
	PR target/10700
	* fold-const.c (extract_muldiv_1): There's nothing that can be done
	if the expression is a SAVE_EXPR.
	
	* gcc.c-torture/compile/20030703-1.c: New test case.

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&r1=2.312&r2=2.313
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fold-const.c.diff?cvsroot=gcc&r1=1.273&r2=1.274
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&r1=1.2831&r2=1.2832
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gcc.c-torture/compile/20030703-1.c.diff?cvsroot=gcc&r1=NONE&r2=1.1

Comment 8 GCC Commits 2003-07-03 13:18:11 UTC
Subject: Bug 10700

CVSROOT:	/cvs/gcc
Module name:	gcc
Branch: 	gcc-3_3-branch
Changes by:	sayle@gcc.gnu.org	2003-07-03 13:18:08

Modified files:
	gcc            : ChangeLog fold-const.c 
	gcc/testsuite  : ChangeLog 
Added files:
	gcc/testsuite/gcc.c-torture/compile: 20030703-1.c 

Log message:
	PR target/10700
	* fold-const.c (extract_muldiv_1): There's nothing that can be done
	if the expression is a SAVE_EXPR.
	
	* gcc.c-torture/compile/20030703-1.c: New test case.

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.16114.2.632&r2=1.16114.2.633
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fold-const.c.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.227.2.3&r2=1.227.2.4
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.2261.2.215&r2=1.2261.2.216
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gcc.c-torture/compile/20030703-1.c.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=NONE&r2=1.1.2.1

Comment 9 Andrew Pinski 2003-07-03 14:36:12 UTC
Fixed for 3.3.1 and on the mainline.