From 412381d963f02ce3c6dd00d7c4daac4676a02818 Mon Sep 17 00:00:00 2001 From: Torbjorn Granlund Date: Wed, 13 Jul 1994 20:55:07 +0000 Subject: [PATCH] (expand_divmod, case CEIL_DIV_EXPR): Handle emit_store_flag returning 0. From-SVN: r7768 --- gcc/expmed.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/gcc/expmed.c b/gcc/expmed.c index 5b2d61ef270..e2cba0dc46f 100644 --- a/gcc/expmed.c +++ b/gcc/expmed.c @@ -3132,16 +3132,28 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp) unsigned HOST_WIDE_INT d = INTVAL (op1); t1 = expand_shift (RSHIFT_EXPR, compute_mode, op0, build_int_2 (floor_log2 (d), 0), - NULL_RTX, 1); + tquotient, 1); t2 = expand_binop (compute_mode, and_optab, op0, GEN_INT (d - 1), NULL_RTX, 1, OPTAB_LIB_WIDEN); t3 = gen_reg_rtx (compute_mode); t3 = emit_store_flag (t3, NE, t2, const0_rtx, compute_mode, 1, 1); - quotient = force_operand (gen_rtx (PLUS, compute_mode, - t1, t3), - tquotient); + if (t3 == 0) + { + rtx lab; + lab = gen_label_rtx (); + emit_cmp_insn (t2, const0_rtx, EQ, NULL_RTX, + compute_mode, 0, 0); + emit_jump_insn (gen_beq (lab)); + expand_inc (t1, const1_rtx); + emit_label (lab); + quotient = t1; + } + else + quotient = force_operand (gen_rtx (PLUS, compute_mode, + t1, t3), + tquotient); break; } -- 2.30.2