<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!--Rendered using the Haskell Html Library v0.2--> <HTML ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE >RegAlloc.Liveness</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ><SCRIPT SRC="haddock-util.js" TYPE="text/javascript" ></SCRIPT ><SCRIPT TYPE="text/javascript" >window.onload = function () {setSynopsis("mini_RegAlloc-Liveness.html")};</SCRIPT ></HEAD ><BODY ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="topbar" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title" >ghc-6.12.3: The GHC API</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A ></TD ><TD CLASS="topbut" ><A HREF="doc-index.html" >Index</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="modulebar" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD ><FONT SIZE="6" >RegAlloc.Liveness</FONT ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" >Synopsis</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A HREF="#t%3ARegSet" >RegSet</A > = <A HREF="UniqSet.html#t%3AUniqSet" >UniqSet</A > <A HREF="Reg.html#t%3AReg" >Reg</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A HREF="#t%3ARegMap" >RegMap</A > a = <A HREF="UniqFM.html#t%3AUniqFM" >UniqFM</A > a</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AemptyRegMap" >emptyRegMap</A > :: <A HREF="UniqFM.html#t%3AUniqFM" >UniqFM</A > a</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A HREF="#t%3ABlockMap" >BlockMap</A > a = <A HREF="BlockId.html#t%3ABlockEnv" >BlockEnv</A > a</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AemptyBlockMap" >emptyBlockMap</A > :: <A HREF="BlockId.html#t%3ABlockEnv" >BlockEnv</A > a</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A HREF="#t%3ALiveCmmTop" >LiveCmmTop</A > instr = <A HREF="Cmm.html#t%3AGenCmmTop" >GenCmmTop</A > <A HREF="Cmm.html#t%3ACmmStatic" >CmmStatic</A > <A HREF="RegAlloc-Liveness.html#t%3ALiveInfo" >LiveInfo</A > (<A HREF="Cmm.html#t%3AListGraph" >ListGraph</A > (<A HREF="Cmm.html#t%3AGenBasicBlock" >GenBasicBlock</A > (<A HREF="RegAlloc-Liveness.html#t%3ALiveInstr" >LiveInstr</A > instr)))</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >data</SPAN > <A HREF="#t%3ALiveInstr" >LiveInstr</A > instr </TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="decl" >= <A HREF="#v%3AInstr" >Instr</A > instr (<A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > <A HREF="RegAlloc-Liveness.html#t%3ALiveness" >Liveness</A >)</TD ></TR ><TR ><TD CLASS="decl" >| <A HREF="#v%3ASPILL" >SPILL</A > <A HREF="Reg.html#t%3AReg" >Reg</A > <A HREF="../base-4.2.0.2/Data-Int.html#t%3AInt" >Int</A ></TD ></TR ><TR ><TD CLASS="decl" >| <A HREF="#v%3ARELOAD" >RELOAD</A > <A HREF="../base-4.2.0.2/Data-Int.html#t%3AInt" >Int</A > <A HREF="Reg.html#t%3AReg" >Reg</A ></TD ></TR ></TABLE ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >data</SPAN > <A HREF="#t%3ALiveness" >Liveness</A > = <A HREF="#v%3ALiveness" >Liveness</A > {<TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="recfield" ><A HREF="#v%3AliveBorn" >liveBorn</A > :: <A HREF="RegAlloc-Liveness.html#t%3ARegSet" >RegSet</A ></TD ></TR ><TR ><TD CLASS="recfield" ><A HREF="#v%3AliveDieRead" >liveDieRead</A > :: <A HREF="RegAlloc-Liveness.html#t%3ARegSet" >RegSet</A ></TD ></TR ><TR ><TD CLASS="recfield" ><A HREF="#v%3AliveDieWrite" >liveDieWrite</A > :: <A HREF="RegAlloc-Liveness.html#t%3ARegSet" >RegSet</A ></TD ></TR ></TABLE >}</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >data</SPAN > <A HREF="#t%3ALiveInfo" >LiveInfo</A > = <A HREF="#v%3ALiveInfo" >LiveInfo</A > [<A HREF="Cmm.html#t%3ACmmStatic" >CmmStatic</A >] (<A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > <A HREF="BlockId.html#t%3ABlockId" >BlockId</A >) (<A HREF="RegAlloc-Liveness.html#t%3ABlockMap" >BlockMap</A > <A HREF="RegAlloc-Liveness.html#t%3ARegSet" >RegSet</A >)</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A HREF="#t%3ALiveBasicBlock" >LiveBasicBlock</A > instr = <A HREF="Cmm.html#t%3AGenBasicBlock" >GenBasicBlock</A > (<A HREF="RegAlloc-Liveness.html#t%3ALiveInstr" >LiveInstr</A > instr)</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmapBlockTop" >mapBlockTop</A > :: (<A HREF="RegAlloc-Liveness.html#t%3ALiveBasicBlock" >LiveBasicBlock</A > instr -> <A HREF="RegAlloc-Liveness.html#t%3ALiveBasicBlock" >LiveBasicBlock</A > instr) -> <A HREF="RegAlloc-Liveness.html#t%3ALiveCmmTop" >LiveCmmTop</A > instr -> <A HREF="RegAlloc-Liveness.html#t%3ALiveCmmTop" >LiveCmmTop</A > instr</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmapBlockTopM" >mapBlockTopM</A > :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad" >Monad</A > m => (<A HREF="RegAlloc-Liveness.html#t%3ALiveBasicBlock" >LiveBasicBlock</A > instr -> m (<A HREF="RegAlloc-Liveness.html#t%3ALiveBasicBlock" >LiveBasicBlock</A > instr)) -> <A HREF="RegAlloc-Liveness.html#t%3ALiveCmmTop" >LiveCmmTop</A > instr -> m (<A HREF="RegAlloc-Liveness.html#t%3ALiveCmmTop" >LiveCmmTop</A > instr)</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmapGenBlockTop" >mapGenBlockTop</A > :: (<A HREF="Cmm.html#t%3AGenBasicBlock" >GenBasicBlock</A > i -> <A HREF="Cmm.html#t%3AGenBasicBlock" >GenBasicBlock</A > i) -> <A HREF="Cmm.html#t%3AGenCmmTop" >GenCmmTop</A > d h (<A HREF="Cmm.html#t%3AListGraph" >ListGraph</A > i) -> <A HREF="Cmm.html#t%3AGenCmmTop" >GenCmmTop</A > d h (<A HREF="Cmm.html#t%3AListGraph" >ListGraph</A > i)</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmapGenBlockTopM" >mapGenBlockTopM</A > :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad" >Monad</A > m => (<A HREF="Cmm.html#t%3AGenBasicBlock" >GenBasicBlock</A > i -> m (<A HREF="Cmm.html#t%3AGenBasicBlock" >GenBasicBlock</A > i)) -> <A HREF="Cmm.html#t%3AGenCmmTop" >GenCmmTop</A > d h (<A HREF="Cmm.html#t%3AListGraph" >ListGraph</A > i) -> m (<A HREF="Cmm.html#t%3AGenCmmTop" >GenCmmTop</A > d h (<A HREF="Cmm.html#t%3AListGraph" >ListGraph</A > i))</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AstripLive" >stripLive</A > :: <A HREF="Instruction.html#t%3AInstruction" >Instruction</A > instr => <A HREF="RegAlloc-Liveness.html#t%3ALiveCmmTop" >LiveCmmTop</A > instr -> <A HREF="Instruction.html#t%3ANatCmmTop" >NatCmmTop</A > instr</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AstripLiveBlock" >stripLiveBlock</A > :: <A HREF="Instruction.html#t%3AInstruction" >Instruction</A > instr => <A HREF="RegAlloc-Liveness.html#t%3ALiveBasicBlock" >LiveBasicBlock</A > instr -> <A HREF="Instruction.html#t%3ANatBasicBlock" >NatBasicBlock</A > instr</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AslurpConflicts" >slurpConflicts</A > :: <A HREF="Instruction.html#t%3AInstruction" >Instruction</A > instr => <A HREF="RegAlloc-Liveness.html#t%3ALiveCmmTop" >LiveCmmTop</A > instr -> (<A HREF="Bag.html#t%3ABag" >Bag</A > (<A HREF="UniqSet.html#t%3AUniqSet" >UniqSet</A > <A HREF="Reg.html#t%3AReg" >Reg</A >), <A HREF="Bag.html#t%3ABag" >Bag</A > (<A HREF="Reg.html#t%3AReg" >Reg</A >, <A HREF="Reg.html#t%3AReg" >Reg</A >))</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AslurpReloadCoalesce" >slurpReloadCoalesce</A > :: <A HREF="Instruction.html#t%3AInstruction" >Instruction</A > instr => <A HREF="RegAlloc-Liveness.html#t%3ALiveCmmTop" >LiveCmmTop</A > instr -> <A HREF="Bag.html#t%3ABag" >Bag</A > (<A HREF="Reg.html#t%3AReg" >Reg</A >, <A HREF="Reg.html#t%3AReg" >Reg</A >)</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AeraseDeltasLive" >eraseDeltasLive</A > :: <A HREF="Instruction.html#t%3AInstruction" >Instruction</A > instr => <A HREF="RegAlloc-Liveness.html#t%3ALiveCmmTop" >LiveCmmTop</A > instr -> <A HREF="RegAlloc-Liveness.html#t%3ALiveCmmTop" >LiveCmmTop</A > instr</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3ApatchEraseLive" >patchEraseLive</A > :: <A HREF="Instruction.html#t%3AInstruction" >Instruction</A > instr => (<A HREF="Reg.html#t%3AReg" >Reg</A > -> <A HREF="Reg.html#t%3AReg" >Reg</A >) -> <A HREF="RegAlloc-Liveness.html#t%3ALiveCmmTop" >LiveCmmTop</A > instr -> <A HREF="RegAlloc-Liveness.html#t%3ALiveCmmTop" >LiveCmmTop</A > instr</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3ApatchRegsLiveInstr" >patchRegsLiveInstr</A > :: <A HREF="Instruction.html#t%3AInstruction" >Instruction</A > instr => (<A HREF="Reg.html#t%3AReg" >Reg</A > -> <A HREF="Reg.html#t%3AReg" >Reg</A >) -> <A HREF="RegAlloc-Liveness.html#t%3ALiveInstr" >LiveInstr</A > instr -> <A HREF="RegAlloc-Liveness.html#t%3ALiveInstr" >LiveInstr</A > instr</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AregLiveness" >regLiveness</A > :: <A HREF="Instruction.html#t%3AInstruction" >Instruction</A > instr => <A HREF="Instruction.html#t%3ANatCmmTop" >NatCmmTop</A > instr -> <A HREF="UniqSupply.html#t%3AUniqSM" >UniqSM</A > (<A HREF="RegAlloc-Liveness.html#t%3ALiveCmmTop" >LiveCmmTop</A > instr)</TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" >Documentation</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A NAME="t:RegSet" ><A NAME="t%3ARegSet" ></A ></A ><B >RegSet</B > = <A HREF="UniqSet.html#t%3AUniqSet" >UniqSet</A > <A HREF="Reg.html#t%3AReg" >Reg</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A NAME="t:RegMap" ><A NAME="t%3ARegMap" ></A ></A ><B >RegMap</B > a = <A HREF="UniqFM.html#t%3AUniqFM" >UniqFM</A > a</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:emptyRegMap" ><A NAME="v%3AemptyRegMap" ></A ></A ><B >emptyRegMap</B > :: <A HREF="UniqFM.html#t%3AUniqFM" >UniqFM</A > a</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A NAME="t:BlockMap" ><A NAME="t%3ABlockMap" ></A ></A ><B >BlockMap</B > a = <A HREF="BlockId.html#t%3ABlockEnv" >BlockEnv</A > a</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:emptyBlockMap" ><A NAME="v%3AemptyBlockMap" ></A ></A ><B >emptyBlockMap</B > :: <A HREF="BlockId.html#t%3ABlockEnv" >BlockEnv</A > a</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A NAME="t:LiveCmmTop" ><A NAME="t%3ALiveCmmTop" ></A ></A ><B >LiveCmmTop</B > instr = <A HREF="Cmm.html#t%3AGenCmmTop" >GenCmmTop</A > <A HREF="Cmm.html#t%3ACmmStatic" >CmmStatic</A > <A HREF="RegAlloc-Liveness.html#t%3ALiveInfo" >LiveInfo</A > (<A HREF="Cmm.html#t%3AListGraph" >ListGraph</A > (<A HREF="Cmm.html#t%3AGenBasicBlock" >GenBasicBlock</A > (<A HREF="RegAlloc-Liveness.html#t%3ALiveInstr" >LiveInstr</A > instr)))</TD ></TR ><TR ><TD CLASS="doc" >A top level thing which carries liveness information. </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >data</SPAN > <A NAME="t:LiveInstr" ><A NAME="t%3ALiveInstr" ></A ></A ><B >LiveInstr</B > instr </TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="ndoc" >An instruction with liveness information. </TD ></TR ><TR ><TD CLASS="section4" >Constructors</TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0" ><TR ><TD CLASS="arg" ><A NAME="v:Instr" ><A NAME="v%3AInstr" ></A ></A ><B >Instr</B > instr (<A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > <A HREF="RegAlloc-Liveness.html#t%3ALiveness" >Liveness</A >)</TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="arg" ><A NAME="v:SPILL" ><A NAME="v%3ASPILL" ></A ></A ><B >SPILL</B > <A HREF="Reg.html#t%3AReg" >Reg</A > <A HREF="../base-4.2.0.2/Data-Int.html#t%3AInt" >Int</A ></TD ><TD CLASS="rdoc" >spill this reg to a stack slot </TD ></TR ><TR ><TD CLASS="arg" ><A NAME="v:RELOAD" ><A NAME="v%3ARELOAD" ></A ></A ><B >RELOAD</B > <A HREF="../base-4.2.0.2/Data-Int.html#t%3AInt" >Int</A > <A HREF="Reg.html#t%3AReg" >Reg</A ></TD ><TD CLASS="rdoc" >reload this reg from a stack slot </TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="section4" ><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:LiveInstr')" ALT="show/hide" > Instances</TD ></TR ><TR ><TD CLASS="body" ><DIV ID="i:LiveInstr" STYLE="display:block;" ><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0" ><TR ><TD CLASS="decl" ><A HREF="Outputable.html#t%3AOutputable" >Outputable</A > instr => <A HREF="Outputable.html#t%3AOutputable" >Outputable</A > (<A HREF="RegAlloc-Liveness.html#t%3ALiveInstr" >LiveInstr</A > instr)</TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >data</SPAN > <A NAME="t:Liveness" ><A NAME="t%3ALiveness" ></A ></A ><B >Liveness</B > </TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="ndoc" >Liveness information. The regs which die are ones which are no longer live in the *next* instruction in this sequence. (NB. if the instruction is a jump, these registers might still be live at the jump target(s) - you have to check the liveness at the destination block to find out). </TD ></TR ><TR ><TD CLASS="section4" >Constructors</TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="5" CELLPADDING="0" ><TR ><TD CLASS="arg" ><A NAME="v:Liveness" ><A NAME="v%3ALiveness" ></A ></A ><B >Liveness</B ></TD ><TD CLASS="rdoc" >registers that died because they were clobbered by something. </TD ></TR ><TR ><TD CLASS="body" COLSPAN="2" ><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0" ><TR ><TD CLASS="arg" ><A NAME="v:liveBorn" ><A NAME="v%3AliveBorn" ></A ></A ><B >liveBorn</B > :: <A HREF="RegAlloc-Liveness.html#t%3ARegSet" >RegSet</A ></TD ><TD CLASS="rdoc" >registers born in this instruction (written to for first time). </TD ></TR ><TR ><TD CLASS="arg" ><A NAME="v:liveDieRead" ><A NAME="v%3AliveDieRead" ></A ></A ><B >liveDieRead</B > :: <A HREF="RegAlloc-Liveness.html#t%3ARegSet" >RegSet</A ></TD ><TD CLASS="rdoc" >registers that died because they were read for the last time. </TD ></TR ><TR ><TD CLASS="arg" ><A NAME="v:liveDieWrite" ><A NAME="v%3AliveDieWrite" ></A ></A ><B >liveDieWrite</B > :: <A HREF="RegAlloc-Liveness.html#t%3ARegSet" >RegSet</A ></TD ><TD CLASS="rdoc" ></TD ></TR ></TABLE ></TD ></TR ></TABLE ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >data</SPAN > <A NAME="t:LiveInfo" ><A NAME="t%3ALiveInfo" ></A ></A ><B >LiveInfo</B > </TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="ndoc" >Stash regs live on entry to each basic block in the info part of the cmm code. </TD ></TR ><TR ><TD CLASS="section4" >Constructors</TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0" ><TR ><TD CLASS="arg" ><A NAME="v:LiveInfo" ><A NAME="v%3ALiveInfo" ></A ></A ><B >LiveInfo</B > [<A HREF="Cmm.html#t%3ACmmStatic" >CmmStatic</A >] (<A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > <A HREF="BlockId.html#t%3ABlockId" >BlockId</A >) (<A HREF="RegAlloc-Liveness.html#t%3ABlockMap" >BlockMap</A > <A HREF="RegAlloc-Liveness.html#t%3ARegSet" >RegSet</A >)</TD ><TD CLASS="rdoc" ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="section4" ><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:LiveInfo')" ALT="show/hide" > Instances</TD ></TR ><TR ><TD CLASS="body" ><DIV ID="i:LiveInfo" STYLE="display:block;" ><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0" ><TR ><TD CLASS="decl" ><A HREF="Outputable.html#t%3AOutputable" >Outputable</A > <A HREF="RegAlloc-Liveness.html#t%3ALiveInfo" >LiveInfo</A ></TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A NAME="t:LiveBasicBlock" ><A NAME="t%3ALiveBasicBlock" ></A ></A ><B >LiveBasicBlock</B > instr = <A HREF="Cmm.html#t%3AGenBasicBlock" >GenBasicBlock</A > (<A HREF="RegAlloc-Liveness.html#t%3ALiveInstr" >LiveInstr</A > instr)</TD ></TR ><TR ><TD CLASS="doc" >A basic block with liveness information. </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:mapBlockTop" ><A NAME="v%3AmapBlockTop" ></A ></A ><B >mapBlockTop</B > :: (<A HREF="RegAlloc-Liveness.html#t%3ALiveBasicBlock" >LiveBasicBlock</A > instr -> <A HREF="RegAlloc-Liveness.html#t%3ALiveBasicBlock" >LiveBasicBlock</A > instr) -> <A HREF="RegAlloc-Liveness.html#t%3ALiveCmmTop" >LiveCmmTop</A > instr -> <A HREF="RegAlloc-Liveness.html#t%3ALiveCmmTop" >LiveCmmTop</A > instr</TD ></TR ><TR ><TD CLASS="doc" >map a function across all the basic blocks in this code </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:mapBlockTopM" ><A NAME="v%3AmapBlockTopM" ></A ></A ><B >mapBlockTopM</B > :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad" >Monad</A > m => (<A HREF="RegAlloc-Liveness.html#t%3ALiveBasicBlock" >LiveBasicBlock</A > instr -> m (<A HREF="RegAlloc-Liveness.html#t%3ALiveBasicBlock" >LiveBasicBlock</A > instr)) -> <A HREF="RegAlloc-Liveness.html#t%3ALiveCmmTop" >LiveCmmTop</A > instr -> m (<A HREF="RegAlloc-Liveness.html#t%3ALiveCmmTop" >LiveCmmTop</A > instr)</TD ></TR ><TR ><TD CLASS="doc" >map a function across all the basic blocks in this code (monadic version) </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:mapGenBlockTop" ><A NAME="v%3AmapGenBlockTop" ></A ></A ><B >mapGenBlockTop</B > :: (<A HREF="Cmm.html#t%3AGenBasicBlock" >GenBasicBlock</A > i -> <A HREF="Cmm.html#t%3AGenBasicBlock" >GenBasicBlock</A > i) -> <A HREF="Cmm.html#t%3AGenCmmTop" >GenCmmTop</A > d h (<A HREF="Cmm.html#t%3AListGraph" >ListGraph</A > i) -> <A HREF="Cmm.html#t%3AGenCmmTop" >GenCmmTop</A > d h (<A HREF="Cmm.html#t%3AListGraph" >ListGraph</A > i)</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:mapGenBlockTopM" ><A NAME="v%3AmapGenBlockTopM" ></A ></A ><B >mapGenBlockTopM</B > :: <A HREF="../base-4.2.0.2/Control-Monad.html#t%3AMonad" >Monad</A > m => (<A HREF="Cmm.html#t%3AGenBasicBlock" >GenBasicBlock</A > i -> m (<A HREF="Cmm.html#t%3AGenBasicBlock" >GenBasicBlock</A > i)) -> <A HREF="Cmm.html#t%3AGenCmmTop" >GenCmmTop</A > d h (<A HREF="Cmm.html#t%3AListGraph" >ListGraph</A > i) -> m (<A HREF="Cmm.html#t%3AGenCmmTop" >GenCmmTop</A > d h (<A HREF="Cmm.html#t%3AListGraph" >ListGraph</A > i))</TD ></TR ><TR ><TD CLASS="doc" >map a function across all the basic blocks in this code (monadic version) </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:stripLive" ><A NAME="v%3AstripLive" ></A ></A ><B >stripLive</B > :: <A HREF="Instruction.html#t%3AInstruction" >Instruction</A > instr => <A HREF="RegAlloc-Liveness.html#t%3ALiveCmmTop" >LiveCmmTop</A > instr -> <A HREF="Instruction.html#t%3ANatCmmTop" >NatCmmTop</A > instr</TD ></TR ><TR ><TD CLASS="doc" >Strip away liveness information, yielding NatCmmTop </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:stripLiveBlock" ><A NAME="v%3AstripLiveBlock" ></A ></A ><B >stripLiveBlock</B > :: <A HREF="Instruction.html#t%3AInstruction" >Instruction</A > instr => <A HREF="RegAlloc-Liveness.html#t%3ALiveBasicBlock" >LiveBasicBlock</A > instr -> <A HREF="Instruction.html#t%3ANatBasicBlock" >NatBasicBlock</A > instr</TD ></TR ><TR ><TD CLASS="doc" >Strip away liveness information from a basic block, and make real spill instructions out of SPILL, RELOAD pseudos along the way. </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:slurpConflicts" ><A NAME="v%3AslurpConflicts" ></A ></A ><B >slurpConflicts</B > :: <A HREF="Instruction.html#t%3AInstruction" >Instruction</A > instr => <A HREF="RegAlloc-Liveness.html#t%3ALiveCmmTop" >LiveCmmTop</A > instr -> (<A HREF="Bag.html#t%3ABag" >Bag</A > (<A HREF="UniqSet.html#t%3AUniqSet" >UniqSet</A > <A HREF="Reg.html#t%3AReg" >Reg</A >), <A HREF="Bag.html#t%3ABag" >Bag</A > (<A HREF="Reg.html#t%3AReg" >Reg</A >, <A HREF="Reg.html#t%3AReg" >Reg</A >))</TD ></TR ><TR ><TD CLASS="doc" >Slurp out the list of register conflicts and reg-reg moves from this top level thing. Slurping of conflicts and moves is wrapped up together so we don't have to make two passes over the same code when we want to build the graph. </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:slurpReloadCoalesce" ><A NAME="v%3AslurpReloadCoalesce" ></A ></A ><B >slurpReloadCoalesce</B > :: <A HREF="Instruction.html#t%3AInstruction" >Instruction</A > instr => <A HREF="RegAlloc-Liveness.html#t%3ALiveCmmTop" >LiveCmmTop</A > instr -> <A HREF="Bag.html#t%3ABag" >Bag</A > (<A HREF="Reg.html#t%3AReg" >Reg</A >, <A HREF="Reg.html#t%3AReg" >Reg</A >)</TD ></TR ><TR ><TD CLASS="doc" ><P >For spill/reloads </P ><P >SPILL v1, slot1 ... RELOAD slot1, v2 </P ><P >If we can arrange that v1 and v2 are allocated to the same hreg it's more likely the spill/reload instrs can be cleaned and replaced by a nop reg-reg move. </P ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:eraseDeltasLive" ><A NAME="v%3AeraseDeltasLive" ></A ></A ><B >eraseDeltasLive</B > :: <A HREF="Instruction.html#t%3AInstruction" >Instruction</A > instr => <A HREF="RegAlloc-Liveness.html#t%3ALiveCmmTop" >LiveCmmTop</A > instr -> <A HREF="RegAlloc-Liveness.html#t%3ALiveCmmTop" >LiveCmmTop</A > instr</TD ></TR ><TR ><TD CLASS="doc" >Erase Delta instructions. </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:patchEraseLive" ><A NAME="v%3ApatchEraseLive" ></A ></A ><B >patchEraseLive</B > :: <A HREF="Instruction.html#t%3AInstruction" >Instruction</A > instr => (<A HREF="Reg.html#t%3AReg" >Reg</A > -> <A HREF="Reg.html#t%3AReg" >Reg</A >) -> <A HREF="RegAlloc-Liveness.html#t%3ALiveCmmTop" >LiveCmmTop</A > instr -> <A HREF="RegAlloc-Liveness.html#t%3ALiveCmmTop" >LiveCmmTop</A > instr</TD ></TR ><TR ><TD CLASS="doc" >Patch the registers in this code according to this register mapping. also erase reg -> reg moves when the reg is the same. also erase reg -> reg moves when the destination dies in this instr. </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:patchRegsLiveInstr" ><A NAME="v%3ApatchRegsLiveInstr" ></A ></A ><B >patchRegsLiveInstr</B > :: <A HREF="Instruction.html#t%3AInstruction" >Instruction</A > instr => (<A HREF="Reg.html#t%3AReg" >Reg</A > -> <A HREF="Reg.html#t%3AReg" >Reg</A >) -> <A HREF="RegAlloc-Liveness.html#t%3ALiveInstr" >LiveInstr</A > instr -> <A HREF="RegAlloc-Liveness.html#t%3ALiveInstr" >LiveInstr</A > instr</TD ></TR ><TR ><TD CLASS="doc" >Patch registers in this LiveInstr, including the liveness information. </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:regLiveness" ><A NAME="v%3AregLiveness" ></A ></A ><B >regLiveness</B > :: <A HREF="Instruction.html#t%3AInstruction" >Instruction</A > instr => <A HREF="Instruction.html#t%3ANatCmmTop" >NatCmmTop</A > instr -> <A HREF="UniqSupply.html#t%3AUniqSM" >UniqSM</A > (<A HREF="RegAlloc-Liveness.html#t%3ALiveCmmTop" >LiveCmmTop</A > instr)</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="botbar" >Produced by <A HREF="http://www.haskell.org/haddock/" >Haddock</A > version 2.6.1</TD ></TR ></TABLE ></BODY ></HTML >