]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR rtl-optimization/23837 (Wrong code with REG_NO_CONFLICT notes (caused by combine))
authorSteven Bosscher <stevenb@suse.de>
Sat, 17 Dec 2005 17:32:36 +0000 (17:32 +0000)
committerJohn David Anglin <danglin@gcc.gnu.org>
Sat, 17 Dec 2005 17:32:36 +0000 (17:32 +0000)
PR rtl-optimization/23837
* optabs.c (expand_binop): For a multi-word rotate, never emit
a REG_NO_CONFLICT block.

From-SVN: r108721

gcc/ChangeLog
gcc/optabs.c

index d8dac6a9f0e9edf0011d6d523b8077e08cbac33a..062f46647eb67c02544180ab980b6f5ed1142659 100644 (file)
@@ -1,3 +1,9 @@
+2005-12-17  Steven Bosscher  <stevenb@suse.de>
+
+       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  <dave.anglin@nrc-cnrc.gc.ca>
 
        Backport from mainline:
index 3d85a06fc38e3180ede9e0499c68b48d6708e663..536b1da307eb7588a3fd000b7b2a91216564174f 100644 (file)
@@ -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;
        }
     }