From: Jakub Jelinek Date: Wed, 5 Feb 2003 11:29:15 +0000 (+0100) Subject: re PR rtl-optimization/8555 (ICE in gen_split_1231) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4f6ae35d12e716c1b596cbe979066730be91fc58;p=gcc.git re PR rtl-optimization/8555 (ICE in gen_split_1231) PR optimization/8555 * config/i386/i386.md (sse_mov?fcc split): Handle op2 == op3 case instead of aborting. * gcc.dg/20030204-1.c: New test. From-SVN: r62438 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ee7f50da2cc..e01c74d7213 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2003-02-05 Jakub Jelinek + + PR optimization/8555 + * config/i386/i386.md (sse_mov?fcc split): Handle op2 == op3 case + instead of aborting. + 2003-02-04 Richard Henderson * config/i386/i386.md (UNSPEC_BSF): Remove. diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index ffb2153bf3b..a1eb241d45e 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -17127,10 +17127,14 @@ op = simplify_gen_subreg (V2DFmode, operands[3], DFmode, 0); emit_insn (gen_sse2_unpcklpd (op, op, op)); } - /* If op2 == op3, op3 will be clobbered before it is used. - This should be optimized out though. */ + + /* If op2 == op3, op3 would be clobbered before it is used. */ if (operands_match_p (operands[2], operands[3])) - abort (); + { + emit_move_insn (operands[0], operands[2]); + DONE; + } + PUT_MODE (operands[1], GET_MODE (operands[0])); if (operands_match_p (operands[0], operands[4])) operands[6] = operands[4], operands[7] = operands[2]; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 861cc283bba..4d553c6f305 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2003-02-05 Jakub Jelinek + + * gcc.dg/20030204-1.c: New test. + 2003-02-04 Volker Reichelt PR c++/38 diff --git a/gcc/testsuite/gcc.dg/20030204-1.c b/gcc/testsuite/gcc.dg/20030204-1.c new file mode 100644 index 00000000000..e236e3a3a39 --- /dev/null +++ b/gcc/testsuite/gcc.dg/20030204-1.c @@ -0,0 +1,16 @@ +/* PR optimization/8555 */ +/* { dg-do compile } */ +/* { dg-options "-O -ffast-math -funroll-loops" } */ +/* { dg-options "-march=pentium3 -O -ffast-math -funroll-loops" { target i?86-*-* } } */ + +float foo (float *a, int i) +{ + int j; + float x = a[j = i - 1], y; + + for (j = i; --j >= 0; ) + if ((y = a[j]) > x) + x = y; + + return x; +}