ifcvt.c (cond_exec_process_insns): Drop USE and CLOBBER insns that get in the way after reload.

* ifcvt.c (cond_exec_process_insns): Drop USE and CLOBBER insns
        that get in the way after reload.
        (cond_exec_process_if_block): Skip a label heading THEN block.

From-SVN: r33923
This commit is contained in:
Richard Henderson 2000-05-15 23:21:04 -07:00 committed by Richard Henderson
parent 085ce8c6ac
commit 7f9d9ea1ff
2 changed files with 23 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2000-05-15 Richard Henderson <rth@cygnus.com>
* ifcvt.c (cond_exec_process_insns): Drop USE and CLOBBER insns
that get in the way after reload.
(cond_exec_process_if_block): Skip a label heading THEN block.
2000-05-15 Richard Henderson <rth@cygnus.com>
* varasm.c (output_constant_pool): Abort instead of converting

View File

@ -197,6 +197,19 @@ cond_exec_process_insns (start, end, test, prob_val, mod_ok)
if (GET_CODE (insn) != INSN && GET_CODE (insn) != CALL_INSN)
abort ();
/* Remove USE and CLOBBER insns that get in the way. */
if (reload_completed
&& (GET_CODE (PATTERN (insn)) == USE
|| GET_CODE (PATTERN (insn)) == CLOBBER))
{
/* ??? Ug. Actually unlinking the thing is problematic,
given what we'd have to coordinate with our callers. */
PUT_CODE (insn, NOTE);
NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
NOTE_SOURCE_FILE (insn) = 0;
goto insn_done;
}
/* Last insn wasn't last? */
if (must_be_last)
return FALSE;
@ -288,6 +301,10 @@ cond_exec_process_if_block (test_bb, then_bb, else_bb, join_bb)
then_start = then_bb->head;
then_end = then_bb->end;
/* Skip a label heading THEN block. */
if (GET_CODE (then_start) == CODE_LABEL)
then_start = NEXT_INSN (then_start);
/* Skip a (use (const_int 0)) or branch as the final insn. */
if (GET_CODE (then_end) == INSN
&& GET_CODE (PATTERN (then_end)) == USE