diff options
author | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-01-18 13:14:34 +0000 |
---|---|---|
committer | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-01-18 13:14:34 +0000 |
commit | 216b2683e3fd1871973269dc54ef864003104389 (patch) | |
tree | a7cc3b76930fd2143f70721950dcf585e13f0528 /gcc/sched-rgn.c | |
parent | 79e62eba008601b3e6627ccbeb0a6516b3dc1fb7 (diff) | |
download | gcc-216b2683e3fd1871973269dc54ef864003104389.tar.gz |
* flow.c (mark_set_1, case PARALLEL): Now case; rework to allow
entry to be EXPR_LIST.
* rtlanal.c (reg_overlap_mentioned_p): Allow PARALLEL in SET to
be an EXPR_LIST (but not null, which other code doesn't allow).
(note_stores): Properly handle PARALLEL in SET.
Recursively call for top-level PARALLEL.
* sched-deps.c (sched_analyze_1): Handle EXPR_LIST in PARALLEL in SET.
* sched-rgn.c (check_live_1, update_live_1): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@39118 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/sched-rgn.c')
-rw-r--r-- | gcc/sched-rgn.c | 40 |
1 files changed, 29 insertions, 11 deletions
diff --git a/gcc/sched-rgn.c b/gcc/sched-rgn.c index 46c734cf7da..71c4018bb1c 100644 --- a/gcc/sched-rgn.c +++ b/gcc/sched-rgn.c @@ -1396,13 +1396,21 @@ check_live_1 (src, x) || GET_CODE (reg) == STRICT_LOW_PART) reg = XEXP (reg, 0); - if (GET_CODE (reg) == PARALLEL - && GET_MODE (reg) == BLKmode) + if (GET_CODE (reg) == PARALLEL && GET_MODE (reg) == BLKmode) { register int i; + for (i = XVECLEN (reg, 0) - 1; i >= 0; i--) - if (check_live_1 (src, XVECEXP (reg, 0, i))) - return 1; + { + rtx dest = XVECEXP (reg, 0, i); + + if (GET_CODE (dest) == EXPR_LIST) + dest = XEXP (dest, 0); + + if (check_live_1 (src, dest)) + return 1; + } + return 0; } @@ -1474,12 +1482,20 @@ update_live_1 (src, x) || GET_CODE (reg) == STRICT_LOW_PART) reg = XEXP (reg, 0); - if (GET_CODE (reg) == PARALLEL - && GET_MODE (reg) == BLKmode) + if (GET_CODE (reg) == PARALLEL && GET_MODE (reg) == BLKmode) { register int i; + for (i = XVECLEN (reg, 0) - 1; i >= 0; i--) - update_live_1 (src, XVECEXP (reg, 0, i)); + { + rtx dest = XVECEXP (reg, 0, i); + + if (GET_CODE (dest) == EXPR_LIST) + dest = XEXP (dest, 0); + + update_live_1 (src, dest); + } + return; } @@ -1915,15 +1931,17 @@ haifa_classify_insn (insn) if (tmp_class == TRAP_RISKY) break; /* Test if it is a load. */ - tmp_class = - WORST_CLASS (tmp_class, - may_trap_exp (SET_SRC (XVECEXP (pat, 0, i)), 0)); + tmp_class + = WORST_CLASS (tmp_class, + may_trap_exp (SET_SRC (XVECEXP (pat, 0, i)), + 0)); break; case COND_EXEC: case TRAP_IF: tmp_class = TRAP_RISKY; break; - default:; + default: + ; } insn_class = WORST_CLASS (insn_class, tmp_class); if (insn_class == TRAP_RISKY || insn_class == IRISKY) |