Intermodular analysis scheduler

This module implements different intermodular scheduling policies. This affects the order in which modular iteration is performed.

Documentation on exports

No further documentation available for this predicate. The predicate is of type data.

PREDICATEreset_queue/0

Usage:

Empties the queue.

    PREDICATEpush/2

    Usage 1:push(Element,Priority)

    Pushes a new element Element with priority Priority into the priority queue. If Element is already in the queue, it is not duplicated, but its priority is changed to the maximum prioriy of the already existing element and the priority of the new element.

    • The following properties should hold at call time:
      (nonvar/1)Element is currently a term which is not a free variable.
      (nonvar/1)Priority is currently a term which is not a free variable.
      (atm/1)Element is an atom.
      (int/1)Priority is an integer.

    Usage 2:push(ElementList,Priority)

    Pushes a set of new elements ElementList with priority Priority into the priority queue. If any element of ElementList is already in the queue, it is not duplicated, but its priority is changed to the maximum prioriy of the already existing element and the priority of the new element.

    • The following properties should hold at call time:
      (nonvar/1)ElementList is currently a term which is not a free variable.
      (nonvar/1)Priority is currently a term which is not a free variable.
      (list/2)ElementList is a list of atms.
      (integer/1)Priority is currently instantiated to an integer.

    PREDICATEpop/2

    Usage:pop(Element,Priority)

    Pops the element Element with highest priority from the priority queue.

    • The following properties should hold at call time:
      (var/1)Element is a free variable.
      (var/1)Priority is a free variable.
    • The following properties should hold upon exit:
      (atm/1)Element is an atom.
      (int/1)Priority is an integer.

    No further documentation available for this predicate. The predicate is of type data.

    No further documentation available for this predicate. The predicate is of type data.

    No further documentation available for this predicate.

    No further documentation available for this predicate. The predicate is of type data.

    PREDICATEiterations/1
    No further documentation available for this predicate. The predicate is of type data.

    Usage:module_processed(Module,AlreadyProcessed)

    Lists the modules in the program unit and whether they are already processed or not.

      The predicate is of type data.

      Usage:setup_scheduling(SchedPolicy,Domains,TopLevel,ModList)

      This predicate sets up some stuff in specific global scheduling policies. Implemented policies are as follows:

      • abs_depth_first Starting from the modules which require analysis (those in ModList, it uses the depth in the intermodule dependency graph as priority, and analyzes the modules with higher priority first.

      • naive_top_down Traverses the list of modules in the intermodule graph in top-down order, and analyzes the modules which have pending patterns. Initially, the modules with pending patterns are the ones in ModList. It stops when in a module traversal there is no module with pending patterns.

      • naive_bottom_up The same as naive_top_down, but the list of modules is in reverse top-down order.

      • top_down_preanalysis The same as naive_top_down, but initially all modules are scheduled for analysis. This scheduling policy is intended for using an entry policy different of main_module (for example, all).

      • bottom_up_preanalysis The same as top_down_preanalysis, but a bottom-up traversal of the intermodule graph is made.

        No further documentation available for this predicate.

        Usage:

        • The following properties should hold at call time:
          (list/1)Arg1 is a list.
        • The following properties should hold globally:
          (not_fails/1)All the calls of the form add_naive_pending_modules(Arg1) do not fail.

        Documentation on imports

        This module has the following direct dependencies: