summaryrefslogtreecommitdiff
path: root/gcc/regclass.c
diff options
context:
space:
mode:
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>2001-01-19 18:09:17 +0000
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>2001-01-19 18:09:17 +0000
commit9a504a44c5d30a9057d15fb7d292cc52b098a968 (patch)
treee95fda7cd177d5b8d02647555d806813f68adc9c /gcc/regclass.c
parenta1a6acb49293ff59502a341f33919cae71da8fb7 (diff)
downloadgcc-9a504a44c5d30a9057d15fb7d292cc52b098a968.tar.gz
* regclass.c (max_set_parallel): New variable.
(reg_scan): Take it into account in computation of max_parallel. (reg_scan_mark_refs, case SET): Compute it. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@39140 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/regclass.c')
-rw-r--r--gcc/regclass.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/gcc/regclass.c b/gcc/regclass.c
index ca4cbd6907a..610de28f1b4 100644
--- a/gcc/regclass.c
+++ b/gcc/regclass.c
@@ -2188,10 +2188,17 @@ free_reg_info ()
/* Maximum number of parallel sets and clobbers in any insn in this fn.
Always at least 3, since the combiner could put that many together
- and we want this to remain correct for all the remaining passes. */
+ and we want this to remain correct for all the remaining passes.
+ This corresponds to the maximum number of times note_stores will call
+ a function for any insn. */
int max_parallel;
+/* Used as a temporary to record the largest number of registers in
+ PARALLEL in a SET_DEST. This is added to max_parallel. */
+
+static int max_set_parallel;
+
void
reg_scan (f, nregs, repeat)
rtx f;
@@ -2202,6 +2209,7 @@ reg_scan (f, nregs, repeat)
allocate_reg_info (nregs, TRUE, FALSE);
max_parallel = 3;
+ max_set_parallel = 0;
for (insn = f; insn; insn = NEXT_INSN (insn))
if (GET_CODE (insn) == INSN
@@ -2216,6 +2224,8 @@ reg_scan (f, nregs, repeat)
if (REG_NOTES (insn))
reg_scan_mark_refs (REG_NOTES (insn), insn, 1, 0);
}
+
+ max_parallel += max_set_parallel;
}
/* Update 'regscan' information by looking at the insns
@@ -2313,6 +2323,11 @@ reg_scan_mark_refs (x, insn, note_flag, min_regno)
dest = XEXP (dest, 0))
;
+ /* For a PARALLEL, record the number of things (less the usual one for a
+ SET) that are set. */
+ if (GET_CODE (dest) == PARALLEL)
+ max_set_parallel = MAX (max_set_parallel, XVECLEN (dest, 0) - 1);
+
if (GET_CODE (dest) == REG
&& REGNO (dest) >= min_regno)
REG_N_SETS (REGNO (dest))++;