LLVM will move to "opaque pointers" in the future
David Nadlinger
code at klickverbot.at
Wed May 19 16:38:07 UTC 2021
Thanks for pointing this out. I can't see any major issues in switching
over on our side, but I do wonder how the transition period is going to
look – I guess this will depend in a major fashion on whether upstream
is going to offer a cross-compatible interface for all the relevant APIs
for the versions before/after the transition.
— David
On 18 May 2021, at 17:06, Johan Engelen via digitalmars-d-ldc wrote:
> Hi all,
> FYI:
> https://github.com/llvm/llvm-project/blob/main/llvm/docs/OpaquePointers.rst
>
> Instead of having to specify the type of the data pointed too "i8*",
> "ptr" just says it's a pointer. This prevents a bunch of bitcasts in
> the IR (which LDC also often has to do). But it also means we can no
> longer rely on an LLVM IR to contain type information, for example
> when we generate a GEP:
>
> ```cpp
> llvm::GetElementPtrInst *DtoGEP(LLValue *ptr, llvm::ArrayRef<LLValue
> *> indices,
> const char *name, llvm::BasicBlock
> *bb) {
> LLPointerType *p = isaPointer(ptr);
> auto gep = llvm::GetElementPtrInst::Create(p->getElementType(), ...
> // the p->getElementType() will no longer work somewhere in the future
> ```
>
>
> From the LLVM document:
>
> Frontend Migration Steps
> If you have your own frontend, there are a couple of things to do
> after opaque pointer types fully work.
>
> Don't rely on LLVM pointee types to keep track of frontend pointee
> types
> Migrate away from LLVM IR instruction builders that rely on pointee
> types
> For example, IRBuilder::CreateGEP() has multiple overloads; make sure
> to use one where the source element type is explicitly passed in, not
> inferred from the pointer operand pointee type
>
>
> cheers,
> Johan
More information about the digitalmars-d-ldc
mailing list