packages feed

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