diff options
author | Jeff Law <law@gcc.gnu.org> | 1999-06-02 18:19:42 -0600 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1999-06-02 18:19:42 -0600 |
commit | b1d26727ac4276f7f71b90530b2103afedd55b71 (patch) | |
tree | b23daa7619a2d8de0701952f2424c2c285af000a | |
parent | cd5828a94ee14ca00adfae9d37b6808128e1193d (diff) | |
download | gcc-b1d26727ac4276f7f71b90530b2103afedd55b71.zip gcc-b1d26727ac4276f7f71b90530b2103afedd55b71.tar.gz gcc-b1d26727ac4276f7f71b90530b2103afedd55b71.tar.bz2 |
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
-rw-r--r-- | gcc/gcse.c | 23 |
1 files changed, 20 insertions, 3 deletions
@@ -4189,9 +4189,26 @@ insert_insn_end_bb (expr, bb, pre) } } - new_insn = emit_insn_before (pat, insn); - if (BLOCK_HEAD (bb) == insn) - BLOCK_HEAD (bb) = new_insn; + /* If we found all the parameter loads, then we want to insert + before the first parameter load. + + 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 { |