<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Llvm.AbsSyn</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[ window.onload = function () {pageLoad();setSynopsis("mini_Llvm-AbsSyn.html");}; //]]> </script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">ghc-7.4.2: The GHC API</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Safe Haskell</th><td>None</td></tr></table><p class="caption">Llvm.AbsSyn</p></div><div id="description"><p class="caption">Description</p><div class="doc"><p>The LLVM abstract syntax. </p></div></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><span class="keyword">type</span> <a href="#t:LlvmBlockId">LlvmBlockId</a> = <a href="Unique.html#t:Unique">Unique</a></li><li class="src short"><span class="keyword">data</span> <a href="#t:LlvmBlock">LlvmBlock</a> = <a href="#v:LlvmBlock">LlvmBlock</a> {<ul class="subs"><li><a href="#v:blockLabel">blockLabel</a> :: <a href="Llvm-AbsSyn.html#t:LlvmBlockId">LlvmBlockId</a></li><li><a href="#v:blockStmts">blockStmts</a> :: [<a href="Llvm-AbsSyn.html#t:LlvmStatement">LlvmStatement</a>]</li></ul>}</li><li class="src short"><span class="keyword">type</span> <a href="#t:LlvmBlocks">LlvmBlocks</a> = [<a href="Llvm-AbsSyn.html#t:LlvmBlock">LlvmBlock</a>]</li><li class="src short"><span class="keyword">data</span> <a href="#t:LlvmModule">LlvmModule</a> = <a href="#v:LlvmModule">LlvmModule</a> {<ul class="subs"><li><a href="#v:modComments">modComments</a> :: [<a href="Llvm-Types.html#t:LMString">LMString</a>]</li><li><a href="#v:modAliases">modAliases</a> :: [<a href="Llvm-Types.html#t:LlvmAlias">LlvmAlias</a>]</li><li><a href="#v:modGlobals">modGlobals</a> :: [<a href="Llvm-Types.html#t:LMGlobal">LMGlobal</a>]</li><li><a href="#v:modFwdDecls">modFwdDecls</a> :: <a href="Llvm-Types.html#t:LlvmFunctionDecls">LlvmFunctionDecls</a></li><li><a href="#v:modFuncs">modFuncs</a> :: <a href="Llvm-AbsSyn.html#t:LlvmFunctions">LlvmFunctions</a></li></ul>}</li><li class="src short"><span class="keyword">data</span> <a href="#t:LlvmFunction">LlvmFunction</a> = <a href="#v:LlvmFunction">LlvmFunction</a> {<ul class="subs"><li><a href="#v:funcDecl">funcDecl</a> :: <a href="Llvm-Types.html#t:LlvmFunctionDecl">LlvmFunctionDecl</a></li><li><a href="#v:funcArgs">funcArgs</a> :: [<a href="Llvm-Types.html#t:LMString">LMString</a>]</li><li><a href="#v:funcAttrs">funcAttrs</a> :: [<a href="Llvm-Types.html#t:LlvmFuncAttr">LlvmFuncAttr</a>]</li><li><a href="#v:funcSect">funcSect</a> :: <a href="Llvm-Types.html#t:LMSection">LMSection</a></li><li><a href="#v:funcBody">funcBody</a> :: <a href="Llvm-AbsSyn.html#t:LlvmBlocks">LlvmBlocks</a></li></ul>}</li><li class="src short"><span class="keyword">type</span> <a href="#t:LlvmFunctions">LlvmFunctions</a> = [<a href="Llvm-AbsSyn.html#t:LlvmFunction">LlvmFunction</a>]</li><li class="src short"><span class="keyword">data</span> <a href="#t:LlvmSyncOrdering">LlvmSyncOrdering</a> <ul class="subs"><li>= <a href="#v:SyncUnord">SyncUnord</a> </li><li>| <a href="#v:SyncMonotonic">SyncMonotonic</a> </li><li>| <a href="#v:SyncAcquire">SyncAcquire</a> </li><li>| <a href="#v:SyncRelease">SyncRelease</a> </li><li>| <a href="#v:SyncAcqRel">SyncAcqRel</a> </li><li>| <a href="#v:SyncSeqCst">SyncSeqCst</a> </li></ul></li><li class="src short"><span class="keyword">data</span> <a href="#t:LlvmStatement">LlvmStatement</a> <ul class="subs"><li>= <a href="#v:Assignment">Assignment</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a> <a href="Llvm-AbsSyn.html#t:LlvmExpression">LlvmExpression</a> </li><li>| <a href="#v:Fence">Fence</a> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a> <a href="Llvm-AbsSyn.html#t:LlvmSyncOrdering">LlvmSyncOrdering</a> </li><li>| <a href="#v:Branch">Branch</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a> </li><li>| <a href="#v:BranchIf">BranchIf</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a> </li><li>| <a href="#v:Comment">Comment</a> [<a href="Llvm-Types.html#t:LMString">LMString</a>] </li><li>| <a href="#v:MkLabel">MkLabel</a> <a href="Llvm-AbsSyn.html#t:LlvmBlockId">LlvmBlockId</a> </li><li>| <a href="#v:Store">Store</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a> </li><li>| <a href="#v:Switch">Switch</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a> [(<a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a>, <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a>)] </li><li>| <a href="#v:Return">Return</a> (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a>) </li><li>| <a href="#v:Unreachable">Unreachable</a> </li><li>| <a href="#v:Expr">Expr</a> <a href="Llvm-AbsSyn.html#t:LlvmExpression">LlvmExpression</a> </li><li>| <a href="#v:Nop">Nop</a> </li></ul></li><li class="src short"><span class="keyword">data</span> <a href="#t:LlvmExpression">LlvmExpression</a> <ul class="subs"><li>= <a href="#v:Alloca">Alloca</a> <a href="Llvm-Types.html#t:LlvmType">LlvmType</a> <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> </li><li>| <a href="#v:LlvmOp">LlvmOp</a> <a href="Llvm-Types.html#t:LlvmMachOp">LlvmMachOp</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a> </li><li>| <a href="#v:Compare">Compare</a> <a href="Llvm-Types.html#t:LlvmCmpOp">LlvmCmpOp</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a> </li><li>| <a href="#v:Malloc">Malloc</a> <a href="Llvm-Types.html#t:LlvmType">LlvmType</a> <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> </li><li>| <a href="#v:Load">Load</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a> </li><li>| <a href="#v:GetElemPtr">GetElemPtr</a> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a> [<a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a>] </li><li>| <a href="#v:Cast">Cast</a> <a href="Llvm-Types.html#t:LlvmCastOp">LlvmCastOp</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a> <a href="Llvm-Types.html#t:LlvmType">LlvmType</a> </li><li>| <a href="#v:Call">Call</a> <a href="Llvm-Types.html#t:LlvmCallType">LlvmCallType</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a> [<a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a>] [<a href="Llvm-Types.html#t:LlvmFuncAttr">LlvmFuncAttr</a>] </li><li>| <a href="#v:Phi">Phi</a> <a href="Llvm-Types.html#t:LlvmType">LlvmType</a> [(<a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a>, <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a>)] </li><li>| <a href="#v:Asm">Asm</a> <a href="Llvm-Types.html#t:LMString">LMString</a> <a href="Llvm-Types.html#t:LMString">LMString</a> <a href="Llvm-Types.html#t:LlvmType">LlvmType</a> [<a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a>] <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a> </li></ul></li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:LlvmBlockId" class="def">LlvmBlockId</a> = <a href="Unique.html#t:Unique">Unique</a></p><div class="doc"><p>Block labels </p></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:LlvmBlock" class="def">LlvmBlock</a> </p><div class="doc"><p>A block of LLVM code. </p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:LlvmBlock" class="def">LlvmBlock</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:blockLabel" class="def">blockLabel</a> :: <a href="Llvm-AbsSyn.html#t:LlvmBlockId">LlvmBlockId</a></dt><dd class="doc"><p>The code label for this block </p></dd><dt class="src"><a name="v:blockStmts" class="def">blockStmts</a> :: [<a href="Llvm-AbsSyn.html#t:LlvmStatement">LlvmStatement</a>]</dt><dd class="doc"><p>A list of LlvmStatement's representing the code for this block. This list must end with a control flow statement. </p></dd></dl><div class="clear"></div></div></td></tr></table></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:LlvmBlocks" class="def">LlvmBlocks</a> = [<a href="Llvm-AbsSyn.html#t:LlvmBlock">LlvmBlock</a>]</p></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:LlvmModule" class="def">LlvmModule</a> </p><div class="doc"><p>An LLVM Module. This is a top level container in LLVM. </p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:LlvmModule" class="def">LlvmModule</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:modComments" class="def">modComments</a> :: [<a href="Llvm-Types.html#t:LMString">LMString</a>]</dt><dd class="doc"><p>Comments to include at the start of the module. </p></dd><dt class="src"><a name="v:modAliases" class="def">modAliases</a> :: [<a href="Llvm-Types.html#t:LlvmAlias">LlvmAlias</a>]</dt><dd class="doc"><p>LLVM Alias type definitions. </p></dd><dt class="src"><a name="v:modGlobals" class="def">modGlobals</a> :: [<a href="Llvm-Types.html#t:LMGlobal">LMGlobal</a>]</dt><dd class="doc"><p>Global variables to include in the module. </p></dd><dt class="src"><a name="v:modFwdDecls" class="def">modFwdDecls</a> :: <a href="Llvm-Types.html#t:LlvmFunctionDecls">LlvmFunctionDecls</a></dt><dd class="doc"><p>LLVM Functions used in this module but defined in other modules. </p></dd><dt class="src"><a name="v:modFuncs" class="def">modFuncs</a> :: <a href="Llvm-AbsSyn.html#t:LlvmFunctions">LlvmFunctions</a></dt><dd class="doc"><p>LLVM Functions defined in this module. </p></dd></dl><div class="clear"></div></div></td></tr></table></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:LlvmFunction" class="def">LlvmFunction</a> </p><div class="doc"><p>An LLVM Function </p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:LlvmFunction" class="def">LlvmFunction</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:funcDecl" class="def">funcDecl</a> :: <a href="Llvm-Types.html#t:LlvmFunctionDecl">LlvmFunctionDecl</a></dt><dd class="doc"><p>The signature of this declared function. </p></dd><dt class="src"><a name="v:funcArgs" class="def">funcArgs</a> :: [<a href="Llvm-Types.html#t:LMString">LMString</a>]</dt><dd class="doc"><p>The functions arguments </p></dd><dt class="src"><a name="v:funcAttrs" class="def">funcAttrs</a> :: [<a href="Llvm-Types.html#t:LlvmFuncAttr">LlvmFuncAttr</a>]</dt><dd class="doc"><p>The function attributes. </p></dd><dt class="src"><a name="v:funcSect" class="def">funcSect</a> :: <a href="Llvm-Types.html#t:LMSection">LMSection</a></dt><dd class="doc"><p>The section to put the function into, </p></dd><dt class="src"><a name="v:funcBody" class="def">funcBody</a> :: <a href="Llvm-AbsSyn.html#t:LlvmBlocks">LlvmBlocks</a></dt><dd class="doc"><p>The body of the functions. </p></dd></dl><div class="clear"></div></div></td></tr></table></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:LlvmFunctions" class="def">LlvmFunctions</a> = [<a href="Llvm-AbsSyn.html#t:LlvmFunction">LlvmFunction</a>]</p></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:LlvmSyncOrdering" class="def">LlvmSyncOrdering</a> </p><div class="doc"><p>LLVM ordering types for synchronization purposes. (Introduced in LLVM 3.0). Please see the LLVM documentation for a better description. </p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:SyncUnord" class="def">SyncUnord</a></td><td class="doc"><p>Some partial order of operations exists. </p></td></tr><tr><td class="src"><a name="v:SyncMonotonic" class="def">SyncMonotonic</a></td><td class="doc"><p>A single total order for operations at a single address exists. </p></td></tr><tr><td class="src"><a name="v:SyncAcquire" class="def">SyncAcquire</a></td><td class="doc"><p>Acquire synchronization operation. </p></td></tr><tr><td class="src"><a name="v:SyncRelease" class="def">SyncRelease</a></td><td class="doc"><p>Release synchronization operation. </p></td></tr><tr><td class="src"><a name="v:SyncAcqRel" class="def">SyncAcqRel</a></td><td class="doc"><p>Acquire + Release synchronization operation. </p></td></tr><tr><td class="src"><a name="v:SyncSeqCst" class="def">SyncSeqCst</a></td><td class="doc"><p>Full sequential Consistency operation. </p></td></tr></table></div><div class="subs instances"><p id="control.i:LlvmSyncOrdering" class="caption collapser" onclick="toggleSection('i:LlvmSyncOrdering')">Instances</p><div id="section.i:LlvmSyncOrdering" class="show"><table><tr><td class="src"><a href="../base-4.5.1.0/Data-Eq.html#t:Eq">Eq</a> <a href="Llvm-AbsSyn.html#t:LlvmSyncOrdering">LlvmSyncOrdering</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="../base-4.5.1.0/Text-Show.html#t:Show">Show</a> <a href="Llvm-AbsSyn.html#t:LlvmSyncOrdering">LlvmSyncOrdering</a></td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:LlvmStatement" class="def">LlvmStatement</a> </p><div class="doc"><p>Llvm Statements </p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:Assignment" class="def">Assignment</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a> <a href="Llvm-AbsSyn.html#t:LlvmExpression">LlvmExpression</a></td><td class="doc"><p>Assign an expression to an variable: * dest: Variable to assign to * source: Source expression </p></td></tr><tr><td class="src"><a name="v:Fence" class="def">Fence</a> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a> <a href="Llvm-AbsSyn.html#t:LlvmSyncOrdering">LlvmSyncOrdering</a></td><td class="doc"><p>Memory fence operation </p></td></tr><tr><td class="src"><a name="v:Branch" class="def">Branch</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a></td><td class="doc"><p>Always branch to the target label </p></td></tr><tr><td class="src"><a name="v:BranchIf" class="def">BranchIf</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a></td><td class="doc"><p>Branch to label targetTrue if cond is true otherwise to label targetFalse * cond: condition that will be tested, must be of type i1 * targetTrue: label to branch to if cond is true * targetFalse: label to branch to if cond is false </p></td></tr><tr><td class="src"><a name="v:Comment" class="def">Comment</a> [<a href="Llvm-Types.html#t:LMString">LMString</a>]</td><td class="doc"><p>Comment Plain comment. </p></td></tr><tr><td class="src"><a name="v:MkLabel" class="def">MkLabel</a> <a href="Llvm-AbsSyn.html#t:LlvmBlockId">LlvmBlockId</a></td><td class="doc"><p>Set a label on this position. * name: Identifier of this label, unique for this module </p></td></tr><tr><td class="src"><a name="v:Store" class="def">Store</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a></td><td class="doc"><p>Store variable value in pointer ptr. If value is of type t then ptr must be of type t*. * value: Variable/Constant to store. * ptr: Location to store the value in </p></td></tr><tr><td class="src"><a name="v:Switch" class="def">Switch</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a> [(<a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a>, <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a>)]</td><td class="doc"><p>Mutliway branch * scrutinee: Variable or constant which must be of integer type that is determines which arm is chosen. * def: The default label if there is no match in target. * target: A list of (value,label) where the value is an integer constant and label the corresponding label to jump to if the scrutinee matches the value. </p></td></tr><tr><td class="src"><a name="v:Return" class="def">Return</a> (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a>)</td><td class="doc"><p>Return a result. * result: The variable or constant to return </p></td></tr><tr><td class="src"><a name="v:Unreachable" class="def">Unreachable</a></td><td class="doc"><p>An instruction for the optimizer that the code following is not reachable </p></td></tr><tr><td class="src"><a name="v:Expr" class="def">Expr</a> <a href="Llvm-AbsSyn.html#t:LlvmExpression">LlvmExpression</a></td><td class="doc"><p>Raise an expression to a statement (if don't want result or want to use Llvm unnamed values. </p></td></tr><tr><td class="src"><a name="v:Nop" class="def">Nop</a></td><td class="doc"><p>A nop LLVM statement. Useful as its often more efficient to use this then to wrap LLvmStatement in a Just or []. </p></td></tr></table></div><div class="subs instances"><p id="control.i:LlvmStatement" class="caption collapser" onclick="toggleSection('i:LlvmStatement')">Instances</p><div id="section.i:LlvmStatement" class="show"><table><tr><td class="src"><a href="../base-4.5.1.0/Data-Eq.html#t:Eq">Eq</a> <a href="Llvm-AbsSyn.html#t:LlvmStatement">LlvmStatement</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="../base-4.5.1.0/Text-Show.html#t:Show">Show</a> <a href="Llvm-AbsSyn.html#t:LlvmStatement">LlvmStatement</a></td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:LlvmExpression" class="def">LlvmExpression</a> </p><div class="doc"><p>Llvm Expressions </p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:Alloca" class="def">Alloca</a> <a href="Llvm-Types.html#t:LlvmType">LlvmType</a> <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></td><td class="doc"><p>Allocate amount * sizeof(tp) bytes on the stack * tp: LlvmType to reserve room for * amount: The nr of tp's which must be allocated </p></td></tr><tr><td class="src"><a name="v:LlvmOp" class="def">LlvmOp</a> <a href="Llvm-Types.html#t:LlvmMachOp">LlvmMachOp</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a></td><td class="doc"><p>Perform the machine operator op on the operands left and right * op: operator * left: left operand * right: right operand </p></td></tr><tr><td class="src"><a name="v:Compare" class="def">Compare</a> <a href="Llvm-Types.html#t:LlvmCmpOp">LlvmCmpOp</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a></td><td class="doc"><p>Perform a compare operation on the operands left and right * op: operator * left: left operand * right: right operand </p></td></tr><tr><td class="src"><a name="v:Malloc" class="def">Malloc</a> <a href="Llvm-Types.html#t:LlvmType">LlvmType</a> <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></td><td class="doc"><p>Allocate amount * sizeof(tp) bytes on the heap * tp: LlvmType to reserve room for * amount: The nr of tp's which must be allocated </p></td></tr><tr><td class="src"><a name="v:Load" class="def">Load</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a></td><td class="doc"><p>Load the value at location ptr </p></td></tr><tr><td class="src"><a name="v:GetElemPtr" class="def">GetElemPtr</a> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a> [<a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a>]</td><td class="doc"><p>Navigate in an structure, selecting elements * inbound: Is the pointer inbounds? (computed pointer doesn't overflow) * ptr: Location of the structure * indexes: A list of indexes to select the correct value. </p></td></tr><tr><td class="src"><a name="v:Cast" class="def">Cast</a> <a href="Llvm-Types.html#t:LlvmCastOp">LlvmCastOp</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a> <a href="Llvm-Types.html#t:LlvmType">LlvmType</a></td><td class="doc"><p>Cast the variable from to the to type. This is an abstraction of three cast operators in Llvm, inttoptr, prttoint and bitcast. * cast: Cast type * from: Variable to cast * to: type to cast to </p></td></tr><tr><td class="src"><a name="v:Call" class="def">Call</a> <a href="Llvm-Types.html#t:LlvmCallType">LlvmCallType</a> <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a> [<a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a>] [<a href="Llvm-Types.html#t:LlvmFuncAttr">LlvmFuncAttr</a>]</td><td class="doc"><p>Call a function. The result is the value of the expression. * tailJumps: CallType to signal if the function should be tail called * fnptrval: An LLVM value containing a pointer to a function to be invoked. Can be indirect. Should be LMFunction type. * args: Concrete arguments for the parameters * attrs: A list of function attributes for the call. Only NoReturn, NoUnwind, ReadOnly and ReadNone are valid here. </p></td></tr><tr><td class="src"><a name="v:Phi" class="def">Phi</a> <a href="Llvm-Types.html#t:LlvmType">LlvmType</a> [(<a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a>, <a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a>)]</td><td class="doc"><p>Merge variables from different basic blocks which are predecessors of this basic block in a new variable of type tp. * tp: type of the merged variable, must match the types of the predecessor variables. * precessors: A list of variables and the basic block that they originate from. </p></td></tr><tr><td class="src"><a name="v:Asm" class="def">Asm</a> <a href="Llvm-Types.html#t:LMString">LMString</a> <a href="Llvm-Types.html#t:LMString">LMString</a> <a href="Llvm-Types.html#t:LlvmType">LlvmType</a> [<a href="Llvm-Types.html#t:LlvmVar">LlvmVar</a>] <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></td><td class="doc"><p>Inline assembly expression. Syntax is very similar to the style used by GCC. * assembly: Actual inline assembly code. * contraints: Operand constraints. * return ty: Return type of function. * vars: Any variables involved in the assembly code. * sideeffect: Does the expression have side effects not visible from the constraints list. * alignstack: Should the stack be conservatively aligned before this expression is executed. </p></td></tr></table></div><div class="subs instances"><p id="control.i:LlvmExpression" class="caption collapser" onclick="toggleSection('i:LlvmExpression')">Instances</p><div id="section.i:LlvmExpression" class="show"><table><tr><td class="src"><a href="../base-4.5.1.0/Data-Eq.html#t:Eq">Eq</a> <a href="Llvm-AbsSyn.html#t:LlvmExpression">LlvmExpression</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="../base-4.5.1.0/Text-Show.html#t:Show">Show</a> <a href="Llvm-AbsSyn.html#t:LlvmExpression">LlvmExpression</a></td><td class="doc empty"> </td></tr></table></div></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.11.0</p></div></body></html>