DPH: free top-level variables don't prevent encapsulation
authorManuel M T Chakravarty <chak@cse.unsw.edu.au>
Mon, 18 Feb 2013 06:48:43 +0000 (17:48 +1100)
committerManuel M T Chakravarty <chak@cse.unsw.edu.au>
Mon, 18 Feb 2013 22:55:03 +0000 (09:55 +1100)
compiler/vectorise/Vectorise/Exp.hs

index 706fc85..fb0c148 100644 (file)
@@ -1211,12 +1211,17 @@ maybeParrTy ty
 maybeParrTy (ForAllTy _ ty) = maybeParrTy ty
 maybeParrTy _               = return False
 
--- Are the types of all variables in the 'Scalar' class?
+-- Are the types of all variables in the 'Scalar' class or toplevel variables?
+--
+-- NB: 'liftSimple' does not abstract over toplevel variables.
 --
 allScalarVarType :: [Var] -> VM Bool
-allScalarVarType vs = and <$> mapM (isScalar . varType) vs
+allScalarVarType vs = and <$> mapM isScalarOrToplevel vs
+  where
+    isScalarOrToplevel v | isToplevel v = return True
+                         | otherwise    = isScalar (varType v)
 
--- Are the types of all variables in the set in the 'Scalar' class?
+-- Are the types of all variables in the set in the 'Scalar' class or toplevel variables?
 --
 allScalarVarTypeSet :: VarSet -> VM Bool
 allScalarVarTypeSet = allScalarVarType . varSetElems