module LLVM.FFI.Transforms.PassManagerBuilder where
import qualified LLVM.FFI.Core as LLVM
import LLVM.FFI.Core (PassManagerRef)
import qualified Foreign.C.Types as C
import Foreign.Ptr (Ptr)
import Data.Typeable (Typeable)
type CUInt = C.CUInt
data PassManagerBuilder
deriving (Typeable)
type PassManagerBuilderRef = Ptr PassManagerBuilder
foreign import ccall unsafe "LLVMPassManagerBuilderCreate" create
:: IO PassManagerBuilderRef
foreign import ccall unsafe "LLVMPassManagerBuilderDispose" dispose
:: PassManagerBuilderRef -> IO ()
foreign import ccall unsafe "LLVMPassManagerBuilderSetOptLevel" setOptLevel
:: PassManagerBuilderRef -> CUInt -> IO ()
foreign import ccall unsafe "LLVMPassManagerBuilderSetSizeLevel" setSizeLevel
:: PassManagerBuilderRef -> CUInt -> IO ()
foreign import ccall unsafe "LLVMPassManagerBuilderSetDisableUnitAtATime" setDisableUnitAtATime
:: PassManagerBuilderRef -> LLVM.Bool -> IO ()
foreign import ccall unsafe "LLVMPassManagerBuilderSetDisableUnrollLoops" setDisableUnrollLoops
:: PassManagerBuilderRef -> LLVM.Bool -> IO ()
foreign import ccall unsafe "LLVMPassManagerBuilderSetDisableSimplifyLibCalls" setDisableSimplifyLibCalls
:: PassManagerBuilderRef -> LLVM.Bool -> IO ()
foreign import ccall unsafe "LLVMPassManagerBuilderUseInlinerWithThreshold" useInlinerWithThreshold
:: PassManagerBuilderRef -> CUInt -> IO ()
foreign import ccall unsafe "LLVMPassManagerBuilderPopulateFunctionPassManager" populateFunctionPassManager
:: PassManagerBuilderRef -> PassManagerRef -> IO ()
foreign import ccall unsafe "LLVMPassManagerBuilderPopulateModulePassManager" populateModulePassManager
:: PassManagerBuilderRef -> PassManagerRef -> IO ()
foreign import ccall unsafe "LLVMPassManagerBuilderPopulateLTOPassManager" populateLTOPassManager
:: PassManagerBuilderRef -> PassManagerRef -> LLVM.Bool -> LLVM.Bool -> IO ()