Global Value Numbering in LLVM

Hi,

What GVN algorithm is used in LLVM? Is it the one proposed by Wegman and Zadeck’s flowgraph based or something else? I see no reference or documentation about GVN in LLVM codebase.

Can anybody point me the paper?