- middle m@(MidComment _) = m
- middle (MidAssign r e) = MidAssign r (exp e)
- middle (MidStore addr e) = MidStore (exp addr) (exp e)
- middle (MidUnsafeCall tgt fs as) = MidUnsafeCall (midcall tgt) fs (map exp as)
- middle (MidAddToContext e es) = MidAddToContext (exp e) (map exp es)
- last (LastBranch id) = LastBranch (lookup id)
- last (LastCondBranch e ti fi) = LastCondBranch (exp e) (lookup ti) (lookup fi)
- last (LastSwitch e tbl) = LastSwitch (exp e) (map (fmap lookup) tbl)
- last (LastCall tgt mb_id s) = LastCall (exp tgt) (fmap lookup mb_id) s
- last (LastJump e s) = LastJump (exp e) s
- last (LastReturn s) = LastReturn s
- midcall (ForeignTarget e c) = ForeignTarget (exp e) c
- midcall m@(PrimTarget _) = m
- exp e@(CmmLit _) = e
- exp (CmmLoad addr ty) = CmmLoad (exp addr) ty
- exp e@(CmmReg _) = e
- exp (CmmMachOp op es) = CmmMachOp op $ map exp es
- exp e@(CmmRegOff _ _) = e
+ middle = mapExpDeepMiddle exp
+ last l = mapExpDeepLast exp (last' l)
+ last' (LastBranch bid) = LastBranch (lookup bid)
+ last' (LastCondBranch p t f) = LastCondBranch p (lookup t) (lookup f)
+ last' (LastSwitch e arms) = LastSwitch e (map (liftM lookup) arms)
+ last' (LastCall t k a r) = LastCall t (liftM lookup k) a r
+ exp (CmmLit (CmmBlock bid)) = CmmLit (CmmBlock (lookup bid))