The ScheduleDAGInstrs class
The whole scheduling process in the MachineScheduler pass is driven by a ScheduleDAGInstrs instance. The ScheduleDAGInstrs class encapsulates both the DDG and the scheduling strategy used. In other words, this class is responsible for building the DDG and then scheduling it using the scheduling strategy it has been instantiated with.
The MachineScheduler pass acts as a simple driver around the methods of the ScheduleDAGInstrs instance that is provided to it via the MachineScheduler::createMachineScheduler method.
By default, this method creates a ScheduleDAGMILive instance, which is a subclass of the ScheduleDAGInstrs class that is tweaked to schedule MachineInstr instances and keep track of the register liveness (and register pressure) at the same time.
You can change this default by overriding the createMachineScheduler method of your TargetPassConfig class. This override is your main entry point to tweaking the type of ScheduleDAGInstrs subclass...