From: Steven Bosscher Date: Sat, 17 Dec 2005 17:32:36 +0000 (+0000) Subject: re PR rtl-optimization/23837 (Wrong code with REG_NO_CONFLICT notes (caused by combine)) X-Git-Tag: releases/gcc-3.4.6~235 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=89a6bb52b355edd430ee825517c9574ec4f02a1f;p=thirdparty%2Fgcc.git re PR rtl-optimization/23837 (Wrong code with REG_NO_CONFLICT notes (caused by combine)) PR rtl-optimization/23837 * optabs.c (expand_binop): For a multi-word rotate, never emit a REG_NO_CONFLICT block. From-SVN: r108721 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d8dac6a9f0e9..062f46647eb6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-12-17 Steven Bosscher + + PR rtl-optimization/23837 + * optabs.c (expand_binop): For a multi-word rotate, never emit + a REG_NO_CONFLICT block. + 2005-12-16 John David Anglin Backport from mainline: diff --git a/gcc/optabs.c b/gcc/optabs.c index 3d85a06fc38e..536b1da307eb 100644 --- a/gcc/optabs.c +++ b/gcc/optabs.c @@ -1078,7 +1078,7 @@ expand_binop (enum machine_mode mode, optab binoptab, rtx op0, rtx op1, && ashl_optab->handlers[(int) word_mode].insn_code != CODE_FOR_nothing && lshr_optab->handlers[(int) word_mode].insn_code != CODE_FOR_nothing) { - rtx insns, equiv_value; + rtx insns; rtx into_target, outof_target; rtx into_input, outof_input; rtx inter; @@ -1174,20 +1174,7 @@ expand_binop (enum machine_mode mode, optab binoptab, rtx op0, rtx op1, if (inter != 0) { - if (binoptab->code != UNKNOWN) - equiv_value = gen_rtx_fmt_ee (binoptab->code, mode, op0, op1); - else - equiv_value = 0; - - /* We can't make this a no conflict block if this is a word swap, - because the word swap case fails if the input and output values - are in the same register. */ - if (shift_count != BITS_PER_WORD) - emit_no_conflict_block (insns, target, op0, op1, equiv_value); - else - emit_insn (insns); - - + emit_insn (insns); return target; } }