diff options
Diffstat (limited to 'src/relooper/Relooper.cpp')
-rw-r--r-- | src/relooper/Relooper.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/relooper/Relooper.cpp b/src/relooper/Relooper.cpp index d79dca5a..07b36311 100644 --- a/src/relooper/Relooper.cpp +++ b/src/relooper/Relooper.cpp @@ -6,7 +6,12 @@ #include <list> #include <stack> +#if EMSCRIPTEN #include "ministring.h" +#else +#include <string> +typedef std::string ministring; +#endif template <class T, class U> bool contains(const T& container, const U& contained) { return container.find(contained) != container.end(); @@ -541,6 +546,16 @@ void Relooper::Calculate(Block *Entry) { for (BlockSet::iterator iter = Curr->BranchesIn.begin(); iter != Curr->BranchesIn.end(); iter++) { Queue.insert(*iter); } +#if 0 + // Add elements it leads to, if they are dead ends. There is no reason not to hoist dead ends + // into loops, as it can avoid multiple entries after the loop + for (BlockBranchMap::iterator iter = Curr->BranchesOut.begin(); iter != Curr->BranchesOut.end(); iter++) { + Block *Target = iter->first; + if (Target->BranchesIn.size() <= 1 && Target->BranchesOut.size() == 0) { + Queue.insert(Target); + } + } +#endif } } assert(InnerBlocks.size() > 0); |