]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/clang/lib/CodeGen/CGBuilder.h
Merge clang trunk r238337 from ^/vendor/clang/dist, resolve conflicts,
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / clang / lib / CodeGen / CGBuilder.h
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
10 #ifndef LLVM_CLANG_LIB_CODEGEN_CGBUILDER_H
11 #define LLVM_CLANG_LIB_CODEGEN_CGBUILDER_H
12
13 #include "llvm/IR/IRBuilder.h"
14
15 namespace clang {
16 namespace CodeGen {
17
18 class CodeGenFunction;
19
20 /// \brief This is an IRBuilder insertion helper that forwards to
21 /// CodeGenFunction::InsertHelper, which adds necessary metadata to
22 /// instructions.
23 template <bool PreserveNames>
24 class CGBuilderInserter
25   : protected llvm::IRBuilderDefaultInserter<PreserveNames> {
26 public:
27   CGBuilderInserter() : CGF(nullptr) {}
28   explicit CGBuilderInserter(CodeGenFunction *CGF) : CGF(CGF) {}
29
30 protected:
31   /// \brief This forwards to CodeGenFunction::InsertHelper.
32   void InsertHelper(llvm::Instruction *I, const llvm::Twine &Name,
33                     llvm::BasicBlock *BB,
34                     llvm::BasicBlock::iterator InsertPt) const;
35 private:
36   void operator=(const CGBuilderInserter &) = delete;
37
38   CodeGenFunction *CGF;
39 };
40
41 // Don't preserve names on values in an optimized build.
42 #ifdef NDEBUG
43 #define PreserveNames false
44 #else
45 #define PreserveNames true
46 #endif
47 typedef CGBuilderInserter<PreserveNames> CGBuilderInserterTy;
48 typedef llvm::IRBuilder<PreserveNames, llvm::ConstantFolder,
49                         CGBuilderInserterTy> CGBuilderTy;
50 #undef PreserveNames
51
52 }  // end namespace CodeGen
53 }  // end namespace clang
54
55 #endif