Commit dce39da6 by Richard Kenner

(emit_no_conflict_block): Just emit the insns if the block contains

something not an INSN or has an embedded block.

From-SVN: r8550
parent 9fe0563a
...@@ -2395,9 +2395,7 @@ emit_unop_insn (icode, target, op0, code) ...@@ -2395,9 +2395,7 @@ emit_unop_insn (icode, target, op0, code)
INSNS is a block of code generated to perform the operation, not including INSNS is a block of code generated to perform the operation, not including
the CLOBBER and final copy. All insns that compute intermediate values the CLOBBER and final copy. All insns that compute intermediate values
are first emitted, followed by the block as described above. Only are first emitted, followed by the block as described above.
INSNs are allowed in the block; no library calls or jumps may be
present.
TARGET, OP0, and OP1 are the output and inputs of the operations, TARGET, OP0, and OP1 are the output and inputs of the operations,
respectively. OP1 may be zero for a unary operation. respectively. OP1 may be zero for a unary operation.
...@@ -2406,7 +2404,8 @@ emit_unop_insn (icode, target, op0, code) ...@@ -2406,7 +2404,8 @@ emit_unop_insn (icode, target, op0, code)
on the last insn. on the last insn.
If TARGET is not a register, INSNS is simply emitted with no special If TARGET is not a register, INSNS is simply emitted with no special
processing. processing. Likewise if anything in INSNS is not an INSN or if
there is a libcall block inside INSNS.
The final insn emitted is returned. */ The final insn emitted is returned. */
...@@ -2421,6 +2420,11 @@ emit_no_conflict_block (insns, target, op0, op1, equiv) ...@@ -2421,6 +2420,11 @@ emit_no_conflict_block (insns, target, op0, op1, equiv)
if (GET_CODE (target) != REG || reload_in_progress) if (GET_CODE (target) != REG || reload_in_progress)
return emit_insns (insns); return emit_insns (insns);
else
for (insn = insns; insn; insn = NEXT_INSN (insn))
if (GET_CODE (insn) != INSN
|| find_reg_note (insn, REG_LIBCALL, NULL_RTX))
return emit_insns (insns);
/* First emit all insns that do not store into words of the output and remove /* First emit all insns that do not store into words of the output and remove
these from the list. */ these from the list. */
...@@ -2431,9 +2435,6 @@ emit_no_conflict_block (insns, target, op0, op1, equiv) ...@@ -2431,9 +2435,6 @@ emit_no_conflict_block (insns, target, op0, op1, equiv)
next = NEXT_INSN (insn); next = NEXT_INSN (insn);
if (GET_CODE (insn) != INSN)
abort ();
if (GET_CODE (PATTERN (insn)) == SET) if (GET_CODE (PATTERN (insn)) == SET)
set = PATTERN (insn); set = PATTERN (insn);
else if (GET_CODE (PATTERN (insn)) == PARALLEL) else if (GET_CODE (PATTERN (insn)) == PARALLEL)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment