This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
RE: issues with first scheduling pass on SH4
- From: "Sanjiv Kumar Gupta, Noida" <sanjivg at noida dot hcltech dot com>
- To: Dorit Naishlos <DORIT at il dot ibm dot com>, gcc at gcc dot gnu dot org
- Cc: vmakarov at redhat dot com, dje at watson dot ibm dot com
- Date: Tue, 8 Jul 2003 13:56:44 +0530
- Subject: RE: issues with first scheduling pass on SH4
> 1. Added in schedule_block() a (conditional) call to a function
> that selectively moves insns from Q to R:
>
> 1- if (condition1)
> 2- early_queue_to_ready();
>
> The above code can be inserted either (1) when R becomes empty,
> right before giving up on scheduling additional instructions
> in the current cycle (i.e. before line 4),
> or (2) whenever new instructions maybe added into R,
> before R is sorted (before lines 2 and 9).
>
> The "condition1" can be, in your case, something like:
> (!reload_completed && INSN_REG_WEIGHT > threshold)
>
This very well matches to what I was thinking to do. In
my case, an insn which reduces the register pressure might still
be available in the R but may not be at the head of R (i.e. may
not be the highest priority as the priority is based on critical
path). In that case I will simply have to reorder R to
put that desired insn at the head of the R so that choose_ready
can pick it.
> 2. Implemented early_queue_to_ready():
>
> 1- for (insn = scan the queue in-order; ... ; ...){
> 2 - cost <- state_transition(insn) (and other checks);
> 3 - if (cost < 0 && ok_for_early_schedule(insn)){
> 4 - remove insn from Q, and add it to the ready list.
> 5 - if (condition2)
> 6 break;
> 7 }
> 8 }
>
> (line 2 should be identical to line 6 in schedule_block() above,
> to avoid creating an infinite R->Q->R... loop).
> The "ok_for_early_schedule(insn)" can check, in your case,
> if insn reduces high register pressure.
> The "condition2" can restrict the number of instructions removed
> from the queue to one at a time, or more if desired.
> [...]
> Maybe this general scheme could fit your purposes too?
>
> dorit
>
Yes, this should be fine for me too.
The only problem I am currently facing is
how to separately estimate register pressure for
various reg_classes like GENERAL_REGs
and FP_REGs. INSN_REG_WEIGHT does
distinguish between reg_classes.
I think I will have to write macros like
INSN_GENERAL_REG_WEIGHT, INSN_FP_REG_WEIGHT.
Sanjiv