summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CodeGenModule.h
diff options
context:
space:
mode:
authorWill Dietz <wdietz2@illinois.edu>2013-11-08 01:09:22 +0000
committerWill Dietz <wdietz2@illinois.edu>2013-11-08 01:09:22 +0000
commit949ec546c4414b879d565ac3cc7ac4487ed0ec76 (patch)
treed590a37b01b99739cb5fce880a7f35d394a1b1a3 /clang/lib/CodeGen/CodeGenModule.h
parent0dc0e6d32ce48a3978c7bcc1ef949f5e5678e7d1 (diff)
downloadbcm5719-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.h10
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() {
OpenPOWER on IntegriCloud