[clang] [llvm] [Clang][IR] add TBAA metadata on pointer, union and array types. (PR #75177)
Bushev Dmitry via llvm-commits
llvm-commits at lists.llvm.org
Fri Dec 22 10:41:31 PST 2023
================
@@ -184,13 +199,24 @@ llvm::MDNode *CodeGenTBAA::getTypeInfoHelper(const Type *Ty) {
return getChar();
// Handle pointers and references.
- // TODO: Implement C++'s type "similarity" and consider dis-"similar"
- // pointers distinct.
- if (Ty->isPointerType() || Ty->isReferenceType())
- return createScalarTypeNode("any pointer", getChar(), Size);
+ // Pointer types never alias if their pointee type is distinct.
+ if ((Ty->isPointerType() || Ty->isReferenceType())) {
+ llvm::MDNode *AnyPtr = createScalarTypeNode("any pointer", getChar(), Size);
+ if (!CodeGenOpts.PointerTBAA)
+ return AnyPtr;
+ unsigned PtrDepth = 0;
+ do {
+ PtrDepth++;
+ Ty = Ty->getPointeeType().getTypePtr();
+ } while (!Ty->getPointeeType().isNull());
----------------
dybv-sc wrote:
Actually I want to look for member pointers. In [conv.qual] of C++ standard mentioned:
> each Pi is “pointer to” (9.3.4.2), “pointer to member of
> class Ci of type” (9.3.4.4), “array of Ni”, or “array of unknown bound of” (9.3.4.5
Where Pi is i-th inderection in qualification decomposition. I want to consider all those types of indirection.
I think, all I do if I get rid of getPointeeType() is just move most of it's checks outside.
https://github.com/llvm/llvm-project/pull/75177
More information about the llvm-commits
mailing list