Improve fix to handle irreducible CFGs.
authorBen Karel <eschew@gmail.com>
Sat, 11 Feb 2017 21:57:12 +0000 (16:57 -0500)
committerBen Karel <eschew@gmail.com>
Sat, 11 Feb 2017 22:04:10 +0000 (17:04 -0500)
src/Compiler/Hoopl/Passes/Dominator.hs

index 7cd8b7e..2d87962 100644 (file)
@@ -48,8 +48,10 @@ domLattice = addPoints "dominators" extend
 extend :: JoinFun DPath
 extend _ (OldFact (DPath l)) (NewFact (DPath l')) =
                                 (changeIf (l `lengthDiffers` j), DPath j)
-    where j = filter (\elem -> Set.member elem common) l
+    where lx = filter (\elem -> Set.member elem common) l
+          rx = filter (\elem -> Set.member elem common) l'
           common = Set.intersection (Set.fromList l) (Set.fromList l')
+          j = [x | (x, y) <- zip lx rx, x == y]
 
           lengthDiffers [] [] = False
           lengthDiffers (_:xs) (_:ys) = lengthDiffers xs ys