diff options
| author | Ivan A. Kosarev <ikosarev@accesssoftek.com> | 2017-10-03 10:52:39 +0000 |
|---|---|---|
| committer | Ivan A. Kosarev <ikosarev@accesssoftek.com> | 2017-10-03 10:52:39 +0000 |
| commit | a511ed75013f049eaf6f1978bff15cb7020524d4 (patch) | |
| tree | 9c6b03cf228792b063641ea2a941a43ed6dbeb24 /clang/lib/CodeGen/CodeGenTBAA.cpp | |
| parent | e093bad472ce7ad1715321abbb3b1fdbf42e2693 (diff) | |
| download | bcm5719-llvm-a511ed75013f049eaf6f1978bff15cb7020524d4.tar.gz bcm5719-llvm-a511ed75013f049eaf6f1978bff15cb7020524d4.zip | |
[CodeGen] Introduce generic TBAA access descriptors
With this patch we implement a concept of TBAA access descriptors
that are capable of representing both scalar and struct-path
accesses in a generic way.
This is part of D37826 reworked to be a separate patch to
simplify review.
Differential Revision: https://reviews.llvm.org/D38456
llvm-svn: 314780
Diffstat (limited to 'clang/lib/CodeGen/CodeGenTBAA.cpp')
| -rw-r--r-- | clang/lib/CodeGen/CodeGenTBAA.cpp | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/clang/lib/CodeGen/CodeGenTBAA.cpp b/clang/lib/CodeGen/CodeGenTBAA.cpp index 7b8a023b794..0d40748c456 100644 --- a/clang/lib/CodeGen/CodeGenTBAA.cpp +++ b/clang/lib/CodeGen/CodeGenTBAA.cpp @@ -290,30 +290,28 @@ CodeGenTBAA::getTBAAStructTypeInfo(QualType QTy) { return StructMetadataCache[Ty] = nullptr; } -/// Return a TBAA tag node for both scalar TBAA and struct-path aware TBAA. -llvm::MDNode * -CodeGenTBAA::getTBAAStructTagInfo(QualType BaseQTy, llvm::MDNode *AccessNode, - uint64_t Offset) { - if (!AccessNode) +llvm::MDNode *CodeGenTBAA::getTBAAStructTagInfo(TBAAAccessInfo Info) { + if (!Info.AccessType) return nullptr; if (!CodeGenOpts.StructPathTBAA) - return getTBAAScalarTagInfo(AccessNode); + return getTBAAScalarTagInfo(Info.AccessType); - const Type *BTy = Context.getCanonicalType(BaseQTy).getTypePtr(); - TBAAPathTag PathTag = TBAAPathTag(BTy, AccessNode, Offset); + const Type *BTy = Context.getCanonicalType(Info.BaseType).getTypePtr(); + TBAAPathTag PathTag = TBAAPathTag(BTy, Info.AccessType, Info.Offset); if (llvm::MDNode *N = StructTagMetadataCache[PathTag]) return N; llvm::MDNode *BNode = nullptr; - if (isTBAAPathStruct(BaseQTy)) - BNode = getTBAAStructTypeInfo(BaseQTy); + if (isTBAAPathStruct(Info.BaseType)) + BNode = getTBAAStructTypeInfo(Info.BaseType); if (!BNode) return StructTagMetadataCache[PathTag] = - MDHelper.createTBAAStructTagNode(AccessNode, AccessNode, 0); + MDHelper.createTBAAStructTagNode(Info.AccessType, Info.AccessType, + /* Offset= */ 0); return StructTagMetadataCache[PathTag] = - MDHelper.createTBAAStructTagNode(BNode, AccessNode, Offset); + MDHelper.createTBAAStructTagNode(BNode, Info.AccessType, Info.Offset); } llvm::MDNode * |

