llvm-dsl-0.0: src/debug-on/LLVM/DSL/Dump.hs
{-# LANGUAGE EmptyDataDecls #-}
module LLVM.DSL.Dump (writer) where
import qualified LLVM.DSL.Debug.Counter as Counter
import qualified LLVM.Core as LLVM
import qualified Data.IORef as IORef
import System.IO.Unsafe (unsafePerformIO)
data BitCodeCnt
{- |
This is only for debugging purposes
and thus I felt free to use unsafePerformIO.
-}
counter :: IORef.IORef (Counter.T BitCodeCnt)
counter = unsafePerformIO Counter.new
bitcodeToFile :: String -> Counter.T ident -> String -> LLVM.Module -> IO ()
bitcodeToFile name cnt ext =
LLVM.writeBitcodeToFile
("llvm" ++ Counter.format 3 cnt ++ name ++ ext ++ ".bc")
writer :: String -> IO (String -> LLVM.Module -> IO ())
writer name = fmap (bitcodeToFile name) $ Counter.next counter