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.