hunk ./compiler/supercomp/Scp.hs 1692 - msg' env True fun fvs emptyTp p1 p2 + msg' env emptyFM True fun fvs emptyTp p1 p2 hunk ./compiler/supercomp/Scp.hs 1694 -msg' :: ScpEnv -> Bool -> Id -> [Var] -> TermParts -> (CoreExpr, Context, [CoreBind]) -> (CoreExpr, Context, [CoreBind]) -> ScpM s (Maybe (CoreExpr, Context, [CoreBind], TermParts)) -msg' env toplevel fun fvs subst (e1, c1, b1) (e2, c2, b2) = do +msg' :: ScpEnv -> FiniteMap Var Var -> Bool -> Id -> [Var] -> TermParts -> (CoreExpr, Context, [CoreBind]) -> (CoreExpr, Context, [CoreBind]) -> ScpM s (Maybe (CoreExpr, Context, [CoreBind], TermParts)) +msg' env vars toplevel fun fvs subst (e1, c1, b1) (e2, c2, b2) = do hunk ./compiler/supercomp/Scp.hs 1697 - tmp <- msg_headexp env' fun fvs subst (e1, e2) + tmp <- msg_headexp env' vars fun fvs subst (e1, e2) hunk ./compiler/supercomp/Scp.hs 1712 - tmp2 <- msg_binds env fun fvs subst1 b1 b2 + tmp2 <- msg_binds env vars fun fvs subst1 b1 b2 hunk ./compiler/supercomp/Scp.hs 1717 - then msg_context env' fun fvs e1' subst2 c1 c2 t1 - else msg_context_helper env' fun fvs e1' subst2 c1 c2 t1 + then msg_context env' vars fun fvs e1' subst2 c1 c2 t1 + else msg_context_helper env' vars fun fvs e1' subst2 c1 c2 t1 hunk ./compiler/supercomp/Scp.hs 1724 -msg_headexp :: ScpEnv -> Id -> [Var] -> TermParts -> (CoreExpr, CoreExpr) -> ScpM s (Maybe (CoreExpr, TermParts)) -msg_headexp env fun fvs1 subst (Var n1, Var n2) +msg_headexp :: ScpEnv -> FiniteMap Var Var -> Id -> [Var] -> TermParts -> (CoreExpr, CoreExpr) -> ScpM s (Maybe (CoreExpr, TermParts)) +msg_headexp env vars fun fvs1 subst (Var n1, Var n2) hunk ./compiler/supercomp/Scp.hs 1727 + | Just v' <- lookupFM vars n1 + , n2 == v' = return $ Just (Var n1, subst) hunk ./compiler/supercomp/Scp.hs 1730 -msg_headexp _ _ _ subst (Lit l1, Lit l2) | l1 == l2 = return $ Just (Lit l1, subst) -msg_headexp env fun fvs1 subst (l1@(Lam b1 e1), l2@(Lam b2 e2)) +msg_headexp _ _ _ _ subst (Lit l1, Lit l2) | l1 == l2 = return $ Just (Lit l1, subst) +msg_headexp env vars fun fvs1 subst (l1@(Lam b1 e1), l2@(Lam b2 e2)) hunk ./compiler/supercomp/Scp.hs 1734 - tmp <- msg' env' False fun fvs1 subst (splitTerm e1) (splitTerm e2) + tmp <- msg' env' vars False fun fvs1 subst (splitTerm e1) (splitTerm e2) hunk ./compiler/supercomp/Scp.hs 1738 -msg_headexp env fun fvs1 subst (l1@(Type t1), l2@(Type t2)) +msg_headexp env vars fun fvs1 subst (l1@(Type t1), l2@(Type t2)) hunk ./compiler/supercomp/Scp.hs 1742 -msg_headexp env fun fvs1 subst (e1, e2) = return Nothing +msg_headexp env vars fun fvs1 subst (e1, e2) = return Nothing hunk ./compiler/supercomp/Scp.hs 1744 -msg_binds :: ScpEnv -> Id -> [Var] -> TermParts -> [CoreBind] -> [CoreBind] -> ScpM s (Maybe ([CoreBind], TermParts)) -msg_binds env fun fvs subst b1 b2 = go subst b1 b2 [] +msg_binds :: ScpEnv -> FiniteMap Var Var -> Id -> [Var] -> TermParts -> [CoreBind] -> [CoreBind] -> ScpM s (Maybe ([CoreBind], TermParts)) +msg_binds env vars fun fvs subst b1 b2 = go subst b1 b2 [] hunk ./compiler/supercomp/Scp.hs 1748 - tmp <- msg'_bind env fun fvs subst b1 b2 + tmp <- msg'_bind env vars fun fvs subst b1 b2 hunk ./compiler/supercomp/Scp.hs 1754 -msg'_bind :: ScpEnv -> Id -> [Var] -> TermParts -> CoreBind -> CoreBind -> ScpM s (Maybe (CoreBind, TermParts)) -msg'_bind env fun fvs subst b1 b2 = go subst b1 b2 +msg'_bind :: ScpEnv -> FiniteMap Var Var -> Id -> [Var] -> TermParts -> CoreBind -> CoreBind -> ScpM s (Maybe (CoreBind, TermParts)) +msg'_bind env vars fun fvs subst b1 b2 = go subst b1 b2 hunk ./compiler/supercomp/Scp.hs 1758 - tmp <- msg'_exps env' fun fvs subst (rhssOfBind ps1) (rhssOfBind ps2) + tmp <- msg'_exps env' vars fun fvs subst (rhssOfBind ps1) (rhssOfBind ps2) hunk ./compiler/supercomp/Scp.hs 1766 - tmp <- msg' env' False fun fvs subst (splitTerm e1) (splitTerm e2) + tmp <- msg' env' vars False fun fvs subst (splitTerm e1) (splitTerm e2) hunk ./compiler/supercomp/Scp.hs 1773 -msg'_exps :: ScpEnv -> Id -> [Var] -> TermParts -> [CoreExpr] -> [CoreExpr] -> ScpM s (Maybe ([CoreExpr], TermParts)) -msg'_exps env fun fvs subst es1 es2 = go subst es1 es2 [] +msg'_exps :: ScpEnv -> FiniteMap Var Var -> Id -> [Var] -> TermParts -> [CoreExpr] -> [CoreExpr] -> ScpM s (Maybe ([CoreExpr], TermParts)) +msg'_exps env vars fun fvs subst es1 es2 = go subst es1 es2 [] hunk ./compiler/supercomp/Scp.hs 1777 - tmp <- msg' env False fun fvs subst (splitTerm e1) (splitTerm e2) + tmp <- msg' env vars False fun fvs subst (splitTerm e1) (splitTerm e2) hunk ./compiler/supercomp/Scp.hs 1783 -msg_context :: ScpEnv -> Id -> [Var] -> CoreExpr -> TermParts -> Context -> Context -> Type -> ScpM s (Maybe (CoreExpr, Context, TermParts)) -msg_context env fun fvs e1 subst c1@((AppCtxt {}):t1) c2@((AppCtxt {}):t2) _t = msg_context_helper env fun fvs e1 subst c1 c2 _t -msg_context env fun fvs e1 subst c1@((PrimOpCtxt {}):t1) c2@((PrimOpCtxt {}):t2) _t = msg_context_helper env fun fvs e1 subst c1 c2 _t -msg_context env fun fvs e1 subst c1@((CaseCtxt {}):t1) c2@((CaseCtxt {}):t2) _t = msg_context_helper env fun fvs e1 subst c1 c2 _t -msg_context env fun fvs e1 subst c1@((CastCtxt {}):t1) c2@((CastCtxt {}):t2) _t = msg_context_helper env fun fvs e1 subst c1 c2 _t -msg_context _ _ _ _ _ _ _ _ = return Nothing +msg_context :: ScpEnv -> FiniteMap Var Var -> Id -> [Var] -> CoreExpr -> TermParts -> Context -> Context -> Type -> ScpM s (Maybe (CoreExpr, Context, TermParts)) +msg_context env vars fun fvs e1 subst c1@((AppCtxt {}):t1) c2@((AppCtxt {}):t2) _t = msg_context_helper env vars fun fvs e1 subst c1 c2 _t +msg_context env vars fun fvs e1 subst c1@((PrimOpCtxt {}):t1) c2@((PrimOpCtxt {}):t2) _t = msg_context_helper env vars fun fvs e1 subst c1 c2 _t +msg_context env vars fun fvs e1 subst c1@((CaseCtxt {}):t1) c2@((CaseCtxt {}):t2) _t = msg_context_helper env vars fun fvs e1 subst c1 c2 _t +msg_context env vars fun fvs e1 subst c1@((CastCtxt {}):t1) c2@((CastCtxt {}):t2) _t = msg_context_helper env vars fun fvs e1 subst c1 c2 _t +msg_context _ _ _ _ _ _ _ _ _ = return Nothing hunk ./compiler/supercomp/Scp.hs 1790 -msg_context_helper :: ScpEnv -> Id -> [Var] -> CoreExpr -> TermParts -> Context -> Context -> Type -> ScpM s (Maybe (CoreExpr, Context, TermParts)) -msg_context_helper env fun fvs e1 subst c1 c2 _int = go subst _int c1 c2 [] +msg_context_helper :: ScpEnv -> FiniteMap Var Var -> Id -> [Var] -> CoreExpr -> TermParts -> Context -> Context -> Type -> ScpM s (Maybe (CoreExpr, Context, TermParts)) +msg_context_helper env vars fun fvs e1 subst c1 c2 _int = go subst _int c1 c2 [] hunk ./compiler/supercomp/Scp.hs 1809 - tmp <- msg' env False fun fvs subst (splitTerm arg1) (splitTerm arg2) + tmp <- msg' env vars False fun fvs subst (splitTerm arg1) (splitTerm arg2) hunk ./compiler/supercomp/Scp.hs 1828 - tmp1 <- msg'_exps env fun fvs subst oes1 oes2 + tmp1 <- msg'_exps env vars fun fvs subst oes1 oes2 hunk ./compiler/supercomp/Scp.hs 1832 - tmp2 <- msg'_exps env fun fvs subst1 ies1 ies2 + tmp2 <- msg'_exps env vars fun fvs subst1 ies1 ies2 hunk ./compiler/supercomp/Scp.hs 1839 - tmp <- msg'_alts env' fun fvs subst alts1 alts2 + tmp <- msg'_alts env' vars fun fvs subst alts1 alts2 hunk ./compiler/supercomp/Scp.hs 1855 -msg'_alts :: ScpEnv -> Id -> [Var] -> TermParts -> [CoreAlt] -> [CoreAlt] -> ScpM s (Maybe ([CoreAlt], TermParts)) -msg'_alts env fun fvs subst alts1 alts2 = go subst alts1 alts2 [] +msg'_alts :: ScpEnv -> FiniteMap Var Var -> Id -> [Var] -> TermParts -> [CoreAlt] -> [CoreAlt] -> ScpM s (Maybe ([CoreAlt], TermParts)) +msg'_alts env vars fun fvs subst alts1 alts2 = go subst alts1 alts2 [] hunk ./compiler/supercomp/Scp.hs 1860 - tmp <- msg' env' False fun fvs subst (splitTerm r1) (splitTerm r2) + let vars' = addListToFM vars (zip vs1 vs2) + tmp <- msg' env' vars' False fun fvs subst (splitTerm r1) (splitTerm r2)