summaryrefslogtreecommitdiff
path: root/gcc/sched-rgn.c
diff options
context:
space:
mode:
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>2001-01-18 13:14:34 +0000
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>2001-01-18 13:14:34 +0000
commit216b2683e3fd1871973269dc54ef864003104389 (patch)
treea7cc3b76930fd2143f70721950dcf585e13f0528 /gcc/sched-rgn.c
parent79e62eba008601b3e6627ccbeb0a6516b3dc1fb7 (diff)
downloadgcc-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.c40
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)