Index: optabs.c
===================================================================
--- optabs.c	(revision 191413)
+++ optabs.c	(working copy)
@@ -4087,9 +4087,13 @@ prepare_cmp_insn (rtx x, rtx y, enum rtx_code comp
 	  size = convert_to_mode (cmp_mode, size, 1);
 	  emit_insn (GEN_FCN (cmp_code) (result, x, y, size, opalign));
 
-          *ptest = gen_rtx_fmt_ee (comparison, VOIDmode, result, const0_rtx);
-          *pmode = result_mode;
-	  return;
+	  x = result;
+	  y = const0_rtx;
+	  mode = result_mode;
+	  methods = OPTAB_LIB_WIDEN;
+	  unsignedp = false;
+
+	  goto result_compare;
 	}
 
       if (methods != OPTAB_LIB && methods != OPTAB_LIB_WIDEN)
@@ -4109,11 +4113,15 @@ prepare_cmp_insn (rtx x, rtx y, enum rtx_code comp
 					XEXP (y, 0), Pmode,
 					size, cmp_mode);
 
-      *ptest = gen_rtx_fmt_ee (comparison, VOIDmode, result, const0_rtx);
-      *pmode = result_mode;
-      return;
+      x = result;
+      y = const0_rtx;
+      mode = result_mode;
+      methods = OPTAB_LIB_WIDEN;
+      unsignedp = false;
     }
 
+ result_compare:
+
   /* Don't allow operands to the compare to trap, as that can put the
      compare and branch in different basic blocks.  */
   if (cfun->can_throw_non_call_exceptions)
