------- Comment #1 from rakdver at gcc dot gnu dot org  2006-02-13 01:32 -------
This should fix the problem:

Index: loop-invariant.c
===================================================================
*** loop-invariant.c    (revision 110898)
--- loop-invariant.c    (working copy)
*************** invariant_for_use (struct df_ref *use)
*** 232,237 ****
--- 232,240 ----
    struct df_ref *def;
    basic_block bb = BLOCK_FOR_INSN (use->insn), def_bb;

+   if (use->flags & DF_REF_READ_WRITE)
+     return NULL;
+
    defs = DF_REF_CHAIN (use);
    if (!defs || defs->next)
      return NULL;
*************** find_exits (struct loop *loop, basic_blo
*** 582,589 ****
  static bool
  may_assign_reg_p (rtx x)
  {
!   return (can_copy_p (GET_MODE (x))
          && GET_MODE (x) != BLKmode
          && (!REG_P (x)
              || !HARD_REGISTER_P (x)
              || REGNO_REG_CLASS (REGNO (x)) != NO_REGS));
--- 585,593 ----
  static bool
  may_assign_reg_p (rtx x)
  {
!   return (GET_MODE (x) != VOIDmode
          && GET_MODE (x) != BLKmode
+         && can_copy_p (GET_MODE (x))
          && (!REG_P (x)
              || !HARD_REGISTER_P (x)
              || REGNO_REG_CLASS (REGNO (x)) != NO_REGS));
*************** check_dependencies (rtx insn, bitmap dep
*** 683,688 ****
--- 687,695 ----

    for (use = DF_INSN_GET (df, insn)->uses; use; use = use->next_ref)
      {
+       if (use->flags & DF_REF_READ_WRITE)
+       return false;
+
        defs = DF_REF_CHAIN (use);
        if (!defs)
        continue;


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26247

Reply via email to