From 79b9ec0ddb066613d4bf6a64b12eb45ea8fdcd95 Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Fri, 19 Jan 2001 18:09:17 +0000 Subject: [PATCH] regclass.c (max_set_parallel): New variable. * 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. From-SVN: r39140 --- gcc/ChangeLog | 4 ++++ gcc/regclass.c | 17 ++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c288232b92f..6b5271f5195 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ Fri Jan 19 13:02:56 2001 Richard Kenner + * 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. + * alias.c (rtx_equal_for_memref_p, case ADDRESSOF): Don't assume args are REG. * expr.c (store_constructor): Don't look at MEM_ALIAS_SET unless MEM. 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))++; -- 2.30.2