12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- //===-- 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
|