diff options
Diffstat (limited to 'main.hs')
-rw-r--r-- | main.hs | 39 |
1 files changed, 29 insertions, 10 deletions
@@ -7,7 +7,9 @@ import System.Environment import System.Exit import qualified Data.ByteString as BS import qualified LLVM.General as General +import qualified LLVM.General.Analysis as General import qualified LLVM.General.Context as General +import qualified LLVM.General.PassManager as General import qualified LLVM.General.Target as General import Check @@ -58,14 +60,31 @@ main = do General.withContext $ \context -> do putStrLn "Calling withModuleFromAST:" assert $ General.withModuleFromAST context llvmMod $ \genmod -> do - putStrLn "Calling moduleLLVMAssembly:" - llvmasm <- General.moduleLLVMAssembly genmod - putStr llvmasm - putStrLn "" - assert $ General.withHostTargetMachine $ \machine -> do - General.getTargetMachineTriple machine >>= putStrLn + putStrLn "Calling withPassManager:" + General.withPassManager (General.defaultCuratedPassSetSpec {General.optLevel = Just 1}) $ \pm -> do + putStrLn "Calling moduleLLVMAssembly:" + llvmasm1 <- General.moduleLLVMAssembly genmod + putStr llvmasm1 putStrLn "" - assert (General.moduleTargetAssembly machine genmod) - >>= putStr - bs <- assert $ General.moduleObject machine genmod - BS.writeFile "output_gen.o" bs + + putStrLn "Calling verify:" + res <- runExceptT (General.verify genmod) + either die return res + + putStrLn "Calling runPassManager:" + modified <- General.runPassManager pm genmod + if modified + then putStrLn "Pass manager modified the module" + else putStrLn "Pass manager had no effect on the module" + + putStrLn "Calling moduleLLVMAssembly:" + llvmasm <- General.moduleLLVMAssembly genmod + putStr llvmasm + putStrLn "" + assert $ General.withHostTargetMachine $ \machine -> do + General.getTargetMachineTriple machine >>= putStrLn + putStrLn "" + assert (General.moduleTargetAssembly machine genmod) + >>= putStr + bs <- assert $ General.moduleObject machine genmod + BS.writeFile "output_gen.o" bs |