From 1d766db010129df57022fe5d7ea936cdda985645 Mon Sep 17 00:00:00 2001 From: Bernd Schmidt Date: Tue, 31 Oct 2000 10:06:49 +0000 Subject: [PATCH] Fix crashes in split_all_insns From-SVN: r37155 --- gcc/ChangeLog | 5 +++++ gcc/recog.c | 30 ++++++++++++++++-------------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 39ddefc3e80..0bb9420b4c1 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 * cppfiles.c (stack_include_file): Check for stacked contexts diff --git a/gcc/recog.c b/gcc/recog.c index 5c45cdb683e..b7cc2b7377d 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); - } } } -- 2.30.2