[SROA] Teach SROA to perform no-op pointer conversion.
authorMichael Liao <michael.hliao@gmail.com>
Tue, 16 Jun 2020 05:17:56 +0000 (01:17 -0400)
committerMichael Liao <michael.hliao@gmail.com>
Tue, 23 Jun 2020 05:49:27 +0000 (01:49 -0400)
commitf95850ce9c7593d3d8d2f83c55197970f373b9ad
treeff2fa34e6f91bf0b8e73d84a0022213ed3f94923
parent9bff376e5c10ea384a6eee93f7d7668d670a66e7
[SROA] Teach SROA to perform no-op pointer conversion.

Summary:
- When promoting a pointer from memory to register, SROA skips pointers
  from different address spaces. However, as `ptrtoint` and `inttoptr`
  are defined as no-op casts if that integer type has the same as the
  pointer value, generate the pair of `ptrtoint`/`inttoptr` (no-op cast)
  sequence to convert pointers from different address spaces if they
  have the same size.

Reviewers: arsenm, chandlerc, lebedev.ri

Subscribers:

Differential Revision: https://reviews.llvm.org/D81943
llvm/lib/Transforms/Scalar/SROA.cpp
llvm/test/Transforms/SROA/address-spaces.ll
llvm/test/Transforms/SROA/alloca-address-space.ll
llvm/test/Transforms/SROA/non-integral-pointers.ll