module LLVM.General.AST.Operand where
import LLVM.General.Prelude
import LLVM.General.AST.Name
import LLVM.General.AST.Constant
import LLVM.General.AST.InlineAssembly
import LLVM.General.AST.Type
newtype MetadataNodeID = MetadataNodeID Word
deriving (Eq, Ord, Read, Show, Typeable, Data)
data MetadataNode
= MetadataNode [Maybe Operand]
| MetadataNodeReference MetadataNodeID
deriving (Eq, Ord, Read, Show, Typeable, Data)
data Operand
= LocalReference Type Name
| ConstantOperand Constant
| MetadataStringOperand String
| MetadataNodeOperand MetadataNode
deriving (Eq, Ord, Read, Show, Typeable, Data)
type CallableOperand = Either InlineAssembly Operand