{-# LANGUAGE MultiParamTypeClasses #-} {-# OPTIONS_HADDOCK hide #-} -- | -- Module : LLVM.AST.Type.Instruction.Volatile -- Copyright : [2016..2020] The Accelerate Team -- License : BSD3 -- -- Maintainer : Trevor L. McDonell -- Stability : experimental -- Portability : non-portable (GHC extensions) -- module LLVM.AST.Type.Instruction.Volatile where import LLVM.AST.Type.Downcast -- | Loads and stores may be marked as 'volatile'. The LLVM optimiser will not -- change the number of volatile operations or their order with respect to other -- volatile operations, but may change the order of volatile operations relative -- to non-volatile operations. -- -- Note that in LLVM IR, volatility and atomicity are orthogonal; 'volatile' has -- no cross-thread synchronisation behaviour. -- -- -- data Volatility = Volatile | NonVolatile instance Downcast Volatility Bool where downcast Volatile = True downcast NonVolatile = False