[PATCH] D99240: [ConstantFolding] Look through local aliases when simplify GEPs
Reid Kleckner via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Mar 25 13:34:02 PDT 2021
rnk added a comment.
To add some context to the IR fragment, in the MSVC C++ ABI, the vtable symbol (??_7...) points to the first virtual method slot in the table. If RTTI is enabled, a pointer to the RTTI data precedes the vtable, giving you this table (assuming 64-bit pointers):
- rtti data (offset -8)
- vtable symbol (`??_7`) -->
- virtual method 1 (offset 0)
- virtual method 2 (offset 8)
- ...
LLVM does not have a concept of globals where the symbol points to the middle of the data, so we came up with this wacky alias representation, where we have private data, and then an alias into the private data with some offset.
We considered the alternative of adding some kind of "prefix data" to the IR. In the end, we rejected it, although I forget why exactly.
In contrast, the Itanium C++ ABI has fewer vtable symbols, and the address points, the addresses that are actually installed into object vptr slots, are offset from the main vtable symbol.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D99240/new/
https://reviews.llvm.org/D99240
More information about the llvm-commits
mailing list