Very similar to the recent work, such as "Fix a crash bug w/non-integral pointers and memtransfers". But try to be more precise about what should and should not be permitted, and consolidate all users into calling canCoerceMustAliasedValueToLoad (since that is the predicate that VNCoercion will check).
Similarly, teach the ConstantFolding analysis pass that's it's not legal to replace a load of a bitcast constant (having a non-integral addrspace) with a bitcast of the value of that constant (with a different non-integral addrspace). Also simplify some of the negative tests for transforms by avoiding a type change in their bitcast, and add some positive versions of the same tests, to test that they otherwise should work. We need to also fix a globalopt test, since after this change, LLVM is able to realize that that test actually is a valid transform (NULL is always a known bit-pattern) and doesn't emit the failure remarks.