-- Local imports
import CLasH.Normalize.NormalizeTypes
import CLasH.Translator.TranslatorTypes
+import CLasH.VHDL.Constants (builtinIds)
import CLasH.Utils
import qualified CLasH.Utils.Core.CoreTools as CoreTools
import qualified CLasH.VHDL.VHDLTools as VHDLTools
-- trace ("Trying to apply transform " ++ name ++ " to:\n" ++ showSDoc (nest 4 $ ppr expr') ++ "\nType: \n" ++ (showSDoc $ nest 4 $ ppr $ CoreUtils.exprType expr') ++ "\n")
changed
then
- -- trace ("Applying transform " ++ name ++ " to:\n" ++ showSDoc (nest 4 $ ppr expr') ++ "\nType: \n" ++ (showSDoc $ nest 4 $ ppr $ CoreUtils.exprType expr') ++ "\n") $
- -- trace ("Result of applying " ++ name ++ ":\n" ++ showSDoc (nest 4 $ ppr expr'') ++ "\n" ++ "Type: \n" ++ (showSDoc $ nest 4 $ ppr $ CoreUtils.exprType expr'') ++ "\n" ) $
+ -- trace ("Applying transform " ++ name ++ " to:\n" ++ showSDoc (nest 4 $ ppr expr') ++ "\nType: \n" ++ (showSDoc $ nest 4 $ ppr $ CoreUtils.exprType expr') ++ "\n"
+ -- ++ "Result of applying " ++ name ++ ":\n" ++ showSDoc (nest 4 $ ppr expr'') ++ "\n" ++ "Type: \n" ++ (showSDoc $ nest 4 $ ppr $ CoreUtils.exprType expr'') ++ "\n" ) $
applyboth first (name, second)
expr''
else
isUserDefined :: CoreSyn.CoreBndr -> Bool
-- System names are certain to not be user defined
isUserDefined bndr | Name.isSystemName (Id.idName bndr) = False
--- Check a list of typical compiler-defined names
-isUserDefined bndr = str `notElem` (compiler_names ++ builtin_names)
+-- Builtin functions are usually not user-defined either (and would
+-- break currently if they are...)
+isUserDefined bndr = str `notElem` builtinIds
where
str = Name.getOccString bndr
- -- These are names of bindings usually generated by the compiler. For some
- -- 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"]
- builtin_names = [ "!", "replace", "head", "last", "tail", "take", "drop"
- , "select", "+>", "<+", "++", "map", "zipWith", "foldl"
- , "foldr", "zip", "unzip", "shiftl", "shiftr", "rotl"
- , "rotr", "concat", "reverse", "iteraten", "iterate"
- , "generaten", "generate", "empty", "singleton", "copyn"
- , "copy", "lengthT", "null", "hwxor", "hwand", "hwor"
- , "hwnot", "not", "+", "*", "-", "fromSizedWord"
- , "resizeWord", "resizeInt", "fst", "snd", "blockRAM"
- , "split", "==", "/="
- ]
-
- -- , (ltId , (2, genOperator2 (AST.:<:) ) )
- -- , (lteqId , (2, genOperator2 (AST.:<=:) ) )
- -- , (gtId , (2, genOperator2 (AST.:>:) ) )
- -- , (gteqId , (2, genOperator2 (AST.:>=:) ) )
- -- , (boolOrId , (2, genOperator2 AST.Or ) )
- -- , (boolAndId , (2, genOperator2 AST.And ) )
- -- , (negateId , (1, genNegation ) )
- -- , (sizedIntId , (1, genSizedInt ) )
- -- , (smallIntegerId , (1, genFromInteger ) )
-- Is the given binder normalizable? This means that its type signature can be
-- represented in hardware, which should (?) guarantee that it can be made