aboutsummaryrefslogtreecommitdiff
path: root/gcc/emit-rtl.c
diff options
context:
space:
mode:
authorJohn David Anglin <dave.anglin@nrc-cnrc.gc.ca>2004-12-05 04:05:59 +0000
committerJohn David Anglin <danglin@gcc.gnu.org>2004-12-05 04:05:59 +0000
commit91373fe8f7f94b846d06ada9bd3766b694eebc4f (patch)
treea481184a6f11891930cc7d8aea7aa98ad956903a /gcc/emit-rtl.c
parent6ac5aa910eb2eacb716ce06825f77f96f1e8eacf (diff)
downloadgcc-91373fe8f7f94b846d06ada9bd3766b694eebc4f.zip
gcc-91373fe8f7f94b846d06ada9bd3766b694eebc4f.tar.gz
gcc-91373fe8f7f94b846d06ada9bd3766b694eebc4f.tar.bz2
re PR middle-end/18730 (cppexp.c:1076: error: unrecognizable insn)
PR middle-end/18730 * emit-rtl.c (get_first_nonnote_insn, get_last_nonnote_insn): When the first/last insn is a sequence, return the first/last insn of the sequence. From-SVN: r91742
Diffstat (limited to 'gcc/emit-rtl.c')
-rw-r--r--gcc/emit-rtl.c37
1 files changed, 33 insertions, 4 deletions
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index 6858f98..793e2df 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -2712,9 +2712,23 @@ get_last_insn_anywhere (void)
rtx
get_first_nonnote_insn (void)
{
- rtx insn;
+ rtx insn = first_insn;
+
+ if (insn)
+ {
+ if (NOTE_P (insn))
+ for (insn = next_insn (insn);
+ insn && NOTE_P (insn);
+ insn = next_insn (insn))
+ continue;
+ else
+ {
+ if (GET_CODE (insn) == INSN
+ && GET_CODE (PATTERN (insn)) == SEQUENCE)
+ insn = XVECEXP (PATTERN (insn), 0, 0);
+ }
+ }
- for (insn = first_insn; insn && NOTE_P (insn); insn = next_insn (insn));
return insn;
}
@@ -2724,9 +2738,24 @@ get_first_nonnote_insn (void)
rtx
get_last_nonnote_insn (void)
{
- rtx insn;
+ rtx insn = last_insn;
+
+ if (insn)
+ {
+ if (NOTE_P (insn))
+ for (insn = previous_insn (insn);
+ insn && NOTE_P (insn);
+ insn = previous_insn (insn))
+ continue;
+ else
+ {
+ if (GET_CODE (insn) == INSN
+ && GET_CODE (PATTERN (insn)) == SEQUENCE)
+ insn = XVECEXP (PATTERN (insn), 0,
+ XVECLEN (PATTERN (insn), 0) - 1);
+ }
+ }
- for (insn = last_insn; insn && NOTE_P (insn); insn = previous_insn (insn));
return insn;
}