Skip to content
Snippets Groups Projects
Commit a6a38742 authored by Ben Gamari's avatar Ben Gamari Committed by Marge Bot
Browse files

llvmGen: Introduce infrastructure for module flag metadata

parent 86ce92a2
No related branches found
No related tags found
No related merge requests found
......@@ -42,6 +42,10 @@ module GHC.Llvm (
-- ** Metadata types
MetaExpr(..), MetaAnnot(..), MetaDecl(..), MetaId(..),
-- *** Module flags
ModuleFlagBehavior(..),
ModuleFlag(..),
moduleFlagToMetaExpr,
-- ** Operations on the type system.
isGlobal, getLitType, getVarType,
......
......@@ -6,6 +6,10 @@ module GHC.Llvm.MetaData
, MetaExpr(..)
, MetaAnnot(..)
, MetaDecl(..)
-- * Module flags
, ModuleFlagBehavior(..)
, ModuleFlag(..)
, moduleFlagToMetaExpr
) where
import GHC.Prelude
......@@ -98,3 +102,42 @@ data MetaDecl
-- | Metadata node declaration.
-- ('!0 = metadata !{ \<metadata expression> }' form).
| MetaUnnamed !MetaId !MetaExpr
----------------------------------------------------------------
-- Module flags
----------------------------------------------------------------
data ModuleFlagBehavior
= MFBError
| MFBWarning
| MFBRequire
| MFBOverride
| MFBAppend
| MFBAppendUnique
| MFBMax
| MFBMin
moduleFlagBehaviorToMetaExpr :: ModuleFlagBehavior -> MetaExpr
moduleFlagBehaviorToMetaExpr mfb =
MetaLit $ LMIntLit n i32
where
n = case mfb of
MFBError -> 1
MFBWarning -> 2
MFBRequire -> 3
MFBOverride -> 4
MFBAppend -> 5
MFBAppendUnique -> 6
MFBMax -> 7
MFBMin -> 8
data ModuleFlag = ModuleFlag { mfBehavior :: ModuleFlagBehavior
, mfName :: LMString
, mfValue :: MetaExpr
}
moduleFlagToMetaExpr :: ModuleFlag -> MetaExpr
moduleFlagToMetaExpr flag = MetaStruct
[ moduleFlagBehaviorToMetaExpr (mfBehavior flag)
, MetaStr (mfName flag)
, mfValue flag
]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment