llvm-general-pure 3.2.8.2 → 3.3.7.0
raw patch · 5 files changed
+10/−187 lines, 5 filesdep +arraydep +bytestringdep +textdep ~llvm-general-pure
Dependencies added: array, bytestring, text
Dependency ranges changed: llvm-general-pure
Files
- llvm-general-pure.cabal +8/−7
- src/LLVM/General/AST/Global.hs +1/−3
- src/LLVM/General/DataLayout.hs +0/−95
- test/LLVM/General/Test/DataLayout.hs +0/−80
- test/LLVM/General/Test/PrettyPrint.hs +1/−2
llvm-general-pure.cabal view
@@ -1,5 +1,5 @@ name: llvm-general-pure-version: 3.2.8.2+version: 3.3.7.0 license: BSD3 license-file: LICENSE author: Benjamin S.Scarlet <fgthb0@greynode.net>@@ -15,7 +15,7 @@ It includes an ADT to represent LLVM IR (<http://llvm.org/docs/LangRef.html>). The llvm-general package builds on this one with FFI bindings to LLVM, but llvm-general-pure does not require LLVM to be available. .- For haddock, see <http://bscarlet.github.io/llvm-general/3.2.8.2/doc/html/llvm-general-pure/index.html>.+ For haddock, see <http://bscarlet.github.io/llvm-general/3.3.7.0/doc/html/llvm-general-pure/index.html>. source-repository head type: git@@ -25,12 +25,15 @@ ghc-options: -fwarn-unused-imports build-depends: base >= 4.5.0.0 && < 5,+ text >= 0.11.2.1,+ bytestring >= 0.9.1.10, transformers >= 0.3.0.0, mtl >= 2.0.1.0, template-haskell >= 2.5.0.0, containers >= 0.4.2.1,- setenv >= 0.1.0,- parsec >= 3.1.3+ parsec >= 3.1.3,+ array >= 0.4.0.0,+ setenv >= 0.1.0 hs-source-dirs: src extensions: TupleSections@@ -59,7 +62,6 @@ LLVM.General.AST.RMWOperation LLVM.General.AST.Type LLVM.General.AST.Visibility- LLVM.General.DataLayout LLVM.General.PrettyPrint other-modules:@@ -74,7 +76,7 @@ HUnit >= 1.2.4.2, test-framework-quickcheck2 >= 0.3.0.1, QuickCheck >= 2.5.1.1,- llvm-general-pure == 3.2.8.2,+ llvm-general-pure == 3.3.7.0, containers >= 0.4.2.1, mtl >= 2.0.1.0 hs-source-dirs: test@@ -84,5 +86,4 @@ FlexibleContexts main-is: Test.hs other-modules:- LLVM.General.Test.DataLayout LLVM.General.Test.PrettyPrint
src/LLVM/General/AST/Global.hs view
@@ -45,11 +45,10 @@ returnAttributes :: [A.ParameterAttribute], returnType :: Type, name :: Name,- parameters :: ([Parameter],Bool), -- ^ snd indicates varargs+ parameters :: ([Parameter],Bool), functionAttributes :: [A.FunctionAttribute], section :: Maybe String, alignment :: Word32,- garbageCollectorName :: Maybe String, basicBlocks :: [BasicBlock] } deriving (Eq, Read, Show)@@ -106,6 +105,5 @@ functionAttributes = [], section = Nothing, alignment = 0,- garbageCollectorName = Nothing, basicBlocks = [] }
− src/LLVM/General/DataLayout.hs
@@ -1,95 +0,0 @@-module LLVM.General.DataLayout (- dataLayoutToString,- parseDataLayout- ) where--import Control.Applicative--import Data.Word--import qualified Data.List as List-import qualified Data.Map as Map-import qualified Data.Set as Set--import Text.ParserCombinators.Parsec hiding (many)--import LLVM.General.AST.DataLayout-import LLVM.General.AST.AddrSpace--dataLayoutToString :: DataLayout -> String-dataLayoutToString dl = - let sTriple :: (Word32, AlignmentInfo) -> String- sTriple (s, ai) = show s ++ ":" ++ show (abiAlignment ai) ++ (maybe "" (\p -> ":" ++ show p) (preferredAlignment ai))- atChar at = case at of- IntegerAlign -> "i"- VectorAlign -> "v"- FloatAlign -> "f"- AggregateAlign -> "a"- StackAlign -> "s"- in- List.intercalate "-" (- (case endianness dl of Just BigEndian -> ["E"]; Just LittleEndian -> ["e"]; _ -> [])- ++- (maybe [] (\s -> ["S" ++ show s]) (stackAlignment dl))- ++- [ "p" ++ (if a == 0 then "" else show a) ++ ":" ++ sTriple t | (AddrSpace a, t) <- Map.toList . pointerLayouts $ dl]- ++- [ atChar at ++ sTriple (s, ai) | ((at, s), ai) <- Map.toList . typeLayouts $ dl ]- ++ - (maybe [] (\ns -> ["n" ++ (List.intercalate ":" (map show . Set.toList $ ns))]) (nativeSizes dl))- )--parseDataLayout :: String -> Maybe DataLayout-parseDataLayout "" = Nothing-parseDataLayout s = - let- num :: Parser Word32- num = read <$> many digit- triple :: Parser (Word32, AlignmentInfo)- triple = do- s <- num- char ':'- abi <- num- pref <- optionMaybe $ do- char ':'- num- return (s, (AlignmentInfo abi pref))- parseSpec :: Parser (DataLayout -> DataLayout)- parseSpec = choice [- do- char 'e'- return $ \dl -> dl { endianness = Just LittleEndian },- do- char 'E' - return $ \dl -> dl { endianness = Just BigEndian },- do- char 'S'- n <- num- return $ \dl -> dl { stackAlignment = Just n },- do- char 'p'- a <- AddrSpace <$> option 0 (read <$> many1 digit)- char ':'- t <- triple- return $ \dl -> dl { pointerLayouts = Map.insert a t (pointerLayouts dl) },- do- at <- choice [- char 'i' >> return IntegerAlign,- char 'v' >> return VectorAlign,- char 'f' >> return FloatAlign,- char 'a' >> return AggregateAlign,- char 's' >> return StackAlign- ]- (sz,ai) <- triple- return $ \dl -> dl { typeLayouts = Map.insert (at,sz) ai (typeLayouts dl) },- do - char 'n'- ns <- num `sepBy` (char ':')- return $ \dl -> dl { nativeSizes = Just (Set.fromList ns) }- ]- in - case parse (parseSpec `sepBy` (char '-')) "" s of- Left _ -> error $ "ill formed data layout: " ++ show s- Right fs -> Just $ foldr ($) defaultDataLayout fs--
− test/LLVM/General/Test/DataLayout.hs
@@ -1,80 +0,0 @@-module LLVM.General.Test.DataLayout where--import Test.Framework-import Test.Framework.Providers.HUnit-import Test.HUnit--import Data.Maybe-import qualified Data.Set as Set-import qualified Data.Map as Map--import LLVM.General.AST-import LLVM.General.AST.DataLayout-import LLVM.General.AST.AddrSpace-import LLVM.General.DataLayout--tests = testGroup "DataLayout" [- testCase name $ do- (dataLayoutToString astDl, parseDataLayout strDl) @?= (strDl, Just astDl)- | (name, astDl, strDl) <- [- ("little-endian", defaultDataLayout { endianness = Just LittleEndian }, "e"),- ("big-endian", defaultDataLayout { endianness = Just BigEndian }, "E"),- ("native", defaultDataLayout { nativeSizes = Just (Set.fromList [8,32]) }, "n8:32"),- (- "no pref",- defaultDataLayout {- pointerLayouts = - Map.singleton- (AddrSpace 0) - (- 8,- AlignmentInfo {- abiAlignment = 64,- preferredAlignment = Nothing- }- )- },- "p:8:64"- ), (- "no pref",- defaultDataLayout {- pointerLayouts = - Map.singleton- (AddrSpace 1) - (- 8,- AlignmentInfo {- abiAlignment = 32,- preferredAlignment = Just 64- }- )- },- "p1:8:32:64"- ), (- "big",- DataLayout {- endianness = Just LittleEndian,- stackAlignment = Just 128,- pointerLayouts = Map.fromList [- (AddrSpace 0, (64, AlignmentInfo {abiAlignment = 64, preferredAlignment = Just 64}))- ],- typeLayouts = Map.fromList [- ((IntegerAlign, 1), AlignmentInfo {abiAlignment = 8, preferredAlignment = Just 8}),- ((IntegerAlign, 8), AlignmentInfo {abiAlignment = 8, preferredAlignment = Just 8}),- ((IntegerAlign, 16), AlignmentInfo {abiAlignment = 16, preferredAlignment = Just 16}),- ((IntegerAlign, 32), AlignmentInfo {abiAlignment = 32, preferredAlignment = Just 32}),- ((IntegerAlign, 64), AlignmentInfo {abiAlignment = 64, preferredAlignment = Just 64}),- ((VectorAlign, 64), AlignmentInfo {abiAlignment = 64, preferredAlignment = Just 64}),- ((VectorAlign, 128), AlignmentInfo {abiAlignment = 128, preferredAlignment = Just 128}),- ((FloatAlign, 32), AlignmentInfo {abiAlignment = 32, preferredAlignment = Just 32}),- ((FloatAlign, 64), AlignmentInfo {abiAlignment = 64, preferredAlignment = Just 64}),- ((FloatAlign, 80), AlignmentInfo {abiAlignment = 128, preferredAlignment = Just 128}),- ((AggregateAlign, 0), AlignmentInfo {abiAlignment = 0, preferredAlignment = Just 64}),- ((StackAlign, 0), AlignmentInfo {abiAlignment = 64, preferredAlignment = Just 64})- ],- nativeSizes = Just (Set.fromList [8,16,32,64])- },- "e-S128-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-v64:64:64-v128:128:128-f32:32:32-f64:64:64-f80:128:128-a0:0:64-s0:64:64-n8:16:32:64"- )- ]- ]
test/LLVM/General/Test/PrettyPrint.hs view
@@ -18,7 +18,7 @@ GlobalDefinition $ Function L.External V.Default CC.C [] (IntegerType 32) (Name "foo") ([ Parameter (IntegerType 32) (Name "x") [] ],False)- [] Nothing 0 Nothing+ [] Nothing 0 [ BasicBlock (UnName 0) [ UnName 1 := Mul {@@ -53,7 +53,6 @@ \ A.G.functionAttributes = [],\n\ \ A.G.section = Nothing,\n\ \ A.G.alignment = 0,\n\- \ A.G.garbageCollectorName = Nothing,\n\ \ A.G.basicBlocks = [\n\ \ A.G.BasicBlock (A.UnName 0) [\n\ \ A.UnName 1 A.:= A.Mul {\n\