Otawa  0.10
otawa::dfa::hai Namespace Reference

Classes

class  DefaultFixPoint
 
class  DefaultListener
 This listener gathers in an array the LUB of the in-states for all analyzed basic blocks. More...
 
class  FirstUnrollingFixPoint
 FixPoint class for HalfAbsInt The DefaultFixPoint manages loops in a simple way. More...
 
class  HalfAbsInt
 Implements abstract interpretation. More...
 
class  UnrollingListener
 This listener gathers in an array the LUB of the in-states for all analyzed basic blocks. More...
 
class  WideningFixPoint
 
class  WideningListener
 This listener gathers in an array the LUB of the in-states for all analyzed basic blocks. More...
 

Typedefs

typedef enum
otawa::dfa::hai::hai_context_t 
hai_context_t
 

Enumerations

enum  hai_context_t { CTX_LOOP = 0, CTX_FUNC = 1 }
 

Functions

Identifier< bool > FIXED ("otawa::util::fixed", false)
 This property is attached to the loop headers, and is true if the FixPoint for the associated loop has been reached. More...
 
Identifier< bool > FIRST_ITER ("otawa::util::first_iter", true)
 This property is attached for the loop header, and is true if the first iteration of the associated loop is not done yet. More...
 
Identifier< bool > HAI_DONT_ENTER ("otawa::util::hai_dont_enter", false)
 This property, when set to TRUE on a BasicBlock or a CFG, prevents HalfAbsInt from following edges to this BasicBlock or CFG. More...
 
Identifier< BasicBlock * > HAI_BYPASS_SOURCE ("otawa::util::HAI_BYPASS_SOURCE", 0)
 This property enables the user to create a virtual "bypass" edge from the source block to the target block. More...
 
Identifier< BasicBlock * > HAI_BYPASS_TARGET ("otawa::util::HAI_BYPASS_TARGET", 0)
 

Variables

Identifier< bool > FIXED
 This property is attached to the loop headers, and is true if the FixPoint for the associated loop has been reached. More...
 
Identifier< bool > FIRST_ITER
 This property is attached for the loop header, and is true if the first iteration of the associated loop is not done yet. More...
 
Identifier< bool > HAI_DONT_ENTER
 This property, when set to TRUE on a BasicBlock or a CFG, prevents HalfAbsInt from following edges to this BasicBlock or CFG. More...
 
Identifier< BasicBlock * > HAI_BYPASS_SOURCE
 This property enables the user to create a virtual "bypass" edge from the source block to the target block. More...
 
Identifier< BasicBlock * > HAI_BYPASS_TARGET
 

Typedef Documentation

Enumeration Type Documentation

Enumerator
CTX_LOOP 
CTX_FUNC 

Function Documentation

Identifier<bool> otawa::dfa::hai::FIRST_ITER ( "otawa::util::first_iter"  ,
true   
)

This property is attached for the loop header, and is true if the first iteration of the associated loop is not done yet.

This is useful to determine if we can add the loop header to the worklist even if the back edges going to it are not marked yet.

Hooks
Identifier<bool> otawa::dfa::hai::FIXED ( "otawa::util::fixed"  ,
false   
)

This property is attached to the loop headers, and is true if the FixPoint for the associated loop has been reached.

Hooks
Identifier<BasicBlock*> otawa::dfa::hai::HAI_BYPASS_SOURCE ( "otawa::util::HAI_BYPASS_SOURCE"  ,
 
)

This property enables the user to create a virtual "bypass" edge from the source block to the target block.

Moreover, it ensures that this virtual edge is the only mean to reach target basic block from source basic block. This should be used only to bypass function calls in inlined CFGs.

Identifier<BasicBlock*> otawa::dfa::hai::HAI_BYPASS_TARGET ( "otawa::util::HAI_BYPASS_TARGET"  ,
 
)
Identifier<bool> otawa::dfa::hai::HAI_DONT_ENTER ( "otawa::util::hai_dont_enter"  ,
false   
)

This property, when set to TRUE on a BasicBlock or a CFG, prevents HalfAbsInt from following edges to this BasicBlock or CFG.

NOTE: It is deprecated to use this property to prevent HalfAbsint from entering a sub-CFG. Use HAI_BYPASS_EDGE instead.

Variable Documentation

Identifier<bool> otawa::dfa::hai::FIRST_ITER("otawa::util::first_iter", true)

This property is attached for the loop header, and is true if the first iteration of the associated loop is not done yet.

This is useful to determine if we can add the loop header to the worklist even if the back edges going to it are not marked yet.

Hooks

Referenced by otawa::dfa::hai::HalfAbsInt< FixPoint >::backEdgeUnion(), otawa::dfa::hai::HalfAbsInt< FixPoint >::inputProcessing(), otawa::dfa::hai::HalfAbsInt< FixPoint >::isEdgeDone(), and otawa::dfa::hai::HalfAbsInt< FixPoint >::tryAddToWorkList().

Identifier<bool> otawa::dfa::hai::FIXED("otawa::util::fixed", false)

This property is attached to the loop headers, and is true if the FixPoint for the associated loop has been reached.

Hooks

Referenced by otawa::dfa::hai::HalfAbsInt< FixPoint >::inputProcessing(), and otawa::dfa::hai::HalfAbsInt< FixPoint >::isEdgeDone().

Identifier<BasicBlock*> otawa::dfa::hai::HAI_BYPASS_SOURCE("otawa::util::HAI_BYPASS_SOURCE", 0)

This property enables the user to create a virtual "bypass" edge from the source block to the target block.

Moreover, it ensures that this virtual edge is the only mean to reach target basic block from source basic block. This should be used only to bypass function calls in inlined CFGs.

Referenced by otawa::dfa::hai::HalfAbsInt< FixPoint >::addSuccessors().

Identifier<bool> otawa::dfa::hai::HAI_DONT_ENTER("otawa::util::hai_dont_enter", false)

This property, when set to TRUE on a BasicBlock or a CFG, prevents HalfAbsInt from following edges to this BasicBlock or CFG.

NOTE: It is deprecated to use this property to prevent HalfAbsint from entering a sub-CFG. Use HAI_BYPASS_EDGE instead.

Referenced by otawa::dfa::hai::HalfAbsInt< FixPoint >::addSuccessors(), and otawa::dfa::hai::HalfAbsInt< FixPoint >::detectCalls().