\begin{algorithm}
\caption{Available-Expressions-Analysis}
\begin{algorithmic}
\INPUT CFG ($kill_B$ and $gen_B$ computed for each basic block $B$)
\OUTPUT $IN[B]$ and $OUT[B]$ for each basic block $B$
\STATE $OUT[ENTRY] = \empty$
\FOR{\textbf{each} basic block $B\in V(CFG) - \{ENTRY\}$}
\STATE $OUT[B] = U$
\ENDFOR
\REPEAT
\FOR{\textbf{each} basic block $B\in V(CFG) - \{EXIT\}$}
\STATE $IN[B] = \bigcap\limits_{P \in pre(B)} OUT[P]$
\STATE $OUT[B] = gen_B \cup (IN[B] - kill_B)$
\ENDFOR
\UNTIL{no changes to any $OUT[B]$ of basic block $B\in V(CFG) - \{ENTRY\}$ occur}
\end{algorithmic}
\end{algorithm}