Commit b1d26727 by Jeff Law

gcse.c (insert_insn_end_bb): Correct placement of insns when the current block…

gcse.c (insert_insn_end_bb): Correct placement of insns when the current block starts with a CODE_LABEL and...

�
        * gcse.c (insert_insn_end_bb): Correct placement of insns when the
        current block starts with a CODE_LABEL and ends with a CALL and
        we can not find all the argument setup instructions for the CALL.

From-SVN: r27321
parent cd5828a9
...@@ -4189,9 +4189,26 @@ insert_insn_end_bb (expr, bb, pre) ...@@ -4189,9 +4189,26 @@ insert_insn_end_bb (expr, bb, pre)
} }
} }
new_insn = emit_insn_before (pat, insn); /* If we found all the parameter loads, then we want to insert
if (BLOCK_HEAD (bb) == insn) before the first parameter load.
BLOCK_HEAD (bb) = new_insn;
If we did not find all the parameter loads, then we might have
stopped on the head of the block, which could be a CODE_LABEL.
If we inserted before the CODE_LABEL, then we would be putting
the insn in the wrong basic block. In that case, put the insn
after the CODE_LABEL.
?!? Do we need to account for NOTE_INSN_BASIC_BLOCK here? */
if (GET_CODE (insn) != CODE_LABEL)
{
new_insn = emit_insn_before (pat, insn);
if (BLOCK_HEAD (bb) == insn)
BLOCK_HEAD (bb) = new_insn;
}
else
{
new_insn = emit_insn_after (pat, insn);
}
} }
else else
{ {
......
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