> I am seeing a few regressions with respect to trunk of a recent vintage.
Thanks, they are not there on arm-elf but I could indeed reproduce them
with arm-linux-gnueabi. Here is a patch which I am committing to
cond-optab branch.
Paolo
2009-04-09 Paolo Bonzini <bonz...@gnu.org>
* optabs.c (prepare_cmp_insn): Simplify flow for libcall case,
recurse on integer case too.
Index: gcc/optabs.c
===================================================================
--- gcc/optabs.c (branch cond-optab)
+++ gcc/optabs.c (working copy)
@@ -4150,12 +4150,14 @@ prepare_cmp_insn (rtx x, rtx y, enum rtx
if (methods != OPTAB_LIB_WIDEN)
goto fail;
- /* Handle a lib call just for the mode we are using. */
- libfunc = optab_libfunc (cmp_optab, mode);
- if (libfunc && !SCALAR_FLOAT_MODE_P (mode))
+ if (!SCALAR_FLOAT_MODE_P (mode))
{
rtx result;
+ /* Handle a lib call just for the mode we are using. */
+ libfunc = optab_libfunc (cmp_optab, mode);
+ gcc_assert (libfunc);
+
/* If we want unsigned, and this mode has a distinct unsigned
comparison routine, use that. */
if (unsignedp)
@@ -4188,13 +4190,13 @@ prepare_cmp_insn (rtx x, rtx y, enum rtx
y = const0_rtx;
}
- *ptest = gen_rtx_fmt_ee (comparison, word_mode, x, y);
*pmode = word_mode;
- return;
+ prepare_cmp_insn (x, y, comparison, NULL_RTX, unsignedp, methods,
+ ptest, pmode);
}
+ else
+ prepare_float_lib_cmp (x, y, comparison, ptest, pmode);
- gcc_assert (SCALAR_FLOAT_MODE_P (mode));
- prepare_float_lib_cmp (x, y, comparison, ptest, pmode);
return;
fail: