ddc-core-llvm-0.4.3.1: Disciplined Disciple Compiler LLVM code generator.

Safe HaskellSafe
LanguageHaskell98

DDC.Core.Llvm.Metadata.Graph

Contents

Synopsis

Graphs and Trees for TBAA metadata

newtype UG a Source #

An undirected graph.

Constructors

UG (Dom a, Rel a) 

Instances

Show a => Show (UG a) Source # 

Methods

showsPrec :: Int -> UG a -> ShowS #

show :: UG a -> String #

showList :: [UG a] -> ShowS #

newtype DG a Source #

A directed graph.

Constructors

DG (Dom a, Rel a) 

Instances

Show a => Eq (DG a) Source # 

Methods

(==) :: DG a -> DG a -> Bool #

(/=) :: DG a -> DG a -> Bool #

Show a => Show (DG a) Source # 

Methods

showsPrec :: Int -> DG a -> ShowS #

show :: DG a -> String #

showList :: [DG a] -> ShowS #

orientUG :: (Show a, Ord a) => UG a -> DG a Source #

partitionDG :: Eq a => DG a -> [Tree a] Source #

Partition a DG into the minimum set of (directed) trees

newtype Tree a Source #

An inverted tree (with edges going from child to parent)

Constructors

Tree (Dom a, Rel a) 

Instances

Show a => Show (Tree a) Source # 

Methods

showsPrec :: Int -> Tree a -> ShowS #

show :: Tree a -> String #

showList :: [Tree a] -> ShowS #

sources :: a -> Tree a -> [a] Source #

Get the sources of a tree.

anchor :: Eq a => a -> Tree a -> Tree a Source #

Enroot a tree with the given root.

Quickcheck Testing ONLY

type Dom a = [a] Source #

type Rel a = a -> a -> Bool Source #

A binary relation.

fromList :: Eq a => [(a, a)] -> Rel a Source #

Convert a list to a relation.

toList :: Dom a -> Rel a -> [(a, a)] Source #

Convert a relation.

transClosure :: Eq a => Dom a -> Rel a -> Rel a Source #

Find the transitive closure of a binary relation using Floyd-Warshall algorithm

transOrient :: (Show a, Ord a) => UG a -> DG a Source #

Transitively orient an undireted graph

Using the algorithm from "Lex-BFS and partition refinement, with applications to transitive orientation, interval graph recognition and consecutive ones testing", R. McConnell et al 2000

In the case where the transitive orientation does not exist, it simply gives some orientation

note: gave up on modular decomposition, this approach has very slightly worse time complexity but much simpler

aliasMeasure :: Eq a => Rel a -> Partitioning a -> Int Source #

Calculate the aliasing induced by a set of trees this includes aliasing within each of the trees and aliasing among trees.

isTree :: Dom a -> Rel a -> Bool Source #

A relation is an (inverted) tree if each node has at most one outgoing arc