futhark-0.25.32: An optimising compiler for a functional, array-oriented language.

Safe Haskell | None
Language | GHC2021

Futhark.Analysis.CallGraph

Description

This module exports functionality for generating a call graph of an Futhark program.

Synopsis

- data CallGraph
- buildCallGraph :: Prog SOACS -> CallGraph
- isFunInCallGraph :: Name -> CallGraph -> Bool
- calls :: Name -> Name -> CallGraph -> Bool
- calledByConsts :: Name -> CallGraph -> Bool
- allCalledBy :: Name -> CallGraph -> Set Name
- numOccurences :: CallGraph -> Map Name Int

# Documentation

data CallGraph Source #

The call graph is a mapping from a function name, i.e., the caller, to a record of the names of functions called *directly* (not transitively!) by the function.

We keep track separately of the functions called by constants.

#### Instances

Instances details

Show CallGraph Source # |
Instance details Defined in Futhark.Analysis.CallGraph Methods showsPrec :: Int -> CallGraph -> ShowS Source # show :: CallGraph -> String Source # showList :: [CallGraph] -> ShowS Source #
Eq CallGraph Source # |
Instance details Defined in Futhark.Analysis.CallGraph Methods (==) :: CallGraph -> CallGraph -> Bool Source # (/=) :: CallGraph -> CallGraph -> Bool Source #
Ord CallGraph Source # |

Instance details

Defined in Futhark.Analysis.CallGraph

Methods

compare :: CallGraph -> CallGraph -> Ordering Source #

(<) :: CallGraph -> CallGraph -> Bool Source #

(<=) :: CallGraph -> CallGraph -> Bool Source #

(>) :: CallGraph -> CallGraph -> Bool Source #

(>=) :: CallGraph -> CallGraph -> Bool Source #

max :: CallGraph -> CallGraph -> CallGraph Source #

min :: CallGraph -> CallGraph -> CallGraph Source #

Pretty CallGraph Source # |
Instance details Defined in Futhark.Analysis.CallGraph Methods pretty :: CallGraph -> Doc ann Source # prettyList :: [CallGraph] -> Doc ann Source #

buildCallGraph :: Prog SOACS -> CallGraph Source #

`buildCallGraph prog` build the program's call graph.

isFunInCallGraph :: Name -> CallGraph -> Bool Source #

Is the given function known to the call graph?

calls :: Name -> Name -> CallGraph -> Bool Source #

Does the first function call the second?

calledByConsts :: Name -> CallGraph -> Bool Source #

Is the function called in any of the constants?

allCalledBy :: Name -> CallGraph -> Set Name Source #

All functions called by this function.

numOccurences :: CallGraph -> Map Name Int Source #

Produce a mapping of the number of occurences in the call graph of each function. Only counts functions that are called at least once.