diff options
author | Bernd Schmidt <bernds@redhat.co.uk> | 2000-10-31 10:06:49 +0000 |
---|---|---|
committer | Bernd Schmidt <bernds@gcc.gnu.org> | 2000-10-31 10:06:49 +0000 |
commit | 1d766db010129df57022fe5d7ea936cdda985645 (patch) | |
tree | 9847df5ccfac7bfd59def60653011006b282619a /gcc | |
parent | 332316cdbc646ca9deb29db4badf4cdd06ca3f5a (diff) | |
download | gcc-1d766db010129df57022fe5d7ea936cdda985645.zip gcc-1d766db010129df57022fe5d7ea936cdda985645.tar.gz gcc-1d766db010129df57022fe5d7ea936cdda985645.tar.bz2 |
Fix crashes in split_all_insns
From-SVN: r37155
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/recog.c | 30 |
2 files changed, 21 insertions, 14 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 39ddefc..0bb9420 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -17,6 +17,11 @@ Renumber case labels to match the _mm_prefetch constants defined in xmmintrin.h. + * recog.c (split_all_insns): Don't try to call cleanup_subreg_operands + if the splitter didn't emit new insns. + Make sure we call cleanup_subreg_operands even when splitting the last + insn in a basic block. + 2000-10-30 Neil Booth <neilb@earthling.net> * cppfiles.c (stack_include_file): Check for stacked contexts diff --git a/gcc/recog.c b/gcc/recog.c index 5c45cdb..b7cc2b7 100644 --- a/gcc/recog.c +++ b/gcc/recog.c @@ -2747,29 +2747,31 @@ split_all_insns (upd_life) changed = 1; /* try_split returns the NOTE that INSN became. */ - first = NEXT_INSN (first); PUT_CODE (insn, NOTE); NOTE_SOURCE_FILE (insn) = 0; NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED; + /* ??? Coddle to md files that generate subregs in post- + reload splitters instead of computing the proper + hard register. */ + if (reload_completed && first != last) + { + first = NEXT_INSN (first); + while (1) + { + if (INSN_P (first)) + cleanup_subreg_operands (first); + if (first == last) + break; + first = NEXT_INSN (first); + } + } + if (insn == bb->end) { bb->end = last; break; } - - /* ??? Coddle to md files that generate subregs in post- - reload splitters instead of computing the proper - hard register. */ - if (reload_completed) - while (1) - { - if (INSN_P (first)) - cleanup_subreg_operands (first); - if (first == last) - break; - first = NEXT_INSN (first); - } } } |