google/souper — pull request #74 by chenyang78 (2014-10-06 00:03:59+00:00)
Title: A fix to address issue 26

The patch is to resolve issue 26, where Souper enters an infinite recursion when processing irreducible CFGs. The idea is that when we build an instruction, if the instruction is a phi-node with multiple incoming edges, we do DFS from the basic block containing the phi-node and check if we will revisit the basic block. If yes, we know that this phi-node is the merge point of loop iterations. All basic blocks along the path of the detected loop are cached for speeding up future queries.