> 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: