diff options
author | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-01-19 18:09:17 +0000 |
---|---|---|
committer | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-01-19 18:09:17 +0000 |
commit | 9a504a44c5d30a9057d15fb7d292cc52b098a968 (patch) | |
tree | e95fda7cd177d5b8d02647555d806813f68adc9c /gcc/regclass.c | |
parent | a1a6acb49293ff59502a341f33919cae71da8fb7 (diff) | |
download | gcc-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.c | 17 |
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))++; |