add mapSuccessors
authorSimon Marlow <marlowsd@gmail.com>
Fri, 3 Feb 2012 15:02:05 +0000 (15:02 +0000)
committerSimon Marlow <marlowsd@gmail.com>
Fri, 3 Feb 2012 15:02:05 +0000 (15:02 +0000)
compiler/cmm/CmmNode.hs

index ae70efc..5a07bad 100644 (file)
@@ -18,7 +18,7 @@ module CmmNode (
      CmmNode(..), ForeignHint(..), CmmFormal, CmmActual,
      UpdFrameOffset, Convention(..), ForeignConvention(..), ForeignTarget(..),
      mapExp, mapExpDeep, wrapRecExp, foldExp, foldExpDeep, wrapRecExpf,
-     mapExpM, mapExpDeepM, wrapRecExpM
+     mapExpM, mapExpDeepM, wrapRecExpM, mapSuccessors
   ) where
 
 import CmmExpr
@@ -430,3 +430,11 @@ foldExpDeep f = foldExp go
         gos [] z = z
         gos (e:es) z = gos es $! f e z
 
+-- -----------------------------------------------------------------------------
+
+mapSuccessors :: (Label -> Label) -> CmmNode O C -> CmmNode O C
+mapSuccessors f (CmmBranch bid)        = CmmBranch (f bid)
+mapSuccessors f (CmmCondBranch p y n)  = CmmCondBranch p (f y) (f n)
+mapSuccessors f (CmmSwitch e arms)     = CmmSwitch e (map (fmap f) arms)
+mapSuccessors f n = n
+