Ayal Zaks <ayal.z...@gmail.com> writes:
>>> The issue of assigning stages to reg-moves is mostly relevant for
>>> prolog and epilog generation, which requires and receives special
>>> attention -- handled very nicely by ps_num_consecutive_stages! Note
>>> that currently a simple boolean indicator for (the exceptional case
>>> of) double stages would suffice, instead of generalizing to arbitrary
>>> nums of consecutive stages (see any potential use for them?).
>>
>> Not in the immediate term.  But I think having a boolean indicator
>> would be inconsistent.  If the distance field is an int (even though
>> we only expect distance-0 and distance-1 register dependencies)
>> then I think the number of stages should be too.
>>
>> I did wonder originally about using a boolean, but IMO, it makes
>> the code less readable rather than more.  Instead of a simple
>> range check like:
>>
>>     if (first_stage_for_insn <= last_stage_in_range
>>         && last_stage_for_insn >= first_stage_in_range)
>>
>> we end up with the equivalent of:
>>
>>     if (first_stage_for_insn <= last_stage_in_range
>>         && (double_stage_move_p (...)
>>             ? first_stage_for_insn + 1 >= first_stage_in_range
>>             : first_stage_for_insn >= first_stage_in_range))
>>
>> with no corresponding simplification elsewhere.
>>
>
> Sure. But setting the range can be done by consulting an simple
> indicator, rather than generalizing to arbitrary stage numbers; e.g.:
>
> +ps_num_consecutive_stages (partial_schedule_ptr ps, int id)
> +{
> +  if (id >= ps->g->num_nodes && ps_reg_move (ps, id)->double_stages)
> +    return 2;
> +  else
> +    return 1;
> +}
>
> or
>
> -  last_u = first_u + ps_num_consecutive_stages (ps, u) - 1;
> +  if (...double_stages) last_u = first_u + 1;
> +  else last_u = first_u;

Understood.  I still prefer the posted version though.

>> E.g. adding something like this at the end:
>>
>>   ??? The algorithm restricts the scheduling window to II cycles.
>>   In rare cases, it may be better to allow windows of II+1 cycles.
>>   The window would then start and end on the same row, but with
>>   different "must precede" and "must follow" requirements.
>>
>> Let me know what you think and I'll add it as a follow-on patch.
>>
>
> great, thanks.

OK, added with the patch below.

>>>> +
>>>> +   The move is part of a chain that satisfies register dependencies
>>>> +   between a producing ddg node and various consuming ddg nodes.
>>>> +   If some of these dependencies cross a loop iteration (that is,
>>>> +   have a distance of 1) then DISTANCE1_USES is nonnull and contains
>>>> +   the set of uses with distance-1 dependencies.  DISTANCE1_USES
>>>> +   is null otherwise.
>>>> +
>>>
>>> Maybe clarify that they are upwards-exposed or live-in uses.
>>
>> OK, changed to:
>>
>>   The move is part of a chain that satisfies register dependencies
>>   between a producing ddg node and various consuming ddg nodes.
>>   If some of these dependencies have a distance of 1 (meaning that
>>   the use is upward-exposoed) then DISTANCE1_USES is nonnull and
>
> exposed (typo)

Oops, also fixed below (and applied).

Richard


gcc/
        * modulo-sched.c: Fix comment typo.  Mention the possibility
        of using scheduling windows of II+1 cycles.

Index: gcc/modulo-sched.c
===================================================================
--- gcc/modulo-sched.c  2011-10-10 12:42:41.000000000 +0100
+++ gcc/modulo-sched.c  2011-10-11 09:07:08.069166743 +0100
@@ -545,7 +545,7 @@ set_columns_for_ps (partial_schedule_ptr
    The move is part of a chain that satisfies register dependencies
    between a producing ddg node and various consuming ddg nodes.
    If some of these dependencies have a distance of 1 (meaning that
-   the use is upward-exposoed) then DISTANCE1_USES is nonnull and
+   the use is upward-exposed) then DISTANCE1_USES is nonnull and
    contains the set of uses with distance-1 dependencies.
    DISTANCE1_USES is null otherwise.
 
@@ -1810,7 +1810,11 @@ sms_schedule (void)
    41. endif
    42. compute epilogue & prologue
    43. finish - succeeded to schedule
-*/
+
+   ??? The algorithm restricts the scheduling window to II cycles.
+   In rare cases, it may be better to allow windows of II+1 cycles.
+   The window would then start and end on the same row, but with
+   different "must precede" and "must follow" requirements.  */
 
 /* A limit on the number of cycles that resource conflicts can span.  ??? 
Should
    be provided by DFA, and be dependent on the type of insn scheduled.  
Currently

Reply via email to