CGBuilder.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. //===-- CGBuilder.h - Choose IRBuilder implementation ----------*- C++ -*-===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is distributed under the University of Illinois Open Source
  6. // License. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. #ifndef LLVM_CLANG_LIB_CODEGEN_CGBUILDER_H
  10. #define LLVM_CLANG_LIB_CODEGEN_CGBUILDER_H
  11. #include "llvm/IR/IRBuilder.h"
  12. namespace clang {
  13. namespace CodeGen {
  14. class CodeGenFunction;
  15. /// \brief This is an IRBuilder insertion helper that forwards to
  16. /// CodeGenFunction::InsertHelper, which adds necessary metadata to
  17. /// instructions.
  18. template <bool PreserveNames>
  19. class CGBuilderInserter
  20. : protected llvm::IRBuilderDefaultInserter<PreserveNames> {
  21. public:
  22. CGBuilderInserter() : CGF(nullptr) {}
  23. explicit CGBuilderInserter(CodeGenFunction *CGF) : CGF(CGF) {}
  24. protected:
  25. /// \brief This forwards to CodeGenFunction::InsertHelper.
  26. void InsertHelper(llvm::Instruction *I, const llvm::Twine &Name,
  27. llvm::BasicBlock *BB,
  28. llvm::BasicBlock::iterator InsertPt) const;
  29. private:
  30. void operator=(const CGBuilderInserter &) = delete;
  31. CodeGenFunction *CGF;
  32. };
  33. // Don't preserve names on values in an optimized build.
  34. #ifdef NDEBUG
  35. #define PreserveNames false
  36. #else
  37. #define PreserveNames true
  38. #endif
  39. typedef CGBuilderInserter<PreserveNames> CGBuilderInserterTy;
  40. typedef llvm::IRBuilder<PreserveNames, llvm::ConstantFolder,
  41. CGBuilderInserterTy> CGBuilderTy;
  42. #undef PreserveNames
  43. } // end namespace CodeGen
  44. } // end namespace clang
  45. #endif