diff options
| author | Tuowen Zhao <ztuowen@gmail.com> | 2016-09-19 21:14:58 +0000 | 
|---|---|---|
| committer | Tuowen Zhao <ztuowen@gmail.com> | 2016-09-19 21:14:58 +0000 | 
| commit | 210f77d2c32f14d2e99577fd3c9842bb19d47e50 (patch) | |
| tree | 5edb327c919b8309e301c3440fb6668a0075c8ef /src/ir_rose_utils.cc | |
| parent | a66ce5cd670c4d3c0dc449720f5bc45dd4c281b8 (diff) | |
| download | chill-210f77d2c32f14d2e99577fd3c9842bb19d47e50.tar.gz chill-210f77d2c32f14d2e99577fd3c9842bb19d47e50.tar.bz2 chill-210f77d2c32f14d2e99577fd3c9842bb19d47e50.zip | |
Moved most modules into lib
Diffstat (limited to 'src/ir_rose_utils.cc')
| -rw-r--r-- | src/ir_rose_utils.cc | 67 | 
1 files changed, 67 insertions, 0 deletions
| diff --git a/src/ir_rose_utils.cc b/src/ir_rose_utils.cc new file mode 100644 index 0000000..64b0891 --- /dev/null +++ b/src/ir_rose_utils.cc @@ -0,0 +1,67 @@ +/***************************************************************************** + Copyright (C) 2008 University of Southern California + Copyright (C) 2009 University of Utah + All Rights Reserved. + + Purpose: +   ROSE interface utilities. + + Notes: + + Update history: +   01/2006 created by Chun Chen +*****************************************************************************/ + +#include "ir_rose_utils.hh" + + + +std::vector<SgForStatement *> find_loops(SgNode *tnl) { +  std::vector<SgForStatement *> result; +  +  SgStatementPtrList& blockStatements = isSgBasicBlock(tnl)->get_statements(); +  for(SgStatementPtrList::const_iterator j = blockStatements.begin(); j != blockStatements.end(); j++) +    if(isSgForStatement(*j)) +      result.push_back(isSgForStatement(*j)); +   +  return result; +} + +std::vector<SgForStatement *> find_deepest_loops(SgStatementPtrList& tnl) { +   +  std::vector<SgForStatement *> loops; +   +   +   +  for(SgStatementPtrList::const_iterator j = tnl.begin(); j != tnl.end(); j++) +  { +    std::vector<SgForStatement *> t = find_deepest_loops(isSgNode(*j)); +    if (t.size() > loops.size()) +      loops = t; +  }        +   +   +   +  return loops; +   +} + +std::vector<SgForStatement *> find_deepest_loops(SgNode *tn) { +  if (isSgForStatement(tn)) { +    std::vector<SgForStatement *> loops; +     +    SgForStatement *tnf = static_cast<SgForStatement*>(tn); +    loops.insert(loops.end(), tnf); +    std::vector<SgForStatement*> t = find_deepest_loops(isSgNode(tnf->get_loop_body())); +    std::copy(t.begin(), t.end(), std::back_inserter(loops)); +     +    return loops; +  } +  else if (isSgBasicBlock(tn)) { +    SgBasicBlock *tnb = static_cast<SgBasicBlock*>(tn); +    return find_deepest_loops(tnb->get_statements()); +  } +  else  +    return std::vector<SgForStatement *>();                +} + | 
