diff options
author | Will Dietz <wdietz2@illinois.edu> | 2013-11-08 01:09:22 +0000 |
---|---|---|
committer | Will Dietz <wdietz2@illinois.edu> | 2013-11-08 01:09:22 +0000 |
commit | 949ec546c4414b879d565ac3cc7ac4487ed0ec76 (patch) | |
tree | d590a37b01b99739cb5fce880a7f35d394a1b1a3 /clang/lib/CodeGen/CodeGenModule.h | |
parent | 0dc0e6d32ce48a3978c7bcc1ef949f5e5678e7d1 (diff) | |
download | bcm5719-llvm-949ec546c4414b879d565ac3cc7ac4487ed0ec76.tar.gz bcm5719-llvm-949ec546c4414b879d565ac3cc7ac4487ed0ec76.zip |
ubsan: Only emit constants for filenames and type descriptors once.
Produces neater IR in significantly less time.
(~18% faster -O0 compile time for sqlite3 with -fsanitize=undefined)
llvm-svn: 194231
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.h')
-rw-r--r-- | clang/lib/CodeGen/CodeGenModule.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.h b/clang/lib/CodeGen/CodeGenModule.h index 02b9ce6471b..c16122405d4 100644 --- a/clang/lib/CodeGen/CodeGenModule.h +++ b/clang/lib/CodeGen/CodeGenModule.h @@ -318,6 +318,9 @@ class CodeGenModule : public CodeGenTypeCache { llvm::DenseMap<QualType, llvm::Constant *> AtomicSetterHelperFnMap; llvm::DenseMap<QualType, llvm::Constant *> AtomicGetterHelperFnMap; + /// Map used to get unique type descriptor constants for sanitizers. + llvm::DenseMap<QualType, llvm::Constant *> TypeDescriptorMap; + /// Map used to track internal linkage functions declared within /// extern "C" regions. typedef llvm::MapVector<IdentifierInfo *, @@ -498,6 +501,13 @@ public: AtomicGetterHelperFnMap[Ty] = Fn; } + llvm::Constant *getTypeDescriptor(QualType Ty) { + return TypeDescriptorMap[Ty]; + } + void setTypeDescriptor(QualType Ty, llvm::Constant *C) { + TypeDescriptorMap[Ty] = C; + } + CGDebugInfo *getModuleDebugInfo() { return DebugInfo; } llvm::MDNode *getNoObjCARCExceptionsMetadata() { |