diff options
Diffstat (limited to 'contrib/llvm/tools/clang/lib/CodeGen/CGBuilder.h')
-rw-r--r-- | contrib/llvm/tools/clang/lib/CodeGen/CGBuilder.h | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/contrib/llvm/tools/clang/lib/CodeGen/CGBuilder.h b/contrib/llvm/tools/clang/lib/CodeGen/CGBuilder.h new file mode 100644 index 0000000..6610659 --- /dev/null +++ b/contrib/llvm/tools/clang/lib/CodeGen/CGBuilder.h @@ -0,0 +1,55 @@ +//===-- CGBuilder.h - Choose IRBuilder implementation ----------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_LIB_CODEGEN_CGBUILDER_H +#define LLVM_CLANG_LIB_CODEGEN_CGBUILDER_H + +#include "llvm/IR/IRBuilder.h" + +namespace clang { +namespace CodeGen { + +class CodeGenFunction; + +/// \brief This is an IRBuilder insertion helper that forwards to +/// CodeGenFunction::InsertHelper, which adds necessary 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 &) = delete; + + CodeGenFunction *CGF; +}; + +// Don't preserve names on values in an optimized build. +#ifdef NDEBUG +#define PreserveNames false +#else +#define PreserveNames true +#endif +typedef CGBuilderInserter<PreserveNames> CGBuilderInserterTy; +typedef llvm::IRBuilder<PreserveNames, llvm::ConstantFolder, + CGBuilderInserterTy> CGBuilderTy; +#undef PreserveNames + +} // end namespace CodeGen +} // end namespace clang + +#endif |