summaryrefslogtreecommitdiffstats
path: root/gcc
diff options
context:
space:
mode:
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2001-02-24 02:22:07 +0000
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2001-02-24 02:22:07 +0000
commitf59a2c5906ef78af19cbc50b12b7ac7583861265 (patch)
tree568578ca5083b7991e0c10b6fba808e37b087289 /gcc
parent87fd82145b4abbf3b94e1fd4c0e397328f827946 (diff)
downloadppe42-gcc-f59a2c5906ef78af19cbc50b12b7ac7583861265.tar.gz
ppe42-gcc-f59a2c5906ef78af19cbc50b12b7ac7583861265.zip
* function.c (epilogue_done): Be ready for first basic block not
containing PROLOGUE_END note. (reposition_prologue_and_epilogue_notes): Avoid placing PROLOGUE_END note between BASIC_BLOCK. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@40020 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/function.c13
2 files changed, 18 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 15881bdc9bc..e0359670eb3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+Sat Feb 24 03:19:42 CET 2001 Jan Hubicka <jh@suse.cz>
+
+ * function.c (epilogue_done): Be ready for first basic block not
+ containing PROLOGUE_END note.
+ (reposition_prologue_and_epilogue_notes): Avoid placing
+ PROLOGUE_END note between BASIC_BLOCK.
+
Sat Feb 24 03:17:09 CET 2001 Jan Hubicka <jh@suse.cz>
* loop.c (canonicalize_condition): Move to reversed_comparison_code.
diff --git a/gcc/function.c b/gcc/function.c
index 1c3ee315d6e..a1c2d3389d0 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -7384,7 +7384,13 @@ epilogue_done:
there are line number notes before where we inserted the
prologue we should move them, and (2) we should generate a
note before the end of the first basic block, if there isn't
- one already there. */
+ one already there.
+
+ ??? This behaviour is completely broken when dealing with
+ multiple entry functions. We simply place the note always
+ into first basic block and let alternate entry points
+ to be missed.
+ */
for (insn = prologue_end; insn; insn = prev)
{
@@ -7402,7 +7408,7 @@ epilogue_done:
/* Find the last line number note in the first block. */
for (insn = BASIC_BLOCK (0)->end;
- insn != prologue_end;
+ insn != prologue_end && insn;
insn = PREV_INSN (insn))
if (GET_CODE (insn) == NOTE && NOTE_LINE_NUMBER (insn) > 0)
break;
@@ -7487,6 +7493,9 @@ reposition_prologue_and_epilogue_notes (f)
BLOCK_HEAD (0) = next;
remove_insn (note);
+ /* Avoid placing note between CODE_LABEL and BASIC_BLOCK note. */
+ if (GET_CODE (insn) == CODE_LABEL)
+ insn = NEXT_INSN (insn);
add_insn_after (note, insn);
}
}
OpenPOWER on IntegriCloud