I've been looking at SMS, and have a question about get_sched_window.
When there are previously-scheduled predessors, we use:

              if (e->data_type == MEM_DEP)
                end = MIN (end, SCHED_TIME (v_node) + ii - 1);

to get an upper bound on the scheduling window that is permitted
by memory dependencies.  I think this:

    SCHED_TIME (v_node) + ii - 1

is an inclusive bound, in that scheduling the node at that time
would not break the memory dependence, whereas scheduling at
SCHED_TIME (v_node) would.  Is that right?

I ask because in the final range:

      start = early_start;
      end = MIN (end, early_start + ii);
      /* Schedule the node close to it's predecessors.  */
      step = 1;

END is an exclusive bound.  It seems like we might be double-counting here,
and effectively limiting the schedule to SCHED_TIME (v_node) + ii - 2.

While I'm here, I was also curious about:

      /* If there are more successors than predecessors schedule the
         node close to it's successors.  */
      if (count_succs >= count_preds)
        {
          int old_start = start;

          start = end - 1;
          end = old_start - 1;
          step = -1;
        }

This doesn't seem to be in the paper, and the comment suggests
"count_succs > count_preds" rather than "count_succs >= count_preds".
Is the ">=" vs ">" important?

Thanks,
Richard

Reply via email to