diff options
Diffstat (limited to 'contrib/llvm/tools/clang/lib/CodeGen/CGBuilder.h')
-rw-r--r-- | contrib/llvm/tools/clang/lib/CodeGen/CGBuilder.h | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/contrib/llvm/tools/clang/lib/CodeGen/CGBuilder.h b/contrib/llvm/tools/clang/lib/CodeGen/CGBuilder.h index fd21e7e..f113b97 100644 --- a/contrib/llvm/tools/clang/lib/CodeGen/CGBuilder.h +++ b/contrib/llvm/tools/clang/lib/CodeGen/CGBuilder.h @@ -15,12 +15,39 @@ namespace clang { namespace CodeGen { +class CodeGenFunction; + +/// \brief This is an IRBuilder insertion helper that forwards to +/// CodeGenFunction::InsertHelper, which adds nesessary metadata to +/// instructions. +template <bool PreserveNames> +class CGBuilderInserter + : protected llvm::IRBuilderDefaultInserter<PreserveNames> { +public: + CGBuilderInserter() : CGF(nullptr) {} + explicit CGBuilderInserter(CodeGenFunction *CGF) : CGF(CGF) {} + +protected: + /// \brief This forwards to CodeGenFunction::InsertHelper. + void InsertHelper(llvm::Instruction *I, const llvm::Twine &Name, + llvm::BasicBlock *BB, + llvm::BasicBlock::iterator InsertPt) const; +private: + void operator=(const CGBuilderInserter &) LLVM_DELETED_FUNCTION; + + CodeGenFunction *CGF; +}; + // Don't preserve names on values in an optimized build. #ifdef NDEBUG -typedef llvm::IRBuilder<false> CGBuilderTy; +#define PreserveNames false #else -typedef llvm::IRBuilder<> CGBuilderTy; +#define PreserveNames true #endif +typedef CGBuilderInserter<PreserveNames> CGBuilderInserterTy; +typedef llvm::IRBuilder<PreserveNames, llvm::ConstantFolder, + CGBuilderInserterTy> CGBuilderTy; +#undef PreserveNames } // end namespace CodeGen } // end namespace clang |