diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2013-12-09 14:59:08 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2013-12-09 14:59:08 +0000 |
commit | c0ff7448d758fae2168bb0d09a5893d6a7aeb5ed (patch) | |
tree | dda3f298b9ac530bad7159c02e41fd651668dbef /clang/lib/CodeGen/CodeGenModule.h | |
parent | c3cde36ead0f088c3948329ac0e6f493a9422a86 (diff) | |
download | bcm5719-llvm-c0ff7448d758fae2168bb0d09a5893d6a7aeb5ed.tar.gz bcm5719-llvm-c0ff7448d758fae2168bb0d09a5893d6a7aeb5ed.zip |
When we decide to output a deferred decl, remember the llvm GlobalValue.
We can reuse it to avoid a DenseMap+StringMap lookup to find if it was already
emitted or not.
This fixes a 2010 TODO.
llvm-svn: 196785
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.h')
-rw-r--r-- | clang/lib/CodeGen/CodeGenModule.h | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.h b/clang/lib/CodeGen/CodeGenModule.h index 098aa035528..ec61c596a05 100644 --- a/clang/lib/CodeGen/CodeGenModule.h +++ b/clang/lib/CodeGen/CodeGenModule.h @@ -273,7 +273,15 @@ class CodeGenModule : public CodeGenTypeCache { /// DeferredDeclsToEmit - This is a list of deferred decls which we have seen /// that *are* actually referenced. These get code generated when the module /// is done. - std::vector<GlobalDecl> DeferredDeclsToEmit; + struct DeferredGlobal { + DeferredGlobal(llvm::GlobalValue *GV, GlobalDecl GD) : GV(GV), GD(GD) {} + llvm::AssertingVH<llvm::GlobalValue> GV; + GlobalDecl GD; + }; + std::vector<DeferredGlobal> DeferredDeclsToEmit; + void addDeferredDeclToEmit(llvm::GlobalValue *GV, GlobalDecl GD) { + DeferredDeclsToEmit.push_back(DeferredGlobal(GV, GD)); + } /// List of alias we have emitted. Used to make sure that what they point to /// is defined once we get to the end of the of the translation unit. @@ -433,6 +441,8 @@ public: ~CodeGenModule(); + void clear(); + /// Release - Finalize LLVM code generation. void Release(); |