This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: alphaev6-unknown-linux-gnu: error in extract_insn, at recog.c:2127
On Wed, Jul 25, 2001 at 02:49:44PM +0200, Toon Moene wrote:
> stsbod.f:402: Unrecognizable insn:
> (insn 6894 6893 6895 (set (reg:DF 2520)
> (ge:DF (reg:DF 2073)
> (const_double:DF (cc0) 0 [0x0] 0 [0x0] [0]))) -1 (nil)
This one is a bit different -- it's a latent bug in the backend.
r~
* config/alpha/alpha.c (alpha_emit_conditional_move): Always
swap GE/GT if its an fp comparison.
Index: alpha.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/alpha/alpha.c,v
retrieving revision 1.175
diff -c -p -d -r1.175 alpha.c
*** alpha.c 2001/07/22 16:02:06 1.175
--- alpha.c 2001/07/25 17:32:16
*************** alpha_emit_setcc (code)
*** 1905,1911 ****
break;
case GE: case GT: case GEU: case GTU:
! /* These are normally need swapping, but for integer zero we have
special patterns that recognize swapped operands. */
if (!fp_p && op1 == const0_rtx)
break;
--- 1905,1911 ----
break;
case GE: case GT: case GEU: case GTU:
! /* These normally need swapping, but for integer zero we have
special patterns that recognize swapped operands. */
if (!fp_p && op1 == const0_rtx)
break;
*************** alpha_emit_conditional_move (cmp, mode)
*** 1996,2003 ****
break;
case GE: case GT: case GEU: case GTU:
! /* These must be swapped. */
! if (op1 == CONST0_RTX (cmp_mode))
cmp_code = code, code = NE;
else
{
--- 1996,2004 ----
break;
case GE: case GT: case GEU: case GTU:
! /* These normally need swapping, but for integer zero we have
! special patterns that recognize swapped operands. */
! if (!fp_p && op1 == const0_rtx)
cmp_code = code, code = NE;
else
{