<!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="#ImmutablePass">The <tt>ImmutablePass</tt> class</a><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_mod">The <tt>doInitialization(Module
&)</tt> method</a><li><ahref="#runOnFunction">The <tt>runOnFunction</tt> method</a><li><ahref="#doFinalization_mod">The <tt>doFinalization(Module
&)</tt> method</a></ul><li><ahref="#BasicBlockPass">The <tt>BasicBlockPass</tt> class</a><ul><li><ahref="#doInitialization_fn">The <tt>doInitialization(Function
&)</tt> method</a><li><ahref="#runOnBasicBlock">The <tt>runOnBasicBlock</tt> method</a><li><ahref="#doFinalization_fn">The <tt>doFinalization(Function
&)</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</