From: Jeff Law Date: Thu, 3 Jun 1999 00:19:42 +0000 (-0600) Subject: gcse.c (insert_insn_end_bb): Correct placement of insns when the current block starts... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b1d26727ac4276f7f71b90530b2103afedd55b71;p=gcc.git 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 --- diff --git a/gcc/gcse.c b/gcc/gcse.c index d7fde36ecd8..deebc73e0a1 100644 --- a/gcc/gcse.c +++ b/gcc/gcse.c @@ -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 {