module LLVM.IRBuilder.Constant where import Data.Word import LLVM.Prelude import LLVM.AST hiding (args, dests) import LLVM.AST.Typed import LLVM.AST.Constant import LLVM.AST.Float import LLVM.IRBuilder.Module import GHC.Stack int64 :: Integer -> Operand int64 = ConstantOperand . Int 64 int32 :: Integer -> Operand int32 = ConstantOperand . Int 32 int16 :: Integer -> Operand int16 = ConstantOperand . Int 16 int8 :: Integer -> Operand int8 = ConstantOperand . Int 8 bit :: Integer -> Operand bit = ConstantOperand . Int 1 double :: Double -> Operand double = ConstantOperand . Float . Double single :: Float -> Operand single = ConstantOperand . Float . Single half :: Word16 -> Operand half = ConstantOperand . Float . Half struct :: Maybe Name -> Bool -> [Constant] -> Operand struct nm packing members = ConstantOperand $ Struct nm packing members array :: (HasCallStack, MonadModuleBuilder m) => [Constant] -> m Operand array members = do thm <- typeOf $ head members case thm of (Left s) -> error s (Right thm') -> return $ ConstantOperand $ Array thm' members