Function sequant::eval::detail::forced_split_levels

Function Documentation

inline ForcedSplitLevels sequant::eval::detail::forced_split_levels(RichSchedule const &rich, LegalitySchedule const &legality, OrderedScheduleDepGraph const &g, std::function<bool(std::size_t, std::size_t)> const &inside, std::function<bool(std::size_t, std::size_t)> const &inside_assembled, std::function<std::optional<ForcedSplitSite>(std::size_t)> const &site_of = {})

Assigns every value of rich its pass level (see ForcedSplitLevels), reading the carried/reduction roles from legality, the dependency edges from g, and deciding with inside whether a reader is produced inside a source’s own reduced loop instance and with inside_assembled whether it is produced inside a loop-local instance it reads the source assembled over.

site_of locates a value in the loop chain (ForcedSplitSite), nullopt for a value produced at root. Empty (the default) leaves the passes unchecked for cycles among their steps.