aboutsummaryrefslogtreecommitdiff
path: root/gcc/gcse.c
diff options
context:
space:
mode:
authorJohn Wehle <john@feith.com>2000-01-15 20:46:21 +0000
committerJohn Wehle <wehle@gcc.gnu.org>2000-01-15 20:46:21 +0000
commitb5229628250fef5b776444daf949c14fbc3d3bbe (patch)
tree8726e2d74e9443fd18e291026f6e44ac6f9fc436 /gcc/gcse.c
parent8430ac57f2728299c0c9b3fc8bba78548815c8dd (diff)
downloadgcc-b5229628250fef5b776444daf949c14fbc3d3bbe.zip
gcc-b5229628250fef5b776444daf949c14fbc3d3bbe.tar.gz
gcc-b5229628250fef5b776444daf949c14fbc3d3bbe.tar.bz2
gcse.c (insert_insn_end_bb): Use emit_block_insn_before instead of emit_insn_before.
* gcse.c (insert_insn_end_bb): Use emit_block_insn_before instead of emit_insn_before. Also handle NOTE_INSN_BASIC_BLOCK when walking backwards to find all the parameter loads when the basic block ends in a call. From-SVN: r31437
Diffstat (limited to 'gcc/gcse.c')
-rw-r--r--gcc/gcse.c24
1 files changed, 8 insertions, 16 deletions
diff --git a/gcc/gcse.c b/gcc/gcse.c
index a421d54..a61463d 100644
--- a/gcc/gcse.c
+++ b/gcc/gcse.c
@@ -4416,9 +4416,7 @@ insert_insn_end_bb (expr, bb, pre)
}
#endif
/* FIXME: What if something in cc0/jump uses value set in new insn? */
- new_insn = emit_insn_before (pat, insn);
- if (BLOCK_HEAD (bb) == insn)
- BLOCK_HEAD (bb) = new_insn;
+ new_insn = emit_block_insn_before (pat, insn, BASIC_BLOCK (bb));
}
/* Likewise if the last insn is a call, as will happen in the presence
of exception handling. */
@@ -4478,19 +4476,13 @@ insert_insn_end_bb (expr, bb, pre)
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);
- }
+ after the CODE_LABEL. Also, respect NOTE_INSN_BASIC_BLOCK. */
+ if (GET_CODE (insn) == CODE_LABEL)
+ insn = NEXT_INSN (insn);
+ if (GET_CODE (insn) == NOTE
+ && NOTE_LINE_NUMBER (insn) == NOTE_INSN_BASIC_BLOCK)
+ insn = NEXT_INSN (insn);
+ new_insn = emit_block_insn_before (pat, insn, BASIC_BLOCK (bb));
}
else
{