summaryrefslogtreecommitdiff
path: root/compiler
diff options
context:
space:
mode:
authorkeller@cse.unsw.edu.au <unknown>2010-11-29 23:10:43 +0000
committerkeller@cse.unsw.edu.au <unknown>2010-11-29 23:10:43 +0000
commitf0c2b5e857841103e5431b698a9eb853aea399b0 (patch)
treee7ab4b8f42948595807ef8bf4d147c8651d62b52 /compiler
parentaa8096682b02fefcdc77e8f689b50b7288e273e7 (diff)
downloadhaskell-f0c2b5e857841103e5431b698a9eb853aea399b0.tar.gz
vectScalarLam handles int, float, and double now
Diffstat (limited to 'compiler')
-rw-r--r--compiler/vectorise/Vectorise/Exp.hs8
1 files changed, 6 insertions, 2 deletions
diff --git a/compiler/vectorise/Vectorise/Exp.hs b/compiler/vectorise/Vectorise/Exp.hs
index d00b040726..4e07086fd8 100644
--- a/compiler/vectorise/Vectorise/Exp.hs
+++ b/compiler/vectorise/Vectorise/Exp.hs
@@ -203,7 +203,11 @@ vectScalarLam args body
is_scalar vs (Var v) = v `elemVarSet` vs
is_scalar _ e@(Lit _) = is_scalar_ty $ exprType e
- is_scalar vs (App e1 e2) = is_scalar vs e1 && is_scalar vs e2
+
+ is_scalar _ (App (Var v) (Lit lit))
+ | Just con <- isDataConId_maybe v = con `elem` [intDataCon, floatDataCon, doubleDataCon]
+
+ is_scalar vs (App e1 e2) = is_scalar vs e1 && is_scalar vs e2
is_scalar vs (Let (NonRec b letExpr) body)
= is_scalar vs letExpr && is_scalar (extendVarSet vs b) body
is_scalar vs (Let (Rec bnds) body)
@@ -214,7 +218,7 @@ vectScalarLam args body
in is_scalar_ty ty &&
is_scalar vs' e &&
(all (is_scalar_alt vs') alts)
-
+
is_scalar _ e = False
is_scalar_alt vs (_, bs, e)