X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fvectorise%2FVectCore.hs;h=6be1542134bc28787e477dd09d402154d14a0e86;hb=432b9c9322181a3644083e3c19b7e240d90659e7;hp=23fe0e4064de42b669e0c5188efb4518c7e1b6fb;hpb=0a21de62e274acc8e8e260298da4f6c1ee18ecc2;p=ghc-hetmet.git diff --git a/compiler/vectorise/VectCore.hs b/compiler/vectorise/VectCore.hs index 23fe0e4..6be1542 100644 --- a/compiler/vectorise/VectCore.hs +++ b/compiler/vectorise/VectCore.hs @@ -7,13 +7,17 @@ module VectCore ( vNonRec, vRec, vVar, vType, vNote, vLet, - vLams, - mkVLams, mkVVarApps + vLams, vLamsWithoutLC, vVarApps, + vCaseDEFAULT, vCaseProd, vInlineMe ) where #include "HsVersions.h" import CoreSyn +import CoreUtils ( mkInlineMe ) +import MkCore ( mkWildCase ) +import CoreUtils ( exprType ) +import DataCon ( DataCon ) import Type ( Type ) import Var @@ -60,14 +64,34 @@ vLams lc vs (ve, le) = (mkLams vvs ve, mkLams (lc:lvs) le) where (vvs,lvs) = unzip vs -mkVLams :: [VVar] -> VExpr -> VExpr -mkVLams vvs (ve,le) = (mkLams vs ve, mkLams ls le) +vLamsWithoutLC :: [VVar] -> VExpr -> VExpr +vLamsWithoutLC vvs (ve,le) = (mkLams vs ve, mkLams ls le) where (vs,ls) = unzip vvs -mkVVarApps :: Var -> VExpr -> [VVar] -> VExpr -mkVVarApps lc (ve, le) vvs = (ve `mkVarApps` vs, le `mkVarApps` (lc : ls)) +vVarApps :: Var -> VExpr -> [VVar] -> VExpr +vVarApps lc (ve, le) vvs = (ve `mkVarApps` vs, le `mkVarApps` (lc : ls)) where (vs,ls) = unzip vvs +vCaseDEFAULT :: VExpr -> VVar -> Type -> Type -> VExpr -> VExpr +vCaseDEFAULT (vscrut, lscrut) (vbndr, lbndr) vty lty (vbody, lbody) + = (Case vscrut vbndr vty (mkDEFAULT vbody), + Case lscrut lbndr lty (mkDEFAULT lbody)) + where + mkDEFAULT e = [(DEFAULT, [], e)] + +vCaseProd :: VExpr -> Type -> Type + -> DataCon -> DataCon -> [Var] -> [VVar] -> VExpr -> VExpr +vCaseProd (vscrut, lscrut) vty lty vdc ldc sh_bndrs bndrs + (vbody,lbody) + = (mkWildCase vscrut (exprType vscrut) vty + [(DataAlt vdc, vbndrs, vbody)], + mkWildCase lscrut (exprType lscrut) lty + [(DataAlt ldc, sh_bndrs ++ lbndrs, lbody)]) + where + (vbndrs, lbndrs) = unzip bndrs + +vInlineMe :: VExpr -> VExpr +vInlineMe (vexpr, lexpr) = (mkInlineMe vexpr, mkInlineMe lexpr)