aboutsummaryrefslogtreecommitdiff
path: root/gcc/regclass.c
diff options
context:
space:
mode:
authorRichard Kenner <kenner@vlsi1.ultra.nyu.edu>2001-01-19 18:09:17 +0000
committerRichard Kenner <kenner@gcc.gnu.org>2001-01-19 13:09:17 -0500
commit79b9ec0ddb066613d4bf6a64b12eb45ea8fdcd95 (patch)
treee95fda7cd177d5b8d02647555d806813f68adc9c /gcc/regclass.c
parent831ecbd460cd8f553e5938c7c4956840405020fd (diff)
downloadgcc-79b9ec0ddb066613d4bf6a64b12eb45ea8fdcd95.zip
gcc-79b9ec0ddb066613d4bf6a64b12eb45ea8fdcd95.tar.gz
gcc-79b9ec0ddb066613d4bf6a64b12eb45ea8fdcd95.tar.bz2
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
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 ca4cbd6..610de28 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))++;