[Newbie Question] Compute a schedule region's scheduled cycles.

Hi All,

I am trying to construct a small optimization based on ScheduleDAGInstrs that does the following:

  1. Find candidate nodes in the DAG, and speculatively modify the node (nodes).

  2. After modification, try to compute the scheduled cycles of the region.

  3. If the cycle number improves, go back to 1. to find the next candidate node.

I am thinking using SchedulePostRATDList’s top-down algorithm to calculate the cycles needed for the region’s execution. However, it decomposes the schedule DAG while calculating the cycles — In my case I want to keep the DAG so that we don’t need to construct it again in the following steps.

So my question is: is there a way (or API) to calculate the scheduled cycles needed for the region, without touching the DAG? Or is there a better way to do so in a ScheduleDAG? Did I missed something?

Thanks in advance. Much appreciated.

Not saying I am totally understand how thing works, but I think you’re misleading
by the DAG in the class name ScheduleDAGInstrs. I only see MachineInstrs
there, no SDNode. And the comment of ScheduleDAGInstrs says,

/// A ScheduleDAG for scheduling lists of MachineInstr.

One place mentioning DAG is relate to constructing the dependency of SUnit,
i.e., Value2SUsMap.

Regards,
chenwj

Also you might need to check use PostRASchedulerList or PostMachineScheduler,
PostRASchedulerList is considered deprecated as mentioned in [1].

[1] http://lists.llvm.org/pipermail/llvm-dev/2017-April/112348.html

HTH,
chenwj

+Matthias.

  • ScheduleDAGInstr is a structure used by the PostMachineScheduler and PostRASchedulerList, so that is fine

  • I am not sure I understand your exact goals here. But it sounds like you may either want to write a new scheduler reusing ScheduleDAGInstrs would be good there, you may also look into the MachineTraceMetrics class which computes resources used on the critical path. This currently used to direct some peephole optimizations. Even if it doesn’t answer the sort of queries you want to perform it may be an example to learn from on how to use the scheduling model directly.

  • Matthias