ΒΆllvm::Constant* getPointerAtOffset(
    llvm::Constant* I,
    uint64_t Offset,
    llvm::Module& M,
    llvm::Constant* TopLevelGlobal = nullptr)

Description

Processes a Constant recursively looking into elements of arrays, structs and expressions to find a trivial pointer element that is located at the given offset (relative to the beginning of the whole outer Constant). Used for example from GlobalDCE to find an entry in a C++ vtable that matches a vcall offset. To support Swift vtables, getPointerAtOffset can see through "relative pointers", i.e. (sub-)expressions of the form of: @symbol= ... { i32 trunc (i64 sub ( i64 ptrtoint ( <type > @targetto i64), i64 ptrtoint (... @symbolto i64) ) to i32) } For such (sub-)expressions, getPointerAtOffset returns the @targetpointer.

Declared at: llvm/include/llvm/Analysis/TypeMetadataUtils.h:77

Parameters

llvm::Constant* I
uint64_t Offset
llvm::Module& M
llvm::Constant* TopLevelGlobal = nullptr