[InstCombine] Fold IntToPtr/PtrToInt to bitcast
authorKrishna Kariya <krishna17060@iiitd.ac.in>
Sun, 18 Jul 2021 21:13:25 +0000 (23:13 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Sun, 18 Jul 2021 21:13:25 +0000 (23:13 +0200)
commitda92e86263c3dcbe0d19fe68d1be2373b74eedf5
tree9045d5ecdb06a36ad69f2c2129d442ba7fc2e397
parent2b17c24a03037cb3870b849d0c64f1958308d83d
[InstCombine] Fold IntToPtr/PtrToInt to bitcast

The inttoptr/ptrtoint roundtrip optimization is not always correct.
We are working towards removing this optimization and adding support
to specific cases where this optimization works. This patch is the
first one on this line.

Consider the example:

    %i = ptrtoint i8* %X to i64
    %p = inttoptr i64 %i to i16*
    %cmp = icmp eq i8* %load, %p

In this specific case, the inttoptr/ptrtoint optimization is correct
as it only compares the pointer values. In this patch, we fold
inttoptr/ptrtoint to a bitcast (if src and dest types are different).

Differential Revision: https://reviews.llvm.org/D105088
llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
llvm/lib/Transforms/InstCombine/InstCombineInternal.h
llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
llvm/test/Transforms/InstCombine/ptr-int-ptr-icmp.ll