X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2Fvectorise%2FVectCore.hs;fp=compiler%2Fvectorise%2FVectCore.hs;h=de832793f654e3243486ded9dab5f79ff7ac247e;hp=1ccc3813ce168eaa6f0749dd1a050856a6e76fb5;hb=f363bf9a76bcaddc1bfea61135f4f4d2fbcfd955;hpb=5eec4625961ca9064216f0161288e0d46628c10f diff --git a/compiler/vectorise/VectCore.hs b/compiler/vectorise/VectCore.hs index 1ccc381..de83279 100644 --- a/compiler/vectorise/VectCore.hs +++ b/compiler/vectorise/VectCore.hs @@ -7,13 +7,17 @@ module VectCore ( vNonRec, vRec, vVar, vType, vNote, vLet, - vLams, vLamsWithoutLC, vVarApps + vLams, vLamsWithoutLC, vVarApps, + vCaseDEFAULT, vCaseProd ) where #include "HsVersions.h" import CoreSyn +import CoreUtils ( exprType ) +import DataCon ( DataCon ) import Type ( Type ) +import Id ( mkWildId ) import Var type Vect a = (a,a) @@ -69,4 +73,20 @@ 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) + = (Case vscrut (mkWildId $ exprType vscrut) vty + [(DataAlt vdc, vbndrs, vbody)], + Case lscrut (mkWildId $ exprType lscrut) lty + [(DataAlt ldc, sh_bndrs ++ lbndrs, lbody)]) + where + (vbndrs, lbndrs) = unzip bndrs