This is the GVN companion to http://reviews.llvm.org/D11434. See the description there for a higher level discussion of release fence semantics.
I *think* this patch is correct, but I would definitely appreciate really careful review. Because MDA is used by both GVN and DeadStoreElimination, I had to restrict the dependency bypass to only apply for loads. This feels like an utter hack, but we don't seem to have a meaningful return value for "reads but does not clobber". As a result, I need to return a clobber result for DSE, but skip this instruction for GVN. We have the same pattern in other places, but ... yuck.