diff options
author | Geoffrey Mainland <mainland@apeiron.net> | 2012-11-02 14:04:31 +0000 |
---|---|---|
committer | Geoffrey Mainland <gmainlan@microsoft.com> | 2013-02-01 22:00:24 +0000 |
commit | 089ac7171bee938bd52975d2f828cf0dd6b4b25b (patch) | |
tree | 38236cdbc41201798a761bf6ef1665772058d333 /utils/genprimopcode | |
parent | 33bfc6a700eaab9bc06974d6f71a80e61d9177c9 (diff) | |
download | haskell-089ac7171bee938bd52975d2f828cf0dd6b4b25b.tar.gz |
Add a primop attribute llvm_only.
The llvm_only attribute indicates that a primop is only available when using the
LLVM back-end.
Diffstat (limited to 'utils/genprimopcode')
-rw-r--r-- | utils/genprimopcode/Main.hs | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/utils/genprimopcode/Main.hs b/utils/genprimopcode/Main.hs index f3d6cb8dc0..4230cd8696 100644 --- a/utils/genprimopcode/Main.hs +++ b/utils/genprimopcode/Main.hs @@ -519,7 +519,7 @@ gen_wrappers (Info _ entries) ++ "#endif /* defined (__GLASGOW_HASKELL_LLVM__) */\n" where specs = filter (not.dodgy) (filter is_primop entries) - (vecspecs, otherspecs) = partition (llvmOnlyTy . ty) specs + (vecspecs, otherspecs) = partition is_llvm_only specs tycons = foldr union [] $ map (tyconsIn . ty) specs (vectycons, othertycons) = (partition llvmOnlyTyCon . filter (`notElem` ["()", "Bool"])) tycons @@ -543,11 +543,11 @@ gen_wrappers (Info _ entries) "parAtAbs#", "parAtRel#", "parAtForNow#" ] - llvmOnlyTy :: Ty -> Bool - llvmOnlyTy (TyF ty1 ty2) = llvmOnlyTy ty1 || llvmOnlyTy ty2 - llvmOnlyTy (TyApp tycon tys) = llvmOnlyTyCon tycon || any llvmOnlyTy tys - llvmOnlyTy (TyVar _) = False - llvmOnlyTy (TyUTup tys) = any llvmOnlyTy tys + is_llvm_only :: Entry -> Bool + is_llvm_only entry = + case lookup_attrib "llvm_only" (opts entry) of + Just (OptionTrue _) -> True + _ -> False llvmOnlyTyCon :: TyCon -> Bool llvmOnlyTyCon "Int32#" = True |