algorithm for GVN

Hi,

Can someone tell which algorithm is used for GVN in LLVM?

May be it is based on the paper by Alpern, Wegman & Zadeck, though I am not quite sure.

http://llvm.cs.illinois.edu/~vadve/CS526/6gvn.pdf