Fixed a TODO in the original code.
We add the extracted constant offset using GEP instead of ugly ptrtoint+add+inttoptr. Using GEP simplifies future optimizations and makes IR easier to understand.
Updated all affected tests, and added a new test in split-gep.ll to cover a corner case where uglygep is necessary.
Maybe still mention uglygep here, since you mention it later?