<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>Writing an LLVM Pass</title></head><bodybgcolor=white><tablewidth="100%"bgcolor="#330077"border=0cellpadding=4cellspacing=0><tr><td> <fontsize=+3color="#EEEEFF"face="Georgia,Palatino,Times,Roman"><b>Writing an LLVM Pass</b></font></td></tr></table><ol><li><ahref="#introduction">Introduction - What is a pass?</a><li><ahref="#quickstart">Quick Start - Writing hello world</a><ul><li><ahref="#makefile">Setting up the build environment</a><li><ahref="#basiccode">Basic code required</a><li><ahref="#running">Running a pass with <tt>opt</tt>
or <tt>analyze</tt></a></ul><li><ahref="#passtype">Pass classes and requirements</a><ul><li><ahref="#Pass">The <tt>Pass</tt> class</a><ul><li><ahref="#run">The <tt>run</tt> method</a></ul><li><ahref="#FunctionPass">The <tt>FunctionPass</tt> class</a><ul><li><ahref="#doInitialization">The <tt>doInitialization</tt> method</a><li><ahref="#runOnFunction">The <tt>runOnFunction</tt> method</a><li><ahref="#doFinalization">The <tt>doFinalization</tt> method</a></ul><li><ahref="#BasicBlockPass">The <tt>BasicBlockPass</tt> class</a><ul><li><ahref="#runOnBasicBlock">The <tt>runOnBasicBlock</tt> method</a></ul></ul><li><ahref="#registration">Pass Registration</a><ul><li><ahref="#print">The <tt>print</tt> method</a></ul><li><ahref="#interaction">Specifying interactions between passes</a><ul><li><ahref="#getAnalysisUsage">The <tt>getAnalysisUsage</tt> method</a><li><ahref="#getAnalysis">The <tt>getAnalysis</tt> method</a></ul><li><ahref="#analysisgroup">Implementing Analysis Groups</a><ul><li><ahref="#agconcepts">Analysis Group Concepts</a><li><ahref="#registerag">Using <tt>RegisterAnalysisGroup</tt></a></ul><li><ahref="#passmanager">What PassManager does</a><ul><li><ahref="#releaseMemory">The <tt>releaseMemory</tt> method</a></ul><li><ahref="#debughints">Using GDB with dynamically loaded passes</a><ul><li><ahref="#breakpoint">Setting a breakpoint in your pass
<li><ahref="#debugmisc">Miscellaneous Problems
</ul><li><ahref="#future">Future extensions planned</a><ul><li><ahref="#SMP">Multithreaded LLVM</a><li><ahref="#ModuleSource">A new <tt>ModuleSource</tt> interface</a><li><ahref="#PassFunctionPass"><