Skip to content

Commit

Permalink
Parse target triples
Browse files Browse the repository at this point in the history
  • Loading branch information
langston-barrett committed Sep 28, 2022
1 parent d605c01 commit e2dfe38
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 2 deletions.
10 changes: 8 additions & 2 deletions src/Data/LLVM/BitCode/IR/Module.hs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ import Data.LLVM.BitCode.Match
import Data.LLVM.BitCode.Parse
import Data.LLVM.BitCode.Record
import Text.LLVM.AST
import Text.LLVM.Triple.AST (TargetTriple)
import Text.LLVM.Triple.Parse (parseTriple)

import qualified Codec.Binary.UTF8.String as UTF8 (decode)
import Control.Monad (foldM,guard,when,forM_)
Expand All @@ -34,6 +36,7 @@ data PartialModule = PartialModule
, partialGlobals :: GlobalList
, partialDefines :: DefineList
, partialDeclares :: DeclareList
, partialTriple :: TargetTriple
, partialDataLayout :: DataLayout
, partialInlineAsm :: InlineAsm
, partialComdat :: !(Seq (String,SelectionKind))
Expand All @@ -51,6 +54,7 @@ emptyPartialModule = PartialModule
, partialGlobals = mempty
, partialDefines = mempty
, partialDeclares = mempty
, partialTriple = mempty
, partialDataLayout = mempty
, partialInlineAsm = mempty
, partialAliasIx = 0
Expand All @@ -75,6 +79,7 @@ finalizeModule pm = label "finalizeModule" $ do
defines <- T.mapM (finalizePartialDefine lkp) (partialDefines pm)
return emptyModule
{ modSourceName = partialSourceName pm
, modTriple = partialTriple pm
, modDataLayout = partialDataLayout pm
, modNamedMd = F.toList (partialNamedMd pm)
, modUnnamedMd = sortOn umIndex (F.toList unnamed)
Expand Down Expand Up @@ -167,9 +172,10 @@ parseModuleBlockEntry pm (valueSymtabBlockId -> Just _es) = do
-- MODULE_BLOCK
return pm

parseModuleBlockEntry pm (moduleCodeTriple -> Just _) = do
parseModuleBlockEntry pm (moduleCodeTriple -> Just r) = do
-- MODULE_CODE_TRIPLE
return pm
triple <- UTF8.decode <$> parseFields r 0 char
return (pm { partialTriple = parseTriple triple })

parseModuleBlockEntry pm (moduleCodeDatalayout -> Just r) = do
-- MODULE_CODE_DATALAYOUT
Expand Down
9 changes: 9 additions & 0 deletions unit-test/Tests/Instances.hs
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,19 @@ import Test.QuickCheck.Arbitrary (Arbitrary(..))

import Data.LLVM.Internal
import Text.LLVM.AST
import qualified Text.LLVM.Triple.AST as Triple

-------------------------------------------------------------------------
-- ** llvm-pretty

instance Arbitrary Triple.Arch where arbitrary = genericArbitrary uniform
instance Arbitrary Triple.Environment where arbitrary = genericArbitrary uniform
instance Arbitrary Triple.OS where arbitrary = genericArbitrary uniform
instance Arbitrary Triple.ObjectFormat where arbitrary = genericArbitrary uniform
instance Arbitrary Triple.SubArch where arbitrary = genericArbitrary uniform
instance Arbitrary Triple.TargetTriple where arbitrary = genericArbitrary uniform
instance Arbitrary Triple.Vendor where arbitrary = genericArbitrary uniform

instance Arbitrary Module where arbitrary = genericArbitrary uniform
instance Arbitrary NamedMd where arbitrary = genericArbitrary uniform
instance Arbitrary UnnamedMd where arbitrary = genericArbitrary uniform
Expand Down

0 comments on commit e2dfe38

Please sign in to comment.