aboutsummaryrefslogtreecommitdiff
path: root/gcc/sched-deps.c
diff options
context:
space:
mode:
authorRichard Kenner <kenner@vlsi1.ultra.nyu.edu>2001-01-18 13:14:34 +0000
committerRichard Kenner <kenner@gcc.gnu.org>2001-01-18 08:14:34 -0500
commit90d036a050b8443c93a32fc31480e7afefad088f (patch)
treea7cc3b76930fd2143f70721950dcf585e13f0528 /gcc/sched-deps.c
parent8eeb855e2b6b8cc1aea7df5dcd0e0856897668a2 (diff)
downloadgcc-90d036a050b8443c93a32fc31480e7afefad088f.zip
gcc-90d036a050b8443c93a32fc31480e7afefad088f.tar.gz
gcc-90d036a050b8443c93a32fc31480e7afefad088f.tar.bz2
flow.c (mark_set_1, [...]): Now case; rework to allow entry to be EXPR_LIST.
* 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. From-SVN: r39118
Diffstat (limited to 'gcc/sched-deps.c')
-rw-r--r--gcc/sched-deps.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/gcc/sched-deps.c b/gcc/sched-deps.c
index 67ea68b..9b566a0 100644
--- a/gcc/sched-deps.c
+++ b/gcc/sched-deps.c
@@ -551,12 +551,20 @@ sched_analyze_1 (deps, x, insn)
if (dest == 0)
return;
- if (GET_CODE (dest) == PARALLEL
- && GET_MODE (dest) == BLKmode)
+ if (GET_CODE (dest) == PARALLEL && GET_MODE (dest) == BLKmode)
{
register int i;
+
for (i = XVECLEN (dest, 0) - 1; i >= 0; i--)
- sched_analyze_1 (deps, XVECEXP (dest, 0, i), insn);
+ {
+ rtx reg = XVECEXP (dest, 0, i);
+
+ if (GET_CODE (reg) == EXPR_LIST)
+ reg = XEXP (reg, 0);
+
+ sched_analyze_1 (deps, reg, insn);
+ }
+
if (GET_CODE (x) == SET)
sched_analyze_2 (deps, SET_SRC (x), insn);
return;