llvm-hs-pure-4.0.0.0: test/LLVM/Test/DataLayout.hs
module LLVM.Test.DataLayout where
import Test.Tasty
import Test.Tasty.HUnit
import Control.Monad.Trans.Except
import Data.Maybe
import qualified Data.Set as Set
import qualified Data.Map as Map
import LLVM.AST
import LLVM.AST.DataLayout
import LLVM.AST.AddrSpace
import LLVM.DataLayout
ddl = defaultDataLayout LittleEndian
tests = testGroup "DataLayout" [
testCase name $ do
let Right parsed = runExcept $ parseDataLayout LittleEndian strDl
(dataLayoutToString astDl, parsed) @?= (strDl, Just astDl)
| (name, astDl, strDl) <- [
("little-endian", ddl, "e"),
("big-endian", defaultDataLayout BigEndian, "E"),
("native", ddl { nativeSizes = Just (Set.fromList [8,32]) }, "e-n8:32"),
(
"no pref",
ddl {
pointerLayouts =
Map.singleton
(AddrSpace 0)
(
8,
AlignmentInfo {
abiAlignment = 64,
preferredAlignment = Nothing
}
)
},
"e-p:8:64"
), (
"pref",
ddl {
pointerLayouts =
Map.insert (AddrSpace 1) (8, AlignmentInfo 32 (Just 64)) (pointerLayouts ddl)
},
"e-p1:8:32:64"
), (
"def",
ddl { pointerLayouts = Map.singleton (AddrSpace 0) (64, AlignmentInfo 64 (Just 64)) },
"e"
), (
"big",
ddl {
endianness = LittleEndian,
mangling = Just ELFMangling,
stackAlignment = Just 128,
pointerLayouts = Map.fromList [
(AddrSpace 0, (8, AlignmentInfo {abiAlignment = 8, preferredAlignment = Just 16}))
],
typeLayouts = Map.fromList [
((IntegerAlign, 1), AlignmentInfo {abiAlignment = 8, preferredAlignment = Just 256}),
((IntegerAlign, 8), AlignmentInfo {abiAlignment = 8, preferredAlignment = Just 256}),
((IntegerAlign, 16), AlignmentInfo {abiAlignment = 16, preferredAlignment = Just 256}),
((IntegerAlign, 32), AlignmentInfo {abiAlignment = 32, preferredAlignment = Just 256}),
((IntegerAlign, 64), AlignmentInfo {abiAlignment = 64, preferredAlignment = Just 256}),
((VectorAlign, 64), AlignmentInfo {abiAlignment = 64, preferredAlignment = Just 256}),
((VectorAlign, 128), AlignmentInfo {abiAlignment = 128, preferredAlignment = Just 256}),
((FloatAlign, 32), AlignmentInfo {abiAlignment = 32, preferredAlignment = Just 256}),
((FloatAlign, 64), AlignmentInfo {abiAlignment = 64, preferredAlignment = Just 256}),
((FloatAlign, 80), AlignmentInfo {abiAlignment = 128, preferredAlignment = Just 256})
] `Map.union` typeLayouts ddl,
aggregateLayout = AlignmentInfo {abiAlignment = 0, preferredAlignment = Just 256},
nativeSizes = Just (Set.fromList [8,16,32,64])
},
"e-m:e-p:8:8:16-i1:8:256-i8:8:256-i16:16:256-i32:32:256-i64:64:256-v64:64:256-v128:128:256-f32:32:256-f64:64:256-f80:128:256-a:0:256-n8:16:32:64-S128"
)
]
]