ΒΆllvm::Constant* getPointerAtOffset(
llvm::Constant* I,
uint64_t Offset,
llvm::Module& M,
llvm::Constant* TopLevelGlobal = nullptr)
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