This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Re: optimization/8396: [sparc] optimizer ICE
- From: ehrhardt at mathematik dot uni-ulm dot de
- To: ehrhardt at mathematik dot uni-ulm dot de, gcc-bugs at gcc dot gnu dot org, gcc-prs at gcc dot gnu dot org, nobody at gcc dot gnu dot org, papadopo at shfj dot REMOVE dot cea dot DECOY dot fr
- Date: 20 Dec 2002 14:49:34 -0000
- Subject: Re: optimization/8396: [sparc] optimizer ICE
- Reply-to: ehrhardt at mathematik dot uni-ulm dot de, ehrhardt at mathematik dot uni-ulm dot de, gcc-bugs at gcc dot gnu dot org, gcc-prs at gcc dot gnu dot org, nobody at gcc dot gnu dot org, papadopo at shfj dot REMOVE dot cea dot DECOY dot fr, gcc-gnats at gcc dot gnu dot org
Old Synopsis: optimizer ICE on SPARC
New Synopsis: [sparc] optimizer ICE
State-Changed-From-To: open->analyzed
State-Changed-By: cae
State-Changed-When: Fri Dec 20 06:49:25 2002
State-Changed-Why:
Confirmed with 3.2 and 3.4, it is a regression from 2.95.
An even simpler testcase is this:
---------------------------- cut ---------------------------
struct Foo {
static void bar(const short xs, const short xe) {
if (xe && (xs < xe ))
;
}
};
int main()
{
short xe;
Foo::bar(0, xe);
}
---------------------------- cut ---------------------------
It ICEs in explow.c:731 in this function because GET_MODE(x) == HImode:
rtx
copy_to_mode_reg (mode, x)
enum machine_mode mode;
rtx x;
{
rtx temp = gen_reg_rtx (mode);
/* If not an operand, must be an address with PLUS and MULT so
do the computation. */
if (! general_operand (x, VOIDmode))
x = force_operand (x, temp);
if (GET_MODE (x) != mode && GET_MODE (x) != VOIDmode)
abort ();
if (x != temp)
emit_move_insn (temp, x);
return temp;
}
regards Christian
http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=8396