On Oct 11, 2005, at 9:51 AM, ebotcazou at gcc dot gnu dot org wrote:



------- Comment #8 from ebotcazou at gcc dot gnu dot org 2005-10-11 13:51 -------
Yes, I think the problem is in delay slot scheduling too. COND_EXPR means that either branch must not be evaluated because it could be illegal; if you hoist a mem from a branch into the delay slot of the condition, you are effectively
partially evaluting the branch.

Yes, that makes sense.  At the moment the predicate used in reorg.c is
may_trap_p so we would need to detect faulting instructions too.

may_trap_p is the correct thing as it should detect this instruction as
trapping:


/* Memory ref can trap unless it's a static var or a stack slot. */
    case MEM:
      if (MEM_NOTRAP_P (x))
        return 0;
      return rtx_addr_can_trap_p (XEXP (x, 0));


-- Pinski

Reply via email to