CACAO
|
Calculate the Loop Tree. More...
Public Member Functions | |
LoopPassBase () | |
virtual bool | run (JITData &JD) |
Run the Pass. More... | |
virtual PassUsage & | get_PassUsage (PassUsage &PU) const |
Set the requirements for the pass. More... | |
![]() | |
Pass () | |
void | set_PassManager (PassManager *PM) |
template<class _PassClass > | |
_PassClass * | get_Pass () const |
Get the result of a previous compiler pass. More... | |
template<class _PassClass > | |
_PassClass * | get_Pass_if_available () const |
Get the result of a previous compiler pass. More... | |
virtual void | initialize () |
Initialize the Pass. More... | |
virtual void | finalize () |
Finalize the Pass. More... | |
virtual bool | verify () const |
Verify the Result. More... | |
virtual | ~Pass () |
Destructor. More... | |
![]() | |
LoopTreeBase () | |
bool | is_reducible () const |
LoopType * | add_loop (NodeType *header, NodeType *exit) |
void | add_top_loop (LoopType *loop) |
loop_iterator | loop_begin () |
loop_iterator | loop_end () |
LoopType * | get_Loop (NodeType *BI) const |
Get the inner most loop which contains BI or NULL if not contained in any loop. More... | |
bool | is_loop_header (NodeType *BI) const |
ConstLoopIteratorPair | get_Loops_from_header (NodeType *BI) const |
bool | is_backedge (NodeType *src, NodeType *header) const |
bool | is_inner_loop (LoopType *inner, LoopType *outer) const |
Test if a loop is a strictly inner loop of another loop. More... | |
int | loop_nest (LoopType *loop) const |
TODO: cache? More... | |
virtual | ~LoopTreeBase () |
Static Public Attributes | |
static char | ID = 0 |
Private Types | |
typedef _T | NodeType |
typedef alloc::set< const NodeType * >::type | NodeListTy |
typedef alloc::map< const NodeType *, NodeListTy >::type | NodeListMapTy |
typedef alloc::vector< const NodeType * >::type | NodeMapTy |
typedef alloc::map< const NodeType *, int >::type | IndexMapTy |
typedef alloc::map< const NodeType *, const NodeType * > ::type | EdgeMapTy |
Private Member Functions | |
NodeListTy & | succ (const NodeType *v, NodeListTy &list) |
NodeType * | get_init_node (JITData &JD) |
Private Attributes | |
NodeListMapTy | bucket |
IndexMapTy | semi |
NodeMapTy | vertex |
int | n |
EdgeMapTy | ancestor |
EdgeMapTy | label |
Additional Inherited Members | |
![]() | |
typedef _T | NodeType |
typedef LoopBase< NodeType > | LoopType |
typedef LoopType::LoopSetTy | LoopSetTy |
typedef LoopSetTy::iterator | loop_iterator |
typedef LoopSetTy::const_iterator | const_loop_iterator |
typedef std::pair < const_loop_iterator, const_loop_iterator > | ConstLoopIteratorPair |
typedef alloc::vector < LoopType * >::type | LoopListTy |
typedef LoopListTy::iterator | iterator |
typedef LoopListTy::reverse_iterator | reverse_iterator |
![]() | |
static void * | operator new (std::size_t size) throw (std::bad_alloc) |
normal new More... | |
static void * | operator new (std::size_t size, void *ptr) throw () |
placement new More... | |
static void * | operator new (std::size_t size, const std::nothrow_t &nt) throw () |
nothrow new More... | |
static void | operator delete (void *pMemory) throw () |
normal delete More... | |
static void | operator delete (void *pMemory, void *ptr) throw () |
placement delete More... | |
static void | operator delete (void *pMemory, const std::nothrow_t &) throw () |
nothrow delete More... | |
static void * | operator new[] (std::size_t size) throw (std::bad_alloc) |
normal new[] More... | |
static void * | operator new[] (std::size_t size, void *ptr) throw () |
placement new[] More... | |
static void * | operator new[] (std::size_t size, const std::nothrow_t &nt) throw () |
nothrow new[] More... | |
static void | operator delete[] (void *pMemory) throw () |
normal delete[] More... | |
static void | operator delete[] (void *pMemory, void *ptr) throw () |
placement delete[] More... | |
static void | operator delete[] (void *pMemory, const std::nothrow_t &) throw () |
nothrow delete[] More... | |
![]() | |
void | set_loop (NodeType *node, LoopType *loop) |
void | insert_loop_header (NodeType *node, LoopType *loop) |
iterator | begin () |
iterator | end () |
reverse_iterator | rbegin () |
reverse_iterator | rend () |
![]() | |
bool | reducible |
LoopListTy | loops |
LoopSetTy | top_loops |
alloc::map< NodeType *, LoopType * >::type | loop_map |
alloc::map< NodeType *, LoopSetTy >::type | loop_header_map |
Calculate the Loop Tree.
The algorithm used here is based on the method proposed in "Testing Flow Graph Reducibility" by Tarjan [9] with the modifications in "SSA-Based Reduction of Operator Strengh" by Vick [10]. See also Click's Phd Thesis, Chapter 6 [2].
Definition at line 53 of file LoopPassBase.hpp.
|
private |
Definition at line 60 of file LoopPassBase.hpp.
|
private |
Definition at line 59 of file LoopPassBase.hpp.
|
private |
Definition at line 57 of file LoopPassBase.hpp.
|
private |
Definition at line 56 of file LoopPassBase.hpp.
|
private |
Definition at line 58 of file LoopPassBase.hpp.
|
private |
Definition at line 55 of file LoopPassBase.hpp.
|
inline |
Definition at line 86 of file LoopPassBase.hpp.
|
private |
Definition at line 40 of file LoopPass.cpp.
Set the requirements for the pass.
Reimplemented from cacao::jit::compiler2::Pass.
Definition at line 34 of file LoopPass.cpp.
|
inlinevirtual |
Run the Pass.
This method implements the compiler pass.
Implements cacao::jit::compiler2::Pass.
Definition at line 109 of file LoopPassBase.hpp.
|
private |
|
private |
Definition at line 71 of file LoopPassBase.hpp.
|
private |
Definition at line 66 of file LoopPassBase.hpp.
|
static |
Definition at line 85 of file LoopPassBase.hpp.
|
private |
Definition at line 72 of file LoopPassBase.hpp.
|
private |
Definition at line 69 of file LoopPassBase.hpp.
|
private |
Definition at line 67 of file LoopPassBase.hpp.
|
private |
Definition at line 68 of file LoopPassBase.hpp.