diff options
author | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 1997-09-05 19:36:35 +0000 |
---|---|---|
committer | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 1997-09-05 19:36:35 +0000 |
commit | 55c17244108aeda9652b297c183d4a96ec6b928a (patch) | |
tree | edac910b3f09fb8e03e49f5e675c20e323cb0b92 | |
parent | 9defe53abf13ad5fec0c1a4389fac1d3652ff7e6 (diff) | |
download | gcc-55c17244108aeda9652b297c183d4a96ec6b928a.tar.gz |
* sched.c (update_flow_info) When looking if to set found_split_dest
or found_orig_dest, look at all parts of a PARALLEL.
* haifa-sched.c (update_flow_info): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@15115 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/haifa-sched.c | 40 | ||||
-rw-r--r-- | gcc/sched.c | 39 |
3 files changed, 61 insertions, 24 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c151b8cbda9..b92e210cf84 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +Fri Sep 5 13:36:44 1997 J"orn Rennecke <amylaar@cygnus.co.uk> + + * sched.c (update_flow_info) When looking if to set found_split_dest + or found_orig_dest, look at all parts of a PARALLEL. + * haifa-sched.c (update_flow_info): Likewise. + Fri Sep 5 10:08:44 1997 Jeffrey A Law (law@cygnus.com) * v850: New directory for v850 port. diff --git a/gcc/haifa-sched.c b/gcc/haifa-sched.c index b439d90dd43..b4a674e977e 100644 --- a/gcc/haifa-sched.c +++ b/gcc/haifa-sched.c @@ -8205,21 +8205,37 @@ update_flow_info (notes, first, last, orig_insn) for (insn = first;; insn = NEXT_INSN (insn)) { - set = single_set (insn); - if (set) + rtx pat; + int i; + + /* I'm not sure if this can happen, but let's be safe. */ + if (GET_RTX_CLASS (GET_CODE (insn)) != 'i') + continue; + + pat = PATTERN (insn); + i = GET_CODE (pat) == PARALLEL ? XVECLEN (pat, 0) : 0; + set = pat; + + for (;;) { - if (GET_CODE (SET_DEST (set)) == REG - && REGNO (SET_DEST (set)) == REGNO (orig_dest)) - { - found_orig_dest = 1; - break; - } - else if (GET_CODE (SET_DEST (set)) == SUBREG - && SUBREG_REG (SET_DEST (set)) == orig_dest) + if (GET_CODE (set) == SET) { - found_split_dest = 1; - break; + if (GET_CODE (SET_DEST (set)) == REG + && REGNO (SET_DEST (set)) == REGNO (orig_dest)) + { + found_orig_dest = 1; + break; + } + else if (GET_CODE (SET_DEST (set)) == SUBREG + && SUBREG_REG (SET_DEST (set)) == orig_dest) + { + found_split_dest = 1; + break; + } } + if (--i < 0) + break; + set = XVECEXP (pat, 0, i); } if (insn == last) diff --git a/gcc/sched.c b/gcc/sched.c index 87f72932407..477782b2c32 100644 --- a/gcc/sched.c +++ b/gcc/sched.c @@ -4108,21 +4108,36 @@ update_flow_info (notes, first, last, orig_insn) for (insn = first; ; insn = NEXT_INSN (insn)) { - set = single_set (insn); - if (set) + rtx pat; + int i; + + /* I'm not sure if this can happen, but let's be safe. */ + if (GET_RTX_CLASS (GET_CODE (insn)) != 'i') + continue; + + pat = PATTERN (insn); + i = GET_CODE (pat) == PARALLEL ? XVECLEN (pat, 0) : 0; + set = pat; + for (;;) { - if (GET_CODE (SET_DEST (set)) == REG - && REGNO (SET_DEST (set)) == REGNO (orig_dest)) - { - found_orig_dest = 1; - break; - } - else if (GET_CODE (SET_DEST (set)) == SUBREG - && SUBREG_REG (SET_DEST (set)) == orig_dest) + if (GET_CODE (set) == SET) { - found_split_dest = 1; - break; + if (GET_CODE (SET_DEST (set)) == REG + && REGNO (SET_DEST (set)) == REGNO (orig_dest)) + { + found_orig_dest = 1; + break; + } + else if (GET_CODE (SET_DEST (set)) == SUBREG + && SUBREG_REG (SET_DEST (set)) == orig_dest) + { + found_split_dest = 1; + break; + } } + if (--i < 0) + break; + set = XVECEXP (pat, 0, i); } if (insn == last) |