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
This commit is contained in:
parent
cd5828a94e
commit
b1d26727ac
23
gcc/gcse.c
23
gcc/gcse.c
@ -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
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user