1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 20:51:52 +01:00

[docs][OpaquePtr] Shuffle around the transition plan section

Emphasize that this is basically an attempt to remove
``PointerType::getElementType`` and ``Type::getPointerElementType()``.

Add a couple more subtasks.

Differential Revision: https://reviews.llvm.org/D104151
This commit is contained in:
Arthur Eubanks 2021-06-11 13:34:42 -07:00
parent a32daab226
commit 25efb3e5da

View File

@ -91,7 +91,9 @@ Transition Plan
===============
LLVM currently has many places that depend on pointee types. Each dependency on
pointee types needs to be resolved in some way or another.
pointee types needs to be resolved in some way or another. This essentially
translates to figuring out how to remove all calls to
``PointerType::getElementType`` and ``Type::getPointerElementType()``.
Making everything use opaque pointers in one huge commit is infeasible. This
needs to be done incrementally. The following steps need to be done, in no
@ -99,17 +101,29 @@ particular order:
* Introduce the opaque pointer type
* Various ABI attributes and instructions that need a type can be changed one at
a time
* Already done
* This has already happened for many instructions like loads, stores, GEPs,
* Remove remaining in-tree users of pointee types
* There are many miscellaneous uses that should be cleaned up individually
* Some of the larger use cases are mentioned below
* Various ABI attributes and instructions that rely on pointee types need to be
modified to specify the type separately
* This has already happened for all instructions like loads, stores, GEPs,
and various attributes like ``byval``
* Fix up existing in-tree users of pointee types to not rely on LLVM pointer
pointee types
* More cases may be found as work continues
* Specifically ``PointerType::getElementType`` and
``Type::getPointerElementType()``
* Remove calls to and deprecate ``IRBuilder`` methods that rely on pointee types
* For example, some of the ``IRBuilder::CreateGEP()`` methods use the pointer
operand's pointee type to determine the GEP operand type
* Some methods are already deprecated with ``LLVM_ATTRIBUTE_DEPRECATED``, such
as some overloads of ``IRBuilder::CreateLoad()``
* Allow bitcode auto-upgrade of legacy pointer type to the new opaque pointer
type (not to be turned on until ready)
@ -123,9 +137,15 @@ particular order:
* This is mostly Clang, see ``clang::CodeGen::Address::getElementType()``
* Figure out how to name overloaded intrinsics with pointer parameters
* See ``getMangledTypeStr()``
* Add option to internally treat all pointer types opaque pointers and see what
breaks, starting with LLVM tests, then run Clang over large codebases
* We don't want to start mass-updating tests until we're fairly confident that opaque pointers won't cause major issues
* Replace legacy pointer types in LLVM tests with opaque pointer types
Frontend Migration Steps