X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=c%CE%BBash%2FCLasH%2FNormalize%2FNormalizeTools.hs;h=dd62a34136a9ba0e84d587d48f9a3d69633f22e5;hb=9b378bd9c8ea179ce0459fef9b362002f90dbc98;hp=f38da518e8535b68e4f560fdbae021db1d1b7af9;hpb=f570cf39514c5e691b8160f8cd80e60d964fe9e6;p=matthijs%2Fmaster-project%2Fc%CE%BBash.git diff --git "a/c\316\273ash/CLasH/Normalize/NormalizeTools.hs" "b/c\316\273ash/CLasH/Normalize/NormalizeTools.hs" index f38da51..dd62a34 100644 --- "a/c\316\273ash/CLasH/Normalize/NormalizeTools.hs" +++ "b/c\316\273ash/CLasH/Normalize/NormalizeTools.hs" @@ -24,11 +24,13 @@ import qualified Name import qualified Id import qualified CoreSubst import qualified CoreUtils +import qualified Type import Outputable ( showSDoc, ppr, nest ) -- Local imports import CLasH.Normalize.NormalizeTypes import CLasH.Translator.TranslatorTypes +import CLasH.Utils import CLasH.Utils.Pretty import qualified CLasH.Utils.Core.CoreTools as CoreTools import CLasH.VHDL.VHDLTypes @@ -203,3 +205,15 @@ isUserDefined bndr = str `elem` compiler_names -- reason these are not marked as system, probably because the name itself -- is not made up by the compiler, just this particular binding is. compiler_names = ["fromInteger"] + +-- Is the given binder normalizable? This means that its type signature can be +-- represented in hardware, which should (?) guarantee that it can be made +-- into hardware. Note that if a binder is not normalizable, it might become +-- so using argument propagation. +isNormalizeable :: CoreBndr -> TransformMonad Bool +isNormalizeable bndr = do + let ty = Id.idType bndr + let (arg_tys, res_ty) = Type.splitFunTys ty + -- This function is normalizable if all its arguments and return value are + -- representable. + andM $ mapM isRepr (res_ty:arg_tys)