X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fvectorise%2FVectorise%2FUtils%2FBase.hs;h=0ffaa60d9490a904332a039b511a7aa0efebda2f;hb=4837a66d2d6a8a6db09067a3cd8c9038a9027a2d;hp=490eba60e27891b6075b70e226a264b9a1f91137;hpb=acb9c929a4ab025972027b55b4c18d4410207d29;p=ghc-hetmet.git diff --git a/compiler/vectorise/Vectorise/Utils/Base.hs b/compiler/vectorise/Vectorise/Utils/Base.hs index 490eba6..0ffaa60 100644 --- a/compiler/vectorise/Vectorise/Utils/Base.hs +++ b/compiler/vectorise/Vectorise/Utils/Base.hs @@ -15,9 +15,11 @@ module Vectorise.Utils.Base ( mkPDataType, mkBuiltinCo, mkVScrut, - + + preprSynTyCon, pdataReprTyCon, pdataReprDataCon, + prDFunOfTyCon ) where import Vectorise.Monad @@ -35,6 +37,8 @@ import Literal import Outputable import FastString +import Control.Monad (liftM) + -- Simple Types --------------------------------------------------------------- voidType :: VM Type @@ -140,6 +144,9 @@ mkVScrut (ve, le) where ty = exprType ve +preprSynTyCon :: Type -> VM (TyCon, [Type]) +preprSynTyCon ty = builtin preprTyCon >>= (`lookupFamInst` [ty]) + pdataReprTyCon :: Type -> VM (TyCon, [Type]) pdataReprTyCon ty = builtin pdataTyCon >>= (`lookupFamInst` [ty]) @@ -151,4 +158,9 @@ pdataReprDataCon ty let [dc] = tyConDataCons tc return (dc, arg_tys) +prDFunOfTyCon :: TyCon -> VM CoreExpr +prDFunOfTyCon tycon + = liftM Var + . maybeCantVectoriseM "No PR dictionary for tycon" (ppr tycon) + $ lookupTyConPR tycon