|| (GET_RTX_CLASS (code) == 'i'
&& (prev_code == JUMP_INSN
|| (prev_code == CALL_INSN
- && nonlocal_label_list != 0
- /* Ignore a CLOBBER after a CALL_INSN here. */
- && ! (code == INSN
- && GET_CODE (PATTERN (insn)) == CLOBBER))
+ && nonlocal_label_list != 0)
|| prev_code == BARRIER)))
i++;
- if (code != NOTE
- /* Skip a CLOBBER after a CALL_INSN. See similar code in
- find_basic_blocks. */
- && ! (prev_code == CALL_INSN
- && code == INSN && GET_CODE (PATTERN (insn)) == CLOBBER))
+ if (code != NOTE)
prev_code = code;
}
}
|| (GET_RTX_CLASS (code) == 'i'
&& (prev_code == JUMP_INSN
|| (prev_code == CALL_INSN
- && nonlocal_label_list != 0
- /* Ignore if CLOBBER since we consider this
- part of the CALL. See below. */
- && ! (code == INSN
- && GET_CODE (PATTERN (insn)) == CLOBBER))
+ && nonlocal_label_list != 0)
|| prev_code == BARRIER)))
{
basic_block_head[++i] = insn;
BLOCK_NUM (insn) = i;
- /* Don't separate a CALL_INSN from following CLOBBER insns. This is a
- kludge that will go away when each CALL_INSN records its USE and
- CLOBBERs. */
-
- if (code != NOTE
- && ! (prev_code == CALL_INSN && code == INSN
- && GET_CODE (PATTERN (insn)) == CLOBBER))
+ if (code != NOTE)
prev_code = code;
}
{
register int i;
+ rtx note;
+
+ for (note = CALL_INSN_FUNCTION_USAGE (insn);
+ note;
+ note = XEXP (note, 1))
+ if (GET_CODE (XEXP (note, 0)) == USE)
+ mark_used_regs (old, live, SET_DEST (XEXP (note, 0)),
+ final, insn);
+
/* Each call clobbers all call-clobbered regs that are not
global. Note that the function-value reg is a
call-clobbered reg, and mark_set_regs has already had