summaryrefslogtreecommitdiff
path: root/main.hs
diff options
context:
space:
mode:
Diffstat (limited to 'main.hs')
-rw-r--r--main.hs39
1 files changed, 29 insertions, 10 deletions
diff --git a/main.hs b/main.hs
index ad9627b..ca953a8 100644
--- a/main.hs
+++ b/main.hs
@@ -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