We'd special cased this logic to use pointer types for non-integral pointers, but looking at the resulting code generation, the pointer version looks cleaner. We can simply drop the special casing, and use the pointer variant unconditionally.
Note that there are some test diffs, but a) running them through instcombine helps a ton, and b) there's enough missing obvious transforms on both before and after IR that it's clear this isn't performance sensitive.
This is mostly motivated by cleaning up mentions of non-integrals to have a clearer idea of what we actually need to support.