\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}