diff options
| author | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-02-24 02:22:07 +0000 |
|---|---|---|
| committer | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-02-24 02:22:07 +0000 |
| commit | f59a2c5906ef78af19cbc50b12b7ac7583861265 (patch) | |
| tree | 568578ca5083b7991e0c10b6fba808e37b087289 /gcc | |
| parent | 87fd82145b4abbf3b94e1fd4c0e397328f827946 (diff) | |
| download | ppe42-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/ChangeLog | 7 | ||||
| -rw-r--r-- | gcc/function.c | 13 |
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); } } |

