llvm-general-pure-3.3.7.2: test/LLVM/General/Test/DataLayout.hs
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"
)
]
]