packages feed

llvm-hs 5.1.0 → 5.1.1

raw patch · 10 files changed

+255/−85 lines, 10 filesdep ~llvm-hs-purePVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: llvm-hs-pure

API changes (from Hackage documentation)

+ LLVM.Internal.FFI.LLVMCTypes: MCTargetOptionFlag :: CUInt -> MCTargetOptionFlag
+ LLVM.Internal.FFI.LLVMCTypes: instance Data.Data.Data LLVM.Internal.FFI.LLVMCTypes.MCTargetOptionFlag
+ LLVM.Internal.FFI.LLVMCTypes: instance GHC.Classes.Eq LLVM.Internal.FFI.LLVMCTypes.MCTargetOptionFlag
+ LLVM.Internal.FFI.LLVMCTypes: instance GHC.Generics.Generic LLVM.Internal.FFI.LLVMCTypes.MCTargetOptionFlag
+ LLVM.Internal.FFI.LLVMCTypes: instance GHC.Read.Read LLVM.Internal.FFI.LLVMCTypes.MCTargetOptionFlag
+ LLVM.Internal.FFI.LLVMCTypes: instance GHC.Show.Show LLVM.Internal.FFI.LLVMCTypes.MCTargetOptionFlag
+ LLVM.Internal.FFI.LLVMCTypes: mcTargetOptionFlagAsmVerbose :: MCTargetOptionFlag
+ LLVM.Internal.FFI.LLVMCTypes: mcTargetOptionFlagMCFatalWarnings :: MCTargetOptionFlag
+ LLVM.Internal.FFI.LLVMCTypes: mcTargetOptionFlagMCIncrementalLinkerCompatible :: MCTargetOptionFlag
+ LLVM.Internal.FFI.LLVMCTypes: mcTargetOptionFlagMCNoDeprecatedWarn :: MCTargetOptionFlag
+ LLVM.Internal.FFI.LLVMCTypes: mcTargetOptionFlagMCNoExecStack :: MCTargetOptionFlag
+ LLVM.Internal.FFI.LLVMCTypes: mcTargetOptionFlagMCNoWarn :: MCTargetOptionFlag
+ LLVM.Internal.FFI.LLVMCTypes: mcTargetOptionFlagMCPIECopyRelocations :: MCTargetOptionFlag
+ LLVM.Internal.FFI.LLVMCTypes: mcTargetOptionFlagMCRelaxAll :: MCTargetOptionFlag
+ LLVM.Internal.FFI.LLVMCTypes: mcTargetOptionFlagMCSaveTempLabels :: MCTargetOptionFlag
+ LLVM.Internal.FFI.LLVMCTypes: mcTargetOptionFlagMCUseDwarfDirectory :: MCTargetOptionFlag
+ LLVM.Internal.FFI.LLVMCTypes: mcTargetOptionFlagP :: QuasiQuoter
+ LLVM.Internal.FFI.LLVMCTypes: mcTargetOptionFlagPreserveAsmComments :: MCTargetOptionFlag
+ LLVM.Internal.FFI.LLVMCTypes: mcTargetOptionFlagSanitizeAddress :: MCTargetOptionFlag
+ LLVM.Internal.FFI.LLVMCTypes: mcTargetOptionFlagShowMCEncoding :: MCTargetOptionFlag
+ LLVM.Internal.FFI.LLVMCTypes: mcTargetOptionFlagShowMCInst :: MCTargetOptionFlag
+ LLVM.Internal.FFI.LLVMCTypes: newtype MCTargetOptionFlag
+ LLVM.Internal.FFI.Target: data MCTargetOptions
+ LLVM.Internal.FFI.Target: getMCTargetOptionsFlag :: Ptr MCTargetOptions -> MCTargetOptionFlag -> IO LLVMBool
+ LLVM.Internal.FFI.Target: machineCodeOptions :: Ptr TargetOptions -> IO (Ptr MCTargetOptions)
+ LLVM.Internal.FFI.Target: setMCTargetOptionFlag :: Ptr MCTargetOptions -> MCTargetOptionFlag -> LLVMBool -> IO ()
+ LLVM.Internal.Target: MCTargetOptions :: (Ptr MCTargetOptions) -> MCTargetOptions
+ LLVM.Internal.Target: machineCodeOptions :: TargetOptions -> IO MCTargetOptions
+ LLVM.Internal.Target: newtype MCTargetOptions
+ LLVM.Internal.Target: peekMachineCodeOptions :: MCTargetOptions -> IO MachineCodeOptions
+ LLVM.Internal.Target: pokeMachineCodeOptions :: MachineCodeOptions -> MCTargetOptions -> IO ()
+ LLVM.Target.Options: MachineCodeOptions :: Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> MachineCodeOptions
+ LLVM.Target.Options: [fatalWarnings] :: MachineCodeOptions -> Bool
+ LLVM.Target.Options: [incrementalLinkerCompatible] :: MachineCodeOptions -> Bool
+ LLVM.Target.Options: [machineCodeOptions] :: Options -> MachineCodeOptions
+ LLVM.Target.Options: [noDeprecatedWarning] :: MachineCodeOptions -> Bool
+ LLVM.Target.Options: [noExecutableStack] :: MachineCodeOptions -> Bool
+ LLVM.Target.Options: [noWarnings] :: MachineCodeOptions -> Bool
+ LLVM.Target.Options: [pieCopyRelocations] :: MachineCodeOptions -> Bool
+ LLVM.Target.Options: [preserveComentsInAssembly] :: MachineCodeOptions -> Bool
+ LLVM.Target.Options: [relaxAll] :: MachineCodeOptions -> Bool
+ LLVM.Target.Options: [sanitizeAddresses] :: MachineCodeOptions -> Bool
+ LLVM.Target.Options: [saveTemporaryLabels] :: MachineCodeOptions -> Bool
+ LLVM.Target.Options: [showMachineCodeEncoding] :: MachineCodeOptions -> Bool
+ LLVM.Target.Options: [showMachineCodeInstructions] :: MachineCodeOptions -> Bool
+ LLVM.Target.Options: [useDwarfDirectory] :: MachineCodeOptions -> Bool
+ LLVM.Target.Options: [verboseAssembly] :: MachineCodeOptions -> Bool
+ LLVM.Target.Options: data MachineCodeOptions
+ LLVM.Target.Options: instance GHC.Classes.Eq LLVM.Target.Options.MachineCodeOptions
+ LLVM.Target.Options: instance GHC.Classes.Ord LLVM.Target.Options.MachineCodeOptions
+ LLVM.Target.Options: instance GHC.Read.Read LLVM.Target.Options.MachineCodeOptions
+ LLVM.Target.Options: instance GHC.Show.Show LLVM.Target.Options.MachineCodeOptions
- LLVM.Target.Options: Options :: Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> DebugCompressionType -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Word32 -> FloatABI -> FloatingPointOperationFusionMode -> ThreadModel -> EABIVersion -> DebuggerKind -> FloatingPointDenormalMode -> ExceptionHandling -> Options
+ LLVM.Target.Options: Options :: Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> DebugCompressionType -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Word32 -> FloatABI -> FloatingPointOperationFusionMode -> ThreadModel -> EABIVersion -> DebuggerKind -> FloatingPointDenormalMode -> ExceptionHandling -> MachineCodeOptions -> Options

Files

CHANGELOG.md view
@@ -1,3 +1,8 @@+## 5.1.1 (2017-12-26)++* Fix argument order in `LLVM_Hs_CreateTargetMachine`. This affects `withTargetMachine` and `withHostTargetMachine`.+* Add support for `MCTargetOptions`.+ ## 5.1.0 (2017-10-12)  ### Bugfixes
llvm-hs.cabal view
@@ -1,5 +1,5 @@ name: llvm-hs-version: 5.1.0+version: 5.1.1 license: BSD3 license-file: LICENSE author: Anthony Cowley, Stephen Diehl, Moritz Kiefer <moritz.kiefer@purelyfunctional.org>, Benjamin S. Scarlet
src/LLVM/Internal/FFI/LLVMCTypes.hsc view
@@ -250,6 +250,11 @@ #define TOF_Rec(n) { #n, LLVM_Hs_TargetOptionFlag_ ## n }, #{inject TARGET_OPTION_FLAG, TargetOptionFlag, TargetOptionFlag, targetOptionFlag, TOF_Rec} +newtype MCTargetOptionFlag = MCTargetOptionFlag CUInt+  deriving (Eq, Read, Show, Typeable, Data, Generic)+#define MCTOF_Rec(n) { #n, LLVM_Hs_MCTargetOptionFlag_ ## n },+#{inject MC_TARGET_OPTION_FLAG, MCTargetOptionFlag, MCTargetOptionFlag, mcTargetOptionFlag, MCTOF_Rec}+ newtype DebugCompressionType = DebugCompressionType CUInt   deriving (Eq, Read, Show, Typeable, Data, Generic) #define DCT_Rec(n) { #n, LLVM_Hs_DebugCompressionType_ ## n },
src/LLVM/Internal/FFI/Target.h view
@@ -1,58 +1,80 @@ #ifndef __LLVM_INTERNAL_FFI__TARGET__H__ #define __LLVM_INTERNAL_FFI__TARGET__H__ -#define LLVM_HS_FOR_EACH_RELOC_MODEL(macro)	\-	macro(Default, Default)													\-	macro(Static, Static)														\-	macro(PIC, PIC_)																\-	macro(DynamicNoPic, DynamicNoPIC)+#define LLVM_HS_FOR_EACH_RELOC_MODEL(macro) \+  macro(Default, Default)                         \+  macro(Static, Static)                           \+  macro(PIC, PIC_)                                \+  macro(DynamicNoPic, DynamicNoPIC)  #define LLVM_HS_FOR_EACH_CODE_MODEL(macro) \-	macro(Default)																\-	macro(JITDefault)															\-	macro(Small)																	\-	macro(Kernel)																	\-	macro(Medium)																	\-	macro(Large)+  macro(Default)                                \+  macro(JITDefault)                             \+  macro(Small)                                  \+  macro(Kernel)                                 \+  macro(Medium)                                 \+  macro(Large)  #define LLVM_HS_FOR_EACH_CODE_GEN_OPT_LEVEL(macro) \-	macro(None)																						\-	macro(Less)																						\-	macro(Default)																				\-	macro(Aggressive)+  macro(None)                                           \+  macro(Less)                                           \+  macro(Default)                                        \+  macro(Aggressive) -#define LLVM_HS_FOR_EACH_CODE_GEN_FILE_TYPE(macro)	\-	macro(Assembly)                                       \-	macro(Object)+#define LLVM_HS_FOR_EACH_CODE_GEN_FILE_TYPE(macro)  \+  macro(Assembly)                                       \+  macro(Object) -#define LLVM_HS_FOR_EACH_TARGET_OPTION_FLAG(macro)	\-	macro(PrintMachineCode)																\-	macro(UnsafeFPMath)																		\-	macro(NoInfsFPMath)																		\-	macro(NoNaNsFPMath)																		\-	macro(NoTrappingFPMath)                               \-	macro(NoSignedZerosFPMath)                            \-	macro(HonorSignDependentRoundingFPMathOption)					\-	macro(NoZerosInBSS)																		\-	macro(GuaranteedTailCallOpt)													\-	macro(StackSymbolOrdering)                            \-	macro(EnableFastISel)																	\-	macro(UseInitArray)																		\-	macro(DisableIntegratedAS)														\-	macro(RelaxELFRelocations)                            \-	macro(FunctionSections)                               \-	macro(DataSections)                                   \-	macro(UniqueSectionNames)                             \-	macro(TrapUnreachable)                                \-	macro(EmulatedTLS)                                    \-	macro(EnableIPRA)+#define LLVM_HS_FOR_EACH_TARGET_OPTION_FLAG(macro)  \+  macro(PrintMachineCode)                               \+  macro(UnsafeFPMath)                                   \+  macro(NoInfsFPMath)                                   \+  macro(NoNaNsFPMath)                                   \+  macro(NoTrappingFPMath)                               \+  macro(NoSignedZerosFPMath)                            \+  macro(HonorSignDependentRoundingFPMathOption)         \+  macro(NoZerosInBSS)                                   \+  macro(GuaranteedTailCallOpt)                          \+  macro(StackSymbolOrdering)                            \+  macro(EnableFastISel)                                 \+  macro(UseInitArray)                                   \+  macro(DisableIntegratedAS)                            \+  macro(RelaxELFRelocations)                            \+  macro(FunctionSections)                               \+  macro(DataSections)                                   \+  macro(UniqueSectionNames)                             \+  macro(TrapUnreachable)                                \+  macro(EmulatedTLS)                                    \+  macro(EnableIPRA)  typedef enum { #define ENUM_CASE(n) LLVM_Hs_TargetOptionFlag_ ## n,-	LLVM_HS_FOR_EACH_TARGET_OPTION_FLAG(ENUM_CASE)+  LLVM_HS_FOR_EACH_TARGET_OPTION_FLAG(ENUM_CASE) #undef ENUM_CASE } LLVM_Hs_TargetOptionFlag; +#define LLVM_HS_FOR_EACH_MC_TARGET_OPTION_FLAG(macro)  \+  macro(SanitizeAddress)                                \+  macro(MCRelaxAll)                                     \+  macro(MCNoExecStack)                                  \+  macro(MCFatalWarnings)                                \+  macro(MCNoWarn)                                       \+  macro(MCNoDeprecatedWarn)                             \+  macro(MCSaveTempLabels)                               \+  macro(MCUseDwarfDirectory)                            \+  macro(MCIncrementalLinkerCompatible)                  \+  macro(MCPIECopyRelocations)                           \+  macro(ShowMCEncoding)                                 \+  macro(ShowMCInst)                                     \+  macro(AsmVerbose)                                     \+  macro(PreserveAsmComments)++typedef enum {+#define ENUM_CASE(n) LLVM_Hs_MCTargetOptionFlag_ ## n,+  LLVM_HS_FOR_EACH_MC_TARGET_OPTION_FLAG(ENUM_CASE)+#undef ENUM_CASE+} LLVM_Hs_MCTargetOptionFlag;+ #define LLVM_HS_FOR_EACH_DEBUG_COMPRESSION_TYPE(macro) \     macro(None) \     macro(GNU) \@@ -64,84 +86,84 @@ #undef ENUM_CASE } LLVM_Hs_DebugCompressionType; -#define LLVM_HS_FOR_EACH_FLOAT_ABI(macro)	\-	macro(Default)																\-	macro(Soft)																		\-	macro(Hard)+#define LLVM_HS_FOR_EACH_FLOAT_ABI(macro) \+  macro(Default)                                \+  macro(Soft)                                   \+  macro(Hard)  typedef enum { #define ENUM_CASE(n) LLVM_Hs_FloatABI_ ## n,-	LLVM_HS_FOR_EACH_FLOAT_ABI(ENUM_CASE)+  LLVM_HS_FOR_EACH_FLOAT_ABI(ENUM_CASE) #undef ENUM_CASE } LLVM_Hs_FloatABI; -#define LLVM_HS_FOR_EACH_FP_OP_FUSION_MODE(macro)	\-	macro(Fast)																						\-	macro(Standard)																				\-	macro(Strict)+#define LLVM_HS_FOR_EACH_FP_OP_FUSION_MODE(macro) \+  macro(Fast)                                           \+  macro(Standard)                                       \+  macro(Strict)  typedef enum { #define ENUM_CASE(n) LLVM_Hs_FPOpFusionMode_ ## n,-	LLVM_HS_FOR_EACH_FP_OP_FUSION_MODE(ENUM_CASE)+  LLVM_HS_FOR_EACH_FP_OP_FUSION_MODE(ENUM_CASE) #undef ENUM_CASE } LLVM_Hs_FPOpFusionMode;  #define LLVM_HS_FOR_EACH_THREAD_MODEL(macro) \-	macro(POSIX) \-	macro(Single)+  macro(POSIX) \+  macro(Single)  typedef enum { #define ENUM_CASE(n) LLVM_Hs_ThreadModel_ ## n,-	LLVM_HS_FOR_EACH_THREAD_MODEL(ENUM_CASE)+  LLVM_HS_FOR_EACH_THREAD_MODEL(ENUM_CASE) #undef ENUM_CASE } LLVM_Hs_ThreadModel;  #define LLVM_HS_FOR_EACH_EABI(macro) \-	macro(Unknown)																				\-	macro(Default)																				\-	macro(EABI4)																					\-	macro(EABI5)																					\-	macro(GNU)+  macro(Unknown)                                        \+  macro(Default)                                        \+  macro(EABI4)                                          \+  macro(EABI5)                                          \+  macro(GNU)  typedef enum { #define ENUM_CASE(n) LLVM_Hs_EABI_ ## n,-	LLVM_HS_FOR_EACH_EABI(ENUM_CASE)+  LLVM_HS_FOR_EACH_EABI(ENUM_CASE) #undef ENUM_CASE } LLVM_Hs_EABI;  #define LLVM_HS_FOR_EACH_DEBUGGER_KIND(macro) \-	macro(Default)																				\-	macro(GDB)																						\-	macro(LLDB)																						\-	macro(SCE)+  macro(Default)                                        \+  macro(GDB)                                            \+  macro(LLDB)                                           \+  macro(SCE)  typedef enum { #define ENUM_CASE(n) LLVM_Hs_DebuggerKind_ ## n,-	LLVM_HS_FOR_EACH_DEBUGGER_KIND(ENUM_CASE)+  LLVM_HS_FOR_EACH_DEBUGGER_KIND(ENUM_CASE) #undef ENUM_CASE } LLVM_Hs_DebuggerKind;  #define LLVM_HS_FOR_EACH_FP_DENORMAL_MODE(macro) \-	macro(IEEE)																						\-	macro(PreserveSign)																		\-	macro(PositiveZero)+  macro(IEEE)                                           \+  macro(PreserveSign)                                   \+  macro(PositiveZero)  typedef enum { #define ENUM_CASE(n) LLVM_Hs_FPDenormalMode_ ## n,-	LLVM_HS_FOR_EACH_FP_DENORMAL_MODE(ENUM_CASE)+  LLVM_HS_FOR_EACH_FP_DENORMAL_MODE(ENUM_CASE) #undef ENUM_CASE } LLVM_Hs_FPDenormalMode;  #define LLVM_HS_FOR_EACH_EXCEPTION_HANDLING(macro) \-	macro(None)																						\-	macro(DwarfCFI)																				\-	macro(SjLj)																						\-	macro(ARM)																						\-	macro(WinEH)+  macro(None)                                           \+  macro(DwarfCFI)                                       \+  macro(SjLj)                                           \+  macro(ARM)                                            \+  macro(WinEH)  typedef enum { #define ENUM_CASE(n) LLVM_Hs_ExceptionHandling_ ## n,-	LLVM_HS_FOR_EACH_EXCEPTION_HANDLING(ENUM_CASE)+  LLVM_HS_FOR_EACH_EXCEPTION_HANDLING(ENUM_CASE) #undef ENUM_CASE } LLVM_Hs_ExceptionHandling; 
src/LLVM/Internal/FFI/Target.hs view
@@ -24,6 +24,7 @@     CString -> CString -> Ptr (OwnerTransfered CString) -> Ptr (OwnerTransfered CString) -> IO (Ptr Target)  data TargetOptions+data MCTargetOptions  foreign import ccall unsafe "LLVM_Hs_CreateTargetOptions" createTargetOptions ::   IO (Ptr TargetOptions)@@ -34,6 +35,12 @@ foreign import ccall unsafe "LLVM_Hs_GetTargetOptionFlag" getTargetOptionsFlag ::   Ptr TargetOptions -> TargetOptionFlag -> IO LLVMBool +foreign import ccall unsafe "LLVM_Hs_SetMCTargetOptionFlag" setMCTargetOptionFlag ::+  Ptr MCTargetOptions -> MCTargetOptionFlag -> LLVMBool -> IO ()++foreign import ccall unsafe "LLVM_Hs_GetMCTargetOptionFlag" getMCTargetOptionsFlag ::+  Ptr MCTargetOptions -> MCTargetOptionFlag -> IO LLVMBool+ foreign import ccall unsafe "LLVM_Hs_GetCompressDebugSections" getCompressDebugSections ::   Ptr TargetOptions -> IO DebugCompressionType @@ -109,6 +116,9 @@  foreign import ccall unsafe "LLVM_Hs_TargetMachineOptions" targetMachineOptions ::   Ptr TargetMachine -> IO (Ptr TargetOptions)++foreign import ccall unsafe "LLVM_Hs_MCTargetOptions" machineCodeOptions ::+  Ptr TargetOptions -> IO (Ptr MCTargetOptions)  foreign import ccall unsafe "LLVM_Hs_TargetMachineEmit" targetMachineEmit ::   Ptr TargetMachine
src/LLVM/Internal/FFI/TargetC.cpp view
@@ -1,4 +1,5 @@ #define __STDC_LIMIT_MACROS+#include "LLVM/Internal/FFI/ErrorHandling.hpp" #include "LLVM/Internal/FFI/LibFunc.h" #include "LLVM/Internal/FFI/Target.h" #include "LLVM/Internal/FFI/Target.hpp"@@ -269,6 +270,18 @@     } } +void LLVM_Hs_SetMCTargetOptionFlag(MCTargetOptions *to, LLVM_Hs_MCTargetOptionFlag f,+                                   unsigned v) {+    switch (f) {+#define ENUM_CASE(op)                                                          \+    case LLVM_Hs_MCTargetOptionFlag_##op:                                      \+        to->op = v ? 1 : 0;                                                    \+        break;+        LLVM_HS_FOR_EACH_MC_TARGET_OPTION_FLAG(ENUM_CASE)+#undef ENUM_CASE+    }+}+ static llvm::DebugCompressionType unwrap(LLVM_Hs_DebugCompressionType compressionType) {     switch (compressionType) {@@ -278,7 +291,7 @@         LLVM_HS_FOR_EACH_DEBUG_COMPRESSION_TYPE(ENUM_CASE) #undef ENUM_CASE     default:-        assert(false && "Unknown debug compression type");+        reportFatalError("Unknown debug compression type");         return llvm::DebugCompressionType::None;     } }@@ -292,7 +305,7 @@         LLVM_HS_FOR_EACH_DEBUG_COMPRESSION_TYPE(ENUM_CASE) #undef ENUM_CASE     default: {-        assert(false && "Unknown debug compression type");+        reportFatalError("Unknown debug compression type");         return LLVM_Hs_DebugCompressionType_None;     }     }@@ -317,11 +330,25 @@         LLVM_HS_FOR_EACH_TARGET_OPTION_FLAG(ENUM_CASE) #undef ENUM_CASE     default:-        assert(false && "Unknown target option flag");+        reportFatalError("Unknown target option flag");         return 0;     } } +unsigned LLVM_Hs_GetMCTargetOptionFlag(MCTargetOptions *to,+                                       LLVM_Hs_MCTargetOptionFlag f) {+    switch (f) {+#define ENUM_CASE(op)                                                          \+    case LLVM_Hs_MCTargetOptionFlag_##op:                                      \+        return to->op;+        LLVM_HS_FOR_EACH_MC_TARGET_OPTION_FLAG(ENUM_CASE)+#undef ENUM_CASE+    default:+        reportFatalError("Unknown machine code target option flag");+        return 0;+    }+}+ void LLVM_Hs_SetStackAlignmentOverride(TargetOptions *to, unsigned v) {     to->StackAlignmentOverride = v; }@@ -470,8 +497,8 @@ LLVMTargetMachineRef LLVM_Hs_CreateTargetMachine(LLVMTargetRef T, const char *Triple,                             const char *CPU, const char *Features,-                            TargetOptions *TO, LLVMCodeGenOptLevel Level,-                            LLVMRelocMode Reloc, LLVMCodeModel CodeModel) {+                            TargetOptions *TO, LLVMRelocMode Reloc,+                            LLVMCodeModel CodeModel, LLVMCodeGenOptLevel Level) {     Optional<Reloc::Model> RM;     switch (Reloc) {     case LLVMRelocStatic:@@ -511,6 +538,10 @@  TargetOptions *LLVM_Hs_TargetMachineOptions(LLVMTargetMachineRef TM) {     return &unwrap(TM)->Options;+}++MCTargetOptions *LLVM_Hs_MCTargetOptions(TargetOptions *to) {+    return &to->MCOptions; }  // This is identical to LLVMTargetMachineEmit but LLVM doesn’t expose this
src/LLVM/Internal/Target.hs view
@@ -158,13 +158,15 @@ -- | <http://llvm.org/doxygen/classllvm_1_1TargetOptions.html> newtype TargetOptions = TargetOptions (Ptr FFI.TargetOptions) +newtype MCTargetOptions = MCTargetOptions (Ptr FFI.MCTargetOptions)+ -- | bracket creation and destruction of a 'TargetOptions' object withTargetOptions :: (TargetOptions -> IO a) -> IO a withTargetOptions = bracket FFI.createTargetOptions FFI.disposeTargetOptions . (. TargetOptions)  -- | set all target options pokeTargetOptions :: TO.Options -> TargetOptions -> IO ()-pokeTargetOptions hOpts (TargetOptions cOpts) = do+pokeTargetOptions hOpts opts@(TargetOptions cOpts) = do   mapM_ (\(c, ha) -> FFI.setTargetOptionFlag cOpts c =<< encodeM (ha hOpts)) [     (FFI.targetOptionFlagPrintMachineCode, TO.printMachineCode),     (FFI.targetOptionFlagUnsafeFPMath, TO.unsafeFloatingPointMath),@@ -196,10 +198,30 @@   FFI.setDebuggerTuning cOpts =<< encodeM (TO.debuggerTuning hOpts)   FFI.setFPDenormalMode cOpts =<< encodeM (TO.floatingPointDenormalMode hOpts)   FFI.setExceptionModel cOpts =<< encodeM (TO.exceptionModel hOpts)+  pokeMachineCodeOptions (TO.machineCodeOptions hOpts) =<< machineCodeOptions opts +pokeMachineCodeOptions :: TO.MachineCodeOptions -> MCTargetOptions -> IO ()+pokeMachineCodeOptions hOpts (MCTargetOptions cOpts) =+  mapM_ (\(c, ha) -> FFI.setMCTargetOptionFlag cOpts c =<< encodeM (ha hOpts)) [+    (FFI.mcTargetOptionFlagSanitizeAddress, TO.sanitizeAddresses),+    (FFI.mcTargetOptionFlagMCRelaxAll, TO.relaxAll),+    (FFI.mcTargetOptionFlagMCNoExecStack, TO.noExecutableStack),+    (FFI.mcTargetOptionFlagMCFatalWarnings, TO.fatalWarnings),+    (FFI.mcTargetOptionFlagMCNoWarn, TO.noWarnings),+    (FFI.mcTargetOptionFlagMCNoDeprecatedWarn, TO.noDeprecatedWarning),+    (FFI.mcTargetOptionFlagMCSaveTempLabels, TO.saveTemporaryLabels),+    (FFI.mcTargetOptionFlagMCUseDwarfDirectory, TO.useDwarfDirectory),+    (FFI.mcTargetOptionFlagMCIncrementalLinkerCompatible, TO.incrementalLinkerCompatible),+    (FFI.mcTargetOptionFlagMCPIECopyRelocations, TO.pieCopyRelocations),+    (FFI.mcTargetOptionFlagShowMCEncoding, TO.showMachineCodeEncoding),+    (FFI.mcTargetOptionFlagShowMCInst, TO.showMachineCodeInstructions),+    (FFI.mcTargetOptionFlagAsmVerbose, TO.verboseAssembly),+    (FFI.mcTargetOptionFlagPreserveAsmComments, TO.preserveComentsInAssembly)+   ]+ -- | get all target options peekTargetOptions :: TargetOptions -> IO TO.Options-peekTargetOptions (TargetOptions tOpts) = do+peekTargetOptions opts@(TargetOptions tOpts) = do   let gof = decodeM <=< FFI.getTargetOptionsFlag tOpts   printMachineCode     <- gof FFI.targetOptionFlagPrintMachineCode@@ -250,8 +272,43 @@   debuggerTuning <- decodeM =<< FFI.getDebuggerTuning tOpts   floatingPointDenormalMode <- decodeM =<< FFI.getFPDenormalMode tOpts   exceptionModel <- decodeM =<< FFI.getExceptionModel tOpts+  machineCodeOptions <- peekMachineCodeOptions =<< machineCodeOptions opts   return TO.Options { .. } +-- | get all machine code options+peekMachineCodeOptions :: MCTargetOptions -> IO TO.MachineCodeOptions+peekMachineCodeOptions (MCTargetOptions tOpts) = do+  let gof = decodeM <=< FFI.getMCTargetOptionsFlag tOpts+  sanitizeAddresses+    <- gof FFI.mcTargetOptionFlagSanitizeAddress+  relaxAll+    <- gof FFI.mcTargetOptionFlagMCRelaxAll+  noExecutableStack+    <- gof FFI.mcTargetOptionFlagMCNoExecStack+  fatalWarnings+    <- gof FFI.mcTargetOptionFlagMCFatalWarnings+  noWarnings+    <- gof FFI.mcTargetOptionFlagMCNoWarn+  noDeprecatedWarning+    <- gof FFI.mcTargetOptionFlagMCNoDeprecatedWarn+  saveTemporaryLabels+    <- gof FFI.mcTargetOptionFlagMCSaveTempLabels+  useDwarfDirectory+    <- gof FFI.mcTargetOptionFlagMCUseDwarfDirectory+  incrementalLinkerCompatible+    <- gof FFI.mcTargetOptionFlagMCIncrementalLinkerCompatible+  pieCopyRelocations+    <- gof FFI.mcTargetOptionFlagMCPIECopyRelocations+  showMachineCodeEncoding+    <- gof FFI.mcTargetOptionFlagShowMCEncoding+  showMachineCodeInstructions+    <- gof FFI.mcTargetOptionFlagShowMCInst+  verboseAssembly+    <- gof FFI.mcTargetOptionFlagAsmVerbose+  preserveComentsInAssembly+    <- gof FFI.mcTargetOptionFlagPreserveAsmComments+  return TO.MachineCodeOptions { .. }+ -- | <http://llvm.org/doxygen/classllvm_1_1TargetMachine.html> newtype TargetMachine = TargetMachine (Ptr FFI.TargetMachine) @@ -298,6 +355,9 @@  targetMachineOptions :: TargetMachine -> IO TargetOptions targetMachineOptions (TargetMachine tm) = TargetOptions <$> FFI.targetMachineOptions tm++machineCodeOptions :: TargetOptions -> IO MCTargetOptions+machineCodeOptions (TargetOptions to) = MCTargetOptions <$> FFI.machineCodeOptions to  -- | <http://llvm.org/doxygen/classllvm_1_1TargetLowering.html> newtype TargetLowering = TargetLowering (Ptr FFI.TargetLowering)
src/LLVM/Target/Options.hs view
@@ -94,6 +94,26 @@   eabiVersion :: EABIVersion,   debuggerTuning :: DebuggerKind,   floatingPointDenormalMode :: FloatingPointDenormalMode,-  exceptionModel :: ExceptionHandling+  exceptionModel :: ExceptionHandling,+  machineCodeOptions :: MachineCodeOptions+  }+  deriving (Eq, Ord, Read, Show)++-- | <http://llvm.org/doxygen/classllvm_1_1MCTargetOptions.html>+data MachineCodeOptions = MachineCodeOptions {+  sanitizeAddresses :: Bool,+  relaxAll :: Bool,+  noExecutableStack :: Bool,+  fatalWarnings :: Bool,+  noWarnings :: Bool,+  noDeprecatedWarning :: Bool,+  saveTemporaryLabels :: Bool,+  useDwarfDirectory :: Bool,+  incrementalLinkerCompatible :: Bool,+  pieCopyRelocations :: Bool,+  showMachineCodeEncoding :: Bool,+  showMachineCodeInstructions :: Bool,+  verboseAssembly :: Bool,+  preserveComentsInAssembly :: Bool   }   deriving (Eq, Ord, Read, Show)
test/LLVM/Test/Module.hs view
@@ -302,8 +302,6 @@             \main:\n\             \\t.cfi_startproc\n\             \\txorl\t%eax, %eax\n\-            \\tmovl\t%edi, -4(%rsp)\n\-            \\tmovq\t%rsi, -16(%rsp)\n\             \\tretq\n\             \.Lfunc_end0:\n\             \\t.size\tmain, .Lfunc_end0-main\n\
test/LLVM/Test/Target.hs view
@@ -83,7 +83,26 @@     debuggerTuning <- arbitrary     floatingPointDenormalMode <- arbitrary     exceptionModel <- arbitrary+    machineCodeOptions <- arbitrary     return Options { .. }++instance Arbitrary MachineCodeOptions where+  arbitrary = do+    sanitizeAddresses <- arbitrary+    relaxAll <- arbitrary+    noExecutableStack <- arbitrary+    fatalWarnings <- arbitrary+    noWarnings <- arbitrary+    noDeprecatedWarning <- arbitrary+    saveTemporaryLabels <- arbitrary+    useDwarfDirectory <- arbitrary+    incrementalLinkerCompatible <- arbitrary+    pieCopyRelocations <- arbitrary+    showMachineCodeEncoding <- arbitrary+    showMachineCodeInstructions <- arbitrary+    verboseAssembly <- arbitrary+    preserveComentsInAssembly <- arbitrary+    return MachineCodeOptions { .. }  instance Arbitrary DebugCompressionType where   arbitrary = elements [CompressNone, CompressGNU, CompressZ]