{-# LANGUAGE GADTs #-} {-# OPTIONS_HADDOCK hide #-} -- | -- Module : LLVM.AST.Type.Terminator -- Copyright : [2015..2017] Trevor L. McDonell -- License : BSD3 -- -- Maintainer : Trevor L. McDonell -- Stability : experimental -- Portability : non-portable (GHC extensions) -- module LLVM.AST.Type.Terminator where import LLVM.AST.Type.Constant import LLVM.AST.Type.Name import LLVM.AST.Type.Operand -- | -- -- TLM: well, I don't think the types of these terminators make any sense. When -- we branch, we are not propagating a particular value, just moving the -- program counter, and anything we have declared already is available for -- later computations. Maybe, we can make some of this explicit in the -- @phi@ node? -- data Terminator a where -- -- Ret :: Terminator () -- -- RetVal :: Operand a -> Terminator a -- -- Br :: Label -> Terminator () -- -- CondBr :: Operand Bool -> Label -> Label -> Terminator () -- -- Switch :: Operand a -> Label -> [(Constant a, Label)] -> Terminator ()